維運與可靠性練習題 (Practice - Ops and Reliability)


Part 1:Dealing with Contention

Q1(Recall):什麼是 contention?race condition 的根本原因是什麼?


Q2(Recall):為什麼光有 Atomicity(transaction)擋不住超賣?


Q3(Recall):Pessimistic Locking 和 Optimistic Concurrency Control 各自適合什麼 contention 場景?


Q4(Recall):預設的 isolation level 能擋住門票 race 嗎?要用哪一級才行,代價是什麼?


Q5(Recall):OCC 的版本號應該選什麼欄位?為什麼?


Q6(Application):銀行帳戶已 shard 到不同 DB,跨 shard 轉帳要 A 扣 B 加同時成功。2PC 和 Saga 怎麼選?


Q7(Application):活動訂票系統怎麼避免「用戶填完付款才發現座位被搶」?


Q8(Analysis):Taylor Swift 開唱搶票——所有人搶同一場演唱會的 row,為什麼一般擴展策略全失效?怎麼解?


Q9(Analysis):Pessimistic locking 怎麼避免 deadlock?


Part 2:Overload Protection

Q10(Recall):系統過載若無任何保護機制會發生什麼?「雪崩」的關鍵災難點是什麼?


Q11(Recall):四種 rate limiting 演算法各有什麼特性?面試預設選哪個?


Q12(Recall):Rate limiting 和 Concurrency limiting 管的維度有什麼不同?


Q13(Recall):被 rate limit 擋下時,伺服器該回什麼?為什麼?


Q14(Application):分散式部署下 rate limiting 為什麼會失效?怎麼修?


Q15(Application):視訊轉碼服務遇到流量尖峰,怎麼用過載保護工具設計?


Q16(Analysis):Load shedding 和 backpressure 都處理過載,差別是什麼?各自的前提?


Q17(Analysis):Bulkhead 的粒度該怎麼決定?太細或太粗各有什麼問題?


Part 3:Reliable Delivery

Q18(Recall):為什麼說分散式系統裡「故障是必然」?可靠性設計的目標是什麼?


Q19(Recall):不設超時為什麼會導致級聯故障(cascading failure)?


Q20(Recall):哪些情況該重試、哪些不該重試?


Q21(Recall):哪些 HTTP 方法天然冪等?POST 怎麼變冪等?


Q22(Recall):退避加抖動(backoff with jitter)解決的是什麼問題?


Q23(Application):訊息佇列常保證 at-least-once,同一則訊息可能被消費多次。怎麼讓系統仍正確工作?


Q24(Application):設計呼叫外部支付 API 的可靠性策略,用一段話涵蓋多道防線。


Q25(Analysis):熔斷器的三個狀態如何轉換?Half-Open 探針成功後要注意什麼?


Q26(Analysis):Failover 和 Fallback 有什麼差別?同步複製 vs 非同步複製在 failover 時的取捨?


Part 4:Observability

Q27(Recall):可觀測性的三支柱各回答什麼問題?資料形式是什麼?


Q28(Recall):三種 Metric 類型各代表什麼?P99 為什麼必須用 Histogram 而非平均值?


Q29(Recall):四個黃金信號(Google SRE)是哪四個?


Q30(Recall):SLI、SLO、SLA 各是什麼?為什麼 SLA 通常比 SLO 寬鬆?


Q31(Application):告警應該對「原因」還是「症狀」設?舉例說明錯誤與正確做法。


Q32(Application):結構化日誌為什麼比純文字好?每條 Log 為什麼要帶 trace_id


Q33(Analysis):實際線上排查一個「P99 延遲飆高」的問題,三支柱要用什麼順序?


Q34(Analysis):為什麼不能把 user_idrequest_id 這種高基數標籤塞進 Prometheus metric label?