Как проходит собеседование на Python junior в 2026 году
Формат почти везде одинаковый: короткий звонок с рекрутером, техническое интервью и иногда тестовое задание. Крупные компании добавляют алгоритмическую секцию с живым кодом.
| Этап | Длительность | Что проверяют |
|---|---|---|
| Скрининг с HR | 15-30 минут | Мотивация, опыт, ожидания по зарплате, формат работы |
| Техническое интервью | 60-90 минут | Теория Python, ООП, базы данных, Git, разбор ваших проектов |
| Live coding | 30-60 минут | Решение 1-2 задач в редакторе, рассуждение вслух |
| Тестовое задание | От нескольких часов до пары дней | Код, структура проекта, README, тесты |
Ниже собраны вопросы, которые чаще всего встречаются в подборках с реальных собеседований на Хабре, Tproger и Stepik, с короткими ответами. Отвечать на интервью лучше своими словами и с примером: заученная формулировка без примера выдает зубрежку.
Вопросы по типам данных и базовому синтаксису
Какие типы данных изменяемые, а какие нет?
Неизменяемые: int, float, bool, str, tuple, frozenset, bytes. Изменяемые: list, dict, set, bytearray. Изменить неизменяемый объект нельзя, любая операция создает новый.
Чем список отличается от кортежа?
Список изменяемый, кортеж нет. Кортеж можно использовать ключом словаря (если внутри только неизменяемые элементы), он занимает чуть меньше памяти. Кортеж подходит для фиксированных записей, список - для коллекций, которые меняются.
Чем is отличается от ==?
== сравнивает значения, is проверяет, что это один и тот же объект в памяти. is используют для сравнения с None: if x is None.
Что может быть ключом словаря?
Любой хешируемый объект: числа, строки, кортежи из хешируемых элементов. Список ключом быть не может, будет TypeError: unhashable type.
Что выведет этот код?
def add(item, items=[]):
items.append(item)
return items
print(add(1))
print(add(2))
Выведет [1], а затем [1, 2]. Значение по умолчанию вычисляется один раз при создании функции, и список общий для всех вызовов. Правильно писать items=None и создавать список внутри.
Чем copy отличается от deepcopy?
copy.copy создает новый контейнер, но вложенные объекты остаются общими. copy.deepcopy рекурсивно копирует все уровни.
Функции, декораторы и генераторы
Что такое *args и **kwargs?
Способ принять произвольное число аргументов. *args собирает позиционные в кортеж, **kwargs - именованные в словарь. Имена условные, работают звездочки.
Что такое декоратор?
Функция, которая принимает функцию и возвращает новую, добавляя поведение до или после вызова. Работает благодаря тому, что функции в Python - объекты первого класса.
import time
from functools import wraps
def timer(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
print(f"{func.__name__}: {time.perf_counter() - start:.3f} c")
return result
return wrapper
@timer
def work():
time.sleep(0.5)
Часто спрашивают, зачем @wraps: он сохраняет имя и docstring исходной функции.
Что такое замыкание?
Вложенная функция, которая запоминает переменные внешней функции после ее завершения. Декоратор выше - пример замыкания: wrapper помнит func.
Чем генератор отличается от списка?
Генератор выдает значения по одному через yield и не хранит их все в памяти. Подходит для больших файлов и бесконечных последовательностей. Пройти генератор можно только один раз.
def read_lines(path):
with open(path, encoding="utf-8") as f:
for line in f:
yield line.strip()
Чем итератор отличается от итерируемого объекта?
Итерируемый объект (список, строка) умеет выдать итератор через __iter__. Итератор хранит текущую позицию и возвращает следующий элемент через __next__, а в конце бросает StopIteration.
Вопросы по ООП в Python
Назовите принципы ООП
Инкапсуляция, наследование, полиморфизм, часто добавляют абстракцию. Будьте готовы привести пример каждого на Python: полиморфизм - разные классы с методом area(), которые вызываются одинаково.
Чем __init__ отличается от __new__?
__new__ создает объект и возвращает его, __init__ инициализирует уже созданный. Переопределять __new__ нужно редко, например для синглтона или наследования от неизменяемых типов.
Чем classmethod отличается от staticmethod?
@classmethod получает первым аргументом класс (cls) и часто используется как альтернативный конструктор. @staticmethod не получает ни класса, ни экземпляра, это обычная функция внутри пространства имен класса.
Что такое MRO?
Method Resolution Order - порядок поиска методов при множественном наследовании. Python строит его алгоритмом C3, посмотреть можно через ClassName.__mro__.
Есть ли в Python приватные атрибуты?
Строго нет. Одно подчеркивание (_x) - соглашение "не трогать снаружи". Два подчеркивания (__x) включают искажение имени в _ClassName__x, но доступ все равно возможен.
GIL, потоки, процессы и asyncio
Этот блок почти гарантированно будет на интервью, даже на junior.
Что такое GIL?
Global Interpreter Lock - блокировка в CPython, из-за которой в один момент байт-код выполняет только один поток. Поэтому потоки не ускоряют вычисления на CPU, но хорошо подходят для ожидания сети и диска. С версии 3.13 есть экспериментальная сборка без GIL (free-threaded), а в 3.14 она получила статус официально поддерживаемой, но по умолчанию обычный Python по-прежнему с GIL.
| Инструмент | Для каких задач | Пример |
|---|---|---|
| threading | Ввод-вывод: сеть, диск, ожидание ответа | Скачивание десятков страниц |
| multiprocessing | Тяжелые вычисления на нескольких ядрах | Обработка изображений |
| asyncio | Тысячи одновременных сетевых операций в одном потоке | Telegram-бот, веб-сервер на FastAPI |
Как Python управляет памятью?
Основной механизм - подсчет ссылок: когда счетчик объекта падает до нуля, память освобождается. Для циклических ссылок есть сборщик мусора (модуль gc), который периодически ищет недостижимые циклы.
Вопросы по SQL, Git и HTTP
Junior на Python почти всегда работает с базой и репозиторием, поэтому эти темы спрашивают наравне с языком.
- Какие бывают JOIN? INNER возвращает только совпадения, LEFT - все строки левой таблицы плюс совпадения справа, FULL - все строки обеих. Примеры запросов есть в подборке SQL-запросов с примерами.
- Что такое индекс? Структура (обычно B-дерево), которая ускоряет поиск по столбцу ценой места на диске и более медленной записи.
- Что такое транзакция и ACID? Группа операций, которая выполняется целиком или не выполняется вовсе. ACID: атомарность, согласованность, изолированность, долговечность.
- Чем merge отличается от rebase? merge создает коммит слияния и сохраняет историю как была, rebase переносит ваши коммиты поверх другой ветки и делает историю линейной.
- Чем GET отличается от POST? GET получает данные и не должен менять состояние сервера, POST отправляет данные в теле запроса. Коды ответов вроде 201, 404 и 500 разобраны в справочнике HTTP-кодов ответов.
Задачи на live coding с решениями
На junior обычно дают простые задачи и смотрят, как вы рассуждаете. Проговаривайте план вслух, начните с простого решения, потом оцените сложность.
Проверить, является ли строка палиндромом
def is_palindrome(s: str) -> bool:
clean = [c.lower() for c in s if c.isalnum()]
return clean == clean[::-1]
Найти два числа с заданной суммой
Решение перебором дает O(n^2), со словарем O(n):
def two_sum(nums, target):
seen = {}
for i, n in enumerate(nums):
if target - n in seen:
return seen[target - n], i
seen[n] = i
return None
Посчитать самые частые слова в тексте
from collections import Counter
def top_words(text, n=3):
return Counter(text.lower().split()).most_common(n)
Интервьюер оценит, если вы знаете стандартную библиотеку: Counter, defaultdict, itertools, а не пишете все циклами вручную.
Как подготовиться к собеседованию за 2 недели
- Пройдитесь по вопросам из этой статьи и ответьте на каждый вслух, без подсказок. Где сбились, запишите и перечитайте документацию.
- Решайте по 2-3 задачи в день уровня Easy на LeetCode или Codewars, засекайте 20 минут.
- Подготовьте рассказ о двух своих проектах: что делает, почему такой стек, что было сложно, что бы переделали.
- Повторите SQL: SELECT с JOIN, GROUP BY, HAVING, подзапросы.
- Проведите пробное интервью с другом или запишите себя на видео.
Совет: если не знаете ответа, скажите, как бы вы его искали и что предполагаете. Для junior это лучше, чем молчание или выдумка: интервьюер проверяет ход мысли, а не память.
По рынку: на октябрь 2026 года стартовые вакансии junior Python на Хабр Карьере часто предлагают от 70-80 тысяч рублей, в Москве выше, в регионах ниже. Вакансий junior заметно меньше, чем senior, поэтому подготовка к техническому этапу окупается. Если база пока не уверенная, вернитесь к плану изучения Python с нуля, а все материалы по языку собраны в разделе Python.
