Job 2026 md

title: Конспект материала 17 — «Проходим L6 интервью на System Design в FAANG» (habr 655663) source: https://habr.com/ru/post/655663/ author: анонимный автор (RU-эмигрант, собирал материалы по собеседованиям в FAANG несколько лет), 15.03.2022 конспект: подготовлено 2026-09-17, TASK-45.21; статья — про планку L6 и подготовку к ней: уровни, глубина, back-of-envelope; три расчёта статьи проверены, найдены две арифметические ошибки автора (§4, §5) статус: взгляд «планки» — не формат секции, а критерий качества ответа (L6 = глубина + декомпозиция + числа как инструмент поиска узкого места); формат и этапы у нас уже закрыты methodology.md §1 и Поломодовым (lsd-polomodov-guide.md)


Материал 17: «Проходим L6 интервью на System Design в FAANG» (habr 655663)

Статья кандидата, который готовился к System Design Interview в FAANG и собрал гайд «как дорасти до L6». Для нас это не ещё один формат секции (формат Яндекса и Поломодова уже разобран), а калибровка планки: чем ответ уровня «тимлид» отличается от ответа «сеньора», и что именно качать. Две вещи в статье уникальны против наших материалов: (1) метод «лестницы глубины» при подготовке и (2) операционные константы sizing (компакция Cassandra, утилизация диска, память на сервер) — §6.

Позиция в треке: индекс learn-system-design-index.md ставит материал в P2, слот 22.09 (45 мин) — после Поломодова и моков, как «взгляд на senior-планку».


1. Уровни FAANG и критерий L6

Система уровней (за стандарт взят Google, у других названия отличаются):

Уровень Кто это Комментарий статьи
L3 джун уровни ниже L3 — не для программистских должностей
L4 мидл 3 месяца подготовки по плану статьи
L5 сеньор
L6 «этакий тимлид» можно «расколоть» просто отличной подготовкой — без индустриальных достижений
L7+ без достижений в индустрии попасть невозможно

Ключевые тезисы про планку:

  • L6 — это про глубину. «Чем глубже вы можете уходить на интервью, тем более высокий уровень вам могут дать». Глубина = способность объяснить компонент на уровень-два ниже интерфейса (§3).
  • Декомпозиция вместо квадрата. «Если во время дизайна вы нарисуете на доске один большой квадрат с припиской "Server" вместо многих компонентов — пойдете джуном». Уровень считывается прямо по детализации схемы.
  • Подготовка коррелирует с уровнем: 3 месяца плана → скорее L4, 9+ месяцев → L6. «Не нужно быть гением, просто трудолюбивым человеком и знать английский».
  • Важно для калибровки ожиданий: интервью не требует делать всё это руками — «про них нужно только рассказать ртом». Совпадает с калибровкой Gabbard (jackson-gabbard-ep06.md).

Соотнесение с нашей ситуацией: в Yandex Codenv секция — этап 2 на позицию руководителя группы разработки backend; по шкале FAANG это примерно L6-планка (тимлид). Значит ориентиры статьи — глубина, детальная декомпозиция, уверенные расчёты — это ровно та планка, под которую заточен план В (../methodology.md §5).

2. Формат секции: что проверяют

  • SDI длится 45 минут, иногда их несколько («за эти полтора часа…» — т. е. типично пара секций). Наша секция — час, формат Яндекс (yandex-564132.md) слоёный, из 6 этапов.
  • FAANG оперирует в масштабе всего земного шара: «десятки и сотни миллионов пользователей», задачи масштабирования, прикидывание мощностей, размеров диска, состояния гонки.
  • Проверяется умение раскладывать сложную систему на компоненты, оперируя знаниями о возможностях разных систем и БД — «даже если вы никогда не применяли эти знания на практике».
  • Рекомендация: все материалы читать на английском, чтобы на интервью оперировать корректными терминами.

3. Путь подготовки: материалы и «лестница глубины»

Порядок источников по статье (что даёт каждый):

  1. DDIA (Клеппман, «Высоконагруженные приложения») — «половина работы», читать медленно, без пропусков. Часть 1 — выбор правильных БД; часть 2 — страхи шардирования и выбор репликации; часть 3 — как склеить большую систему из маленьких (главное — разделение системы записей и производных данных). Критерий готовности: «проснуться посреди ночи и объяснить, как LSM-деревья используют красно-черные деревья для сортировки лога в памяти и зачем» (в статье опечатка «LSTM»). У нас карта и порядок чтения — ddia-map.md + ../knowledge-base.md §12; выводы автора по трём частям совпадают с нашей картой.
  2. Курс Grokking the system design interview — «запомнить мельчайшие детали большинства решений»: детали важнее общей картины. Пример: дизайнишь typeahead — должен рассказать про экспоненциальное скользящее среднее (EWMA) для взвешивания выдачи. Аналог по нашей базе — ../classic-designs.md: запоминаем конкретные механизмы, не только скелет.
  3. Видео о реальных системах (InfoQ, @scale): Nathan Bronson — Tao и кэши; Nishtala — memcache в Facebook; Kulkarni — Facebook Live; Aroskar — Zuul Push; Raffi Krikorian — Timelines at Scale (там те же расчёты в деле, §4). Для нас — фонд после секций: глубина под следующие этапы и интервью.
  4. SRE-книга Google — глава NALSD (Non-Abstract Large System Design): «понять и запомнить чуть ли не наизусть, особенно часть про оценки размеров, ресурсов, времени». Наш аналог этого блока — ../knowledge-base.md §1–2 + ../methodology.md §2.

Главный метод статьи — лестница глубины:

Не пропускай непонятное. В видео про Zuul упомянули Apache Netty — прочитай, пойми. Пойдите глубже — пойми epoll и его красно-черные деревья. Ещё глубже — TIMED-WAIT трюк в TCP, который сохраняет вебсокет-соединения. Упомянули, что балансировщики не справляются с вебсокетами — почему? Разберись!

Это ответ на вопрос «где копать глубже» из индекса подборки: глубина наращивается не «ещё одной темой», а раскопками вниз от каждого встреченного термина. Цепочка Zuul → Netty → epoll → TCP TIME-WAIT — образец того, как из одного доклада вырастает веер тем.

4. Ход решения: три расчёта из статьи (проверено)

Цель чисел по статье — не блистать математикой, а найти, чем ограничена система (диском? CPU? памятью?) и как её масштабировать: «как только вы начнете чувствовать это, вы сможете дизайнить сервисы с разными техниками масштабирования». Правила: степени десятки (практика NALSD), всегда тащить единицы измерения (байт/пост, пост/лента) и сокращать их, считать рано — «чтобы прочувствовать ограничения и заранее спланировать масштабирование». Это ровно наш метод ../knowledge-base.md §2.1 («допущение → формула → число → вывод»).

Пример 1: лента миллиона людей — влезает в память?

10 постов на ленту сходу, храним только ID по 8 байт (redis):

  • 8 Б/пост × 10 пост/лента = 80 Б/лента
  • 10^6 лент × 80 Б/лента = 8×10^7 Б = 80 МБлегко помещается в память. Сервис с такими параметрами можно не масштабировать по storage вовсе.

Пример 2: лента 500 миллионов — сколько машин?

800 постов в ленте, 8-байтный ID, фактор репликации 3, машина 64 ГБ памяти, из них пользоваться можно 50 ГБ:

  • 8 Б/пост × 800 пост/лента = 6.4×10^3 Б/лента
  • 5×10^8 лент × 6.4×10^3 Б/лента = 3.2×10^12 Б ≈ 3 ТБ
  • × 3 (репликация) ≈ 10 ТБ
  • Машины: 10 ТБ / 50 ГБ = 10×10^3 ГБ / 50 ГБ = 200 машин. ⚠️ Статья пишет «10 / 50 = 2×10^3 = 2000 машин» — арифметическая ошибка ровно того типа, против которого статья предупреждает: единицы уронили (ТБ поделили на ГБ как на «штуки»). Верный ответ — ~200 машин. Иллюстрация силы правила «единицы с собой»: ошибается даже автор гайда.

Вывод примера (по статье): сервис ограничен по памяти — масштабируется добавлением нод с RAM, отсюда и техника масштабирования.

Пример 3: логгирование 100 млрд событий в день — сколько QPS?

Переводим в секунды сразу, сутки округляем до удобного:

  • 100×10^9 событий/день / 86 400 с/день (≈8.6×10^4) = 10^11 / 8.6×10^4 ≈ 1.2×10^6 событий/с = 1.2 млн QPS
  • Дальше «возьмите удобное число, которое похоже на то, сколько выдержит одна машина, и поделите» — у нас это шаг 6 метода KB §2.1 (типовое приложение ~1–10 тыс. RPS/ноду) и константы §6 ниже (Cassandra: 10–15 тыс. запросов/ноду).

Дополнительные правила из статьи: «10 секунд примерных расчетов должны подтвердить», влезает ли что-то в одну машину (обычно в память); обычно получается несколько сервисов с разными механизмами масштабирования — считать каждый.

5. Числа статьи против нашей KB §1.2

Список «чисел, которые можно использовать без доказательств», сверен с ../knowledge-base.md §1.2 (latency-таблица у нас — объединённая из Primer Appendix и источника 4):

Число (статья) KB §1.2 Вердикт
Сжать 1 КБ (Zippy = Snappy) — 0.003 мс сжатие 1 КиБ ~3–10 мкс ✓ совпадает
Послать 1 КБ по 1 Gbps — 0.01 мс 2 КиБ → 20 мкс ✓ (та же удельная скорость)
Прочитать 4 МБ из памяти — 1 мс RAM ~4 ГиБ/с ✓ согласуется
Прочитать 4 МБ с SSD — 20 мс (~200 МБ/с) SSD ~1 ГиБ/с, NVMe до 3–7 ~ консервативно, SATA-эпоха; для NVMe статья занижает
Прочитать 4 МБ с HDD — 80 мс (~50 МБ/с) HDD 30–100 МиБ/с ✓ в диапазоне
Disk seek — 10 мс 10 мс
Раундтрип внутри датацентра — 150 мс в ДЦ ~0.5 мс; 150 мс — это через океан ошибка статьи (перепутаны ДЦ и океан). Учить по KB, не по статье
Пропускная способность внутри ДЦ ~100 Gbps NIC 1–10 Gbps у ноды, агрегат ДЦ выше ~ имеется в виду агрегат, не нода

Урок сверки: даже «проверенные» шпаргалки содержат ошибки (здесь — перепутанный round-trip и потерянный порядок в делении ТБ/ГБ, §4). Числа держим в одном месте — KB §1–2 — и оттуда же тренируем (протокол ../methodology.md §6).

6. Операционные константы sizing (уникальное статьи)

То, чего не было в Primer Appendix и других наших источниках, — эксплуатационные поправки к расчётам (когда считать «сырые» байты и делить на размер машины, этого не хватает):

Константа Значение Зачем
Cassandra: свободное место под компакцию ~30 % LSM не может работать «под завязку»; диск 2 ТБ → планируй ~1.4 ТБ данных
Утилизация диска под БД ~85 % остальное съедает ОС
Смертность дисков 3–5 % в год закладывать резерв, не «ровно N дисков»
Cassandra: размер ноды лучше всего 1–2 ТБ «тормозит на дисках больше 2 ТБ»
Cassandra: нагрузка на ноду 10–15 тыс. запросов, рост линеен по нодам делитель для расчёта кластера (аналог шага 6 KB §2.1)
Память сервера 100–150 ГБ доступной делитель для memory-bound расчётов
1 Gb/s 125 МБ/с перевод бит↔байты при bandwidth-расчётах
Видео ~10 МБ/мин; 720p — 1.5 Mbps; 360p — 150 Kbps для медиа-задач (у нас — ../classic-designs.md §4)

Применение на секции: после «сырого» расчёта storage/memory проговорить поправку («×3 репликация, под компакцию оставим 30 %, значит реальный парк — вот такой»). Одна фраза, а звучит как опыт эксплуатации. Ссылка: DataStax capacity planning (числа для Cassandra и других БД).

7. Выводы для нашей подготовки

  1. Планка считывается по схеме и глубине. Детальная декомпозиция (никаких квадратов «Server») + способность уйти на уровень вниз по любому нарисованному компоненту = ответ уровня L6/тимлид. Наш слоёный формат из 6 этапов (../methodology.md §1) этому и учит; при self-review добавляем вопрос «могу ли я по каждому блоку схемы рассказать на уровень глубже?».
  2. Числа — инструмент поиска узкого места, не украшение: расчёт → «ограничено памятью/CPU/диском/QPS» → отсюда техника масштабирования. Это усиливает этап 5 (ресурсы и узкие места): вывод расчёта всегда заканчиваем классификацией лимита.
  3. Лестница глубины — метод после секций. До слотов 18–22.09 новые темы не открываем (правило индекса: «до ближайшего слота ничего учебного нового»); но в фон и на следующие этапы — раскопки вниз от каждого непонятого термина (Zuul → Netty → epoll → TIME-WAIT), а не расширение списка тем.
  4. Операционные константы §6 — взять в оборот на этапе sizing: компакция/репликация/смертность дисков/память на сервер — превращают «байты в ТБ» в «парк машин», и звучат как production-опыт.
  5. Сверка чисел обязательна. В статье две ошибки (RTT ДЦ = 150 мс; 2000 вместо 200 машин) — источник правды по числам у нас один: KB §1–2, тренировки только по нему.
  6. Материалы статьи маппятся на наши: DDIA → ddia-map.md (выводы по частям совпадают), Grokking → ../classic-designs.md (детали решений), NALSD → KB §1–2 + ../methodology.md §2, видео о реальных системах → фонд после секций. Ничего до слотов добавлять не нужно — план В (../methodology.md §5) уже включает этот конспект на 45 мин в вс/пн перед слотом 22.09.

Связанные документы

  • ../methodology.md §5 (план В: этот материал — 45 мин в вс 21.09), §6 (протокол тренировок, куда идёт «глубина на уровень ниже» в self-review)
  • ../knowledge-base.md §1–2 (числа и back-of-envelope — источник правды), §12 (карта DDIA)
  • ../classic-designs.md — аналог «Grokking»: детали классических решений
  • ddia-map.md — порядок чтения DDIA (выводы статьи по частям совпадают с картой)
  • lsd-polomodov-guide.md — формат секции глазами интервьюера; jackson-gabbard-ep06.md — калибровка «рассказать ртом, не делать руками»
  • learn-system-design-index.md — место материала в подборке (P2, слот 22.09)