Типы данных, коллекции, функции, генераторы, ООП и конкурентность — то, о чём спрашивают начинающих Python-разработчиков почти на каждом собеседовании.
- Что такое *args и **kwargs? Junior
args собирает лишние позиционные аргументы в кортеж, kwargs — лишние именованные в словарь.
- Как передаются аргументы в функцию — по значению или по ссылке? Junior
Ни то ни другое в классическом смысле: передаётся ссылка на объект (call by sharing).
- Как работают async и await? Junior
async def создаёт корутину, await — точка, где она отдаёт управление циклу событий, пока ждёт.
- Что такое self и __init__ в классе? Junior
self — ссылка на текущий экземпляр, Python передаёт её в метод первым аргументом.
- Что такое замыкание? Junior
Замыкание — вложенная функция, которая помнит переменные внешней функции после её завершения.
- Какая сложность у основных операций со списком, словарём и множеством? Junior
Список — массив: доступ по индексу и append — O(1), вставка в начало и поиск in — O(n).
- Чем list comprehension отличается от генераторного выражения? Junior
[...] сразу строит весь список в памяти, (...) — ленивый генератор.
- Что такое контекстный менеджер и как работает with? Junior
Контекстный менеджер гарантирует подготовку и очистку вокруг блока with, даже при исключении.
- Чем поверхностная копия отличается от глубокой? Junior
Поверхностная копия создаёт новый контейнер со старыми элементами, глубокая — копирует всё рекурсивно.
- Что такое декоратор и как его написать? Junior
Декоратор — функция, которая принимает функцию и возвращает новую; @dec — сахар для f = dec(f).
- Как устроен словарь в Python? Junior
dict — хеш-таблица: по hash(key) находится место ключа, поиск в среднем за O(1).
- Что такое магические методы? Чем __str__ отличается от __repr__? Junior
Магические методы (__имя__) — крючки, через которые объект поддерживает встроенные операции языка.
- Что такое генератор и чем он полезен? Junior
Генератор — функция с yield: отдаёт значения по одному и замирает между ними, сохраняя состояние.
- Что такое GIL? Junior
GIL — блокировка в CPython: байткод Python в один момент выполняет только один поток.
- Как работают наследование, super() и MRO? Junior
MRO — порядок, в котором Python ищет метод по иерархии классов; super() вызывает следующий класс в MRO.
- Чем отличается is от ==? Junior
== сравнивает значения, is — что это один и тот же объект.
- Чем итератор отличается от итерируемого объекта? Junior
Итерируемый объект умеет выдать итератор (__iter__), итератор выдаёт значения по одному (__next__).
- Чем список отличается от кортежа? Junior
Список изменяемый, кортеж — нет; отсюда остальные различия.
- Почему нельзя использовать изменяемый объект как значение аргумента по умолчанию? Junior
Значение по умолчанию вычисляется один раз — при определении функции, а не при каждом вызове.
- Чем изменяемые типы отличаются от неизменяемых? Junior
Изменяемый объект меняется на месте, неизменяемый — только заменяется новым.
- Зачем нужна конструкция if __name__ == "__main__"? Junior
Код под if __name__ == "__main__": выполняется, только когда файл запущен как скрипт, а не импортирован.
- Что такое @property и зачем он нужен? Junior
@property превращает метод в атрибут: снаружи obj.area, внутри — вычисление или проверка.
- Как работают области видимости в Python? Junior
Имя ищется по цепочке LEGB: Local → Enclosing → Global → Built-in.
- Что такое множество (set) и когда его использовать? Junior
set — неупорядоченный набор уникальных хешируемых элементов на хеш-таблице.
- Как работают срезы в Python? Junior
seq[start:stop:step] — новая последовательность с start включительно до stop не включая.
- Чем @staticmethod отличается от @classmethod? Junior
@classmethod получает класс (cls), @staticmethod не получает ничего — это обычная функция внутри класса.
- Чем отличаются threading, multiprocessing и asyncio? Junior
Потоки и asyncio — для ожидания ввода-вывода, процессы — для вычислений на нескольких ядрах.
- Как работают try, except, else и finally? Junior
try — опасный код, except — обработка, else — если ошибки не было, finally — всегда.
- Что такое аннотации типов и проверяются ли они при выполнении? Junior
Аннотации — подсказки о типах для людей и инструментов; интерпретатор их не проверяет.
- Зачем нужно виртуальное окружение и как управлять зависимостями? Junior
Виртуальное окружение — отдельная копия Python со своими пакетами для каждого проекта.