PostgreSQL

PostgreSQL на FAANG интервью

Предложение в Stripe или Cloudflare. Последний раунд - system design с PostgreSQL. За 45 минут нужно объяснить MVCC, спроектировать схему и обсудить масштабирование. Финальная проверка готовности.

  • Stripe задаёт вопрос о MVCC и XID wraparound как стандартный фильтр для senior backend позиций
  • Cloudflare на интервью просит спроектировать схему для DNS-логов с 10M+ записей/секунду на PostgreSQL
  • Notion публично описал, как schema design интервью помогает оценивать опыт работы с high-scale PostgreSQL

Типовые вопросы на интервью

PostgreSQL-интервью в FAANG и крупных tech-компаниях состоят из нескольких уровней: базовые концепции (ACID, MVCC, индексы), scenario-based вопросы (как спроектировать X), и deep-dive в internals (как работает VACUUM, что такое WAL). Ответ 'использовать индекс' без понимания когда и почему - красный флаг.

Вопрос о транзакционной изоляции - обязательный пункт. Нужно уметь объяснить все 4 уровня (Read Uncommitted, Read Committed, Repeatable Read, Serializable) и какие аномалии они допускают. PostgreSQL по умолчанию: Read Committed. Read Uncommitted в PostgreSQL реализован как Read Committed (грязное чтение не поддерживается).

На интервью часто спрашивают разницу между optimistic и pessimistic locking. Pessimistic: SELECT FOR UPDATE (немедленная блокировка строки). Optimistic: версионирование на уровне приложения (проверить version перед UPDATE). PostgreSQL поддерживает оба подхода.

Interviewer: 'Как MVCC позволяет читателям не блокировать писателей?'

Schema Design на интервью

Schema design - самый частый тип задач на senior+ интервью. Задача: спроектировать схему для Twitter, Uber, или системы уведомлений. Оцениваются: нормализация vs денормализация, выбор типов данных, индексная стратегия, и trade-off обсуждения.

Нормализация vs денормализация: нормализация устраняет аномалии, но требует JOIN. При 1M+ QPS один лишний JOIN может стоить 50ms latency. Денормализация (дублирование данных) ускоряет чтение ценой усложнения записи. Instagram денормализовал счётчики followers в таблицу users - один SELECT вместо COUNT.

На schema design интервью всегда обсуждать масштаб явно: 'Если 1M QPS на чтение и 10K на запись, я выберу денормализацию счётчиков. Если write-heavy - нормализацию'. Показывать trade-off мышление важнее правильного ответа.

Задача: таблица likes с 10 млрд строк. Самый частый запрос - COUNT(*) по post_id. Лучшее решение?

Query Optimization: EXPLAIN и index strategy

Query optimization на интервью - демонстрация умения читать EXPLAIN ANALYZE и принимать решения об индексах. Интервьюер даёт медленный запрос и просит: 'Что не так? Как ускорить?'. Правильный алгоритм: EXPLAIN ANALYZE → найти bottleneck → предложить решение → оценить trade-off.

Типы индексов и когда их использовать: B-tree (по умолчанию, equality + range), GiST (геометрия, full-text, exclusion constraints), GIN (массивы, jsonb, full-text - много значений), Hash (только equality, быстрее B-tree для hash joins), BRIN (огромные таблицы с физической сортировкой, min/max per block).

Covering index (INCLUDE) - частый вопрос на senior интервью. Index Only Scan возможен только когда все нужные поля есть в индексе. INCLUDE добавляет поля в leaf nodes без влияния на ключ сортировки.

Для поиска по JSONB полю attributes @> '{"color": "red"}' какой тип индекса нужен?

Вопросы о внутренностях PostgreSQL

Вопросы об internals PostgreSQL отделяют senior от principal engineer. Интервьюер хочет понять: понимает ли кандидат как работает система, или только умеет пользоваться. Ключевые темы: heap файлы, page structure, checkpoint, WAL, vacuum internals, MVCC visibility.

Вопрос о XID wraparound - показатель глубокого понимания. Transaction IDs в PostgreSQL - 32-bit числа (4 млрд значений). При wraparound старые транзакции становятся 'будущими' и их данные исчезают. Autovacuum VACUUM FREEZE предотвращает это, заменяя старые XID на FrozenTransactionId. Мониторинг: age(datfrozenxid) должен быть < 1.5 млрд.

Почему UPDATE в PostgreSQL не перезаписывает строку на месте?

Mock interview: торговая система

Финальный раздел - практический mock interview. Задача: спроектировать схему PostgreSQL для торговой платформы с 50K транзакций/секунду, ACID-требованиями и аналитикой за последние 90 дней.

Типичные follow-up вопросы интервьюера: 'Как масштабировать на 500K TPS?' (ответ: connection pooling, read replicas для аналитики, шардирование по account_id). 'Как обеспечить идемпотентность переводов?' (ответ: idempotency_key UUID с UNIQUE constraint, повторный запрос вернёт существующий результат). 'Как быстро получить баланс за период?' (ответ: отдельная ledger таблица + running balance или materialized view).

Ключевые показатели успеха на PostgreSQL-интервью: умение обсуждать trade-offs (не 'лучший ответ', а взвешенные альтернативы), знание EXPLAIN ANALYZE, понимание MVCC и WAL, навык проектирования для масштаба с учётом реальных ограничений.

На интервью нужно давать один правильный ответ без обсуждения альтернатив

Сильные кандидаты обсуждают trade-offs: 'Можно сделать X, это даст Y, но ценой Z. Альтернатива - A, лучше при условии B'. Интервьюер оценивает мышление, не зубрёжку.

В реальных системах нет единственно правильного решения. UUID vs bigint, нормализация vs денормализация, partitioning vs sharding - каждый выбор зависит от контекста нагрузки. Кандидат, дающий один ответ без обсуждения контекста, вызывает сомнения в production-опыте.

Как обеспечить идемпотентность финансового перевода при retry-логике клиента?

PostgreSQL на интервью

  • MVCC: xmin/xmax на каждой строке, читатели видят snapshot, не блокируют писателей
  • Schema design: обсуждать trade-offs (UUID vs bigint, нормализация vs денормализация, индексная стратегия)
  • Query optimization: EXPLAIN ANALYZE → найти bottleneck → partial/composite/covering index
  • Internals: UPDATE создаёт новый tuple (HOT optimization), checkpoint flush dirty pages, XID wraparound = freeze
  • Mock interview: idempotency key, optimistic locking через version, partitioning для аналитики

Связанные темы

Интервью проверяет знание всего курса PostgreSQL

  • Troubleshooting — Диагностика production проблем - ключевой навык, проверяемый на senior интервью
  • Мониторинг — Знание pg_stat_* views - базовое требование для senior PostgreSQL позиций
  • PostgreSQL на масштабе — Примеры Instagram, Stripe, Notion помогают обосновывать архитектурные решения на интервью

Вопросы для размышления

  • Как объяснить MVCC не-техническому интервьюеру за 2 минуты, не теряя точности?
  • Какие trade-offs между UUID и bigint primary key наиболее важны при проектировании high-write системы?
  • Как XID wraparound связан с autovacuum и почему его нельзя просто отключить?

Связанные уроки

  • db-05-sql-basics
PostgreSQL на FAANG интервью

0

1

Войти