P
prepair.app
Пройти интервью →
EnglishУкраїнськаРусскийDeutsch
🐍

Junior Python BackendВопросы на собеседовании Python разработчика

Junior · без опыта / до 1 года

Собеседование Python-разработчика охватывает внутренности языка, асинхронность, Django или FastAPI и работу с базой. Ниже — самые частые вопросы с эталонными ответами. Junior: базовая теория, определения и простые практические кейсы.

Попробовать — без регистрации
Готовим вопрос…

Темы для подготовки

Типы данных и структуры
Декораторы и генераторы
GIL и конкурентность
asyncio и async/await
Django / FastAPI
ORM и оптимизация SQL

7 вопросов уровня Junior с ответами

1

В чём разница между list и tuple и когда это важно?

Ответ

Список изменяемый, кортеж нет, и следствие, о котором забывают: неизменяемость делает кортеж хешируемым, поэтому он может быть ключом словаря, а список не может. Кортеж берут, когда размер и смысл каждой позиции фиксированы — координата, строка из базы. Список — когда собирают однородные элементы. Кортеж ещё и сообщает намерение: сюда никто не будет добавлять.

2

Что произойдёт, если использовать изменяемый объект как значение аргумента по умолчанию?

Ответ

Значение по умолчанию вычисляется один раз при определении функции, а не при каждом вызове — поэтому список или словарь общий для всех вызовов и накапливает состояние между ними. Лечится значением None и созданием объекта внутри тела. Это самая частая ошибка в Python, которая проходит ревью, потому что функция сама по себе выглядит правильной.

3

В чём разница между is и ==?

Ответ

== спрашивает, равны ли значения; is — один ли это объект в памяти. Они случайно совпадают на маленьких числах и коротких строках, потому что CPython их кеширует, и ошибка не всплывает, пока значение не выйдет за пределы кеша. Практическое правило: is только для None, True и False, для остального ==.

4

Как словарь находит ключ?

Ответ

Хеширует ключ, чтобы выбрать корзину, затем сравнивает на равенство внутри неё, разрешая коллизии. Отсюда два следствия: ключ должен быть хешируемым, поэтому списком он быть не может, и если вы переопределили __eq__ в классе, обязаны переопределить __hash__ — иначе равные объекты попадут в разные корзины и будут вести себя неверно в множествах и словарях.

5

Чем списковое включение отличается от генераторного выражения?

Ответ

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

6

Что делает каждый из блоков try / except / else / finally?

Ответ

try содержит рискованный код, except обрабатывает конкретное исключение, else выполняется только если ничего не выброшено, finally выполняется в любом случае и служит для очистки. else существует ради того, чтобы блок try оставался минимальным: код, который не может упасть, там не нужен, иначе широкий except проглотит ошибки строк, которые вы защищать не собирались.

7

Зачем нужны *args и **kwargs?

Ответ

*args собирает лишние позиционные аргументы в кортеж, **kwargs — именованные в словарь. Именно они позволяют обёртке принять любую сигнатуру и передать её дальше без изменений, поэтому их использует каждый декоратор. В обычных функциях злоупотребление ими скрывает настоящую сигнатуру и от читателя, и от проверки типов.

🦎

Прочитать ответы недостаточно

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

Пройти интервью Junior Python Backend →
Бесплатно · 3 интервью в месяц

Другие уровни — Python Backend

Middle Python BackendSenior Python BackendВсе вопросы Python Backend

Другие специализации

🔍Junior QA Manual🤖Junior QA AutomationJunior Java Backend🐘Junior PHP Backend🦫Junior Go Backend🟢Junior Node.js Backend💎Junior Ruby on Rails🟣Junior .NET Backend Developer🔷Junior C++🟨Junior JavaScript