← 返回博客列表
Google

【Google 面試複盤】一道簡單的遞迴求和,為什麼 80% 的候選人拿不到 Strong Hire?

2026-01-11

Google OOP Interview

昨天剛結束的一場 Google 現面,題目簡單到讓人起疑。

沒有複雜的 DP,沒有難搞的圖論,就是一個基礎的 File System(檔案系統) 模擬。

很多同學看到這種題,第一反應是:「穩了,這不就是個 DFS 嗎?」 **錯。**如果你只把它當成演算法題寫,哪怕 Bug Free,大概率也只能拿個 Lean Hire 甚至 No Hire。

來看看我們在 oavoservice 實時輔助中捕捉到的真實細節。

01 面試原題(改編版)

題目描述: 給定一個檔案系統,由一系列 Entity 組成,以 Map<Integer, Entity> 的形式儲存。

每個 Entity 包含:

要求: 實現一個函數 getTotalSize(entityId)

面試官給出的示例數據:

Input Map:
{
  100: { type: 'Folder', name: 'root', children: [101, 102] },
  101: { type: 'Folder', name: 'downloads', children: [103] },
  102: { type: 'File',   name: 'logo.png', size: 500 },
  103: { type: 'File',   name: 'resume.pdf', size: 200 }
}

Call: getTotalSize(100)
Output: 700 (500 + 200)

02 候選人的第一反應:掉進「邏輯陷阱」

候選人開局做得不錯,先跟面試官確認了 Data Consistency(資料一致性)

「可以假設 Map 中的 ID 都是有效的嗎?會不會有死循環引用?」

面試官點頭確認後,候選人開始寫程式碼。就像大多數刷題刷多了的同學一樣,他腦子裡瞬間蹦出了模板化的 DFS 遞迴

候選人潛意識的程式碼邏輯(偽程式碼):

// 典型的過程式程式設計思維
class FileSystem {
    Map<Integer, Entity> map;

    int getTotalSize(int id) {
        Entity e = map.get(id);
        if (e.type == "File") {
            return e.size;
        } else {
            int sum = 0;
            for (int childId : e.children) {
                sum += getTotalSize(childId);
            }
            return sum;
        }
    }
}

這段程式碼能跑通嗎? 能。 Google 會給你過嗎? 很難。

因為你在用面向過程的思維寫 Java/C++。面試官此刻眉頭微皺,因為他看到的是一個充滿了 if-else 判斷的 God Class(上帝類),而不是一個可擴展的系統。

03 oavoservice 的輔助破局:用多型取代判斷

我們在輔助過程中,敏銳地捕捉到了面試官的期待。這道題的考點根本不是遞迴,而是 Polymorphism(多型)

我們迅速提示候選人暫停 coding,重新理清類別結構:

不要在 FileSystem 裡去判斷它是 File 還是 Folder,把責任下放!

調整後的架構思路(現場實戰):

  1. 定義一個介面/抽象類別 IEntity,包含 getSize() 方法
  2. FileEntity 實現該方法:直接返回 this.size
  3. FolderEntity 實現該方法:遍歷 childrenIds,再次調用系統的獲取方法

候選人接收到訊號後,瞬間明白了 Google 想要的程式碼風格:

// 調整後的 OOD 風格
interface Entity {
    int getSize(FileSystem fs);
}

class FileEntity implements Entity {
    int size;
    public int getSize(FileSystem fs) {
        return this.size; // 乾淨,純粹
    }
}

class FolderEntity implements Entity {
    List<Integer> children;
    public int getSize(FileSystem fs) {
        int total = 0;
        for (int id : children) {
            total += fs.getSize(id); // 委託回去
        }
        return total;
    }
}

04 結局:從 "Code Monkey" 到 "Engineer"

當這套結構寫出來後,面試官的態度明顯轉變了。因為這種寫法消除了醜陋的 if (type == ...) 分支邏輯。程式碼變得極其乾淨:

FileSystem 這一層只負責查表,不負責業務邏輯判斷。

面試官隨後追加了 Follow-up

「如果我們要增加一個 SymbolicLink(軟連結)類型,你的程式碼要改多少?」

候選人自信回答:

「FileSystem 類別一行都不用改。我只需要新增一個 LinkEntity 類別實現介面即可。」

這就是 Open-Closed Principle(開閉原則) 的威力。也是這輪面試拿到 Strong Hire 的關鍵。

如果沒有這一步關鍵指點?

如果候選人堅持原來的 if-else 寫法,大概率會在 Follow-up 環節崩潰。隨著新類型的增加,主函數會膨脹成一團亂麻,最終被面試官貼上 「Lacks System Design Sense」 的標籤。

大廠面試,考的從來不僅僅是「做對」,更是「設計」。


🚀 oavoservice 專業面試助攻服務

如果你也在備戰 Google, Meta, Amazon, TikTok 等大廠的演算法與系統設計面試,卻總是因為:

❌ 拿到題不知道面試官到底在考什麼
❌ 程式碼能跑,但總是被 Challenge 邊界條件
❌ OOD 設計缺乏經驗,容易寫成「過程式腳本」

歡迎聯繫 oavoservice。

我們提供全方位的求職護航服務:

面試實時輔助 / 場外助攻(關鍵時刻拉正思路,避免踩坑)
OA 代寫 / 筆試保過(精準高效,100%通過率)
模擬面試 Coaching(還原真實大廠考點,手把手教你拆題)

與其一個人盲目刷題,不如找個懂「出題人心理」的專家帶你上岸。

📱 立即聯繫

微信:Coding0201

獲取最新北美大廠面試真題集 & 免費履歷評估。讓 oavoservice 助你 Offer 拿到手軟!


關鍵詞:Google面試, OOP設計, 多型, 面試助攻, 面試輔助, 面試作弊, VO輔助, SDE面試, 演算法面試, 系統設計面試, FAANG面試, 大廠面試, 面試真題