Как подготовиться к собеседованию на позицию Middle Python Developer

Всем привет! Меня зовут Александр, я Python-разработчик в компании VK. За свою карьеру питониста приходилось достаточно часто проходить собеседования, особенно работая на аутсорсе. И я, проходя все эти собеседования, выявил некоторые общие моменты, которыми хочу с вами поделиться.
Знания в Питоне
Для начала необходимо знать разобраться в самом питоне и знать, что отвечать на различные вопросы по питону:
- Прекрасный список вопросов подготовили ребята из pythonist.ru: для уровней Junior, Middle, Senior. Рекомендую просмотреть именно все три уровня, так как бывают моменты, что на позицию Middle могут задать вопросы из списка Junior и Senior
- Большой репозиторий с вопросами для подготовки к Python Developer интервью
- Топ задач с объяснениями, которые чаще всего спрашивают при устройстве в FAANG
Алгоритмы
Затем могут быть вопросы по алгоритмам, без знаний алгоритмов сейчас никуда, хоть и в работе не так часто мы их пишем вручную, но знания алгоритмов значительно увеличат ваши шансы пройти секцию лайв-кодинга, где необходимо будет закодить какую-либо задачку. Если говорить - какие именно алгоритмы, то это бинарный поиск, сортировка выбором, быстрая сортировка. Также нужно знать, как работают рекурсии, хэш-таблицы. И еще могут быть алгоритмы по-сложнее: поиск в ширину и алгоритм Дейкстры.
- Очень рекомендую книгу "Грокаем Алгоритмы", автор Адитья Бхаргава. В ней простым языком описаны все основные алгоритмы и показаны примеры их реализации на питоне. Просто пролистать каждый алгоритм из книги - мало, необходимо самому закодить, продебажить и посмотреть каждый алгоритм.
- Также рекомендую полученные знания проверить на задачках на литкоде. На одном из последних собеседований у меня даже спросили - есть ли у меня профиль на литкоде. Вы тоже заведите и прорешайте на нем побольше задач. Если попросят - будет, что показать.
У меня спрашивали как стандартные вопросы, например - как работает бинарный поиск или пузырьковая сортировка, так и нестандартные. Например, была вот такая простая задачка, попробуйте решить сами:
def compare_version(version1: str, version2: str) -> int:
"""
Необходимо реализовать функцию, которая сравнивает версии ПО.
Если version1 > version2 вернуть 1
Если version1 < version2 вернуть -1
Если version1 == version2 вернуть 0
Номер версии - не пустая строка, которая содержит цифры, разделенные знаком "."
При этом 0 на первой позиции в номере версии равнозначен его отсутствию. См. подготовленные тесты
"""
pass
assert compare_version("1.1", "10") == -1
assert compare_version("0.1", "1.1") == -1
assert compare_version("1.0.1", "1") == 1
assert compare_version("1", "1.0.1") == -1
assert compare_version("7.5.2.4", "7.5.3") == -1
assert compare_version("1.01", "1.001") == 0
assert compare_version("1.0", "1.0.0") == 0
assert compare_version("2", "2.0.0") == 0
assert compare_version("1.01", "1.101") == -1
assert compare_version("2.1", "1.15") == 1
Следующая задачка, которая на первый взгляд выглядит сложной, на самом деле тоже решается просто (если загуглить, что такое метрика ROC-AUC):
# у нас есть два классификатора, для каждого из них есть roc-кривая, заданная координатами точек
roc_one = [(x0, y0), (x1, y1), ..., (xn, yn)]
roc_two = [(x0_, y0_), (x1_, y1_), ..., (xn+k_, ynn+k_)]
# нужно определить разницу в метрике ROC-AUC
Фреймворки
Следующий блок вопросов и задач, это блок по вашему фреймворку (Python/Flask/FastAPI и т.д.) Я работаю на джанго, поэтому у меня, например, была вот такая задачка:
# Есть две модели, нужно получить авторов, отсортировав их по кол-ву книг от большего к меньшему, изданных позднее 2000 года включительно
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=255, unique=True)
class Book(models.Model):
name = models.CharField(max_length=255)
release_date = models.PositiveSmallIntegerField(verbose_name="Год выпуска")
author = models.ManyToManyField(Author, related_name="authors")
class Meta:
unique_together = ("name", "release_date")
Что касается вопросов по Django, то очень часто спрашивают про разницу между select_related
и prefetch_related
, а также как это выглядит под капотом в SQL. Также спрашивают что такое Middleware в Django и как это работает. Есть очень хороший GitHub репозиторий, который я упоминал выше, в котором собран большой список вопросов по питону, джанге, и другим технологиям, советую почитать.
Базы данных
Отсюда плавно переходим к следующему блоку вопросов по базам данных, так как без них сейчас никуда. По базам данных спрашивают что такое индексы, джойны, транзакции, уровни изоляции и т.д. Также могут попросить решить одну-две задачи.
- Советую пройти вот этот туториал, в котором есть теория по каждому разделу и задачи, которые нужно решить.
- Также можно погонять задачи на литкоде в блоке SQL.
Мне попадалась вот такая задача на собеседовании:
-- Есть таблица с полями id (PK) и name (varchar/text). Со временем в поле name накопились дубли. Написать запрос, который выведет только дублирующиеся по полю name записи в порядке убывания количества дублей.
create table books (
id serial primary key,
name varchar(255) not null
)
insert into books ("name") values ('книга 1');
insert into books ("name") values ('книга 1');
insert into books ("name") values ('книга 1');
insert into books ("name") values ('книга ABC');
insert into books ("name") values ('книга ABC');
insert into books ("name") values ('книга ZXC');
-- select ...
Общие советы
- Не бойтесь задавать уточняющие вопросы, если вам что-то непонятно!
- Также, во время написания кода желательно комментировать свои действия, как например я объяснял свой код вот в этом видео.
- Еще хочу посоветовать вот этот YouTube канал, в котором есть записи собеседований на Python разработчиков.
- Записывайте свои собеседования на OBS, чтобы потом переслушать, выписать вопросы, ответ на которые вы не знали, найти ответы на эти вопросы и законспектировать.
Надеюсь, что данная статья была полезной, и кто-то сможет подготовиться к собеседованиям и успешно их пройти. В случае, когда собеседование пройти не удалось - не стоит расстраиваться. Нужно провести работу над ошибками и продолжать проходить новые собеседования. Потому что рано или поздно вы определенно найдете свое место. Удачи!)
Материал подготовлен с ❤️ редакцией Кухни IT.