Job 2026 md

title: Конспект материала 31 — system-design-algorithms (resumejob) source: https://github.com/resumejob/system-design-algorithms author: resumejob — «System design algorithms»: один README — чек-лист из 18 алгоритмов/структур «для подготовки к SD-интервью»; каждый пункт — определение в 1–2 предложения + 1–3 ссылки на бесплатные тексты; критерий отбора — «алгоритм отвечает на вопрос интервью» (пример: статья Twitter «Building a complete Tweet index» = ответ на «как сделать Twitter search/hashtag») конспект: подготовлено 2026-09-18, TASK-45.35; README прочитан целиком, все 18 позиций сверены с KB / articles / classic-designs / конспектами серии 45.12–45.34 статус: как учебник — P3, почти всё покрыто сильнее; уникальный жанр — двухуровневый чек-лист владения алгоритмом: «know when to use» (☑️, 5 позиций) и «know how it works» (✅, 13 позиций). Готовый трекер самопроверки «алгоритм → домен-вопрос → трейдофф» на 15–20 минут. Сверка: 14/18 уже в базе, 3 лакуны внесены в KB (§13.6, §14.5, §14.6), 1 (frugal streaming) — P3-академика, оставлена в этом конспекте


Материал 31: system-design-algorithms — чек-лист алгоритмов

1. Что это (и что это НЕ)

Репозиторий-каталог: README с 18 алгоритмами и структурами, которые автор считает обязательными для SD-интервью. Каждый пункт: короткое определение + ссылки (текст ценится выше видео, всё бесплатное). Три правила отбора заявлены в README: алгоритм должен отвечать на конкретный вопрос интервью («How to design Uber?» → geohash/S2), быть бесплатным и предпочтительно текстовым. Кода и разборов в репо нет — это индекс, не учебник.

Главная ценность для нас — уровневая маркировка владения: ☑️ «know when to use» (узнавать ситуацию и назвать алгоритм) против ✅ «know how it works» (объяснить механику и трейдофф). Это готовая шкала самооценки: на секции достаточно ☑️-уровня почти для всего, ✅ — только для того, что попадает в наш бриф (rate limiting, хранение, консенсус, гео).

2. Список: 18 позиций и где они у нас

2.1 ✅ Know how it works (13) — уметь объяснить механику

# Алгоритм Суть одной строкой Интервью-домен («отвечает на вопрос») Где у нас
1 Bloom filter «элемент в множестве?» быстро и дёшево; ложные срабатывания, удалений нет дедуп URL в краулере; отсечение чтения несуществующих ключей в LSM ✅ KB §3.1, §14.2 (29 % дублей)
2 Consistent hashing кольцо + виртуальные ноды: при уходе/добавлении узла переезжает ~1/N ключей перекладка шардов/кэша без даунтайма; stateful-роутинг ✅ KB §6, §13.2; кейсы Discord/Slack (45.33)
3 Geohash / S2 Geometry гео-ячейки: nearby-поиск и «точка → ячейка → шард» «design Uber»: ближайшие водители, гео-шардирование ✅ KB §13.6; S2 — добавлен (§3 ниже)
4 2PC prepare/commit через координатора: все коммитят или все абортят «а как транзакция на два сервиса?» — сказать и сразу про саги ✅ KB §7 (+ saga, NewSQL, in-doubt)
5 Exponential backoff пауза ретрая растёт экспоненциально (+ jitter), не добиваем упавшего ретраи, retry storm, metastable failure ✅ KB §9, articles/08
6 SSTable иммутабельные отсортированные файлы на диске + компактация «почему Cassandra пишет быстро?» — LSM-семейство ✅ KB §3.1, DDIA гл. 4 (45.39)
7 Leaky / token bucket корзина-скорость: ровный поток vs burst с двумя параметрами rate limiter — классика этапа 4 ✅ KB §14.1 (таблица 5 алгоритмов + Redis+Lua)
8 Inverted index term → список документов с ним поиск, хэштеги, Twitter search ✅ KB §2 (Search), §14.4; Tweet index — тот же жанр
9 Distributed consensus (Paxos/Raft) кворум + эпохи: узлы договариваются о значении несмотря на отказы leader election, координация, реплицированный лог ✅ KB §7 (механика + ZooKeeper/etcd/fencing)
10 Cache eviction (LRU/LFU/FIFO) кого выкидывать при переполнении «а что если кэш переполнен?» ✅ KB §4 (LRU дефолт, LFU неравномерные)
11 Rsync algorithm rolling checksum: передать только отличающиеся блоки файла дельта-синхронизация файлов (Dropbox/Drive) ⚠️ §14.5 есть «дельта» без механики → внесено (§3)
12 HyperLogLog счёт уникальных приближённо: ~0,8 % ошибки при 12 КБ на ключ уникальные посетители/запросы/DAU без гигантских счётчиков ❌ лакуна → внесено в KB §14.6
13 Trie префиксное дерево: поиск за O(длина ключа) автодополнение/typeahead ✅ KB §14.4 (+ топ-k в узлах)

2.2 ☑️ Know when to use (5) — достаточно узнать ситуацию и назвать

# Алгоритм Когда применять одной строкой Где у нас
14 Lossy counting частые элементы потока (частота > порога) за O(1/ε) памяти; Cloudflare так считает rate limiting на миллионы доменов ⚠️ Count-Min назван в articles/10 → внесено в KB §14.6
15 Frugal streaming квантиль на группу одной ячейкой памяти ❌ академика, вне брифа — оставлено здесь (P3)
16 Operational transformation коллаборативное редактирование (Google Docs): операции с трансформацией против параллельных правок ✅ articles/11 («OT vs CRDT — назвать трейдофф»), 45.31; вне брифа
17 Quadtree / Rtree пространственный индекс: рекурсивное деление плоскости / дерево объёмов ✅ KB §13.6 (geohash/QuadTree + R-деревья)
18 Ray casting point-in-polygon: чётность пересечений луча — «точка → страна/регион» ❌ лакуна → внесено в KB §13.6

3. Сверка с базой знаний — что добавлено в 45.1

14 из 18 позиций уже покрыты KB/articles на уровне глубже этого репо (колонка «Где у нас»). Реальные лакуны — три, все внесены малыми правками:

  1. HyperLogLog + sketch-счётчики (главная лакуна) — в KB нигде не было приближённых счётчиков. Добавлен §14.6 «Приближённые счётчики»: HLL (12 КБ / ~0,8 % / Redis PFADD-PFCOUNT), Count-Min + lossy counting (частоты и топ-k на потоке; кейс Cloudflare — rate limiting миллионов доменов), правило «деньги/аудит — точный счёт, метрики/лимиты — sketch с известной ошибкой». Стыкуется с §14.1 (лимиты) и §14.4 (топ-k агрегаторы).
  2. Механика дельта-синхронизации (rsync) — §14.5 говорил «передаём изменённые блоки» без «как». Добавлено: rolling checksum + хеши блоков; content-defined chunking делает границы блоков устойчивыми к вставкам (иначе вставка в начало файла инвалидирует все блоки).
  3. Ray casting + S2 — §13.6 дополнен: реверс-геокодинг «точка → страна» = point-in-polygon через ray casting; S2 (Google) назван рядом с geohash как тот же жанр ячеек на сфере.

Не внесено сознательно: frugal streaming (квантили одной ячейкой — академика, вне брифа, достаточно названия из этого конспекта) и OT (уже закрыт articles/11 одной фразой «назвать трейдофф, не углубляться»).

4. Что взять в подготовку

Прогон таблицы §2 как трекера (15–20 минут): по каждой строке вслух — «вопрос-домен, где применяю, как работает, чем плачу». Шкала репо помогает честно разделить: что умею объяснить (✅) и что только узнаю (☑️). До слотов достаточно ☑️ везде и ✅ на позициях 1–2, 4–7, 9, 13 (ядро брифа: хранение, лимиты, консистентность, автодополнение).

Свежие для нас факты, которые приятно назвать на секции: - HLL в Redis: PFADD/PFCOUNT/PFMERGE, 12 КБ на ключ, ошибка ~0,8 % — готовый ответ на «посчитать уникальных посетителей за месяц» вместо гигантского set. - Cloudflare (lossy counting): подсчёт для rate limiting миллионов доменов без точных счётчиков на каждый домен — связка «sketch + лимиты» звучит как опыт. - CDC/rsync: «вставка в начало файла не должна инвалидировать всё» — тонкость, которая отличает понимание от заучивания.

5. Чего не брать

  • Репо как план чтения — ссылки дублируют то, что уже разобрано сильнее (Dropbox caching → KB §4; Tweet index → жанр инвертированного индекса; Trie-статьи → KB §14.4). Единственная стоит отдельного взгляда после секций: «Building a complete Tweet index» (Twitter Engineering, 2014) — цельный кейс «поиск по 400 млн твитов/день»: инвертированный индекс + early bird-шардирование.
  • Frugal streaming и Git-bloom-фильтры — академика/экзотика, вне брифа.
  • Считать репо учебником по механике — определения в 1–2 предложения; глубина у нас в KB и DDIA.

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

  • ../knowledge-base.md — §3.1 (Bloom/SSTable/LSM), §4 (eviction), §6 (consistent hashing), §7 (2PC/консенсус), §9 (backoff), §13.6 (гео: + ray casting, S2), §14.1 (buckets), §14.4 (trie), §14.5 (rsync-механика), §14.6 (sketch-счётчики — новый)
  • ../articles/10-components-patterns.md — Count-Min для топ-k (теперь продублирован в KB §14.6)
  • lsd-interviewready-resources.md (45.31) — там же ссылка на OT + HLL из списка InterviewReady
  • lsd-master-plan.md (45.34) — второй чек-лист серии: темы (здесь — алгоритмы); удобен общий прогон перед слотом