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

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

Ozon спрашивает прикладное: ML system design вокруг маркетплейса (ранжирование, прогноз спроса, логистика), SQL, классический ML и метрики. Ниже — вопросы такого же формата из банка Сеньорчика, с вариантами и разбором, что за каждым проверяют.

44 вопросов с тегом «Ozon»·ниже разбор 9
срез тем:#sql ×6#classic_ml ×5#llm ×5#ml_system_design ×5#algorithms ×4#classic_nlp ×4#statistics ×4#product_analytics ×3
  1. #ab_testing1 / 9

    Фича «зашла» в A/B: +2% к кликам за две недели. Через месяц после раскатки метрика вернулась к базовой. Какое объяснение наиболее вероятно?

    A)A/B-тесты не работают, и им вообще не получится доверять как методу оценки
    B)Метрика просто технически сломалась в момент полной раскатки фичи
    C)Конкуренты быстро скопировали фичу, и преимущество исчезло само
    D)Novelty effect: аплифт от новизны затух; тест поймал пик
    показать ответ и разбор
    +D)Novelty effect: аплифт от новизны затух; тест поймал пик

    // разбор: Новое привлекает клики само по себе (и наоборот: primacy effect — полезную фичу сначала не понимают). Смотреть тренд эффекта внутри теста: затухание к концу — тревожный знак; для важных решений держат долгий holdout (5–10% без фичи) и меряют устойчивый эффект. Короткие тесты систематически переоценивают кликовые метрики.

  2. #algorithms2 / 9

    Приём «скользящее окно» (sliding window) уместнее всего для задачи:

    A)найти максимальную сумму подряд идущих k элементов, не пересчитывая окно с нуля каждый раз
    B)Отсортировать массив по возрастанию
    C)Найти НОД двух чисел
    D)Проверить, читается ли строка одинаково слева направо и справа налево целиком
    показать ответ и разбор
    +A)найти максимальную сумму подряд идущих k элементов, не пересчитывая окно с нуля каждый раз

    // разбор: Sliding window держит агрегат по окну и при сдвиге обновляет его инкрементально: вычел ушедший элемент, добавил пришедший — O(1) на шаг, весь проход O(n). Наивный пересчёт суммы каждого окна — O(n·k). Приём работает для «подряд идущих» подотрезков/подстрок с монотонным условием.

  3. #algorithms3 / 9

    Что означает «амортизированная сложность O(1)» на примере append в динамическом массиве (list)?

    A)Каждый отдельный append за одну операцию — дорогих вызовов встречается редко
    B)В среднем O(1) на элемент: редкие расширения размазаны по дешёвым вставкам
    C)Append за O(1) если заранее известен финальный размер массива
    D)Это маркетинговый термин: на самом деле каждый append честно стоит O(n) если честно считать каждую отдельную операцию append
    показать ответ и разбор
    +B)В среднем O(1) на элемент: редкие расширения размазаны по дешёвым вставкам

    // разбор: Динамический массив при заполнении удваивает ёмкость: копирование O(n) случается редко, а между удвоениями append дёшев. Сумма затрат на m вставок — O(m), значит в среднем O(1) на элемент — это и есть амортизированная оценка. Отдельный append в момент расширения всё же O(n); гарантии на каждый вызов нет.

  4. #algorithms4 / 9

    Что значит, что сортировка «стабильная» (stable)?

    A)Элементы с равными ключами сохраняют исходный взаимный порядок
    B)Она не падает с ошибкой и завершается на входных данных независимо от их исходного порядка и содержимого ключей
    C)Она работает за одно и то же время
    D)Она не использует дополнительную память
    показать ответ и разбор
    +A)Элементы с равными ключами сохраняют исходный взаимный порядок

    // разбор: Стабильная сортировка при равных ключах не меняет относительный порядок таких элементов. Это критично при многоуровневой сортировке: сначала по одному полю, потом стабильно по второму — первый порядок сохранится внутри групп. Timsort (Python sorted) и merge sort стабильны; быстрая сортировка в общем виде — нет.

  5. #algorithms5 / 9

    Нужна структура FIFO с O(1) на добавление в конец и удаление из начала. Что взять в Python?

    A)Обычный list, добавляя через append в конец и удаляя через pop(0) из начала списка
    B)Set
    C)Обычный dict
    D)collections.deque с append и popleft — оба конца за O(1)
    показать ответ и разбор
    +D)collections.deque с append и popleft — оба конца за O(1)

    // разбор: deque (double-ended queue) реализован так, что операции с обоих концов — O(1). list для FIFO плох: pop(0) сдвигает все элементы (O(n)). deque — правильный выбор для очередей, BFS, скользящих окон. Если нужен обмен между потоками — queue.Queue поверх той же идеи.

  6. #bi_viz6 / 9

    Почему для сравнения значений по категориям bar chart обычно лучше pie?

    A)Круговая диаграмма якобы заметно быстрее рендерится в BI-инструментах на больших данных
    B)Bar chart не способен отображать доли и проценты
    C)Глаз точнее сравнивает длины столбцов, чем углы секторов
    D)Pie chart не получится раскрасить, а bar chart можно раскрашивать
    показать ответ и разбор
    +C)Глаз точнее сравнивает длины столбцов, чем углы секторов

    // разбор: Восприятие: человек точно оценивает длину вдоль общей оси и плохо — угол и площадь сектора. Поэтому близкие доли на pie почти неразличимы, а на bar видны сразу. Для долей одного целого при этом честнее 100%-stacked bar, чем набор отдельных pie-диаграмм.

  7. #business_metrics7 / 9

    Что такое cart abandonment rate и почему он важен для e-commerce?

    A)Это доля вообще всех товаров на складе магазина, которые ни разу не добавлялись ни в одну корзину
    B)Средняя суммарная стоимость всех товаров, одновременно лежащих в корзине одного покупателя
    C)Доля покупателей, вернувших уже оплаченный и доставленный товар обратно в магазин
    D)Доля корзин, не дошедших до оплаты; аудитория с намерением купить и высоким потенциалом возврата
    показать ответ и разбор
    +D)Доля корзин, не дошедших до оплаты; аудитория с намерением купить и высоким потенциалом возврата

    // разбор: Cart abandonment rate = 1 − оплаченные корзины / созданные корзины. Эти пользователи уже проявили намерение купить, поэтому дешевле «дожать» их (напоминания, упрощение оплаты, прозрачная доставка), чем привлекать новых. Частые причины — неожиданная стоимость доставки, обязательная регистрация, сложный чекаут. Метрика прямо указывает на утечки в самом низу воронки.

  8. #classic_ml8 / 9

    Для категориального признака с 10 000 уникальных значений (id города) в градиентном бустинге чаще всего вредно делать one-hot encoding. Почему?

    A)One-hot искажает распределение таргета в редких категориях, и бустинг систематически переобучается именно на этих колонках
    B)Бустинг не принимает больше нескольких тысяч признаков на вход
    C)One-hot по построению работает с линейными моделями
    D)Получатся тысячи разреженных колонок: сплиты по одной категории почти без прироста информации, память и время растут
    показать ответ и разбор
    +D)Получатся тысячи разреженных колонок: сплиты по одной категории почти без прироста информации, память и время растут

    // разбор: Дерево делит по одному признаку за раз; тысячи почти всегда нулевых колонок дают сплиты по одной категории с крошечным приростом информации. Для высококардинальных категорий рабочие варианты — target/mean encoding с регуляризацией против утечки, счётчики частот или нативная поддержка категорий (CatBoost, LightGBM).

  9. #classic_ml9 / 9

    Нужно предсказывать 90-й перцентиль времени доставки, а не среднее. Что менять в линейной модели?

    A)Лосс: квантильная регрессия с pinball loss при τ = 0.9 вместо MSE
    B)Ничего: предсказанное среднее просто домножается на 1.28 сигмы
    C)Таргет: обучаться на топ-10% самых долгих доставок
    D)Регуляризацию: сильный L1 сдвинет предсказания вверх к хвосту
    показать ответ и разбор
    +A)Лосс: квантильная регрессия с pinball loss при τ = 0.9 вместо MSE

    // разбор: MSE оптимизирует условное среднее. Pinball loss асимметричен: при τ = 0.9 недооценка штрафуется в 9 раз сильнее переоценки — оптимум ровно на 90-м перцентиле условного распределения. Пересчёт через «среднее + 1.28σ» верен только для гауссовых остатков с постоянной дисперсией, чего в доставке не бывает.

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

Ещё 35 вопросов уровня Ozon — внутри тренажёра.

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