設計模式練習題 (Practice - Design Patterns)


Part 1:Scaling Reads(讀取擴展)

Q1(Recall):讀取擴展的三步演進順序是什麼?


Q2(Recall):Denormalization 的本質取捨是什麼?什麼時候不該用?


Q3(Recall):Cache invalidation 的五種策略分別是什麼?


Q4(Application):設計短網址服務(QR Code Generator),讀寫比極度不平衡(縮短一次、點擊幾百萬次)。你的讀取擴展策略?


Q5(Application):「幾百萬請求同時讀同一個 hot key」(名人發文),cache server 開始 timeout。兩個解法?


Q6(Analysis):解釋 Cache Stampede 的成因,並比較三種解法的優劣。


Q7(Analysis):面試官問「你會用 cache 提升讀取效能」,但補充「我們的 DB 負載沒問題,只是延遲偏高」。你該怎麼回應?


Part 2:Scaling Writes(寫入擴展)

Q8(Recall):寫入擴展的四個策略是什麼?


Q9(Recall):為什麼 Cassandra 的寫入吞吐量遠高於傳統 relational database?代價是什麼?


Q10(Recall):Horizontal Sharding 和 Vertical Partitioning 的差異?


Q11(Application):你要對社群媒體貼文做 sharding。面試官問「partition key 怎麼選」。請完整回答,並說明選錯的後果。


Q12(Application):Robotaxi 系統,幾萬輛車每幾秒回報位置,寫入暴增。為什麼 Load Shedding 比加 Queue 更合適?


Q13(Application):爆紅推文每秒 10 萬讚,即使均勻 sharding 仍壓垮所在 shard。兩種拆 hot key 的方法?


Q14(Analysis):解釋 Hierarchical Aggregation 如何解決「直播留言幾百萬人 all-to-all」問題。


Q15(Analysis):Resharding(8 → 16 shard)如何在不停機下完成?


Part 3:Manage Long-Running Tasks(長時間任務)

Q16(Recall):這個模式的核心概念是什麼?Web server 和 Worker 各做什麼?


Q17(Recall):這個模式得到什麼、失去什麼(各列兩項)?


Q18(Application):面試官說「我們每天處理 100 萬張圖片,每張要 10 秒」。你該怎麼當場反應?


Q19(Application):用戶不耐煩點了三次「產生報告」,queue 裡有三個一樣的 job。怎麼防重複?


Q20(Application):黑五 job 暴增 10×,worker 跟不上,queue 長到幾百萬。怎麼辦?


Q21(Analysis):「有的報告 5 秒、有的 5 小時,全在同一 queue」會造成什麼問題?怎麼解?


Q22(Analysis):Dead Letter Queue(DLQ)解決什麼問題?為什麼要監控它?


Part 4:Handling Large Blobs(大型檔案)

Q23(Recall):什麼大小的檔案應該用這個模式?核心做法是什麼?


Q24(Recall):Presigned URL 產生時可以烘焙進哪些限制條件?為什麼需要?


Q25(Application):上傳 5GB 影片到 99% 時連線斷了。系統應如何避免從頭重來?


Q26(Analysis):「信任 client 通知上傳完成」會有哪些問題?正確的狀態同步機制是什麼?


Q27(Analysis):防止上傳濫用最有效的手段是什麼?為什麼比即時偵測更穩固?


Part 5:Real-time Updates(即時更新)

Q28(Recall):即時系統要解決的「兩個 hop」分別是什麼?


Q29(Recall):SSE 和 WebSocket 的核心差異?各自適合什麼?


Q30(Application):為什麼 WebSocket 必須用 L4 負載平衡器,而不是 L7?


Q31(Application):設計聊天系統,要把訊息送達數百萬連線的用戶。第二個 hop 選 Consistent Hashing 還是 Pub/Sub?


Q32(Analysis):面試官要設計「線上拍賣即時出價」。一個候選人立刻說「我用 WebSocket + WebRTC」。你的評估?


Q33(Analysis):即時系統中「連線失敗和重連」要處理哪兩件事?