Темы 71–74: что спрашивают по Python, обязательный минимум алгоритмов, универсальный каркас ML System Design и как рассказывать про свой опыт.
71. Python на собеседовании
Важность на собеседовании: 7/10
███████░░░🔥🔥 Часто. Отдельной секции обычно нет, но вопросы вставляют в кодинг и в ML-секцию. Спрашивают неглубоко, но провал на «что такое GIL» портит впечатление.
| Подтема | Балл |
|---|---|
| GIL и почему многопоточность не ускоряет вычисления | 8/10 |
| Генераторы и ленивые вычисления | 7/10 |
| Векторизация numpy вместо циклов | 7/10 |
| Декораторы | 6/10 |
Изменяемые/неизменяемые типы, is vs == |
6/10 |
| async/await | 6/10 |
GIL (Global Interpreter Lock). В CPython одновременно байт-код исполняет только один поток. Следствие: многопоточность не ускоряет вычисления, но прекрасно работает для ожидания ввода-вывода (сетевые запросы, диск) — там GIL отпускается. Для параллельных вычислений нужен multiprocessing, или библиотеки, которые сами выходят из-под GIL (numpy, torch). Для LLM-приложений это важно практически: сотни параллельных запросов к API — это asyncio или потоки, а не процессы.
Генераторы. yield вместо return. Значения производятся по одному, вся коллекция не материализуется. Обязательны при обработке больших файлов и датасетов.
Векторизация. Операции над массивами numpy делегируются в C. Разница с питоновским циклом — 10–100 раз. Классический вопрос: «перепишите этот цикл без цикла».
# косинусная близость — просят написать довольно часто
import numpy as np
def cosine(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# батчем, для матрицы против вектора
def cosine_batch(M, q):
M = M / np.linalg.norm(M, axis=1, keepdims=True)
q = q / np.linalg.norm(q)
return M @ q
Мелочи, на которых ловят: изменяемый аргумент по умолчанию (def f(x=[]) — список общий для всех вызовов); is сравнивает идентичность объекта, == — значение; поверхностная и глубокая копия; list против tuple; словарь сохраняет порядок вставки начиная с Python 3.7.
Pandas: разница .loc (по меткам) и .iloc (по позициям); merge против join; почему apply по строкам медленный; groupby + агрегации; SettingWithCopyWarning.
72. Алгоритмы: обязательный минимум
Важность на собеседовании: 8/10
████████░░🔥🔥🔥 Критично в РФ. У Яндекса это отдельная секция. Уровень — LeetCode Easy/Medium, экзотика не нужна. Оценивают не только правильность, но и то, как вы рассуждаете вслух и обрабатываете краевые случаи.
Что реально спрашивают:
| Тема | Балл | Типовые задачи |
|---|---|---|
| Хеш-таблицы | 9/10 | Два числа с заданной суммой, частоты, анаграммы, дубликаты |
| Массивы и два указателя | 9/10 | Слияние отсортированных, палиндром, скользящее окно |
| Строки | 8/10 | Разбор, подстроки, сжатие |
| Сортировка и бинарный поиск | 7/10 | Поиск в отсортированном, k-й элемент |
| Хип / очередь с приоритетом | 6/10 | Топ-k элементов |
| Деревья и графы | 5/10 | Обход в глубину/ширину |
| Динамическое программирование | 4/10 | Обычно не спрашивают на ML-позиции |
Как отвечать (это оценивают отдельно от кода):
- Проговорить условие и уточнить: могут ли быть дубликаты, отрицательные числа, пустой вход, гарантирована ли сортировка.
- Назвать наивное решение и его сложность.
- Предложить улучшение и объяснить, за счёт чего.
- Написать код.
- Прогнать на примере вслух, проверить краевые случаи.
- Назвать итоговую сложность по времени и по памяти.
Каноническая задача (её задают в Яндексе почти дословно):
def two_sum(nums, target):
"""Найти индексы двух чисел, дающих в сумме target. O(n) по времени и памяти."""
seen = {} # значение -> индекс
for i, x in enumerate(nums):
if target - x in seen: # дополнение уже встречалось
return [seen[target - x], i]
seen[x] = i
return []
Наивное решение — двойной цикл за O(n²). Хеш-таблица меняет память на скорость: O(n) / O(n).
Секция code review. В части компаний дают готовый код и просят найти ошибки. Типовые закладки в ML-коде: не вызван model.eval() перед валидацией (dropout и batchnorm остаются в режиме обучения); пропущен optimizer.zero_grad() (градиенты накапливаются); нормализация посчитана по всему датасету до сплита (утечка); softmax по неправильной оси; маска внимания применена не к тем размерностям; потеря усредняется без учёта паддинга; shuffle=True у валидационного загрузчика при пошаговой оценке.
73. ML System Design: универсальный каркас
Важность на собеседовании: 9/10
█████████░🔥🔥🔥 Критично. Присутствует в 9 из 10 компаний от middle+. См. также тему 70 (LLM-специфика). Здесь — общий каркас, который работает на любой задаче.
Восемь шагов — этот каркас можно применять к любой задаче:
- Формализация задачи. Какая бизнес-проблема? Что считаем успехом? Какой это тип ML-задачи (классификация, ранжирование, регрессия, генерация)? Каковы ограничения — задержка, стоимость, объём?
- Метрики. Бизнес-метрика (то, ради чего всё), офлайн-метрика (то, что оптимизируем), guardrail-метрики (то, что не должно просесть). Явно связать одно с другим.
- Данные. Откуда, сколько, как размечать, как обновлять, какие проблемы с качеством, есть ли дисбаланс, есть ли ПДн.
- Признаки. Что извлекаем, как считаем офлайн и онлайн, как избежать расхождения между обучением и продом (train/serving skew), нужен ли feature store.
- Модель. Начать с простого бейзлайна, потом усложнение. Объяснить компромиссы: качество, скорость, интерпретируемость, стоимость поддержки.
- Обучение и валидация. Схема валидации (с учётом времени и групп!), как ловим переобучение, как подбираем гиперпараметры.
- Деплой и инференс. Онлайн или батч, требования по задержке, масштабирование, версионирование модели, канареечная раскатка, откат.
- Мониторинг. Дрейф данных (PSI, KL-дивергенция между распределениями), деградация качества во времени, техметрики, алерты, переобучение по расписанию или по триггеру.
Важнее всего — начало. Первые минуты — уточняющие вопросы, а не решение. И бейзлайн: «сначала простое правило или логрег, померим, и уже от этого будем плясать». Прыжок сразу в нейросети — типичная ошибка кандидатов.
Типовые задачи: поиск по документам, рекомендательная система, антифрод, предсказание оттока, модерация контента, прогноз ETA, ранжирование ленты, детекция дубликатов объявлений, прогноз спроса.
74. Поведенческая секция и обсуждение опыта
Важность на собеседовании: 7/10
███████░░░🔥🔥 Часто. Формально «мягкая» секция, но именно на ней отсеивают за неумение объяснить свою работу. Разбор вашего проекта вглубь — обязательная часть почти любого ML-собеса.
Готовьте 2–3 проекта по схеме:
- Задача и контекст — какая проблема, почему она важна бизнесу.
- Метрика — что оптимизировали и почему именно это.
- Бейзлайн — с чего начали, какой был исходный уровень.
- Что делали — решения и, главное, почему именно такие.
- Результат в бизнес-величинах — не «AUC вырос на 0.03», а «доля ручных проверок упала на 30%, это N часов работы операторов в месяц».
- Что пошло не так — обязательно. Проект без граблей выглядит выдуманным.
- Что бы сделали иначе — показывает рефлексию.
Частые вопросы: расскажи о самом сложном проекте; о самом жёстком провале; о конфликте с коллегой или заказчиком; о задаче с жёстким дедлайном; какую статью читал последней; как следишь за областью.
Формат STAR — Ситуация, Задача, Действие, Результат. Держит ответ структурным и коротким.
Про честность. Отдельно проверяют, не приписываете ли вы себе чужую работу. Формулировка «я отвечал за поиск и оценку, инфраструктуру делал коллега» звучит гораздо сильнее, чем размытое «мы сделали». И отдельная тема 2026 года: часть компаний прямо спрашивает про политику использования ИИ на интервью — скрытое использование ассистента распознаётся по гладким ответам, которые рассыпаются на первом уточняющем вопросе.
Часть 16 из 17 конспекта для подготовки к собеседованиям на NLP/LLM-разработчика. Остальные части — в разделе «Собесы».
Оставить отзыв
Комментарии
Загрузка комментариев...
★ Оставить отзыв