Перейти к основному контенту
Tech Path Finder
Что спрашивают на Junior Python собеседовании в 2026: 40 реальных вопросов

Что спрашивают на Junior Python собеседовании в 2026: 40 реальных вопросов

Константин Потапов
15 марта 2026 г.
18 мин
Python

Почему именно эти вопросы

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

Сохрани этот список и пройди каждый пункт — это займёт меньше времени, чем ты думаешь.


Базовые типы и структуры данных

1. В чём разница между list и tuple?

list — изменяемый (mutable), tuple — неизменяемый (immutable). Это влияет на хеширование: tuple можно использовать как ключ словаря, list — нет.

2. Как работает dict в Python 3.7+?

С Python 3.7 словари гарантированно сохраняют порядок вставки. Внутри — хеш-таблица с открытой адресацией. Среднее время операций — O(1).

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

== сравнивает значения, is сравнивает идентичность объектов (один ли это объект в памяти).

4. Что такое None, True, False в Python?

Синглтоны — существуют в единственном экземпляре. Поэтому правильно писать if x is None, а не if x == None.

5. Как устроен set?

Неупорядоченная коллекция уникальных элементов. Под капотом — хеш-таблица. Поиск и вставка — O(1). Элементы должны быть хешируемыми.


Строки и встроенные функции

6. Почему конкатенация строк в цикле неэффективна?

Строки иммутабельны — каждая конкатенация создаёт новый объект. Правильный подход — ''.join(list).

7. Чем f-string лучше .format()?

Быстрее и читаемее. f-string вычисляется в момент определения, .format() — в момент вызова. В Python 3.12+ f-string ещё более гибкие.


ООП

8. Что такое __init__ и __new__?

__new__ создаёт экземпляр класса, __init__ его инициализирует. В 99% случаев переопределяют только __init__. __new__ нужен при работе с иммутабельными типами или паттерном Singleton.

9. Что такое MRO (Method Resolution Order)?

Порядок, в котором Python ищет метод в иерархии классов при множественном наследовании. Использует алгоритм C3 linearization. Посмотреть можно через ClassName.__mro__.

10. В чём разница между @classmethod и @staticmethod?

  • @classmethod получает класс (cls) первым аргументом — используется для фабричных методов
  • @staticmethod не получает ни класс, ни экземпляр — обычная функция в пространстве имён класса

11. Что такое __slots__?

Оптимизация памяти: запрещает создание __dict__ у экземпляра, фиксирует список атрибутов. Снижает потребление памяти на 40–50% при большом количестве объектов.

12. Что такое дескриптор?

Объект, реализующий __get__, __set__ или __delete__. Именно на дескрипторах работают property, classmethod, staticmethod.


Функции и замыкания

13. Что такое замыкание (closure)?

Функция, которая запоминает переменные из внешней области видимости, даже после завершения этой функции.

14. Что такое декоратор и как написать свой?

Функция, которая принимает функцию и возвращает новую функцию. Используется для логирования, кеширования, авторизации.

15. Что делает functools.wraps?

Копирует метаданные оригинальной функции (__name__, __doc__) на функцию-обёртку. Без него my_func.__name__ вернёт 'wrapper'.

16. Типичная ловушка: мутабельный дефолтный аргумент


Генераторы и итераторы

17. Чем генератор отличается от списка?

Генератор вычисляет значения лениво (по одному), не хранит все элементы в памяти. Идеален для больших последовательностей.

18. Что такое yield from?

Делегирует итерацию вложенному генератору. Появился в Python 3.3.

19. Что такое send() у генератора?

Позволяет передавать значения внутрь генератора. Основа для корутин до появления async/await.


Асинхронность

20. В чём разница между threading и asyncio?

  • threading — настоящие потоки ОС, но GIL не даёт запускать Python-код параллельно (только I/O параллельно)
  • asyncio — один поток, кооперативная многозадачность, эффективнее для I/O-bound задач

21. Когда использовать asyncio, а когда threading?

  • asyncio — для I/O-bound задач (HTTP-запросы, работа с БД, файловый ввод-вывод)
  • threading или multiprocessing — для CPU-bound задач

22. Что такое event loop?

Цикл обработки событий — ядро asyncio. Поочерёдно выполняет корутины, когда они ожидают I/O-операций.

23. Что делает asyncio.gather()?

Запускает несколько корутин конкурентно и ждёт завершения всех.


Обработка ошибок

24. В чём разница между Exception и BaseException?

BaseException — базовый класс всех исключений, включая KeyboardInterrupt и SystemExit. Exception — базовый класс для обычных ошибок. Перехватывать BaseException стоит только в крайних случаях.

25. Что такое finally?

Блок, который выполняется всегда — даже при исключении или return. Используется для освобождения ресурсов.

26. Как правильно логировать исключения?


Тестирование

27. В чём разница между unittest и pytest?

pytest лаконичнее (нет классов, нет self), мощнее (фикстуры, параметризация), лучше читается. unittest стандартная библиотека, не нужно ставить.

28. Что такое фикстура в pytest?

Функция, которая подготавливает окружение для теста. Управляет созданием и удалением ресурсов.

29. Что такое mock и когда его использовать?

Заглушка для внешних зависимостей (API, БД, файловая система). Позволяет тестировать логику в изоляции.


Типы и аннотации

30. Зачем нужны type hints?

Документируют интерфейс функции, помогают IDE и линтерам находить ошибки, улучшают читаемость. Не влияют на выполнение программы — только подсказки.

31. Чем Optional[X] отличается от X | None?

Это одно и то же, начиная с Python 3.10. X | None — более современный синтаксис.

32. Что такое TypeVar?

Переменная типа для обобщённых функций.


Производительность и инструменты

33. Что такое GIL и как он влияет на многопоточность?

Global Interpreter Lock — мьютекс, который позволяет только одному потоку исполнять Python-байткод в момент времени. Это делает CPU-bound задачи неэффективными в threading.

34. Как профилировать Python-код?

  • cProfile — встроенный профайлер
  • py-spy — low-overhead sampling profiler для production
  • memory_profiler — профилирование памяти

35. Что такое __pycache__ и .pyc файлы?

Скомпилированный байткод Python. Ускоряет повторный запуск скрипта — не нужно парсить исходник заново.


Практические задачи

36. Реверс строки

37. Найти дубликаты в списке

38. FizzBuzz

39. Проверить, является ли строка палиндромом

40. Flatten вложенного списка


Как готовиться дальше

Знание ответов на эти вопросы — минимум. Интервьюеры часто задают follow-up: "А что если... ?", "Почему именно так?", "Что будет, если использовать в многопоточном контексте?"

Лучший способ подготовиться — практиковаться с реальными вопросами и сразу получать объяснения. На платформе Tech Path Finder есть курс по Python с квизами именно по этим темам — вопросы с уровнями Junior/Middle/Senior и детальными разборами.