Вопросы на собеседовании: Python
Курс готовит к Python-секции технического собеседования. Здесь не зубрёжка определений, а понимание: каждый вопрос разобран по схеме «вопрос → чёткий ответ → запускаемый пример, доказывающий поведение». Вы разберёте модель памяти и изменяемость, тонкости функций и замыканий, ООП и магические методы, итераторы и генераторы, устройство GIL и сборки мусора, классические ловушки и типовые практические задачи. Все примеры на стандартной библиотеке Python — их можно запускать прямо в браузере и видеть точный вывод.
Курс «Вопросы на собеседовании: Python» состоит из 6 разделов и 22 уроков: Типы данных и модель памяти, Функции и области видимости, ООП в Python, Итераторы, генераторы, функциональщина, Внутреннее устройство и подводные камни и Практические задачи и структуры данных. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Типы данных и модель памяти
- Изменяемые и неизменяемые типы: list против tuple
Чем mutable-типы (list, dict, set) отличаются от immutable (tuple, str, int) в Python и почему это спрашивают на собеседовании.
- is или ==: тождество против равенства и кеш малых int
Разница между операторами is и == в Python, как работает кеширование малых целых чисел и почему is с числами обманчив.
- Копирование: ссылка, shallow copy и deep copy
Разница между присваиванием, поверхностным (copy.copy) и глубоким (copy.deepcopy) копированием в Python на запускаемых примерах.
- Как устроены list, dict и set: сложность операций
Внутреннее устройство списка, словаря и множества в Python и асимптотика основных операций — что спрашивают про Big-O на интервью.
- Изменяемые и неизменяемые типы: list против tuple
2 Функции и области видимости
- *args и **kwargs: переменное число аргументов
Что такое *args и **kwargs в Python, как они собирают и распаковывают аргументы и зачем нужны на практике.
- Ловушка изменяемого аргумента по умолчанию
Почему изменяемый аргумент по умолчанию (target=[]) в Python создаётся один раз и копит состояние между вызовами — и как чинить.
- Замыкания и правило LEGB
Как Python ищет имена по правилу LEGB, что такое замыкание, зачем нужны nonlocal и global на запускаемых примерах.
- Передача аргументов и lambda
Как Python передаёт аргументы (по ссылке на объект), почему функция может изменить список, но не число, и что такое lambda.
- *args и **kwargs: переменное число аргументов
3 ООП в Python
- Классы, экземпляры и виды методов
Класс против экземпляра, роль self, атрибуты класса и экземпляра, а также разница между обычным методом, classmethod и staticmethod.
- __init__ против __new__
Чем __new__ отличается от __init__ в Python: кто создаёт объект, кто его настраивает и когда переопределять __new__.
- Наследование, MRO и магические методы
Как работает наследование и порядок разрешения методов (MRO) в Python и зачем нужны __str__, __eq__, __hash__.
- property и __slots__
Зачем нужен декоратор property для управляемого доступа к атрибутам и как __slots__ экономит память в Python.
- Классы, экземпляры и виды методов
4 Итераторы, генераторы, функциональщина
- Итераторы и протокол итерации
Что такое итератор и итерируемый объект в Python, как работают __iter__ и __next__ и что под капотом у цикла for.
- Генераторы и yield: ленивость и экономия памяти
Как работают генераторы и yield в Python, почему они ленивые и экономят память по сравнению со списком.
- Comprehensions и встроенные map, filter, zip, enumerate
List/dict/set comprehension в Python и встроенные функции map, filter, zip, enumerate — что спрашивают и как они работают.
- Декораторы и functools.wraps
Как устроены декораторы в Python, почему это функция, оборачивающая функцию, и зачем нужен functools.wraps.
- Итераторы и протокол итерации
5 Внутреннее устройство и подводные камни
- GIL, память и сборка мусора
Что такое GIL в CPython и почему потоки не ускоряют CPU-задачи, как работают подсчёт ссылок и сборщик циклических ссылок.
- Классические подвохи: итерация, поздняя привязка, деление
Три частых ловушки Python: изменение списка во время итерации, поздняя привязка в замыканиях и целочисленное деление.
- Контекстные менеджеры: with, __enter__ и __exit__
Как работает оператор with в Python, что делают __enter__ и __exit__ и почему ресурс закрывается даже при исключении.
- GIL, память и сборка мусора
6 Практические задачи и структуры данных
- Строковые мини-задачи: разворот, анаграммы, палиндром
Частые задачи про строки на собеседовании Python: перевернуть строку, проверить анаграмму и палиндром с запускаемыми решениями.
- collections: Counter, defaultdict, deque и дедупликация
Подсчёт частоты через Counter, группировка через defaultdict, очередь deque и удаление дубликатов с сохранением порядка.
- Сортировка по ключу, распаковка и вопросы про сложность
Сортировка с параметром key, распаковка через звёздочку и типичные вопросы про Big-O на собеседовании Python.
- Строковые мини-задачи: разворот, анаграммы, палиндром