經典系統設計題目

入門題目

1. URL Shortener(短網址服務)

需求: - 給定長 URL,產生短網址 - 短網址能導向原始 URL - 統計點擊次數

設計重點: - 哈希/編碼演算法選擇 - 唯一 ID 生成策略 - 快取热门 URL - 資料庫分片

Client → Load Balancer → App Server → Cache (Redis)
                                      ↓
                                   Database

2. Rate Limiter(限流器)

需求: - 限制 API 呼叫頻率 - 分散式環境下正常運作

設計重點: - 演算法選擇:Token Bucket vs Sliding Window - 分散式計數(Redis) - 限流規則配置

演算法 優點 缺點
Token Bucket 簡單、允許突發 不精確
Sliding Window Log 精確 記憶體大
Sliding Window Counter 折衷 近似值

3. Key-Value Store

需求: - put(key, value) / get(key) - 高可用、高擴展

設計重點: - 一致性 Hashing(Partitioning) - Replication(複製) - Consistency(一致性)


中級題目

4. News Feed(動態消息)

需求: - 用戶能看到關注者的動態 - 支援即時更新

設計重點: - Push model vs Pull model - Fan-out on write vs Fan-out on read - 快取策略

Push (寫時擴散):
  User post → Fan-out 到所有 follower 的 feed
  優點:讀取快
  缺點:名人問題(大 V 有百萬 follower)

Pull (讀時擴散):
  User 讀取 → 合併所有 following 的最新 posts
  優點:寫入快
  缺點:讀取慢

5. Chat System(即時通訊)

需求: - 一對一、群組聊天 - 即時推播 - 訊息持久化

設計重點: - WebSocket vs Long Polling - 訊息排序(Message ID) - 離線訊息 - 已讀狀態

6. Search Autocomplete(搜尋自動完成)

需求: - 輸入時即時建議 - 支援熱門搜尋

設計重點: - Trie 資料結構 - 快取热门搜尋 - 頻率統計


進階題目

7. Web Crawler(網頁爬蟲)

需求: - 爬取網頁內容 - 避免重複爬取

設計重點: - BFS vs DFS - URL 去重(Bloom Filter) - Politeness(遵守 robots.txt) - 分散式架構

8. Notification System(通知系統)

需求: - 多渠道推播(Email, SMS, Push) - 即時性

設計重點: - 佇列解耦 - 優先級 - 重試機制 - 限流

9. Order System(訂單系統)

需求: - 下單、付款、出貨 - 庫存管理

設計重點: - 交易一致性 - 庫存扣減(樂觀鎖 vs 悲觀鎖) - 狀態機 - 事件驅動


練習建議

每週 1-2 題
限時 45 分鐘
畫圖 + 說明
寫下權衡取捨