сеньорчикОткрыть в Telegram
← все компаниивопросы для собеседований · Сбер

Вопросы на собеседовании в Сбере

Сбер собеседует очень по-разному в разных командах, но общий вектор виден: в нашем срезе тем у Сбера с большим отрывом лидируют LLM и классический ML — GigaChat-направление тянет спрос на людей, разбирающихся в трансформерах и дообучении. Ниже — вопросы этого формата с разбором.

47 вопросов с тегом «Сбер»·ниже разбор 9
срез тем:#llm ×13#classic_ml ×8#ml_system_design ×5#classic_nlp ×4#deep_learning ×3#ml_metrics ×3#sql ×3#algorithms ×2
  1. #algorithms1 / 9

    Бинарный поиск часто пишут с багом. Что ломается чаще всего?

    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). Логика проста, но крайние случаи коварны — поэтому просят написать на доске.

  2. #algorithms2 / 9

    Нужна структура «стек с O(1) на получение минимума в любой момент» (min-stack). Как?

    A)Никак: получить минимум в стеке сложно быстрее, чем полным обходом за O(n) по всему текущему содержимому структуры данных стека
    B)Держать вспомогательный стек минимумов: с каждым push кладём и текущий минимум
    C)Отсортировать стек после каждого push
    D)Использовать кучу вместо стека
    показать ответ и разбор
    +B)Держать вспомогательный стек минимумов: с каждым push кладём и текущий минимум

    // разбор: Параллельно с основным стеком ведём стек минимумов: при push кладём в него min(новый элемент, текущий минимум), при pop снимаем с обоих. Вершина стека минимумов всегда равна минимуму всего стека — getMin() за O(1). Плата — O(n) дополнительной памяти. Куча дала бы O(log n), но сломала бы LIFO-порядок.

  3. #algorithms_advanced3 / 9

    Наивная рекурсия 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) времени. Это не про типы чисел.

  4. #classic_ml4 / 9

    Логистическая регрессия обучена на несбалансированных данных (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) на нересемплированной валидации. Если нужен только рэнкинг — можно не калибровать.

  5. #classic_ml5 / 9

    Вы валидируете модель кросс-валидацией, предварительно отобрав топ-100 признаков по корреляции с таргетом на всех данных. В чём ошибка?

    A)Ошибки нет: отбор признаков не влияет на честность кросс-валидации
    B)Утечка: отбор признаков «подсмотрел» валидационные фолды; отбирать нужно внутри каждого фолда
    C)Ошибка в числе признаков: топ-100 слишком мало, нужен хотя бы топ-1000
    D)Кросс-валидация несовместима с отбором признаков
    показать ответ и разбор
    +B)Утечка: отбор признаков «подсмотрел» валидационные фолды; отбирать нужно внутри каждого фолда

    // разбор: Отбор признаков по всем данным использует информацию будущих валидационных фолдов — оценка качества становится оптимистично смещённой (иногда драматически, особенно при p >> n). Правильно: весь пайплайн (отбор, скейлинг, тюнинг) выполняется внутри каждого фолда, например через sklearn Pipeline.

  6. #classic_ml6 / 9

    Зачем в PCA центрировать (и обычно масштабировать) данные перед разложением?

    A)Центрирование нужно для красивой визуализации биплотов
    B)Без центрирования PCA не завершится за полиномиальное время
    C)PCA по определению работает со стандартизованными данными — иначе разложение ковариационной матрицы не определено
    D)Без центрирования первая компонента тянется к среднему, без масштабирования побеждают признаки с крупными единицами
    показать ответ и разбор
    +D)Без центрирования первая компонента тянется к среднему, без масштабирования побеждают признаки с крупными единицами

    // разбор: PCA ищет направления максимальной дисперсии относительно нуля: несцентрированные данные дают компоненту «в сторону среднего». Признак в миллиметрах «перевесит» признак в километрах чисто по масштабу, поэтому при разнородных единицах стандартизация обязательна (это эквивалент PCA по корреляционной матрице).

  7. #classic_nlp7 / 9

    В 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 метрики.

  8. #classic_nlp8 / 9

    Зачем в TF-IDF домножают частоту слова (TF) на IDF?

    A)Чтобы искусственно удлинить итоговый вектор документа
    B)Чтобы перевести текст в плотный нейросетевой эмбеддинг
    C)Чтобы сделать все слова словаря одинаково равнозначными по весу
    D)Чтобы приглушить частые-везде слова и поднять вес редких-различающих (IDF штрафует слова из многих документов)
    показать ответ и разбор
    +D)Чтобы приглушить частые-везде слова и поднять вес редких-различающих (IDF штрафует слова из многих документов)

    // разбор: TF — как часто слово в документе; IDF = log(N/df) — насколько слово редкое по коллекции. Их произведение поднимает слова, частые в этом документе, но редкие в целом (различающие тему), и приглушает вездесущие (высокий df → низкий IDF). Так TF-IDF выделяет характерные термины. Это по-прежнему разреженный вектор по словарю, просто взвешенный.

  9. #classic_nlp9 / 9

    Почему современные LLM используют subword-токенизацию (BPE/WordPiece), а не слова или символы?

    A)Сабворды якобы заметно повышают точность именно морфологического разбора слов
    B)Слова — OOV/большой словарь, символы — длинно; сабворды компромисс без OOV
    C)Так исторически сложилось из-за ранних ограничений памяти GPU
    D)Символьная токенизация не выходит для нейросетей
    показать ответ и разбор
    +B)Слова — OOV/большой словарь, символы — длинно; сабворды компромисс без OOV

    // разбор: BPE жадно склеивает частые пары: частые слова остаются целыми токенами, редкие разбиваются на осмысленные куски — любое слово представимо, словарь ~30–200k. Практические следствия: арифметика и редкие языки страдают от неудачной сегментации, а «странные» токены (glitch tokens) — источник курьёзных багов LLM.

это девять из 47

Ещё 38 вопросов уровня Сбер — внутри тренажёра.

Они входят в общий банк Сеньорчика: 2899 вопросов по 44 темам. Выбираете роль, тренируетесь ежедневными сессиями, а движок повторения возвращает темы, где вы плывёте, — как раз те, на которых валят секции. Начать можно бесплатно.