К обычному разбору
Тренировка по собеседованиюТехническое собеседованиеQIC2025-10-01

QIC: Техническое собеседование

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

Шагов
9
Вопросов
5
Задач
4
1SQL-задачаEasy

Просмотры и аудитория видео по дням

Условие

Given a video view event table, return daily view count and daily unique audience size sorted by date.

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

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

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

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

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

Подсказки

  • Два разных счётчика

    Просмотры — это строки таблицы. Аудитория — уникальные пользователи.

  • Зафиксируйте порядок

    В конце добавьте ORDER BY view_date ASC.

Идея решения

Группируем события по дате. COUNT(*) даёт количество сырых событий просмотра, а COUNT(DISTINCT user_id) — размер дневной аудитории. Финальный ORDER BY нужен явно: результат группировки в SQL сам по себе не обязан быть отсортирован.

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

SELECT
  view_date,
  COUNT(*) AS views_count,
  COUNT(DISTINCT user_id) AS audience_size
FROM video_views
GROUP BY view_date
ORDER BY view_date ASC;
Сложность
Время: O(n log n). Память: O(d).
База сканирует события, группирует их по дням и сортирует дневные группы. d — число разных дат.
2SQL-задачаMedium

Пользователи, которые смотрели видео каждый день января

Условие

Return users who watched at least one video on every calendar day in January 2021.

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

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

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

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

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

Подсказки

  • Сначала фильтр по месяцу

    Через WHERE оставьте только события января 2021.

  • Нужны разные даты

    Пользователь может посмотреть несколько видео за день, но это всё равно один календарный день.

Идея решения

Сначала оставляем события нужного месяца, затем группируем по пользователю. Пользователь подходит, если число разных активных дат равно 31. Нужен COUNT(DISTINCT view_date), а не COUNT(*): несколько просмотров в один день всё равно закрывают только один календарный день.

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

SELECT
  user_id
FROM video_views
WHERE view_date >= '2021-01-01'
  AND view_date < '2021-02-01'
GROUP BY user_id
HAVING COUNT(DISTINCT view_date) = 31
ORDER BY user_id ASC;
Сложность
Время: O(n log n). Память: O(u).
Запрос фильтрует события января, группирует их по пользователю и считает разные активные даты. u — число пользователей за месяц.
3SQL-задачаEasy

Пользователи, которые смотрели видео 1, но не смотрели 2 и 3

Условие

Return distinct users who watched video 1 and did not watch videos 2 or 3.

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

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

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

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

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

Подсказки

  • Положительное и отрицательное условие

    Пользователь должен иметь просмотр видео 1 и не должен иметь просмотров видео 2 или 3.

  • DISTINCT

    Пользователь может посмотреть видео 1 несколько раз, но в ответе должен быть один раз.

Идея решения

Удобное решение для собеседования — анти-подзапрос: сначала берём пользователей с видео 1, затем исключаем тех, кто встречается с видео 2 или 3. Решение через группировку и HAVING с условными суммами тоже корректно.

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

SELECT DISTINCT
  user_id
FROM video_views
WHERE video_id = 1
  AND user_id NOT IN (
    SELECT user_id
    FROM video_views
    WHERE video_id IN (2, 3)
  )
ORDER BY user_id ASC;
Сложность
Время: O(n log n). Память: O(u).
База может построить множество исключаемых пользователей и затем вернуть уникальных пользователей, которые подходят под условие.
4ЗадачаMedium

Анализ выручки за май в Pandas

Условие

Given a sales DataFrame with date, price, quantity and category, compute May revenue, the most profitable category and average order value.

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

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

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

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

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

Подсказки

  • Сначала преобразуйте даты

    Перед сравнением дат используйте pd.to_datetime.

  • Выручка считается по строкам

    Сначала посчитайте price * quantity, потом суммируйте или усредняйте.

Идея решения

Преобразуем колонку дат через pd.to_datetime, затем фильтруем май полуинтервалом. Выручку считаем на уровне строки до агрегации. Для топ-категории группируем по категории, суммируем выручку и сортируем по выручке по убыванию, затем по категории по возрастанию, чтобы одинаковые суммы обрабатывались детерминированно.

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

import pandas as pd


def analyze_may_sales(rows: list[dict]) -> dict:
    if not rows:
        return {"may_revenue": 0, "top_category": None, "average_order_value": 0.0}

    df = pd.DataFrame(rows)
    df["date"] = pd.to_datetime(df["date"])
    may = df[(df["date"] >= "2024-05-01") & (df["date"] < "2024-06-01")].copy()

    if may.empty:
        return {"may_revenue": 0, "top_category": None, "average_order_value": 0.0}

    may["revenue"] = may["price"] * may["quantity"]
    category_revenue = (
        may.groupby("category", as_index=False)["revenue"]
        .sum()
        .sort_values(["revenue", "category"], ascending=[False, True])
    )

    return {
        "may_revenue": int(may["revenue"].sum()),
        "top_category": category_revenue.iloc[0]["category"],
        "average_order_value": round(float(may["revenue"].mean()), 2),
    }
Сложность
Время: O(n log c). Память: O(n).
Решение строит DataFrame, фильтрует майские строки и группирует их по категории. c — число категорий.
5Вопрос6 мин

Базовые проверки аномалий в sales DataFrame

Базовые проверки аномалий в sales DataFrame

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

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

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

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

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

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

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

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

Check nulls, invalid dates, negative or implausible prices/quantities, duplicate rows, category spelling issues and distribution outliers.

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

Start with schema and null checks: required columns, date parsing, missing category, missing price or quantity. Then validate numeric ranges: price and quantity should usually be non-negative, quantities should be plausible, and extreme values should be inspected for unit or extra-zero mistakes.

For time and categorical fields, check unexpected dates, duplicate events, inconsistent category names and very rare categories. For a revenue task, also inspect the distribution of row-level price * quantity, because one bad row can dominate the answer.

The point in an interview is not to list every possible test, but to show that you understand the data contract and the business meaning of each column before trusting aggregate metrics.

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

  • Aggregate first and only then look for bad records.
  • Check only nulls and ignore impossible numeric ranges.
  • Treat dates as strings without validating the format.

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

  • Tie every check to a concrete failure mode.
  • Mention both technical validity and business plausibility.
6Вопрос10 мин

Мониторинг drift данных и реакция с переобучением

Мониторинг drift данных и реакция с переобучением

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

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

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

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

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

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

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

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

Data drift is a shift in input or target-related distributions. Monitor feature, prediction and business metrics; react with investigation, retraining, threshold changes or fallback rules.

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

Data drift means the production data no longer follows the same distribution as the data used to train or validate the model. It can be feature drift, label drift, concept drift, seasonality, new user segments or a pipeline bug.

Detection should combine several layers. Track feature distributions, missing rates, categorical cardinalities, prediction-score distributions, calibration, latency and business metrics. If labels arrive later, compare delayed quality metrics against historical baselines. Statistical tests can help, but dashboarded trend changes and alert thresholds are often more actionable.

The response depends on cause and severity. You may retrain on fresh data, refresh calibration or thresholds, fix a broken data pipeline, add monitoring for a new segment, roll back a model or use a simpler fallback while collecting labels.

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

  • Assume scheduled retraining alone solves drift.
  • Monitor only model loss while ignoring feature pipeline changes.
  • React to drift without first checking data quality bugs.

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

  • Separate feature drift, concept drift and pipeline breakage.
  • Mention delayed labels and business metrics.
7Вопрос8 мин

Как обнаруживать overfitting и чем регуляризовать

Как обнаруживать overfitting и чем регуляризовать

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

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

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

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

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

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

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

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

Overfitting shows up as improving train quality with worsening validation quality. Reduce it with more/better data, regularization, dropout, augmentation, early stopping, simpler models and ensembles.

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

The canonical symptom is a growing gap between train and validation metrics: train loss keeps improving while validation loss or business metric gets worse. You also look at cross-validation variance, segment-level metrics and whether performance collapses on newer or shifted data.

Mitigations are data-side and model-side. Data-side: collect more representative data, clean labels, add augmentation or synthetic data when valid, and use a better validation split. Model-side: L1/L2 regularization, dropout, early stopping, reducing model capacity, pruning features, ensembling and calibration.

For neural networks, dropout, weight decay, augmentation and early stopping are common. For tabular/classical models, constraints such as tree depth, minimum leaf size, regularized linear models and robust validation are often more important.

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

  • Only compare train accuracy and test accuracy once.
  • Add a larger model when validation quality is already falling.
  • Use a random split when the real production split is temporal or segment-based.

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

  • Say how you would notice overfitting from curves.
  • Match mitigation to data type and model class.
8Кейс10 мин

Что делать, если продукт хочет модель, а данных нет

Что делать, если продукт хочет модель, а данных нет

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

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

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

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

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

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

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

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

Clarify the business decision, build a baseline or pretrained-model prototype, estimate value, design labeling or weak supervision, and avoid committing to a heavy model before data proves it is useful.

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

First clarify what decision the model should improve, what metric matters and how much error the business can tolerate. Often the first deliverable should be a baseline, rules, analytics or a pretrained-model prototype rather than a full custom model.

If the domain has usable pretrained models, test them on a small real sample. If labels are missing, design a labeling loop: human annotation, product events as proxy labels, weak supervision, active learning or LLM/VLM-assisted pre-labeling with human review. At the same time, estimate the value of collecting the data and the time needed to know whether the idea works.

The important senior answer is to control investment. Sometimes the right answer is to not build ML yet, because a dashboard, heuristic or product change gives faster business value while data collection ramps up.

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

  • Promise a custom model before labels and success criteria exist.
  • Ignore non-ML baselines.
  • Collect data without knowing whether it can change a business decision.

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

  • Talk about the labeling plan and first baseline.
  • Explicitly mention when you would stop the project.
9Вопрос10 мин

Ответственность за полный цикл деплоя модели

Ответственность за полный цикл деплоя модели

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

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

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

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

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

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

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

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

The path includes packaging the model, serving API, config, containerization, CI/CD rollout, monitoring, alerts, rollback and collaboration with platform or DevOps when needed.

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

A full-cycle ML engineer should be able to turn an offline model into a service or batch job that production systems can call. That includes serializing or converting the model, defining input/output schemas, writing the inference code, adding validation, packaging the service, and preparing deployment config.

Production readiness also includes monitoring and operations: latency, error rate, input validation, feature drift, prediction distribution, business metric hooks, logs, alerts and rollback plan. Deployment mechanics can be Kubernetes, CI/CD, canary, rolling release, staging/prod environments or a platform-specific one-command flow.

The best answer also distinguishes ownership from solo heroics. ML engineers can own the model-serving contract and quality, while relying on platform or DevOps for cluster-level incidents or infra primitives.

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

  • Stop the story at model.fit or offline metrics.
  • Forget input schema, monitoring and rollback.
  • Assume DevOps owns every production concern.

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

  • Name the concrete artifacts you ship.
  • Mention how you validate the release after deployment.