Мок-собеседование Senior Python-разработчика: multiprocessing и типизация
Вторая часть тестового технического мок-собеседования на позицию Senior Python Developer. Кандидат отвечает на вопросы о производительности CPython и PyPy, GIL, multiprocessing, shared memory, объектной модели и typing; также обсуждают Saga-транзакции и MVCC PostgreSQL. В конце интервьюеры дают развёрнутую обратную связь.
- Опубликовано на YouTube:
- Просмотры на YouTube: 11,7 тыс.
- Лайки на YouTube: 305
Таймлайн
Коротко о видео
Вторая часть тестового технического мок-собеседования на позицию Senior Python Developer. Ведущие проверяют подход кандидата к ускорению CPU-bound кода: профилирование, алгоритмическую сложность, GIL, C-расширения, Cython и PyPy/JIT. Затем обсуждают регрессию CPU после релиза, ограничения ThreadPool и ProcessPool, стоимость сериализации, батчирование и shared memory. Вопросы по языку охватывают хешируемость, атрибуты класса и экземпляра, метаклассы, typing.overload, MRO и __getattribute__/__getattr__. Отдельно рассматриваются Saga, MVCC PostgreSQL, type hints в FastAPI, generics и вариантность; финал посвящён обратной связи и месту вопросов-ловушек и LeetCode в найме.
Затронутые темы
Что взять на заметку
- Оптимизацию CPU-bound Python-кода начинайте с профилирования и улучшения алгоритма; затем сравнивайте Cython, C-расширения, PyPy и процессы на своей нагрузке.
- В ProcessPool учитывайте цену pickle и IPC: батчирование уменьшает число передач, а shared memory требует подходящего представления данных и аккуратной синхронизации.
- Кортеж хешируем только тогда, когда хешируемы все его элементы; наличие list делает hash(tuple) невозможным.
- typing.overload описывает варианты сигнатур для статических анализаторов и сам по себе не создаёт runtime-диспетчеризацию функций.
- При разборе MRO опирайтесь на C3-линеаризацию и различайте всегда вызываемый __getattribute__ с резервным __getattr__.
- Для распределённых бизнес-транзакций различайте Saga с оркестрацией и хореографией, а также компенсирующие действия при сбоях.