// interview
Вопросы на собеседовании по Python
221 вопросов, которые реально задают джунам, мидлам и сеньорам, — по 8 темам, с эталонными ответами и разборами. Выбери тему или роль, прогоняй вопросы, отвечай сам — ИИ-арбитр оценит ответ под твой уровень.
Темы: выбери, что гоняют на твоём собесе
Python в бэкенде
HTTP и REST, Django/FastAPI, ORM и транзакции, кеш и очереди — собес на бэкенд-позицию.
Основы языка и типы
Объектная модель, is vs ==, числа и строки, импорты, память и GC — база, с которой начинается почти каждый собес.
Коллекции и структуры данных
list, tuple, dict и set изнутри: хешируемость, копирование, генераторы и стандартная библиотека — вопросы почти каждого собеса.
Асинхронность и многопоточность
GIL и free-threading, потоки, процессы, asyncio — где Python параллелится, а где только притворяется.
Python для данных
numpy и pandas изнутри, SQL, большие файлы и воспроизводимость — аналитик, дата-инженер, ML.
Ошибки, тесты и отладка
Исключения и их цепочки, pytest и моки, логирование и отладка — как ломаться громко и чиниться быстро.
Функции, замыкания и декораторы
Функции как объекты, LEGB, *args/**kwargs, декораторы и functools — любимая территория интервьюеров.
ООП в Python
Классы и атрибуты, наследование и MRO, дандер-методы, property и дескрипторы — как об этом спрашивают на собесах.
Как это выглядит: подборка под роль
В приложении подборка собирается под твой собес — пресетом, темой или свободным описанием, которое ИИ сматчит с банком. Вот срез пресетов:
База, которую гоняют на джуновских собесах: язык, коллекции, функции, ООП и работа с ошибками.
- junior Расскажи, что имеют в виду, когда говорят «в Python всё — объект»? Из чего вообще состоит объект?
как ответить В Python любая сущность — число, строка, функция, класс, модуль — это объект: экземпляр какого-то типа, у которого есть три вещи — идентичность (id), тип (type) и значение. Даже классы — объекты типа type, а функции можно хранить в переменных и передавать как аргументы наравне с числами и строками. В отличие от C или Java, здесь нет «примитивных» типов, живущих отдельно от объектной модели.
- junior ЧемОткрыть подборку в приложении
isотличается от==, и когда что использовать? - junior Расскажи, чем list отличается от tuple и в каких случаях ты выберешь кортеж вместо списка?Открыть подборку в приложении
- junior Как dict устроен внутри и за счёт чего доступ по ключу работает за O(1)?Открыть подборку в приложении
- junior Что означает, что в Python функции — объекты первого класса? Как это использовать на практике?Открыть подборку в приложении
- junior Что такое замыкание в Python и когда оно реально пригождается?Открыть подборку в приложении
Глубина языка и рантайма: дескрипторы, GIL, asyncio, устройство коллекций — то, чем отделяют мидла от джуна.
- middle Чем __new__ отличается от __init__? Когда реально приходится переопределять __new__?
как ответить __new__ создаёт и возвращает экземпляр — принимает cls и работает до появления объекта; __init__ получает уже созданный self и только наполняет его, возвращая None. Вызов Class(...) — это по сути cls.__new__(cls, ...), и если результат — экземпляр cls, на нём вызывается __init__ с теми же аргументами. Переопределять __new__ нужно при наследовании от иммутабельных типов (str, int, tuple), для синглтонов/кэша экземпляров и в метаклассах.
- middle Как Python строит MRO при множественном наследовании? Расскажи про C3-линеаризацию: какие гарантии она даёт и в каком случае класс вообще не создастся.Открыть подборку в приложении
- middle Чем отличаются nonlocal и global? Когда без них не обойтись?Открыть подборку в приложении
- middle Что делаютОткрыть подборку в приложении
*и/в сигнатуре функции — как объявить keyword-only и positional-only параметры и зачем это вообще нужно? - middle Ты переопределяешь у своего класса __eq__. Расскажи про контракт __hash__ и __eq__ — что нужно соблюсти, чтобы объекты корректно работали в dict и set?Открыть подборку в приложении
- middle Расскажи, как живёт генератор между вызовами next — и что он умеет, кроме простой выдачи значений?Открыть подборку в приложении
HTTP, фреймворки, ORM и асинхронность — собес на бэкенд-позицию любого грейда.
- junior Объясни, что такое идемпотентность HTTP-метода. Какие из стандартных методов идемпотентны, а какие нет, и почему POST — нет?
как ответить Идемпотентный метод — это когда N одинаковых запросов подряд приводят ресурс в то же состояние, что и один запрос (ответ при этом может отличаться, например код 404 после первого DELETE). GET, PUT, DELETE, HEAD, OPTIONS идемпотентны; POST — нет, потому что каждый вызов обычно создаёт новую сущность; PATCH тоже не гарантированно идемпотентен, если в теле операция вроде «увеличить счётчик на 1», а не полная замена поля.
- junior Клиент получил от API 401 и 403 — в чём разница и когда какой отдавать? А 400 против 422?Открыть подборку в приложении
- junior Что такое GIL и что он на самом деле гарантирует программисту?Открыть подборку в приложении
- junior Почему многопоточность в Python не ускоряет CPU-bound вычисления?Открыть подборку в приложении
- junior Чем атрибут класса отличается от атрибута экземпляра? Где каждый из них хранится и что произойдёт, если имена совпадают?Открыть подборку в приложении
- junior Расскажи, что на самом деле делает super() и зачем он нужен — почему не вызвать метод родителя напрямую, например Parent.method(self)?Открыть подборку в приложении
numpy, pandas, SQL и данные в масштабе — аналитик, дата-инженер, ML-стажёр.
- junior Расскажи, зачем вообще нужен numpy, если в Python уже есть списки. Почему векторизованные операции обгоняют цикл по списку?
как ответить numpy хранит данные не как список Python-объектов, а как непрерывный typed-буфер памяти одного dtype — без boxing и указателей на каждый элемент. Операции вроде a + b выполняются единым C-циклом (ufunc) поверх этого буфера, минуя байткод интерпретатора на каждой итерации, а данные лежат в кэше процессора последовательно. Отсюда кратный (обычно на порядки) выигрыш по скорости и меньше памяти на больших массивах.
- junior Что такое dtype у ndarray и зачем массив вообще его хранит? Что случится, если положить в np.array разнородные данные?Открыть подборку в приложении
- junior Расскажи, чем list отличается от tuple и в каких случаях ты выберешь кортеж вместо списка?Открыть подборку в приложении
- junior Как dict устроен внутри и за счёт чего доступ по ключу работает за O(1)?Открыть подборку в приложении
- junior Расскажи, что имеют в виду, когда говорят «в Python всё — объект»? Из чего вообще состоит объект?Открыть подборку в приложении
- junior ЧемОткрыть подборку в приложении
isотличается от==, и когда что использовать?
Собесы по другим направлениям
- Вопросы на собеседовании по DevOps — 96 вопросов, от Linux и сети до Kubernetes, IaC и наблюдаемости