Назад к материалам

Видео + статья / Собеседования

Собеседование Python Backend: карта тем от языка до архитектуры

Собрали большую карту Python Backend-интервью: модель данных, асинхронность, веб-запрос, тесты, PostgreSQL, индексы, транзакции и архитектура.

Опубликовано
Обновлено
Видео вышло
Видео
20:53
Текст
5 минут

Если ролик не загружается, выберите другую площадку.

Смотреть на

Это большое собеседование Python Backend-разработчика. Код кандидат пишет в среде Yandex Code, поэтому компания подтверждена как Яндекс. Точный грейд не назван; по глубине вопросов секция рассчитана примерно на Middle или Middle+.

Каким может быть ключ словаря

Короткий ответ: ключ должен быть хешируемым, а его хеш и результат сравнения не должны меняться во время хранения.

Строки, числа и кортежи из хешируемых элементов подходят. Список — нет, потому что его содержимое меняется. Словарь сначала использует __hash__, затем __eq__ для проверки совпадения. Поэтому равные объекты должны иметь одинаковый хеш.

Доступ по ключу в среднем занимает O(1), но это не абсолютная гарантия. Коллизии и изменение размера таблицы добавляют работу.

Чем полезны генераторы, контекстные менеджеры и MRO

Короткий ответ: генератор лениво выдаёт данные, контекстный менеджер надёжно завершает работу с ресурсом, MRO определяет порядок поиска методов.

Генератор подходит для больших потоков и одноразового прохода. Контекстный менеджер реализует __enter__ и __exit__; его асинхронный вариант — __aenter__ и __aexit__.

При множественном наследовании Python строит порядок разрешения методов C3. Вызов super() идёт по этому порядку, а не обязательно обращается к «прямому родителю». __slots__ может уменьшить память объектов и ограничить набор атрибутов, но у него есть особенности при наследовании.

Когда нужны asyncio, потоки и процессы

Короткий ответ: asyncio и потоки полезны при ожидании ввода-вывода, процессы — для параллельной CPU-нагрузки.

Event loop переключается между корутинами, когда они явно отдают управление через await. Блокирующий вызов внутри корутины остановит весь цикл, поэтому его выносят в подходящий исполнитель или заменяют асинхронной библиотекой.

GIL в обычном CPython не позволяет нескольким потокам одновременно исполнять Python-байткод, но потоки всё ещё полезны во время сетевого ожидания. Процессы имеют отдельную память и требуют передачи данных между ними.

Чем WSGI отличается от ASGI

Короткий ответ: WSGI рассчитан на классический синхронный запрос-ответ, ASGI поддерживает асинхронные приложения и долгие соединения.

ASGI нужен для WebSocket, конкурентных соединений и асинхронных обработчиков. Но один только интерфейс не делает код быстрым: база, клиент HTTP и остальной путь тоже должны не блокировать цикл.

Путь HTTP-запроса от клиента через прокси к серверу и обратно

WSGI и ASGI работают на стороне приложения, но запрос до него может пройти через прокси, балансировщик и веб-сервер. Источник: MDN Web Docs.

В Django select_related обычно делает JOIN для одиночных связей, а prefetch_related выполняет отдельный запрос и объединяет результаты в Python. Выбор нужен, чтобы избежать N+1 запросов и не загружать лишние данные.

Что нужно знать о PostgreSQL

Короткий ответ: транзакции защищают согласованность, WAL обеспечивает журналирование, уровни изоляции определяют видимость изменений, а план показывает реальную стоимость запроса.

ACID расшифровывается как атомарность, согласованность, изоляция и долговечность. MVCC позволяет читателям и писателям меньше блокировать друг друга, сохраняя версии строк.

EXPLAIN показывает оценку планировщика, EXPLAIN ANALYZE — фактическое выполнение. Поле cost выражено не в миллисекундах, а в условных единицах планировщика. Именно на этой детали часто ошибаются.

Составной B-tree индекс эффективен с учётом порядка столбцов. Индекс ускоряет чтение, но занимает место и удорожает вставку и обновление.

Чем Protocol отличается от абстрактного класса

Короткий ответ: абстрактный класс задаёт явное наследование и может содержать реализацию, Protocol описывает структурный контракт.

Если объект имеет нужные методы и типы, статический анализатор может считать его совместимым с Protocol без наследования. Это удобно для слабой связанности.

В DDD агрегат задаёт границу согласованности. Все изменения внутри неё проходят через корень агрегата, который защищает правила. Не нужно превращать DDD в набор модных названий: на интервью ценится конкретный инвариант предметной области.

Типичная ошибка. Перечислять архитектурные термины без задачи, которую они решают. Интервьюер слышит знакомые слова, но не понимает, умеет ли кандидат выбирать границы и отвечать за последствия решения.

Как лучше. Назовите конкретный инвариант, покажите место его проверки и объясните компромисс. Например: агрегат не позволяет подтвердить заказ без позиций, но слишком крупная граница усложнит параллельные изменения.

Как определить число переговорных

Короткий ответ: отсортировать встречи и отслеживать ближайшее время освобождения комнаты.

Пример кодаPython
import heapq

def min_meeting_rooms(intervals):
    # Встречи рассматриваем по времени начала.
    intervals.sort(key=lambda interval: interval[0])
    end_times = []

    for start, end in intervals:
        # Освободившуюся комнату можно использовать повторно.
        if end_times and end_times[0] <= start:
            heapq.heapreplace(end_times, end)
        else:
            # Иначе требуется ещё одна комната.
            heapq.heappush(end_times, end)

    # В куче остаётся максимальное число одновременно занятых комнат.
    return len(end_times)

Сортировка занимает O(n log n), каждая операция с кучей — O(log n). Нужно заранее договориться, можно ли начать встречу ровно в момент окончания другой.

Получил бы кандидат оффер

Короткий ответ: скорее да.

Кандидат уверенно прошёл широкий круг вопросов от модели объектов до архитектуры и решил задачу. Неточности были точечными: условные единицы cost и детали потоков. Общая глубина соответствует сильному Middle или Middle+.

Системно проверить такую карту тем можно в тренажёре собеседований ЮНИКОД.

Источники

частые вопросы

Короткие ответы

Сколько тем нужно знать перед Python Backend-собеседованием?

Не нужно одинаково глубоко знать всё. Сверьте вакансию со своим уровнем, закройте базу Python, HTTP и SQL, а затем углубляйтесь в фреймворк, PostgreSQL и архитектуру, которые указаны в требованиях.

Чем ASGI отличается от WSGI?

WSGI описывает синхронное взаимодействие Python-приложения и веб-сервера. ASGI поддерживает асинхронные приложения и соединения с несколькими событиями, например WebSocket.

Что важнее: знать определения или иметь опыт?

Опыт помогает приводить примеры, но его нужно уметь объяснить. На интервью ценится связка: понятная модель, рабочий пример, ограничение и решение, которое вы приняли.

следующий шаг

Соберите персональный план Python Backend-подготовки

Тренажёр ЮНИКОД помогает пройти вопросы по профессии, увидеть пробелы и повторить нужные темы в правильном порядке.

Проверить знания →