Data / SQL — техническое интервью

60 минут, PostgreSQL. Джойны, индексы, оконные функции, нормализация, транзакции.

Вопросов
14
Live-coding
2

Разогрев: опыт и контекст

  1. Недавний проект

    ПоведенческийЛёгкий

    Расскажите о недавнем проекте, где вы были ключевым разработчиком. Что делали вы лично?

    Рубрика оценки (0–10)
    3–5: Описывает проект общими словами, свою роль называет расплывчато («участвовал в команде»).
    6–8: Конкретная задача, стек, результат; понятна личная зона ответственности.
    9–10: Контекст бизнеса, trade-offs, метрики успеха; честно говорит, что делали другие.
    Красный флаг: не может назвать ни одного решения, которое принимал сам.
    Подсказки интервьюеру
    Follow-up: что бы сделали иначе? 3–4 минуты.
  2. Мотивация смены

    ПоведенческийЛёгкий

    Почему сейчас рассматриваете новые возможности? Что ищете в следующей роли?

    Рубрика оценки (0–10)
    3–5: «Хочу роста / денег» без конкретики.
    6–8: Понятные критерии (стек, продукт, процессы); не toxic про текущего работодателя.
    9–10: Осознанный fit: что даст компания кандидату и наоборот.
    Красный флаг: только негатив про прошлые команды, обвиняет всех кроме себя.
    Подсказки интервьюеру
    Не давить — достаточно 2–3 минут.
  3. Опыт с SQL

    ПоведенческийЛёгкий

    С какими СУБД работали? Какой объём данных и типичные задачи?

    Рубрика оценки (0–10)
    3–5: «Писал SELECT» без контекста.
    6–8: PostgreSQL/MySQL; миграции; отчёты, ETL, или backend queries.
    9–10: Partitioning, replicas, explain analyze в проде.
    Красный флаг: «ORM пишет SQL за меня, руками не пишу» на data role.
    Подсказки интервьюеру
    2–3 минуты.

Запросы и модель данных

  1. JOIN types

    ТеорияЛёгкий

    Объясните разницу INNER, LEFT и FULL OUTER JOIN на примере orders и customers.

    Рубрика оценки (0–10)
    3–5: «INNER — пересечение» без примеров строк.
    6–8: Venn diagram; NULLs в LEFT; когда теряются строки.
    9–10: Anti-join через NOT EXISTS vs LEFT NULL; performance note.
    Красный флаг: «FULL JOIN — всё всегда».
    Подсказки интервьюеру
    4 минуты.
  2. Нормализация

    ТеорияСредний

    До какой нормальной формы обычно проектируете OLTP-схему и почему?

    Рубрика оценки (0–10)
    3–5: «3NF» без определения.
    6–8: 1NF–3NF на примерах; денормализация для read-heavy.
    9–10: BCNF edge cases; star schema для analytics отдельно.
    Красный флаг: «одна таблица на всё».
    Подсказки интервьюеру
    4 минуты.
  3. Индексы B-tree

    ТеорияСредний

    Когда индекс на (status, created_at) поможет, а когда нет?

    Рубрика оценки (0–10)
    3–5: «Индекс ускоряет».
    6–8: Left-prefix rule; selective predicates; write cost.
    9–10: Partial index; covering index; EXPLAIN ANALYZE читает.
    Красный флаг: index every column.
    Подсказки интервьюеру
    Follow-up: low-cardinality status. 4 мин.
  4. Оконные функции

    ТеорияСредний

    Чем ROW_NUMBER отличается от RANK? Пример задачи, где нужен LAG.

    Рубрика оценки (0–10)
    3–5: «Для группировки» (путает с GROUP BY).
    6–8: PARTITION BY / ORDER BY; RANK ties; LAG для сравнения с прошлым периодом.
    9–10: running total; dedup with ROW_NUMBER; frame clause.
    Красный флаг: subquery там, где достаточно window.
    Подсказки интервьюеру
    5 минут.
  5. EXPLAIN ANALYZE

    ТеорияСложный

    Как читаете план запроса? На что смотрите в первую очередь?

    Рубрика оценки (0–10)
    3–5: «Seq Scan плохо» без контекста.
    6–8: cost, rows, loops; Index Scan vs Bitmap; nested loop size.
    9–10: Buffer hits; mis-estimates; ANALYZE stats.
    Красный флаг: оптимизирует без EXPLAIN.
    Подсказки интервьюеру
    5 минут.

Практика: SQL

  1. Second highest salary

    Задача с кодомСреднийКод

    Напишите запрос: найти вторую по величине зарплату в таблице employees(salary).

    Рубрика оценки (0–10)
    3–5: MAX nested без DISTINCT edge case.
    6–8: DENSE_RANK/RANK или subquery OFFSET; NULL if <2 rows.
    9–10: DISTINCT ON; window + filter; index on salary.
    Красный флаг: LIMIT 1 OFFSET 1 без ORDER BY UNIQUE.
    Подсказки интервьюеру
    10 минут. Run выполняет скрипт целиком в SQLite, схема и данные уже в starter.
    В данных есть дубль зарплаты (200 у двоих) — проверяем, что кандидат
    отличает «вторую по величине зарплату» от «зарплаты второго человека».
  2. Running total

    Задача с кодомСреднийКод

    Для таблицы payments(user_id, amount, paid_at) посчитайте накопительную сумму по каждому user_id по дате.

    Рубрика оценки (0–10)
    3–5: Self-join sum.
    6–8: SUM() OVER (PARTITION BY user_id ORDER BY paid_at).
    9–10: Frame ROWS UNBOUNDED PRECEDING; ties handling.
    Красный флаг: correlated subquery O(n²) as only solution.
    Подсказки интервьюеру
    10 минут. Run выполняет скрипт целиком в SQLite, схема и данные уже в starter.
    У user_id = 1 две оплаты в один день — повод обсудить ties и рамку окна.

Транзакции и надёжность

  1. Изоляция

    ТеорияСложный

    Объясните phantom read и какой уровень изоляции его предотвращает в PostgreSQL.

    Рубрика оценки (0–10)
    3–5: Путает dirty и phantom.
    6–8: RC vs RR vs Serializable; PostgreSQL RR = snapshot.
    9–10: Serializable predicate locks; retry strategy.
    Красный флаг: «READ UNCOMMITTED в Postgres» (не существует как таковой).
    Подсказки интервьюеру
    5 минут.
  2. Deadlocks

    ТеорияСредний

    Как возникает deadlock в БД и как проектировать порядок блокировок?

    Рубрика оценки (0–10)
    3–5: «Два транзакта ждут друг друга».
    6–8: Lock order; короткие транзакции; retry on 40001.
    9–10: Advisory locks; monitoring pg_locks.
    Красный флаг: «deadlock — баг Postgres».
    Подсказки интервьюеру
    4 минуты.

Инженерная культура и вопросы

  1. Как учитесь

    ПоведенческийЛёгкий

    Как поддерживаете актуальность знаний? Что изучали за последние полгода?

    Рубрика оценки (0–10)
    3–5: «По необходимости на работе», без примеров.
    6–8: Конкретные источники (курсы, статьи, pet-project) + применение на практике.
    9–10: Системный подход: что изучил, как проверил, что внедрил.
    Красный флаг: «всё знаю, учиться нечему» на junior/middle.
    Подсказки интервьюеру
    2–3 минуты.
  2. Вопросы к нам

    ПоведенческийЛёгкий

    Какие вопросы у вас к нам про команду, продукт или процессы?

    Рубрика оценки (0–10)
    3–5: «Нет вопросов» или только про отпуск/ЗП.
    6–8: 2–3 содержательных вопроса про продукт, команду, релизы.
    9–10: Вопросы показывают, что изучил компанию; уточняет ожидания от роли.
    Красный флаг: нулевой интерес к продукту на middle+.
    Подсказки интервьюеру
    Оставить 3–5 минут в конце интервью.

Провести интервью по этому шаблону

Зарегистрируйтесь бесплатно: скопируйте шаблон в организацию, назначьте интервью и проведите его в комнате с live-coding.

Начать в FlashTalk