面試真題講解
逐題講清解題思路、關鍵實作與常見追問。
如何設計分散式唯一 ID 產生器?
從容量限制推導 Snowflake 位元配置,處理時鐘回撥、worker 身分、序號溢位和多區域故障,並比較 UUIDv7 與號段方案。
在瀏覽器輸入 URL 後會發生什麼?
從 URL 解析、DNS、QUIC/TCP、TLS、HTTP 到導覽提交與渲染,說清楚真實請求路徑、可略過階段與效能定位方法。
產品經理面試:DAU 驟降 15%,你會如何診斷?
用指標口徑核對、絕對貢獻拆解、巢狀漏斗與時間線證據定位 DAU 異常,並依使用者影響決定修資料、暫停發布或回復前一版。
如何設計動態 Top-K 高頻項目的資料結構?
從讀寫比例推導動態 Top-K 的精確資料結構,提供可執行的頻次 bucket 實作、正確性不變量與複雜度,並說明記憶體受限時何時改用 Space-Saving 或 Count-Min Sketch。
類別極度不平衡時,如何選擇模型指標與分類門檻?
從混淆矩陣、審核容量和誤判成本推導分類指標與決策門檻,並說明 AUROC、PR 曲線、機率校準及基準率變化各自解決什麼問題。
如何回答「請分享一次失敗經驗」的行為面試題?
用 STAR 說清楚一次真實失敗,把個人判斷、實際影響、補救行動和已驗證的改變串成完整證據鏈,避免把推卸責任或無關痛癢的失誤包裝成檢討。
如何設計分散式任務排程器,避免漏執行與重複執行?
從執行實例識別、分片時間索引與至少一次投遞出發,設計支援單次及 Cron 任務的多租戶排程器,並處理整點尖峰、錯過觸發、時區、取消競態與故障復原。
熱門快取過期時,如何避免快取踩踏?
從軟過期、請求合併與分散式租約出發,設計能承受熱門鍵失效、刷新者崩潰、快取故障與延遲寫回的快取讀取路徑。
產品經理面試:如何為衝突的功能需求排優先順序?
用目標、硬性限制、證據強度、延遲成本和機會成本比較衝突需求,作出單一選擇,並寫清楚承諾、替代方案與重新決策的觸發條件。
軟體工程師面試:如何進行高品質程式碼審查?
用風險優先的兩階段審查法回答程式碼審查面試題,說明如何理解改動意圖、識別阻擋問題、寫出可執行的意見,並決定核准或要求修改。
如何回答「與同事發生技術分歧」的行為面試題?
用一段真實經歷說明你如何把技術爭論變成可決策的問題:先對齊目標與標準,用證據提出異議,尊重決策權,並在決定作出後負責執行。
機器學習中的資料洩漏是什麼?如何發現與避免?
以詐欺辨識模型為例,建立預測時間契約,排查目標、時間、實體與預處理洩漏,並設計可信的資料切分、交叉驗證和最終留出測試。
如何實作執行緒安全的有界阻塞佇列?
用環形陣列、互斥鎖和兩個條件變數實作有界阻塞佇列,並從狀態不變量、線性化點、虛假喚醒和中斷語意證明多生產者、多消費者下的正確性。
如何設計支援簡訊、Email 與推播的多管道通知系統?
以每日 10 億個管道投遞任務為假設,設計同時承載 OTP 與行銷活動的通知系統,釐清優先級隔離、投遞狀態、亂序回呼、重試與可驗證的故障復原。
PostgreSQL 交易隔離如何避免寫入偏斜?
以醫師值班這項跨資料列不變量,推導 Read Committed、Repeatable Read 與 Serializable 的實際行為,並比較序列化重試、明確鎖定及單列條件更新三種修正方式。
如何實作 O(1) 的 LRU 快取?
從查找與最近使用順序的限制推導 LRU 快取,以雜湊表和雙向鏈結串列完成實作,並透過指標、淘汰與更新不變量驗證正確性,避免只背模板。
軟體工程師面試:如何系統化排查線上故障?
以錯誤率和延遲突增為例,拆解影響分級、先止損、假設驅動排查、低風險驗證與防止復發,形成可直接口述的線上故障回答框架。
產品經理面試:如何為新功能定義成功指標?
從使用者目標出發,為新功能定義一項主指標、診斷指標與護欄指標,並用可稽核的口徑和實驗決策規則避免把使用量誤當成價值。
如何回答「資訊不完整時做決定」的行為面試題?
用 STAR 組織真實經歷,並從決策時限、關鍵未知項、可逆性、風險護欄與復盤說明你如何在不確定中推進工作,而不是把運氣包裝成判斷力。
串流處理如何應對延遲與亂序事件,確保視窗彙總正確?
以每小時營收為例,從事件時間、watermark、允許延遲與去重狀態推導串流處理方案,並處理結果修正、狀態清理、故障復原與離線對帳。
如何設計冪等的建立訂單 API,避免重試產生重複訂單?
從冪等鍵範圍、請求指紋與資料庫唯一限制出發,設計可安全重試的建立訂單 API,並處理並行請求、回應遺失、鍵過期與下游副作用。
如何設計分散式限流器,兼顧突發流量與故障降級?
從容量估算、令牌桶原子更新與閘道接入出發,設計每秒百萬次檢查的多租戶限流系統,並處理熱點、多地域、重試與儲存故障。
如何手寫 JavaScript 深層複製,正確處理循環參照與共用參照?
先定義有限的複製契約,再以來源物件到副本的 WeakMap 實作深層複製,讓循環參照、共用參照、Map、Set 與支援的內建物件保持一致,並判斷何時應直接使用 structuredClone。
如何手寫 JavaScript EventEmitter,正確處理 on、off、once 與 emit?
從事件契約出發手寫 JavaScript EventEmitter,處理重複註冊、派發中增刪監聽器、once 重入與例外傳遞,並以邊界案例驗證語意。