К обычному разбору
Тренировка по собеседованиюТехническое собеседованиеCorsearch / Navi2026-01-30

Corsearch/Navi technical: CV, brand protection и prefix sum задача

Идите сверху вниз: сначала попробуйте сами, затем откройте разбор. Если шаг с кодом, пишите решение прямо здесь и запускайте проверки на странице.

Шагов
7
Вопросов
6
Задач
1
1Вопрос18 мин

CV-пайплайн для поиска разных авто в одном объявлении

Спроектируйте систему, которая по фото и метаданным объявления определяет, что в карточке или истории автомобиля появились разные машины.

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Сегментировать/кропнуть авто, определить тип фото, сравнить сопоставимые изображения embeddings-моделью, агрегировать distances и метаданные в финальный скоринг.

Подробный разбор

Хорошее решение разделяет CV extraction и decision layer. Сначала фильтруются невалидные фото и определяются ракурсы, затем для сопоставимых пар считаются embeddings и cosine distances. Финальный классификатор вроде CatBoost использует агрегаты расстояний вместе с табличными полями объявления.

В production нужны пороги под precision, очередь модерации, мониторинг drift и feedback loop из решений модераторов.

Типичные ошибки

  • Сравнивать все фото без учета ракурса.
  • Полагаться только на embedding threshold.
  • Не калибровать precision под цену false positive.

Как сказать на собеседовании

  • Сначала уточни business action и цену ошибки.
  • Потом переходи к данным, модели, метрикам и эксплуатации.
2Вопрос12 мин

Датасет и hard negatives для visual difference

Как собрать датасет для модели, которая отличает один и тот же автомобиль от визуально похожего другого?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Нужны positives, easy negatives, hard negatives и явная разметка типов отличий; синтетика полезна как bootstrap, но реальные пары критичны.

Подробный разбор

Стартовать можно с истории объявлений, жалоб и эвристик по VIN/карточке, но пары нужно валидировать ассессорами. Hard negatives должны быть визуально близкими: та же модель, поколение и цвет, но другой автомобиль. Разметку лучше делать multi-label: цвет, колеса, кузов, салон, другие детали.

Важно контролировать leakage между train/test по объявлениям и источникам, иначе метрики будут завышены.

Типичные ошибки

  • Считать синтетику полноценной заменой real-world data.
  • Делать слишком легкие negatives.
  • Не размечать тип отличия.

Как сказать на собеседовании

  • Объясни, как будешь улучшать датасет итеративно после ошибок модели.
3Вопрос12 мин

Обучение visual embeddings для сравнения объектов

Какие loss, backbone и augmentations уместны для embeddings-модели, сравнивающей изображения объектов?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Подойдет EfficientNet/MobileNet/ConvNeXt backbone с contrastive/triplet loss, аккуратным pair mining и аугментациями, не меняющими целевой признак.

Подробный разбор

Backbone выбирают по latency/quality tradeoff. Triplet или contrastive loss требуют правильных positives и hard negatives. Аугментации должны сохранять label: crop, brightness, contrast и малые rotations допустимы, но flip может менять семантику. Для color-difference задач color jitter применяют синхронно к обеим картинкам пары или ограничивают.

Оценивать нужно не только embedding distance, но и downstream decision после агрегации по ракурсам.

Типичные ошибки

  • Сделать модель инвариантной к признаку, который надо детектировать.
  • Не майнить hard negatives.
  • Оценивать только accuracy.

Как сказать на собеседовании

  • Проговори invariance vs sensitivity.
  • Отдельно скажи про hard negative mining.
4ЗадачаMedium

Подмассив с заданной суммой

Условие

Реализуйте функцию find_subarray_with_sum(nums, target), которая возвращает любой непустой непрерывный подмассив, сумма которого равна target.

Если такого подмассива нет, верните None.

В массиве могут быть отрицательные числа, поэтому sliding window с двумя указателями в общем случае не подходит. Пустой подмассив не считается ответом, даже если target = 0.

Сигнатура

def find_subarray_with_sum(nums: list[int], target: int) -> list[int] | None:

Пример

find_subarray_with_sum([1, 2, 3, 7, 5], 12) -> [2, 3, 7]

Решение прямо на странице

Напишите код, запустите проверки и только потом открывайте разбор.

Проверка решения

Нажмите «Запустить проверки» или Ctrl+Enter.

Показать разбор

Подсказки

  • Префиксная сумма

    Сумма от j + 1 до i равна prefix[i] - prefix[j].

  • Что хранить в словаре

    Храните первую позицию, где встретилась каждая префиксная сумма.

  • Нулевой индекс

    Добавьте seen = {0: -1}, чтобы корректно находить подмассивы с начала массива.

Идея решения

Подход: используем префиксные суммы. Если текущая префиксная сумма равна prefix, то нужен предыдущий префикс prefix - target. Разница между этими двумя префиксами и есть сумма непрерывного подмассива.

Сохраняем первую позицию каждой префиксной суммы. Инициализация seen = {0: -1} позволяет находить подмассив, который начинается с нулевого индекса.

Почему не два указателя: в массиве могут быть отрицательные числа, поэтому при расширении окна сумма не обязана монотонно расти.

Эталонный код

def find_subarray_with_sum(nums: list[int], target: int) -> list[int] | None:
    seen: dict[int, int] = {0: -1}
    prefix = 0

    for i, value in enumerate(nums):
        prefix += value
        need = prefix - target

        if need in seen:
            start = seen[need] + 1
            if start <= i:
                return nums[start:i + 1]

        if prefix not in seen:
            seen[prefix] = i

    return None
Сложность
Время: O(n). Память: O(n).
Один проход по массиву и словарь первых позиций для каждой префиксной суммы.
5Вопрос12 мин

Метрики для ML-модерации и anti-фрод

Какими offline и product metrics оценивать модель, которая отправляет подозрительные объявления на модерацию?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Offline: precision/recall/PR-AUC по размеченным кейсам; product: снижение жалоб, доля найденных fraud cases, нагрузка на модераторов, false positive rate.

Подробный разбор

В модерации precision часто важнее recall, потому что false positives тратят время или могут вредить легитимным продавцам. Полезны coverage по жалобам, hit rate в очереди модерации, latency и capacity. Online эффект лучше мерить staged rollout или A/B: жалобы, appeals, manual review acceptance rate.

Complaint dataset почти всегда biased, поэтому нужен отдельный audit sample и анализ tail-сегментов.

Типичные ошибки

  • Оптимизировать accuracy на несбалансированном датасете.
  • Игнорировать capacity модераторов.
  • Считать complaint dataset unbiased.

Как сказать на собеседовании

  • Привяжи метрику к действию: auto-reject, manual review или ranking.
6Вопрос18 мин

Фильтрация web search результатов для brand protection

Спроектируйте систему, которая ищет в интернете потенциальные нарушения бренда и фильтрует массу нерелевантных результатов для 1000+ клиентов.

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Комбинировать keyword/image retrieval, дедупликацию, мультимодальный классификатор релевантности, brand/category/logo signals и human review queue.

Подробный разбор

Pipeline начинается со сбора кандидатов из web, marketplaces и social, нормализации и дедупликации. Затем модели оценивают бренд, категорию, наличие логотипа, похожесть продукта, текстовые признаки и риск нарушения. Результат ранжируется под модераторскую очередь и takedown workflow.

Ключевые метрики: precision@review, recall по known infringements, moderator throughput, appeal rate и стоимость обработки.

Типичные ошибки

  • Путать retrieval и финальную классификацию нарушения.
  • Не бороться с дубликатами.
  • Не адаптировать модель под бренд.

Как сказать на собеседовании

  • Сначала candidate generation, затем narrowing/ranking, потом enforcement.
7Вопрос12 мин

Logo detection при ограниченной разметке

Как построить logo detection для множества брендов и вариантов логотипов, если ручная bbox-разметка дорогая?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Нужен гибрид: foundation/grounding модель для bootstrap-разметки, небольшой gold set с bbox, active learning по ошибкам и detector/recognizer с per-brand метриками.

Подробный разбор

При дорогой bbox-разметке не стоит начинать с полной ручной разметки всех брендов. Сначала собираем реальные изображения из целевых источников: marketplace pages, web search, social, жалобы, known infringements. Для каждого бренда заводим taxonomy вариантов логотипа: старые версии, монохром, инверсия, частичные логотипы, упаковка, watermark, похожие символы.

Bootstrap можно сделать через open-vocabulary detector/grounding model или VLM-assisted annotation: модель предлагает bbox и brand label, человек проверяет выборку и спорные случаи. Обязательно нужен небольшой clean gold set, размеченный вручную, чтобы измерять качество авторазметки и не обучаться на систематическом шуме. Дальше обучается detector вроде YOLO/DETR-family или двухэтапная схема detection -> crop classifier/embedding matcher.

Для long-tail брендов полезны synthetic overlays, но только как augmentation: разные масштабы, perspective, blur, compression, occlusion, print на товаре. Синтетика не заменяет реальные фото из-за domain gap. Active learning выбирает изображения с низкой уверенностью, новыми доменами, похожими логотипами и ошибками модераторов. Метрики: mAP/recall по bbox, per-brand/per-variant recall, precision@review, false positives на похожих брендах и latency.

Типичные ошибки

  • Считать synthetic overlays достаточными для продакшн-качества.
  • Не разделять bbox localization, brand classification и final moderation decision.
  • Мерить только aggregate mAP без per-brand и long-tail анализа.

Как сказать на собеседовании

  • Начни с gold set и bootstrap-разметки.
  • Обсуди active learning и hard negatives похожих брендов.
  • Раздели detector, recognizer и human review workflow.