System Design Vault
系統設計面試準備筆記。以 PDF 教材為起點,整理成 Obsidian vault;採概念筆記 + 練習題的形式,幫助快速掌握面試常考主題。
涵蓋網路、分散式、API、儲存、快取、訊息、設計模式、基礎設施、維運,以及真實大型應用設計案例等十三個資料夾。
從這裡開始
- 學習地圖 (MOC) — 全部章節索引與學習路徑
- 速查表 — 一頁速覽各主題決策樹
- 面試陷阱題 — 容易答錯的觀念集錦
章節結構
| 編號 | 主題 | 來源 PDF | 檔案數 | 狀態 |
|---|---|---|---|---|
| 00 | Dashboard 儀表板 | — | 3 | ✅ |
| 01 | Networking 網路 | 1-01 | 8 | ✅ |
| 02 | Distributed Systems 分散式 | 1-02, 1-03, 1-04, 1-10, 1-21 | 6 | ✅ |
| 03 | API Design API 設計 | 1-05 ~ 1-09 | 6 | ✅ |
| 04 | Database Indexing 索引結構 | 1-11 ~ 1-16 | 7 | ✅ |
| 05 | Database Advanced (Transactions / Sharding / Replication) | 1-17, 1-19, 1-20 | 4 | ✅ |
| 06 | Database Tech (PostgreSQL / DynamoDB / OLTP vs OLAP) | 3-01 ~ 3-04 | 5 | ✅ |
| 07 | Caching & Storage | 1-18, 3-07, 3-14, 3-15 | 5 | ✅ |
| 08 | Search & AI (RAG / Elasticsearch / Vector DB) | 2-06, 2-08, 3-05, 3-06 | 5 | ✅ |
| 09 | Messaging & Coordination (Kafka / Queue / Zookeeper) | 2-07, 3-12, 3-13, 3-16, 3-17 | 6 | ✅ |
| 10 | Design Patterns (Scaling / Long Tasks / Real-time) | 2-01 ~ 2-05 | 6 | ✅ |
| 11 | Infrastructure (API Gateway / LB / Container / CDN) | 3-08 ~ 3-11, 3-18 | 6 | ✅ |
| 12 | Operations & Reliability (Contention / Overload / Observability) | 4-01 ~ 4-04 | 5 | ✅ |
| 13 | Case Studies 真實大型應用設計案例 | 5-01 ~ 5-14 | 15 | ✅ |
| 目前 | 87 |
狀態:✅ 完成 / 🔄 部分完成 / ⬜ 未開始
建議學習順序
Week 1:基礎協定 + 分散式核心
└─ 01-Networking → 02-Distributed-Systems
Week 2:API 與儲存基本盤
└─ 03-API-Design → 04-Database-Indexing → 05-Database-Advanced
Week 3:技術選型 + 快取
└─ 06-Database-Tech → 07-Caching-Storage → 08-Search-and-AI
Week 4:訊息與設計模式
└─ 09-Messaging-Coord → 10-Design-Patterns
Week 5:基礎設施 + 維運衝刺
└─ 11-Infrastructure → 12-Ops-and-Reliability → 重看 Exam-Traps
Week 6:案例實戰(整合練兵)
└─ 13-Case-Studies(先 easy 後 hard)→ Practice-Case-Studies 跨案例比較 → 速查表「案例招牌取捨」
練習題分布
每個主題資料夾內含對應 Practice-XXX.md,目前累計:
- 13 個資料夾、355 題(網路 21、分散式 35、API 26、索引 25、資料庫進階 24、資料庫技術 18、快取與儲存 30、設計模式 33、搜尋與 AI 28、訊息與協調 27、基礎設施 32、維運與可靠性 34、案例研究 22)
- 答案皆採
> [!answer]-折疊式 callout,可先想再展開
題型分布(依教材整理慣例):
- Recall(記憶/定義):~60%
- Application(情境選型):~25%
- Analysis(對比/取捨):~15%
高頻面試重點(⭐⭐⭐)
- CAP 取捨 vs ACID-C:CP / AP / CA 三角,且能說清 ACID 的 C 跟 CAP 的 C 不同
- TCP vs UDP:哪些情境用哪個,QUIC 為何崛起
- REST / GraphQL / gRPC 選型:external/internal、over/under-fetching
- HTTP 冪等性:GET/PUT/DELETE 是 idempotent,POST/PATCH 不是
- Consistent Hashing:Hash Ring + Virtual Nodes,資料搬遷最小化
- B-Tree vs LSM Tree:讀多寫多取向、寫入放大、壓實機制
- 隔離等級 + Lost Update:超賣本質是 Lost Update,原子 UPDATE 即可(不要動到 Serializable)
- Sharding 時機 + Saga:50TiB / 10k TPS 寫才動 sharding;跨服務交易用 Saga 不用 2PC
- Replication Lag:Read-After-Write 用 LSN(不要用時鐘);Failover 要 fencing token 防 split brain
- Caching 五步驟:瓶頸 → 快取什麼 → 架構(Cache-Aside)→ 淘汰(LRU+TTL)→ 缺點(Stampede / Hot Key / 故障降級)
- 讀取/寫入擴展:讀取走 index → replica → cache;寫入走 sharding + queue + batching;先估算再優化,別過早 sharding
- 長時間任務(Async):操作 > 幾秒 → queue + worker pool,立刻回 job ID;DLQ 隔離 poison message、Idempotency Key 防重複、依 queue 深度做 backpressure
- 大型檔案處理:> 10MB → Presigned URL 直傳 + CDN download,server 不碰 bytes;狀態同步用 Storage 事件 + 對帳(不要信任 client)
- 即時更新兩個 hop:協定(SSE 單向 / WebSocket 雙向,WS 必用 L4 LB)+ 傳播(Pub/Sub 廣播 / Consistent Hashing 有狀態);先問「輪詢夠嗎」別過度設計
- 搜尋系統:不用
LIKE,獨立搜尋索引 + CDC 同步;倒排索引 + BM25(TF 有上限 / IDF 越罕見越高)+ Boosting + 業務指標 - RAG:解 foundation model 四限制(cutoff / 領域深度 / 私有資料 / 引用);Ingestion → Retrieval → Augmentation → Generation;Hybrid Search + 「不知道就說不知道」降 hallucination
- 資料管線:批次 vs 串流(< 10 分必串流);Kappa(單套,主流)vs Lambda;容錯用 at-least-once + 冪等寫入(勝過 exactly-once)
- 資料庫選型:從需求推導(資料形狀/查詢模式 → OLTP/OLAP → 規模一致性),別背 SQL vs NoSQL;從 PostgreSQL 出發再說明偏離理由
- PostgreSQL vs DynamoDB:PG 強一致 + 複雜查詢 + JSONB/PostGIS/全文;DynamoDB 託管 + 水平擴展,GSI 僅最終一致、sort key 用單調遞增 ID(UUIDv7)
- OLTP vs OLAP:row vs column 儲存(column 快 = 只讀需要欄位 + 高壓縮 + 向量化);OLTP + CDC/ETL → OLAP,先 ETL 再 CDC
- Elasticsearch / 向量 DB:ES segment 不可變、深分頁用 search_after、CDC 同步權威來源;相似度搜尋先 pgvector 再專門庫(HNSW,95% recall)
- Blob Storage:二進位不進 DB(DB 存 metadata);生命週期分層控成本;私有 Bucket + Presigned URL(耐久性 ≠ 可用性)
- 基礎設施:API Gateway(authN + 路由 + 限流)vs LB(L4/L7 分發);容器無狀態 + K8s HPA;Serverless 事件驅動但有 Cold Start / 15 分上限 / 連線爆炸(RDS Proxy)
- 訊息與協調:Queue 削峰但不增容量(過載靠 backpressure);Kafka partition 保序 + at-least-once;分散式鎖正確性需 fencing token(TTL 不夠);ZooKeeper/etcd 共識 vs Redis 效率鎖
- 處理競爭(Contention):原子操作 → 樂觀鎖(版本號,避免 ABA)→ 悲觀鎖(
FOR UPDATE)→ 分散式鎖;超賣本質是 Lost Update,預設隔離級擋不住、別亂提 Serializable;跨服務用 Saga - 過載保護 + 可靠交付:限流預設 Token Bucket、Concurrency vs Rate 並用;Load Shedding vs Backpressure;重試只對暫時性故障 + 指數退避加抖動 + 冪等鍵;熔斷器 Half-Open 漸進放量
- 可觀測性 + CDN:Metrics/Logs/Traces 三支柱 + 四個黃金信號;對症狀告警(非原因)、P99 看 Histogram、SLO 99.9% + Error Budget;CDN 只放靜態資源、immutable + hash busting(別用短 TTL)
標籤系統
領域: #networking, #distributed-systems, #api-design, #database, #indexing, #caching, #performance, #design-patterns, #search-and-ai, #messaging-coord, #infrastructure, #ops-reliability
層次: #transport-layer, #application-layer, #architecture-pattern
模式: #scalability, #consistency, #availability, #fault-tolerance, #high-availability, #async, #real-time
技術: #rest, #graphql, #grpc, #http, #b-tree, #lsm-tree, #hash-index, #transactions, #acid, #replication, #sharding, #message-queue, #kafka, #data-pipeline, #stream-processing, #websocket, #sse, #pub-sub, #blob-storage, #cdn, #search-system, #elasticsearch, #rag, #vector-database, #postgresql, #dynamodb, #nosql, #oltp-olap, #data-warehouse, #api-gateway, #load-balancer, #container, #kubernetes, #serverless, #distributed-cache, #redis, #distributed-lock, #zookeeper, #contention, #overload-protection, #reliable-delivery, #observability
治理: #authentication, #authorization, #api-security
規劃: #capacity-planning(量級數字、scale triggers)
類型: #concept-note, #practice, #moc, #dashboard, #exam-traps, #case-study
使用建議
資料來源
- 原始教材 PDF 放在
pdfs/,使用 git-lfs 管理 - 筆記由
/tutor-setupskill 結構化產出,再人工校讀 - 命名與 frontmatter 約定見 CLAUDE.md
注意:本筆記為系統設計面試備考整理版本,不取代原版教材;面試前建議重看原本 PDF 章節以掌握細節與例外。