Backend Python — техническое интервью

60 минут, middle → senior. Python 3.11+, типы, async, ORM, тесты.

Вопросов
14
Live-coding
2

Разогрев: опыт и контекст

  1. Недавний проект

    ПоведенческийЛёгкий

    Расскажите о недавнем проекте, где вы были ключевым разработчиком. Что делали вы лично?

    Рубрика оценки (0–10)
    3–5: Описывает проект общими словами, свою роль называет расплывчато («участвовал в команде»).
    6–8: Конкретная задача, стек, результат; понятна личная зона ответственности.
    9–10: Контекст бизнеса, trade-offs, метрики успеха; честно говорит, что делали другие.
    Красный флаг: не может назвать ни одного решения, которое принимал сам.
    Подсказки интервьюеру
    Follow-up: что бы сделали иначе? 3–4 минуты.
  2. Мотивация смены

    ПоведенческийЛёгкий

    Почему сейчас рассматриваете новые возможности? Что ищете в следующей роли?

    Рубрика оценки (0–10)
    3–5: «Хочу роста / денег» без конкретики.
    6–8: Понятные критерии (стек, продукт, процессы); не toxic про текущего работодателя.
    9–10: Осознанный fit: что даст компания кандидату и наоборот.
    Красный флаг: только негатив про прошлые команды, обвиняет всех кроме себя.
    Подсказки интервьюеру
    Не давить — достаточно 2–3 минут.
  3. Опыт с Python

    ПоведенческийЛёгкий

    Сколько лет на Python в продакшене? Django, FastAPI, asyncio — что использовали?

    Рубрика оценки (0–10)
    3–5: «Несколько лет Python» без фреймворков.
    6–8: Конкретный стек, тип проекта, версия Python.
    9–10: Миграции 2→3, typing adoption; честно про глубину async.
    Красный флаг: только скрипты без web/backend на middle+.
    Подсказки интервьюеру
    2–3 минуты.

Язык и runtime

  1. GIL

    ТеорияСредний

    Что такое GIL и как он влияет на CPU-bound и I/O-bound задачи?

    Рубрика оценки (0–10)
    3–5: «GIL мешает потокам» без деталей.
    6–8: Один поток байткода; I/O освобождает GIL; multiprocessing для CPU.
    9–10: asyncio vs threads; когда ProcessPoolExecutor; C extensions.
    Красный флаг: «async быстрее для любых задач».
    Подсказки интервьюеру
    4 минуты.
  2. Mutable default args

    ТеорияЛёгкий

    Почему def f(x=[]) — антипаттерн? Что пойдёт не так?

    Рубрика оценки (0–10)
    3–5: «Список общий» без объяснения.
    6–8: Default eval once; shared state между вызовами; None sentinel.
    9–10: dataclass field(default_factory); immutability patterns.
    Красный флаг: «в Python так можно, bug не воспроизводится у меня».
    Подсказки интервьюеру
    3 минуты.
  3. Typing и generics

    ТеорияСредний

    Зачем list[str] vs List[str]? Что даёт TypedDict или Protocol?

    Рубрика оценки (0–10)
    3–5: «Для mypy» без примеров.
    6–8: PEP 585; Optional/Union; TypedDict для JSON shapes.
    9–10: Protocol для structural subtyping; Generics в своих контейнерах.
    Красный флаг: «typing не нужен, Python динамический».
    Подсказки интервьюеру
    4 минуты.
  4. async/await

    ТеорияСложный

    Когда asyncio уместен, а когда лучше sync + threads/processes?

    Рубрика оценки (0–10)
    3–5: «async всегда быстрее».
    6–8: Event loop; await points; blocking call в async ломает loop.
    9–10: asyncio.gather; semaphores; hybrid with run_in_executor.
    Красный флаг: time.sleep в async handler.
    Подсказки интервьюеру
    5 минут.
  5. N+1 в ORM

    ТеорияСредний

    Что такое N+1 query problem в Django/SQLAlchemy и как лечить?

    Рубрика оценки (0–10)
    3–5: «Много запросов» без механизма.
    6–8: select_related/prefetch_related или joinedload; explain на примере.
    9–10: Monitoring query count; dataloaders pattern.
    Красный флаг: «ORM сам оптимизирует всегда».
    Подсказки интервьюеру
    4 минуты.

Практика: живой код

  1. LRU cache

    Задача с кодомСложныйКод

    Реализуйте класс LRUCache с get и put за O(1) (capacity фиксирован).

    Рубрика оценки (0–10)
    3–5: dict без порядка eviction.
    6–8: OrderedDict или dict + linked list idea.
    9–10: functools.lru_cache когда достаточно; thread-safety обсуждает.
    Красный флаг: O(n) eviction на каждый put.
    Подсказки интервьюеру
    15–20 минут.
  2. Flatten JSON

    Задача с кодомСреднийКод

    Напишите функцию, которая «разворачивает» вложенный dict в плоский с ключами через точку.

    Рубрика оценки (0–10)
    3–5: Только один уровень вложенности.
    6–8: Рекурсия; пропуск lists или индексы 0.1.2.
    9–10: Iterator без лишних копий; типизация.
    Красный флаг: json.dumps hack.
    Подсказки интервьюеру
    10 минут.

Тесты и API

  1. Тесты

    ТеорияСредний

    Как организуете фикстуры в pytest для API-тестов с БД?

    Рубрика оценки (0–10)
    3–5: «pytest и assert».
    6–8: conftest.py; transaction rollback per test; factory_boy.
    9–10: testcontainers; parallel isolation; markers.
    Красный флаг: shared prod DB in tests.
    Подсказки интервьюеру
    4 минуты.
  2. FastAPI dependencies

    ТеорияСредний

    Как работает Depends в FastAPI и зачем это нужно?

    Рубрика оценки (0–10)
    3–5: «Внедрение зависимостей».
    6–8: Generator deps для session; override in tests.
    9–10: Scope; security deps; composition.
    Красный флаг: global session in route.
    Подсказки интервьюеру
    4 минуты.

Инженерная культура и вопросы

  1. Конфликт в команде

    ПоведенческийСредний

    Был ли случай технического или процессного конфликта в команде? Как разрешили?

    Рубрика оценки (0–10)
    3–5: «Конфликтов не было» или история без своих действий.
    6–8: Описывает ситуацию, свою позицию, итог; без обвинений.
    9–10: Фокус на данных/компромиссе; что изменил в процессе после.
    Красный флаг: «я был прав, они нет» без рефлексии.
    Подсказки интервьюеру
    Follow-up: чему научились? 4 минуты.
  2. Вопросы к нам

    ПоведенческийЛёгкий

    Какие вопросы у вас к нам про команду, продукт или процессы?

    Рубрика оценки (0–10)
    3–5: «Нет вопросов» или только про отпуск/ЗП.
    6–8: 2–3 содержательных вопроса про продукт, команду, релизы.
    9–10: Вопросы показывают, что изучил компанию; уточняет ожидания от роли.
    Красный флаг: нулевой интерес к продукту на middle+.
    Подсказки интервьюеру
    Оставить 3–5 минут в конце интервью.

Провести интервью по этому шаблону

Зарегистрируйтесь бесплатно: скопируйте шаблон в организацию, назначьте интервью и проведите его в комнате с live-coding.

Начать в FlashTalk