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

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

Собеседование Python Backend на 300к: вопросы и ответы

Разбираем реальное собеседование Python Backend: коллекции, хеш-таблицы, GIL, asyncio, потоки, процессы, индексы и JOIN.

Компания
Okko
Опубликовано
Обновлено
Видео вышло
Видео
15:11
Текст
7 минут

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

Смотреть на

Это технический этап в Okko на позицию Python Backend с заявленным доходом около 300 тысяч рублей в месяц. Компания указана в описании исходного ролика, хотя в самой открытой части встречи её не называют. После короткого разговора об опыте интервьюеры проверили базовый Python, многозадачность и SQL.

Как рассказать об опыте без лишней воды

Первый вопрос кажется простым: «Чем вы занимались на последнем месте?» На деле он задаёт уровень всего интервью. Слабый ответ перечисляет технологии. Сильный показывает ответственность: какая была задача, что сделал кандидат лично, почему выбрал решение и что изменилось после запуска.

Подойдёт короткая схема:

  1. Контекст: сервис, нагрузка и ограничение.
  2. Действие: личная зона ответственности.
  3. Решение: архитектура и важный компромисс.
  4. Результат: скорость, стабильность или эффект для бизнеса.

Например: «Я отвечал за API расчёта доставки. Мы вынесли медленные внешние вызовы в асинхронный слой, добавили таймауты и метрики. В результате время ответа основного метода перестало зависеть от партнёрского сервиса».

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

Чем отличаются list, tuple, set и dict

Вопрос: какую коллекцию выбрать?

list хранит упорядоченную изменяемую последовательность. tuple тоже сохраняет порядок, но сам кортеж неизменяем. set хранит уникальные хешируемые элементы и удобен для проверки принадлежности. dict сопоставляет уникальный ключ со значением.

На интервью важно перейти от определения к задаче. Список подойдёт для очередности действий, множество — для удаления дублей и быстрых проверок, словарь — для доступа к объекту по идентификатору.

Вопрос: как устроен dict?

Словарь реализован через хеш-таблицу. Python вычисляет хеш ключа и использует его, чтобы найти позицию. Разные ключи могут попасть в одну область — это называется коллизией; реализация должна корректно её обработать. Поэтому ключ обязан быть хешируемым, а доступ в среднем близок к постоянному времени.

Упрощённая схема хеш-таблицы и коллизии ключей Два ключа могут получить одну позицию, поэтому хеш-таблица должна обрабатывать коллизии. Источник: Amit6, Wikimedia Commons, общественное достояние.

В модели данных Python описана связь __hash__ и равенства объектов. Хороший кандидат не обещает абсолютное O(1), а говорит о среднем случае.

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

Когда использовать asyncio, потоки и процессы

Вопрос: чем отличаются три подхода?

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

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

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


async def load_user(user_id: int) -> dict:
    # Имитируем сетевой запрос: во время ожидания цикл событий запустит другую задачу.
    await asyncio.sleep(0.1)
    return {"id": user_id}


async def main() -> list[dict]:
    # Запускаем независимые запросы одновременно, а не ждём каждый по очереди.
    return await asyncio.gather(*(load_user(i) for i in range(3)))


print(asyncio.run(main()))

Коротко: asyncio и потоки подходят для ожидания ввода-вывода, а процессы — для тяжёлых вычислений на нескольких ядрах.

Что нужно знать об индексах и JOIN

Индекс — дополнительная структура, которая ускоряет поиск строк, но занимает место и замедляет вставки и обновления. Ответ «индекс всегда ускоряет запрос» неверен: оптимизатор может выбрать полное сканирование маленькой таблицы, а составной индекс зависит от порядка столбцов. Это подробно разобрано в документации PostgreSQL.

На вопрос о JOIN сначала уточните ожидаемый результат. INNER JOIN оставит только совпавшие строки, LEFT JOIN сохранит все строки слева. Если справа несколько совпадений, одна строка слева превратится в несколько. Поэтому перед MAX, MIN или подсчётом нужно проверить гранулярность данных, иначе агрегат будет формально правильным, но бизнес-ответ — нет.

Коротко: в вопросах по SQL важно объяснить, как индекс ускоряет поиск и как JOIN влияет на число строк результата.

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

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

По ответам видно, что база у кандидата была, но некоторые формулировки можно сделать точнее. На реальном собеседовании важно не только назвать GIL или хеш-таблицу, а показать связь механизма с инженерным выбором. Именно такую подачу мы отрабатываем в тренажёре и на мок-собеседованиях ЮНИКОД.

Коротко: кандидат прошёл технический этап; финал не состоялся, потому что другой кандидат раньше принял оффер.

Чек-лист подготовки

  • Объясняю каждую коллекцию через практическую задачу.
  • Могу нарисовать устройство хеш-таблицы.
  • Различаю задачи для asyncio, потоков и процессов.
  • Знаю цену индекса при записи данных.
  • Проверяю гранулярность результата после JOIN.

Источники

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

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

Что повторить перед собеседованием Python Backend?

Повторите коллекции и их сложность, устройство dict, GIL, asyncio, потоки и процессы, а также индексы, JOIN и агрегатные функции SQL.

Как отвечать на вопрос о выборе структуры данных?

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

Нужно ли учить определения дословно?

Нет. Интервьюер проверяет, можете ли вы объяснить механизм, выбрать инструмент для задачи и защитить решение на уточняющих вопросах.

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

Отработайте ответы до реального собеседования

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

Перейти в тренажёр →