資料庫進階練習題 (Practice - Database Advanced)


Transactions(Q1–Q8)

Question 1 - ACID 四字 [recall]

ACID 四個字母分別代表什麼?各用一句話解釋。


Question 2 - 預設隔離等級 [recall]

PostgreSQL 的預設隔離等級是什麼?MySQL InnoDB 呢?


Question 3 - 異常配對 [recall]

將異常與定義配對:(1) Dirty Read (2) Non-repeatable Read (3) Phantom Read
/ (a) 同範圍查詢回傳不同數量 rows
/ (b) 讀到其他交易未 commit 的資料
/ (c) 同一 row 讀到不同的值


Question 4 - Lost Update 解法 [recall]

Lost Update 是什麼?Optimistic Locking 和 Pessimistic Locking 各自如何解決?


Question 5 - 2PC vs Saga [analysis]

2PC 和 Saga Pattern 的主要差異是什麼?現代微服務更常用哪個?為什麼?


Question 6 - ACID-C vs CAP-C [analysis]

ACID 的 C 和 CAP 定理的 C 有什麼不同?


Question 7 - 超賣的正解 [application]

一個電商系統需要防止庫存超賣。為了避免並發異常,把所有庫存扣減 transaction 提升到 Serializable 隔離等級。這個做法對嗎?為什麼?


Question 8 - Deadlock 預防 [application]

你的 application 用了 SELECT FOR UPDATE 來鎖 row。面試官問:「如果有兩個 transaction 同時鎖 account A 和 account B 但順序相反會怎樣?怎麼預防?」


Sharding(Q9–Q14)

Question 9 - Partitioning vs Sharding [recall]

Partitioning 和 Sharding 的差異是什麼?


Question 10 - Shard Key 三條件 [recall]

選擇 shard key 時應考慮哪三個條件?為什麼 is_premium(布林)是糟糕的 shard key?


Question 11 - Range vs Hash [analysis]

Range-Based 和 Hash-Based sharding 各自的優缺點?面試預設選哪個?


Question 12 - Celebrity Problem [application]

什麼是 Celebrity Problem?列舉兩個解決方案。


Question 13 - 跨 Shard 查詢的訊號 [analysis]

如果你發現系統需要頻繁地執行跨 shard 查詢,這代表什麼?應該怎麼應對?


Question 14 - 過早分片 [analysis]

一個團隊管理 800GB 的 PostgreSQL,CTO 要求工程師立刻分片。從面試官角度,這個決策合理嗎?


Replication(Q15–Q22)

Question 15 - 三種架構優缺點 [recall]

Single-Leader、Multi-Leader、Leaderless 三種架構各自最大的優點和缺點?


Question 16 - Read-After-Write [application]

什麼是 Read-After-Write Inconsistency?列舉兩個解法。


Question 17 - Quorum 公式 [recall]

Leaderless 架構中,Quorum 的條件公式是什麼?n=3 時,w 和 r 通常設多少?


Question 18 - Failover 挑戰排除 [recall]

以下哪個不是 Single-Leader Failover 的挑戰?
(A) Split brain (B) Conflict resolution (C) 非同步複製的資料遺失 (D) Timeout 門檻設定困難


Question 19 - 同步 vs 非同步 [analysis]

同步 replication 和非同步 replication 的核心取捨是什麼?實務常用什麼折衷?


Question 20 - Sloppy Quorum & Hinted Handoff [recall]

什麼是 Sloppy Quorum 和 Hinted Handoff?它們的代價是什麼?


Question 21 - Split Brain 風險 [analysis]

為什麼 Failover 時可能出現 Split Brain?怎麼預防?


Question 22 - Logical Replication 的價值 [analysis]

Logical (row-based) replication 相對於 WAL Shipping 的優勢是什麼?為什麼這對 CDC(Change Data Capture)很重要?


Cross-Topic(Q23–Q24)

Question 23 - Sharding + Replication 組合 [analysis]

大型分散式資料庫通常同時用 sharding 和 replication。請說明它們解決什麼不同的問題,以及一個典型配置。


Question 24 - 跨 Shard Transaction 為什麼難 [analysis]

為什麼分散式系統幾乎避免跨 shard transaction?如果業務上真的需要跨 shard 操作(例:兩用戶轉帳),有什麼替代方案?