經典系統設計題目
入門題目
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 分鐘
畫圖 + 說明
寫下權衡取捨