快取與儲存練習題 (Practice - Caching & Storage)


Caching(Q1–Q12)

Question 1 - 為什麼用快取 [recall]

從 PostgreSQL 讀一個用戶資料約需 50ms,從 Redis 讀只需 1ms。這個差距背後的根本原因是什麼?


Question 2 - Latency 排序 [recall]

將以下快取位置依延遲由低到高排序:External Cache (Redis)、CDN、In-Process Cache。


Question 3 - Cache-Aside vs Write-Through [analysis]

Cache-Aside 和 Write-Through 的核心差異是什麼?為什麼面試預設選 Cache-Aside?


Question 4 - Write-Behind 風險 [recall]

Write-Behind(Write-Back)的主要風險是什麼?適合什麼場景?


Question 5 - Cache Stampede [recall]

什麼是 Cache Stampede(快取雪崩)?最有效的解決方案是什麼?


Question 6 - Eviction Policy 錯誤敘述 [recall]

以下關於 eviction policy 的敘述,何者錯誤
(A) LRU 移除最久沒被存取的資料
(B) LFU 移除存取次數最少的資料
(C) FIFO 是生產環境最常用的策略
(D) TTL 通常搭配 LRU 或 LFU 一起使用


Question 7 - Hot Key 問題 [application]

如果你的系統有一個極端熱門的快取 key(例如名人的個人資料),可能造成什麼問題?列舉三個解決方案。


Question 8 - 五步驟面試話術 [recall]

面試中介紹快取策略的五個步驟是什麼?


Question 9 - 何時用 CDN [application]

系統設計面試中,引入 CDN 最穩妥的理由是什麼?什麼時候不該用 CDN 當第一個答案?


Question 10 - 一致性策略選擇 [application]

你正在設計一個社群媒體 App 的用戶 profile cache。用戶可以隨時更新自己的暱稱和大頭照。請選擇並說明一個 cache invalidation 策略,包含取捨。


Question 11 - Cache + DB 一致性根本問題 [analysis]

「Cache 和 DB 兩個儲存系統永遠不會 100% 一致」——這個說法對嗎?為什麼?


Question 12 - Redis 掛了 [application]

你的系統重度依賴 Redis 快取,DB 在尖峰時被快取擋掉 80% 流量。如果 Redis 掛了,會發生什麼?怎麼設計才能撐住?


Blob Storage(Q13–Q20)

Question 13 - File / Block / Object 差異 [recall]

File Storage、Block Storage、Object Storage 三者最關鍵的差異是什麼?物件儲存放棄了什麼能力?


Question 14 - 耐久性 vs 可用性 [recall]

S3 Standard 的耐久性是 11 個 9,可用性是 99.99%。這兩個數字分別代表什麼?為什麼不一樣?


Question 15 - 儲存分層取捨 [application]

面試官問:「這些用戶上傳的歷史資料怎麼處理才能控制成本?」你會怎麼回答?要注意什麼陷阱?


Question 16 - 防止公開曝露 [application]

S3 資料外洩事件幾乎都來自配置錯誤的公開 Bucket。設計中要說清楚哪幾道防線?


Question 17 - 防誤刪與回滾 [recall]

面試官問「怎麼確保重要資料不會被誤刪?怎麼支援回滾?」最乾淨的 S3 答案是什麼?代價是什麼?


Question 18 - 全球存取設計 [analysis]

全球各地用戶都要存取同一份資料。讀多寫少和需要跨 Region 讀寫,兩種情況的設計有何不同?


Question 19 - Blob vs DB 怎麼選 [analysis]

「Blob Storage 和資料庫都能存資料」——你用什麼粗略標準決定一份資料放哪?


Question 20 - 在 Blob Storage 上做搜尋 [application]

用戶把大量 PDF 和圖片存在 S3,現在要支援「搜尋文件內容」和「以圖搜圖」。怎麼做?



Part 1:Distributed Cache

Q21(Recall):從單機 cache 升級成 distributed cache cluster 後,問題的重心如何轉移?


Q22(Recall):為什麼 distributed cache 不能用 hash(key) % N 分片?正確做法是什麼?


Q23(Recall):Consistent Hashing 都做了,為什麼還是會有 hot key?三種緩解方法是什麼?


Q24(Application):整個 cache cluster 掛掉時會發生什麼?面試要講出哪幾層防護?


Q25(Analysis):Cache stampede 的 TTL jitter 和 single-flight 都防 stampede,差在哪?為什麼生產系統常兩個都用?


Part 2:Redis

Q26(Recall):Redis 為什麼快、又為什麼「好推理」?單執行緒的代價是什麼?


Q27(Recall):Redis 的 RDB 和 AOF 兩種持久化機制各是什麼?為什麼說 Redis 耐久性是「明確取捨」?


Q28(Recall):Redis Cluster 怎麼路由 key?跨鍵操作為什麼受限、怎麼解?


Q29(Application):搶票/秒殺要「同一操作不被多實例同時執行」,用 Redis 怎麼做分散式鎖?有哪兩個經典陷阱?


Q30(Analysis):Redis Pub/Sub 和 Streams 都能做「訊息傳遞」,何時用哪個?關鍵差異是什麼?