Язык, его внутренности и типовые вопросы про Python на собесе python-backend.
- Эволюция языка -> читаемость, производительность, типизация
- Почему старый код может выглядеть иначе
- Какие изменения реально влияют на ежедневную работу
- dataclasses
- typing: TypedDict, Protocol, Final, Literal, Self + typehints
- match/case (structural pattern matching)
- Улучшения asyncio
- PEP 563 / 649 (отложенные аннотации)
- CPython performance 3.11 - большой буст
- 3.14 и свобода от GIL
- Mutable vs immutable
- Почему это важно для API, кэшей, аргументов функций
- list, dict, set — mutable
- int, str, tuple, frozenset — immutable
- Поведение при передаче в функцию переменной того или иного типа
- Опасность default-аргументов функции (Почему
def f(x=[]): passэто баг?)
- Контракты
__hash__и__eq__ - Хэшируемость → ключи dict / set
- Почему mutable объекты нельзя хэшировать
- И что делать если всё таки хочется
- Почему
dataclass(frozen=True)автоматически хэшируемый?
- LEGB rule
- Замыкания и late binding
- nonlocal, global
- Экономия памяти
- Запрет динамических атрибутов
- Trade-off’ы
- Когда уместно: Миллионы однотипных объектов / DTO / entity-like классы
- Минусы: нет
__dict__и сложнее с наследованием
- Протокол enter / exit
- Управление ресурсами
- contextlib
- Примеры: файлы, lock-и, транзакции, временные состояния
- Зачем contextlib.contextmanager, если есть классы?
__new__создание объекта__init__инициализация- Immutable типы, singleton, factory
- Когда реально нужен
__new__
- Множественное наследование
- MRO
- Поведенческие примеси
- Правило: Mixin = маленький, без состояния, без
__init__ - Почему mixin это не base class?
_protected,__private- Name mangling
- Нет настоящего private
- Всё просто соглашения
- Что такое GIL и зачем он
- Сборщик мусора и счётчик ссылок
- CPU-bound vs IO-bound задачи
- Threads vs multiprocessing
- Почему Python плохо масштабируется по CPU?
- Event loop
- async / await
- кооперативная мультизадачность
- Где async вреден
- Sync inside async — блокировка loop
- Почему requests нельзя использовать в async коде?
Напиши три небольшие программки
- стартует два процесса, в каждом расчёт факториала от 100
- стартует два треда, в каждом расчёт факториала от 100
- запускает две корутины, в каждой расчёт факториала от 100
- Unit vs integration
- Mock vs stub vs fake
- Что не надо мокать
- JWT != шифрование
- Signing vs encryption
- Stateless auth
- HS256 vs RS256
- Где хранить секреты
- Expiration, rotation
- Почему нельзя хранить чувствительные данные в JWT?
- Масштабирование
- Кэширование
- Failover
- Stateless API + Redis
- Stateful websocket
- Linux memory management & overcommit
- SIGTERM vs SIGKILL
- Graceful shutdown
- Почему приложение не ловит SIGKILL?