Мощный блог

Инженерная секция: Python, алгоритмы, ML System Design и поведенческое интервью

30 августа 2026 · Собесы

Темы 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-позиции

Как отвечать (это оценивают отдельно от кода):

  1. Проговорить условие и уточнить: могут ли быть дубликаты, отрицательные числа, пустой вход, гарантирована ли сортировка.
  2. Назвать наивное решение и его сложность.
  3. Предложить улучшение и объяснить, за счёт чего.
  4. Написать код.
  5. Прогнать на примере вслух, проверить краевые случаи.
  6. Назвать итоговую сложность по времени и по памяти.

Каноническая задача (её задают в Яндексе почти дословно):

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-специфика). Здесь — общий каркас, который работает на любой задаче.

Восемь шагов — этот каркас можно применять к любой задаче:

  1. Формализация задачи. Какая бизнес-проблема? Что считаем успехом? Какой это тип ML-задачи (классификация, ранжирование, регрессия, генерация)? Каковы ограничения — задержка, стоимость, объём?
  2. Метрики. Бизнес-метрика (то, ради чего всё), офлайн-метрика (то, что оптимизируем), guardrail-метрики (то, что не должно просесть). Явно связать одно с другим.
  3. Данные. Откуда, сколько, как размечать, как обновлять, какие проблемы с качеством, есть ли дисбаланс, есть ли ПДн.
  4. Признаки. Что извлекаем, как считаем офлайн и онлайн, как избежать расхождения между обучением и продом (train/serving skew), нужен ли feature store.
  5. Модель. Начать с простого бейзлайна, потом усложнение. Объяснить компромиссы: качество, скорость, интерпретируемость, стоимость поддержки.
  6. Обучение и валидация. Схема валидации (с учётом времени и групп!), как ловим переобучение, как подбираем гиперпараметры.
  7. Деплой и инференс. Онлайн или батч, требования по задержке, масштабирование, версионирование модели, канареечная раскатка, откат.
  8. Мониторинг. Дрейф данных (PSI, KL-дивергенция между распределениями), деградация качества во времени, техметрики, алерты, переобучение по расписанию или по триггеру.

Важнее всего — начало. Первые минуты — уточняющие вопросы, а не решение. И бейзлайн: «сначала простое правило или логрег, померим, и уже от этого будем плясать». Прыжок сразу в нейросети — типичная ошибка кандидатов.

Типовые задачи: поиск по документам, рекомендательная система, антифрод, предсказание оттока, модерация контента, прогноз ETA, ранжирование ленты, детекция дубликатов объявлений, прогноз спроса.

74. Поведенческая секция и обсуждение опыта

Важность на собеседовании: 7/10 ███████░░░

🔥🔥 Часто. Формально «мягкая» секция, но именно на ней отсеивают за неумение объяснить свою работу. Разбор вашего проекта вглубь — обязательная часть почти любого ML-собеса.

Готовьте 2–3 проекта по схеме:

  • Задача и контекст — какая проблема, почему она важна бизнесу.
  • Метрика — что оптимизировали и почему именно это.
  • Бейзлайн — с чего начали, какой был исходный уровень.
  • Что делали — решения и, главное, почему именно такие.
  • Результат в бизнес-величинах — не «AUC вырос на 0.03», а «доля ручных проверок упала на 30%, это N часов работы операторов в месяц».
  • Что пошло не так — обязательно. Проект без граблей выглядит выдуманным.
  • Что бы сделали иначе — показывает рефлексию.

Частые вопросы: расскажи о самом сложном проекте; о самом жёстком провале; о конфликте с коллегой или заказчиком; о задаче с жёстким дедлайном; какую статью читал последней; как следишь за областью.

Формат STAR — Ситуация, Задача, Действие, Результат. Держит ответ структурным и коротким.

Про честность. Отдельно проверяют, не приписываете ли вы себе чужую работу. Формулировка «я отвечал за поиск и оценку, инфраструктуру делал коллега» звучит гораздо сильнее, чем размытое «мы сделали». И отдельная тема 2026 года: часть компаний прямо спрашивает про политику использования ИИ на интервью — скрытое использование ассистента распознаётся по гладким ответам, которые рассыпаются на первом уточняющем вопросе.


Часть 16 из 17 конспекта для подготовки к собеседованиям на NLP/LLM-разработчика. Остальные части — в разделе «Собесы».

0,0
0 оценок
5★
0
4★
0
3★
0
2★
0
1★
0

Оставить отзыв

Нажмите на звезду для оценки от 1 до 5
Необязательно. Используется только для связи
0/2000

Комментарии

Все С ответами Проверенные Только 4-5★