Вопросы на собеседовании в Сбере
Сбер собеседует очень по-разному в разных командах, но общий вектор виден: в нашем срезе тем у Сбера с большим отрывом лидируют LLM и классический ML — GigaChat-направление тянет спрос на людей, разбирающихся в трансформерах и дообучении. Ниже — вопросы этого формата с разбором.
Бинарный поиск часто пишут с багом. Что ломается чаще всего?
A)Массив нужно каждый раз заново сортировать внутри цикла поискаB)Границы и условие выхода (l ≤ r vs l < r) и сдвиг mid ± 1 — off-by-one и зацикливаниеC)Log n не получится вычислить на компьютереD)Бинарный поиск не получится реализовать без рекурсиипоказать ответ и разбор
+B)Границы и условие выхода (l ≤ r vs l < r) и сдвиг mid ± 1 — off-by-one и зацикливание// разбор: Типичные баги бинпоиска: неправильное условие цикла (l < r против l ≤ r), забытое +1/−1 при сдвиге границы (уводит в бесконечный цикл или пропускает элемент), вычисление середины как (l+r)/2 с переполнением в языках с фиксированным int (безопаснее l + (r−l)/2). Логика проста, но крайние случаи коварны — поэтому просят написать на доске.
Нужна структура «стек с O(1) на получение минимума в любой момент» (min-stack). Как?
A)Никак: получить минимум в стеке сложно быстрее, чем полным обходом за O(n) по всему текущему содержимому структуры данных стекаB)Держать вспомогательный стек минимумов: с каждым push кладём и текущий минимумC)Отсортировать стек после каждого pushD)Использовать кучу вместо стекапоказать ответ и разбор
+B)Держать вспомогательный стек минимумов: с каждым push кладём и текущий минимум// разбор: Параллельно с основным стеком ведём стек минимумов: при push кладём в него min(новый элемент, текущий минимум), при pop снимаем с обоих. Вершина стека минимумов всегда равна минимуму всего стека — getMin() за O(1). Плата — O(n) дополнительной памяти. Куча дала бы O(log n), но сломала бы LIFO-порядок.
Наивная рекурсия fib(n)=fib(n−1)+fib(n−2) работает за экспоненту. Почему и как чинят?
A)Из-за переполнения целочисленного типа на больших n; чинят переходом на числа с плавающей точкойB)Одни и те же подзадачи считаются многократно; чинят мемоизацией/DP, сводя к O(n)C)Рекурсия экспоненциальна, починить не получитсяD)Из-за медленного сложения; чинят битовыми сдвигамипоказать ответ и разбор
+B)Одни и те же подзадачи считаются многократно; чинят мемоизацией/DP, сводя к O(n)// разбор: Дерево вызовов наивного fib ветвится дважды на каждом узле и пересчитывает fib(k) экспоненциальное число раз — O(φⁿ). Перекрывающиеся подзадачи — сигнал к динамическому программированию: мемоизация (кэш, top-down) или таблица снизу вверх делают каждую fib(k) один раз → O(n) времени. Это не про типы чисел.
Логистическая регрессия обучена на несбалансированных данных (1% позитивов) с downsampling негативов до 50/50. Что нужно сделать с предсказанными вероятностями в проде?
A)Ничего: сигмоида сохраняет калибровку вероятностей автоматическиB)Применить softmax вместо сигмоиды на инференсеC)Скорректировать intercept (prior correction) или откалибровать под истинную долю классовD)Домножить все вероятности на 0.01 — по реальной доле позитивовпоказать ответ и разбор
+C)Скорректировать intercept (prior correction) или откалибровать под истинную долю классов// разбор: Downsampling меняет априорную долю классов, и сигмоидные «вероятности» отражают выдуманный мир 50/50: для реального 1% они сильно завышены. Для логрега достаточно скорректировать intercept на log(отношения долей) либо откалибровать (Platt/isotonic) на нересемплированной валидации. Если нужен только рэнкинг — можно не калибровать.
Вы валидируете модель кросс-валидацией, предварительно отобрав топ-100 признаков по корреляции с таргетом на всех данных. В чём ошибка?
A)Ошибки нет: отбор признаков не влияет на честность кросс-валидацииB)Утечка: отбор признаков «подсмотрел» валидационные фолды; отбирать нужно внутри каждого фолдаC)Ошибка в числе признаков: топ-100 слишком мало, нужен хотя бы топ-1000D)Кросс-валидация несовместима с отбором признаковпоказать ответ и разбор
+B)Утечка: отбор признаков «подсмотрел» валидационные фолды; отбирать нужно внутри каждого фолда// разбор: Отбор признаков по всем данным использует информацию будущих валидационных фолдов — оценка качества становится оптимистично смещённой (иногда драматически, особенно при p >> n). Правильно: весь пайплайн (отбор, скейлинг, тюнинг) выполняется внутри каждого фолда, например через sklearn Pipeline.
Зачем в PCA центрировать (и обычно масштабировать) данные перед разложением?
A)Центрирование нужно для красивой визуализации биплотовB)Без центрирования PCA не завершится за полиномиальное времяC)PCA по определению работает со стандартизованными данными — иначе разложение ковариационной матрицы не определеноD)Без центрирования первая компонента тянется к среднему, без масштабирования побеждают признаки с крупными единицамипоказать ответ и разбор
+D)Без центрирования первая компонента тянется к среднему, без масштабирования побеждают признаки с крупными единицами// разбор: PCA ищет направления максимальной дисперсии относительно нуля: несцентрированные данные дают компоненту «в сторону среднего». Признак в миллиметрах «перевесит» признак в километрах чисто по масштабу, поэтому при разнородных единицах стандартизация обязательна (это эквивалент PCA по корреляционной матрице).
В NER 95% токенов — класс «O» (не сущность). Почему accuracy обманчива и что смотреть?
A)Метрика accuracy здесь идеальна и достаточна, ведь её значение выходит очень высоким на этих данных, и потому честно отражает реальное качество разметкиB)Смотреть нужно на долю мажоритарного класса O среди всех токеновC)Тривиальный «всё O» даёт 95% accuracy; надо мерить precision/recall/F1 по классам сущностей, часто на уровне спановD)Задачу NER следует заменить на обычную регрессиюпоказать ответ и разбор
+C)Тривиальный «всё O» даёт 95% accuracy; надо мерить precision/recall/F1 по классам сущностей, часто на уровне спанов// разбор: При сильном дисбалансе accuracy доминируется мажоритарным классом: предсказать «O» для всего даёт 95%, не найдя ни одной сущности. Информативны precision/recall/F1 по классам сущностей, причём в NER корректнее считать на уровне спанов (сущность верна, только если совпали и границы, и тип), а не токенов. Аналогично в любой несбалансированной классификации смотрят per-class метрики.
Зачем в TF-IDF домножают частоту слова (TF) на IDF?
A)Чтобы искусственно удлинить итоговый вектор документаB)Чтобы перевести текст в плотный нейросетевой эмбеддингC)Чтобы сделать все слова словаря одинаково равнозначными по весуD)Чтобы приглушить частые-везде слова и поднять вес редких-различающих (IDF штрафует слова из многих документов)показать ответ и разбор
+D)Чтобы приглушить частые-везде слова и поднять вес редких-различающих (IDF штрафует слова из многих документов)// разбор: TF — как часто слово в документе; IDF = log(N/df) — насколько слово редкое по коллекции. Их произведение поднимает слова, частые в этом документе, но редкие в целом (различающие тему), и приглушает вездесущие (высокий df → низкий IDF). Так TF-IDF выделяет характерные термины. Это по-прежнему разреженный вектор по словарю, просто взвешенный.
Почему современные LLM используют subword-токенизацию (BPE/WordPiece), а не слова или символы?
A)Сабворды якобы заметно повышают точность именно морфологического разбора словB)Слова — OOV/большой словарь, символы — длинно; сабворды компромисс без OOVC)Так исторически сложилось из-за ранних ограничений памяти GPUD)Символьная токенизация не выходит для нейросетейпоказать ответ и разбор
+B)Слова — OOV/большой словарь, символы — длинно; сабворды компромисс без OOV// разбор: BPE жадно склеивает частые пары: частые слова остаются целыми токенами, редкие разбиваются на осмысленные куски — любое слово представимо, словарь ~30–200k. Практические следствия: арифметика и редкие языки страдают от неудачной сегментации, а «странные» токены (glitch tokens) — источник курьёзных багов LLM.
это девять из 47
Ещё 38 вопросов уровня Сбер — внутри тренажёра.
Они входят в общий банк Сеньорчика: 2899 вопросов по 44 темам. Выбираете роль, тренируетесь ежедневными сессиями, а движок повторения возвращает темы, где вы плывёте, — как раз те, на которых валят секции. Начать можно бесплатно.