ML 系統設計面試最大的雷,是一聽到題目就開始講模型。面試官給你一個故意模糊的題目(「設計 YouTube 的推薦系統」),考的不是你會不會 XGBoost,而是你會不會把模糊問題拆解成一個能落地的系統。
這篇用業界公認的 8 步框架(對齊 Aminian & Xu《ML System Design Interview》),用推薦系統這個最常考的題目貫穿,每一步都附上面試官最常追問的問題——那才是真正的得分點。
⏱️ 時間分配:45 分鐘的面試,前 5 分鐘釐清需求,中間每塊約 5–7 分鐘,最後 5 分鐘總結 trade-off。
Step 1 — 釐清需求(Clarify)
不要急著動手。 先問清楚:
- 功能性:推薦給誰看?目標是什麼(點擊率?觀看時長?留存?)?一次推幾個?
- 非功能性:規模多大(例如 10 億用戶、1 億支影片)?延遲要求(< 100ms)?多久更新一次?
推薦系統案例:把目標確認為「最大化用戶長期觀看時長」,而不是只看點擊(避免標題黨)。這個區別本身就是加分點。
🎤 面試官追問:「業務目標到底是什麼?成功長什麼樣子?」「系統規模和延遲限制是多少?」
Step 2 — 定義成 ML 問題(Frame as an ML Task)⭐
這是最多人漏掉、卻最關鍵的一步。 把業務目標翻譯成精確的 ML 輸入/輸出。
推薦系統案例:
- 框成排序問題:給定 (用戶, 候選影片集合),預測每支影片的「互動機率」,再依分數排序。
- 通常拆成兩階段:召回(Retrieval) 從上億支裡快速選出幾百支候選 → 排序(Ranking) 對候選精排。
- 明確 input(user features + item features + context)、output(P(engagement))、label(看完 / 點擊)。
🎤 面試官追問:「為什麼是 ranking 不是 classification?」「label 怎麼定義?看了 3 秒算正樣本嗎?」
Step 3 — 選定指標(Metrics)
分離線和線上兩套,這是必考對比。
- 離線:排序用 NDCG@k、Recall@k、MAP、AUC/LogLoss——不要用 accuracy,因為推薦是排序問題、且樣本極度不平衡。
- 線上:CTR、平均觀看時長、留存率,用 A/B test 驗證。
🎤 面試官追問(經典):「離線指標變好、但線上掉了,你怎麼辦?」(答:檢查 training-serving skew、離線指標與業務目標脫鉤、feedback loop、A/B 設計問題。)「為什麼用 NDCG 不用準確率?」
Step 4 — 資料(Data)
- 來源:多為隱式回饋(點擊、觀看時長、跳過)。
- 正負樣本:正樣本=看完/長觀看;負樣本=曝光未點 + 隨機負採樣。
- 不平衡:點擊率可能只有幾 %,需負採樣或調 class weight。
- 切分:一定要按時間切(用過去預測未來),不能隨機切——否則 data leakage。
🎤 面試官追問:「正負樣本怎麼取?曝光未點一定是負樣本嗎(可能只是沒看到)?」「不平衡怎麼處理?」
Step 5 — 特徵工程(Features)
- 用戶特徵:歷史行為、人口屬性、長短期興趣。
- 物品特徵:類別、內容 embedding、統計(熱度、平均完播率)。
- 情境特徵:時間、裝置、當前 session。
- 高基數 ID(user_id、video_id):用 embedding 而非 one-hot。
- 防 leakage:特徵只能用「預測當下之前」的資訊,統計類特徵要注意時間窗。
🎤 面試官追問:「上億支影片的 ID 怎麼當特徵?」「怎麼確保沒用到未來資訊(leakage)?」
Step 6 — 模型架構(Model)
先講 baseline,再進階——不要一上來就最複雜的。
- Baseline:熱門推薦 / 協同過濾(CF),快速建立比較基準。
- 召回層:雙塔模型(Two-Tower) + ANN 近似最近鄰,毫秒級從上億選候選。
- 排序層:GBDT(如 LightGBM)或 Wide & Deep / DLRM 之類的深度模型做精排。
🎤 面試官追問:「為什麼不直接上一個大 DNN 對全部影片打分?」(答:上億 item 全打分延遲爆炸,所以要兩階段:召回粗篩、排序精排。)「為什麼先 baseline?」
Step 7 — 訓練(Training)
- Loss:pointwise(logloss)、pairwise(BPR)、listwise——排序常用 pairwise/listwise。
- 負採樣:召回階段尤其重要(in-batch negatives)。
- 冷啟動:新用戶用熱門/人口屬性;新影片用內容特徵 embedding。
- 重訓頻率:行為資料變化快,常需每日重訓或增量更新。
🎤 面試官追問(經典):「冷啟動怎麼解——新用戶、新影片沒有互動資料?」「多久重訓一次?線上學習可行嗎?」
Step 8 — 驗證、部署與監控(Evaluation, Serving & Monitoring)
- 驗證:先離線評估(NDCG@k 等)→ 再 A/B test 看線上指標,兩者都過才全量上線。
- 部署:召回的候選可離線預算 + 線上即時排序;嚴守 latency budget;模型壓縮(量化、蒸餾)、快取。
- 監控:監控 data drift / 模型衰退、預測分佈、線上指標;設定重訓觸發條件;注意推薦系統的 feedback loop(模型影響曝光、曝光又變成訓練資料)。
🎤 面試官追問:「latency 限 100ms,排序層怎麼跑得動?」「上線後效果慢慢衰退,怎麼辦?」「A/B test 怎麼設計、要看多久?」
一張表記住全部
| 步 | 重點 | 面試官最愛追問 |
|---|---|---|
| 1 釐清需求 | 目標 + 規模 + 延遲 | 成功指標是什麼? |
| 2 ⭐定義 ML 問題 | 輸入/輸出/label、兩階段 | 為什麼是 ranking? |
| 3 指標 | 離線 NDCG@k vs 線上 A/B | 離線好線上掉怎麼辦? |
| 4 資料 | 正負樣本、按時間切 | 不平衡 / leakage? |
| 5 特徵 | embedding、防 leakage | 高基數 ID 怎麼處理? |
| 6 模型 | baseline → 召回+排序 | 為何不直接大 DNN? |
| 7 訓練 | loss、負採樣、冷啟動 | 冷啟動怎麼解? |
| 8 驗證/部署/監控 | A/B、latency、drift | 效果衰退怎麼辦? |
萬用口訣
「先框問題、再談模型」——任何 ML SD 題目,永遠先走 Step 1–2(釐清 + 定義成 ML 任務),把模糊題目變成精確的 input/output/metric,再往下。能做到這點,你就已經贏過一半的候選人。