← 返回博客列表
oavoservice.com

Amazon/Google 面試真題:多路日誌合併 (K-way Merge)

2025-09-06

🔥 Amazon SDE 面試復盤

這位學員在 oavoservice 的即時輔助下,不僅完美解出了這道經典 K-way Merge 題目,還通過與面試官探討「串流處理」和「外部排序」,直接把演算法題聊成了系統設計,當場獲得 Strong Hire 評價。


📘 題目原文 (Engineering Context)

Merge K Sorted Log Streams You are monitoring a distributed system with K application servers. Each server produces a log file where log entries are strictly sorted by timestamp (ascending). Your task is to merge these K log files into a single, chronologically sorted master log stream for analysis.

題目簡述(口語化): 你有一堆(K 個)伺服器日誌檔案,每個文件裡的日誌都已經按時間戳排好序了。現在的任務是把它們合併成一個總的大日誌檔案,依然要保持時間順序。

範例:

目標輸出:

[10:00 (A), 10:00 (C), 10:01 (B), 10:03 (C), 10:05 (A), ...]


一、開局:用 Clarifying Questions 展現專業

很多候選人上來就寫程式碼,oavoservice 的導師第一時間提示學員:先確認邊界,這才是 Senior 的表現。

典型 Clarifying Questions:

  1. Tie-breaker 規則:如果兩台伺服器在同一毫秒產生日誌,誰先誰後?(通常按 Server ID 排序。)
  2. 數據規模:這些日誌是能一次性裝入記憶體,還是海量數據需要 串流處理 (streaming)?(這決定了是簡單陣列 + sort(),還是要 迭代器模式 + 最小堆積。)
  3. 空檔案處理:是否存在某台伺服器完全沒有日誌的情況?空列表要不要特殊相容?

二、思路博弈:從暴力到最優

方案 A:暴力解 (Brute Force)

方案 B:最小堆積 K 路歸併 (Min-Heap Strategy) 滿分方案

既然每個檔案內部有序,我們只需要比較這 K 個檔案當前的「隊頭」元素

核心資料結構

執行步驟

  1. 初始化:把 K 個日誌流的第一條日誌全部放進堆裡。
  2. 循環處理
    • 從堆頂彈出時間最早的那條日誌,輸出到結果流;
    • 根據 server_id 找到對應的日誌流,將該流的下一條日誌入堆;
    • 如果某條日誌流已經耗盡,就不再往堆裡放該源的元素。
  3. 終止條件:堆為空,所有日誌合併完畢。

複雜度分析


三、oavoservice 即時輔助全還原

1️⃣ 破題階段 (3 分鐘)

2️⃣ 編碼階段 (Hand-coding)

3️⃣ 深度追問 (Follow-up)

面試官追問:

"If the logs are huge (TB-level) and cannot fit into memory, what would you do?"

oavoservice 提示關鍵詞: External Sort, Streaming, IO-bound

我們引導學員這樣回答:

效果:面試官立刻把話題提升到 System Design 層面,與學員討論日誌採集與分析流水線。


四、為什麼你需要 oavoservice

K-way Merge 這種經典題中,能寫出來的人很多,但能講得漂亮、程式碼優雅、應對變體的人很少

oavoservice 的即時輔助可以幫你:


需要面試輔助服務?聯繫我們

需要面試真題? 立刻聯繫微信 Coding0201獲得真題