
系統設計面試是很多台灣工程師的弱點。不是因為不懂技術,而是因為面試的形式和一般工作不一樣:你要在 45 分鐘內,從一個模糊的問題,設計出一個說得通的大型系統,同時要邊畫邊解釋,還要跟面試官互動。
這份攻略從零開始,帶你搞懂系統設計面試的每一個環節。
面試官給你的問題通常很模糊,例如:「設計 WhatsApp」。
但他不是真的要你設計 WhatsApp。他想看的是:
第 1–5 分鐘:釐清需求
第 5–10 分鐘:估算規模(Back-of-the-envelope)
第 10–30 分鐘:High-level 架構設計
第 30–45 分鐘:Deep dive(通常由面試官引導)
功能性需求(要做什麼):
非功能性需求(要做到多好):
做個粗略計算,幫助你決定需要什麼等級的架構:
範例:設計 Twitter
DAU(日活用戶):1 億
每個用戶平均每天發 1 則推文
Write QPS = 100M / 86400 ≈ 1,200 QPS
每個用戶平均每天讀 100 則推文(刷動態)
Read QPS = 100M × 100 / 86400 ≈ 116,000 QPS
→ 讀寫比 ≈ 100:1,這是一個「讀多寫少」的系統
→ 需要重度快取策略
畫出主要元件(不要畫太細):
說明資料流:「用戶發請求 → 到 Load Balancer → 到 API Server → 查 Cache,miss 了才查 DB → 回傳」
面試官通常會在這裡問:「那你的資料庫設計是怎樣?」或「如果有 10 億用戶怎麼辦?」
你要能夠對你設計中的每個元件問三層深。準備以下幾個常見的 deep dive 方向:
分散式系統只能保證三個特性中的兩個:
因為網路分割(P)在實際系統中是必然會發生的,所以你通常是在 CP 和 AP 之間選擇。
| 選 SQL | 選 NoSQL | |---|---| | 需要 ACID 交易 | 需要水平擴展(Horizontal scaling) | | 資料結構明確 | Schema 變動頻繁 | | 關聯查詢複雜 | 需要極低延遲 | | 例:交易、訂單 | 例:用戶 session、推薦快取 |
常見 NoSQL 類型:
Cache-aside(最常用):先查快取,miss 了再查 DB,然後寫回快取。
Write-through:寫入時同時更新快取和 DB,一致性高但寫入較慢。
Write-behind(Write-back):先寫快取,異步寫入 DB,寫入快但有資料丟失風險。
快取失效策略:TTL 過期、LRU 淘汰、事件驅動的主動失效。
為什麼要用 MQ(Message Queue):
Kafka vs RabbitMQ vs SQS:
用在分散式快取和資料庫 sharding。優點:新增或移除節點時,只需要重新分配少量資料(而不是重新 hash 所有資料)。
核心需求:
關鍵設計決策:
ID 生成方案:
資料庫:
id | short_code | original_url | created_at | expires_at快取策略:
Deep dive 方向:同一個 URL 要不要給同一個短碼?(需求取向,通常不需要)
核心設計挑戰:用戶 A 發推文,他的 1 萬個粉絲應該如何看到這則推文?
兩種方案:
Fan-out on write(寫入時展開):
Fan-out on read(讀取時展開):
2026 答案:Hybrid
核心需求:
架構重點:
協議:
訊息存儲:
(sender_id, receiver_id, message_id) → message_content訊息狀態:
離線訊息:
最常考的限流算法:
Token Bucket(令牌桶):
Leaky Bucket(漏桶):
Sliding Window Counter(滑動窗口計數):
分散式 Rate Limiter:
多管道(Push / Email / SMS)設計:
Producer services → Kafka
→ Router(根據通知類型 fan-out)
→ Push worker → APNs / FCM
→ Email worker → SendGrid / SES
→ SMS worker → Twilio
→ 去重快取(Redis,TTL 對齊 retry 窗口)
→ Retry queue + DLQ(Dead Letter Queue)
重要細節:
文件上傳設計:
元數據 vs 實際文件分開存:
同步衝突解決:
核心問題:如何在低延遲下找到附近的司機?
地理空間索引方案:
| 方案 | 說明 | 適用場景 | |---|---|---| | Geohash | 把地球格子化,每個格子有字串 key | 簡單、常用 | | S2 Cells(Google) | 球面分割,邊緣更精確 | 高精度需求 | | H3(Uber) | 六邊形格子,均勻覆蓋 | Uber 實際用的 | | Quadtree | 動態空間分割 | 密度不均的場景 |
司機位置更新:
配對邏輯:
核心元件:
倒排索引(Inverted Index):
詞 → [文件 ID, 位置, 頻率] 的 mapping排名(Ranking):
Sharding:
最重要的概念:冪等性(Idempotency)
用戶點了兩次「付款」,你不能扣兩次錢。
解法:
idempotency_key(client 生成的 UUID)分散式交易(Distributed Transaction):
本地交易用 SQL ACID 就夠了。跨服務的交易需要:
上傳流程:
播放流程:
評論、按讚分開存:
外商(Google、Meta、Amazon、Shopee)從 L4(3–5 年資歷)就開始有系統設計輪。台灣本地公司通常要 senior(5 年以上)才考。建議從 2–3 年資歷就開始學,因為這需要時間培養。
面試中說「用 Kafka」完全沒問題,因為工作中也是用現成技術。但你要能解釋為什麼選 Kafka(而不是 RabbitMQ、SQS),以及 Kafka 的基本運作原理(partition、consumer group、offset)。
一定要畫!外商面試通常用 Excalidraw、miro、或 Google Jamboard 讓你畫。台灣的實體面試有時候有白板。畫圖是系統設計面試的標配,不畫圖就是在讓面試官猜你的意思。
可以(也應該)邊設計邊問問題。系統設計是互動式的,不是獨白。面試官通常會引導你往他想深入的方向走。你的工作是提出方向和判斷,他的工作是告訴你要 zoom in 在哪裡。
Midjourney:
Wide editorial photograph of a software engineer drawing a system architecture diagram on a whiteboard, boxes and arrows showing server infrastructure, warm office lighting, focused concentration, whiteboard markers in multiple colors, modern tech office aesthetic --ar 16:9 --v 6 --style raw
Ideogram:
Clean minimal system architecture diagram showing Client → Load Balancer → API Servers → Cache → Database, with labeled arrows and Chinese annotation underneath each component, light grey background, navy and coral color scheme, textbook technical diagram style --ar 16:9
Ready to practice?
HiredPathway gives you AI-powered mock interviews with real-time feedback. Free to start.
Start practicing free →