Learning Platform
Глоссарий Troubleshooting
Урок 19.04 · 22 мин
Начальный
interviewsql-interviewsystem-designbehavioraljunior-de

Структура собеседования Junior DE

Типичное собеседование Junior DE — это 3-5 этапов, общим объёмом 4-8 часов:

  1. Скрининг рекрутера (30 мин) — общие вопросы, мотивация, английский.
  2. Технический скрининг (1 час) — SQL + Python live coding, могут быть basic concepts.
  3. Глубокое техническое (1-2 часа) — SQL deep, Python deep, иногда system design easy.
  4. System design (1 час) — если задано — спроектировать pipeline для X.
  5. Hiring manager (30-60 мин) — мотивация, культурное соответствие, вопросы про проекты.
  6. Иногда behavioral / values (30-60 мин) — про прошлый опыт, конфликты, обучение.

Не все компании имеют все этапы. В стартапах могут быть 2 этапа, в Big Tech — 5+.

Блок 1: SQL

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

Что спрашивают:

Базовое — обязательно

  • JOIN типы (INNER/LEFT/RIGHT/FULL OUTER/CROSS), когда какой.
  • GROUP BY + aggregation.
  • WHERE vs HAVING.
  • Subqueries: scalar, correlated, EXISTS.

Middle — почти всегда

  • Window functions: ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM/AVG OVER.
  • CTE (Common Table Expressions) — single и multi-level.
  • Self-join.
  • Set operations: UNION ALL vs UNION, INTERSECT, EXCEPT.

Advanced — встречаются

  • Recursive CTE.
  • Pivot / unpivot.
  • DATE arithmetic, intervals.
  • NULL handling (IS NULL, COALESCE, NULLIF).
  • Performance: EXPLAIN, индексы, partition pruning.

Типичные задачи

Задача 1: Топ-N по группе.

Найди top-3 заказа по сумме для каждого customer.

WITH ranked AS (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY amount DESC) AS rn
  FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;

Задача 2: Подсчёт сессий.

Группируй log-события в сессии: новая сессия, если разрыв более 30 минут.

WITH gaps AS (
  SELECT user_id, event_time,
    CASE WHEN event_time - LAG(event_time) OVER (PARTITION BY user_id ORDER BY event_time)
              > INTERVAL '30 minutes' THEN 1 ELSE 0 END AS new_session
  FROM events
),
sessions AS (
  SELECT user_id, event_time,
    SUM(new_session) OVER (PARTITION BY user_id ORDER BY event_time) AS session_id
  FROM gaps
)
SELECT user_id, session_id, MIN(event_time) AS start, MAX(event_time) AS end
FROM sessions GROUP BY user_id, session_id;

Задача 3: Retention / cohort.

Сколько % пользователей зарегистрировавшихся в неделе X вернулись в неделе X+N.

Это сложнее — обычно на финальном раунде.

SQL window functions: задачи TOP-N, running totals, сессии — практика для интервью DE

Где практиковаться

  • StrataScratch — лучшая SQL-практика, реальные company-questions (Netflix, Airbnb).
  • DataLemur — фокус на DE/DA вопросах.
  • LeetCode SQL — базовая практика, free.
  • HackerRank SQL — короткие задачки, хорошо для разминки.

Стратегия: 30 задач разной сложности (10 easy, 15 medium, 5 hard) за месяц. Каждый раз пиши без подсказок сначала.

TIP

Главное в SQL-интервью — думать вслух. Не пиши молча, объясняй каждый шаг: “сначала JOIN такой-то таблицы, потом фильтр, потом aggregation”. Это даёт собеседующему понять твою логику и помочь, если зашёл в тупик.

Блок 2: Python

Python live coding для DE-джуна — обычно средняя сложность. Не Leet-Code Hard.

Что спрашивают:

Базовое

  • Списки, словари, sets — операции, временные сложности.
  • List comprehension.
  • Iterators, generators.
  • File I/O — читать CSV/JSON.
  • Exception handling — try/except.

DE-specific

  • pandas: DataFrame operations, merge, groupby, фильтрация.
  • API call: написать requests.get с retry и error handling.
  • SQL via sqlalchemy или native connector — execute, fetch, transaction.

Типичные задачи

Задача 1: Парсинг JSON.

Дан список dict с записями о заказах. Посчитай total revenue по category.

from collections import defaultdict

orders = [
    {"order_id": 1, "category": "books", "amount": 50},
    {"order_id": 2, "category": "books", "amount": 30},
    {"order_id": 3, "category": "tech", "amount": 200},
]

revenue = defaultdict(float)
for order in orders:
    revenue[order["category"]] += order["amount"]

print(dict(revenue))  # {"books": 80, "tech": 200}

Задача 2: Дедупликация.

Из списка записей оставь только уникальные по event_id, оставляя последнюю по timestamp.

def dedup_keep_latest(records):
    seen = {}
    for r in records:
        eid = r["event_id"]
        if eid not in seen or r["timestamp"] > seen[eid]["timestamp"]:
            seen[eid] = r
    return list(seen.values())

Задача 3: API client с retry.

Напиши функцию fetch_with_retry(url, max_attempts=3), которая retry-ит на 5xx ошибках с exponential backoff.

import time, requests

def fetch_with_retry(url, max_attempts=3):
    for attempt in range(max_attempts):
        try:
            r = requests.get(url, timeout=10)
            if r.status_code >= 500:
                raise requests.HTTPError(f"5xx: {r.status_code}")
            r.raise_for_status()
            return r.json()
        except (requests.ConnectionError, requests.Timeout, requests.HTTPError) as e:
            if attempt == max_attempts - 1:
                raise
            time.sleep(2 ** attempt)

Anti-задачи

Если на джуниора кидают LeetCode Hard про segment trees / dynamic programming — это не junior DE, это, видимо, перепутали с algorithmic интервью. Уточни scope с рекрутером, переноси на нормальный DE-собес.

Блок 3: System Design Easy

Junior level system design в DE — это спроектировать простой pipeline для конкретной задачи.

Типичный вопрос:

Спроектируй pipeline для ежедневной загрузки данных о заказах из REST API партнёра в наш DWH. Что выберешь, как пойдёшь.

Что собеседующий хочет услышать

  1. Уточняющие вопросы. “Какой объём? Сколько заказов в день? Какой SLA? Есть ли late-arriving data? Какой DWH?” Без этого решение неполное.
  2. High-level дизайн. API -> ingester -> staging -> DWH -> transformations -> BI. Нарисовать на доске.
  3. Конкретные tools. “Airflow для оркестрации, Python для extraction, Snowflake для DWH, dbt для transformations.”
  4. Идемпотентность, retry. “Detereministic path по date, MERGE INTO, retry с exponential backoff.”
  5. Observability. “Метрики: freshness, volume, error rate. Алерты в Slack.”
  6. Backfill story. “Можно ли перезалить за прошлую дату? Через Airflow catchup.”

Чего НЕ делать

  • Закидывать buzzwords (Kafka, Spark, Iceberg, Flink) без надобности. Если задача — “1M заказов в день, batch-load”, Kafka — over-engineering.
  • Молчать. Думай вслух.
  • Игнорировать requirements. Спрашивай.

Стратегия подготовки

Возьми 5 типичных задач:

  1. Pipeline ингестии REST API в DWH (daily batch).
  2. Streaming pipeline для clicks-events (real-time).
  3. CDC pipeline из OLTP в OLAP (Debezium / WAL).
  4. Web-analytics aggregation (page views, sessions).
  5. ML feature pipeline (features -> feature store).

Распиши на бумаге архитектуру каждой. Это и есть подготовка к system design.

WARNING

System design — это диалог, не монолог. Собеседующий хочет видеть, как ты думаешь и принимаешь решения. Если просто выдашь “Airflow + Snowflake + dbt” без обоснования — это слабо. Объясняй trade-offs: почему Airflow, а не Dagster; почему Snowflake, а не BigQuery; почему dbt, а не SQL руками.

Блок 4: Behavioral / soft skills

Часто игнорируется, но может завалить даже сильного технически кандидата.

Типичные вопросы:

  • “Расскажи о проекте, которым гордишься.” — Готовь STAR-ответ (Situation, Task, Action, Result).
  • “Расскажи о ситуации, когда ты ошибся / что-то сломал.” — Покажи self-awareness, не сваливай вину.
  • “Как разрешаешь конфликты в команде?” — Готовь реальный пример.
  • “Почему DE? Почему наша компания?” — Не “потому что хорошие зарплаты”.
  • “Какие у тебя слабости?” — Не “я перфекционист”. Реальная слабость + что делаешь, чтобы улучшить.

STAR-метод

Когда отвечаешь на “Расскажи о ситуации”:

  • S — Situation: контекст.
  • T — Task: что нужно было сделать.
  • A — Action: что сделал ты конкретно.
  • R — Result: что получилось, какие выводы.

Не “мы вместе решили проблему”, а “я сделал X, Y, Z” — собеседующий хочет видеть твою роль.

Чего НЕ делать

Антипаттерны на собеседовании:

  1. Зубрить Spark internals или RDD/DataFrame deep — это middle-уровень. Junior такое не спрашивают.
  2. Учить distributed systems глубоко — паксос, consensus, CAP — не junior DE.
  3. Игнорировать SQL в пользу “модных” тем. SQL — 50% собеса.
  4. Перегружать pet-project технологиями — Kafka + Spark + Iceberg в pet-проекте без надобности — фейк, сразу видно.
  5. Не готовить вопросы собеседующему — это сигнал слабого интереса.
  6. Опаздывать или забывать про время-зону для remote interview.

Полезные ресурсы

SQL

  • StrataScratch, DataLemur — практика.
  • “SQL Antipatterns” (Bill Karwin) — короткая книга.
  • “SQL Performance Explained” (Markus Winand) — оптимизация.

Python

  • “Fluent Python” (Luciano Ramalho) — основа.
  • pandas documentation + 10-min tutorial.

System Design

  • “Designing Data-Intensive Applications” (Martin Kleppmann) — bible (читать по главам, не от корки до корки для junior).
  • “Fundamentals of Data Engineering” (Joe Reis & Matt Housley) — современный гайд по DE.

Online

  • Этот курс + deep-dive courses на платформе.
  • DataExpert.io (Zach Wilson) — DE focused tutorials.
  • Seattle Data Guy — YouTube.

Чек-лист за неделю до собеса

  • Pet-project работает локально, README актуален, последние коммиты — недавние.
  • LinkedIn / резюме обновлены.
  • STAR-истории для 3-5 behavioral вопросов написаны.
  • 10 SQL-задач разной сложности решены без подсказок за час.
  • 3-5 system design сценариев распланированы на бумаге.
  • Список технологий компании прочитан — сама компания изучена.
  • 3-5 вопросов к компании / команде подготовлены.
TIP

В день собеседования — не учи нового. Перечитай заметки, сделай 2-3 разминочных SQL-задачи, сделай зарядку. Свежая голова важнее ещё одной выученной темы.

Попробуй сам

  1. На StrataScratch (или DataLemur) сделай 10 задач уровня “easy” и 5 уровня “medium”. Записывай время на каждую. Цель — не идеально, а понять свой baseline.
  2. Возьми задачу из system design (например, “pipeline для tweets analytics”). Распиши архитектуру на бумаге, без кода. 30 минут.
  3. Напиши 3 STAR-истории: про успех, про ошибку, про конфликт. Каждая — на 1-2 минуты разговора.
Проверка знанийKnowledge check
У тебя завтра первый собес на Junior DE. Что приоритизировать в последний день, и чего НЕ делать?
ОтветAnswer
Приоритеты: 1) Перечитать README и архитектуру pet-project — это центр разговора; 2) Решить 2-3 SQL-задачи средней сложности для разминки (windows + CTE); 3) Просмотреть свои STAR-истории, перечитать список технологий компании; 4) Подготовить 3-5 вопросов к компании; 5) Лёгкий отдых, ранний сон. ЧЕГО НЕ делать: учить новые темы (Spark internals, Kafka, deep ML) — паника от незнания, мозг не успеет переварить; зубрить много задач за вечер — переутомление; писать новые куски кода в pet-project в ночь — нестабильно, лучше not break what works. Принцип: накануне — повторение и отдых, не обучение.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. На каком блоке собеседования Junior DE чаще всего проваливаются кандидаты?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5