Разработчик стал тим лидом в 22 года и борется с техническим долгом? / Техсобес Middle Python Dev
Разбор мок-собеседования Middle Python-разработчика с архитектурными вопросами и live-coding-задачей о конкурентных денежных переводах. В конце интервьюер даёт подробный субъективный фидбек по ответам и дизайну решения.
Это тестовое мок-собеседование на Middle Python Developer: кандидат рассказывает о текущем проекте, работе с техническим долгом и подходе к интервьюированию. Основная часть посвящена архитектуре сервисов, отказоустойчивости, Python-конкурентности, Linux, сетевым протоколам и оптимизации БД, затем кандидат решает live-coding-задачу о потокобезопасном переводе денег между аккаунтами. В финале интервьюер положительно оценивает ответы кандидата для уровня Middle/Middle+ и советует начинать дизайн с распределения ответственностей между сущностями, а не с немедленной реализации.
Для разговора о техническом долге подготовьте не только определение, но и процесс: фиксировать отдельные проблемы в backlog, планировать их на технических встречах и превращать в конкретные задачи по рефакторингу.
Разделяйте сервисную и микросервисную архитектуру через автономность границ: отдельные бизнес-обязанности, независимые релизы и, где возможно, владение данными; общая БД между сервисами обсуждается как антипаттерн, а переход от монолита — через модульный монолит и Strangler pattern.
Повторите устойчивость сервисов: rate limiting для защиты от чрезмерного трафика, circuit breaker для временного прекращения запросов к деградировавшему сервису, а также метрики доступности вроде SLO/SLA.
Нужно уметь объяснить hexagonal architecture: бизнес-логика не зависит от инфраструктуры; порт — интерфейс, адаптер — его реализация, а Dependency Inversion и Dependency Injection помогают зависеть от абстракций.
При большой доле kernel space в Linux стоит искать интенсивный I/O и системные вызовы; в примере с разбором логов рассматриваются медленный диск, перекрытие чтения и парсинга, а также кэширование уже обработанных строк.
В задаче с денежными переводами важны Decimal вместо float, атомарность операции, защита от race condition, разнесение доменной сущности Account и механизма синхронизации, а также отдельные однопоточный и многопоточный функциональные тесты.
Для роста нагрузки повторите вертикальное и горизонтальное масштабирование, шардирование против репликации, CQRS для разделения чтения и записи, кэширование и различие B-tree- и hash-индексов.