← 返回部落格列表 Google 2026 New Grad OA 完整攻略|Software Engineer Early Career US 三大題型真題精選
Google

Google 2026 New Grad OA 完整攻略|Software Engineer Early Career US 三大題型真題精選

2026-05-15

Google Software Engineer, Early Career (United States) 是 2026 招聘季最受關注的職缺之一——這個職缺針對大四在讀或畢業 ≤ 1 年的 candidate,全程不要 referral 也能進 OA 池(系統按 timestamp 排隊)。但要從 35,000+ 履歷裡活下來,第一關 OA 幾乎決定了 70% 的命運

本文基於 2026-04 到 2026-05 期間一畝三分地、Reddit 與 Glassdoor 的最新資料,把 Google New Grad OA 的題型、平台、評分邏輯、變體講清楚,並給出三道真實候選人回憶的題目完整 Python 解法。

Google New Grad OA 概覽

維度 詳情
平台 Hackerrank(已從 2023 的 ChromeOS Codejam 切換)
時長 90 分鐘
題量 2 道(少數 candidate 報告 3 道,多為 batch 差異)
難度 1 道 LC Medium + 1 道 LC Medium-Hard
通過線 經驗線:2 題全過 + 至少 1 題 100% hidden test
反饋週期 7-21 天
二面 通過後進入 Onsite Loop(4 輪 coding + 1 輪 Googleyness)

重要變化:2026 cycle 起,Google 在 OA 階段新增了一個 "Behavior Insight" 短問卷(10 分鐘,30 題 Likert 量表),用於初篩 culture fit。這部分不算分,但回答與你履歷明顯矛盾會被人工 review。

真題一:Set Difference Group(集合分組求差)

題目描述

給定一個長度為 n 的字串陣列 words 與一個整數 k。把所有字串按「字元集相同」分組(如 "aabbc""abc" 同組)。要求:

解題思路

經典 hashmap by character set。兩個細節坑:

  1. 字元集要排序去重"".join(sorted(set(w)))
  2. 同組裡要選字典序最小的「原字串」——不是排序後的字元集

Python 解法

from collections import defaultdict

def find_set_diff_group(words, k):
    groups = defaultdict(list)
    for w in words:
        key = "".join(sorted(set(w)))
        groups[key].append(w)
    candidates = []
    for key, members in groups.items():
        if len(members) == k:
            candidates.append(min(members))
    return min(candidates) if candidates else ""

時間複雜度:O(n · L log L) 空間複雜度:O(n · L)

真題二:Currency Conversion Best Rate(貨幣兌換最優路徑)

題目描述

給定匯率列表 [(from, to, rate)](雙向不一定相等,可有多條同對 pair),以及起點貨幣 src、終點貨幣 dst

允許最多 m 次中間兌換,問從 1 單位 src 最多能換到多少 dst?若 src 與 dst 不連通,回傳 -1

解題思路

類似 LC 399 Evaluate Division,但加了「最多 m 次」約束 + 「找最大乘積」。

Python 解法

import heapq
from collections import defaultdict

def best_conversion(rates, src, dst, m):
    g = defaultdict(list)
    for a, b, r in rates:
        g[a].append((b, r))
    best = {(src, 0): 1.0}
    pq = [(-1.0, src, 0)]
    ans = 0.0
    while pq:
        neg_amt, u, hops = heapq.heappop(pq)
        amt = -neg_amt
        if amt < best.get((u, hops), 0):
            continue
        if u == dst:
            ans = max(ans, amt)
            continue
        if hops == m:
            continue
        for v, rate in g[u]:
            new_amt = amt * rate
            if new_amt > best.get((v, hops + 1), 0):
                best[(v, hops + 1)] = new_amt
                heapq.heappush(pq, (-new_amt, v, hops + 1))
    return ans if ans > 0 else -1

時間複雜度:O(E · m · log(V·m)) 陷阱:用 math.log 轉成最短路徑在 Python 裡有浮點誤差,會讓 hidden test 1-2 個 case 錯位;直接維護原數值 + 最大堆更穩。

真題三:Tree Diameter with Edge Cost(帶權樹的直徑變體)

題目描述

給定 n 個節點的無向樹,每條邊有正權重。每個節點上還掛著一個 node_cost

定義一條路徑的「effective cost」為:

sum(edge weights on path) + max(node_cost over path nodes)

最大 effective cost。

解題思路

經典 Tree Diameter 的變種——純直徑用兩次 BFS,但加了「max node cost」後,兩次 BFS 不再適用,必須用 DFS + 維護兩個最佳子樹

Python 解法

from collections import defaultdict

def tree_max_effective_cost(n, edges, node_cost):
    g = defaultdict(list)
    for u, v, w in edges:
        g[u].append((v, w))
        g[v].append((u, w))
    ans = [max(node_cost)]

    def dfs(u, parent):
        best = [(0, node_cost[u])]
        for v, w in g[u]:
            if v == parent:
                continue
            child_options = dfs(v, u)
            for e_sum, mx in child_options:
                best.append((e_sum + w, max(mx, node_cost[u])))
        best.sort(key=lambda x: x[0], reverse=True)
        if len(best) >= 2:
            e1, mx1 = best[0]
            e2, mx2 = best[1]
            ans[0] = max(ans[0], e1 + e2 + max(mx1, mx2))
        return best[:2]

    dfs(0, -1)
    return ans[0]

時間複雜度:O(n) :必須確保「兩條 path 來自不同子樹」。簡單做法:DFS 時一次性收集所有 child 回傳值,最後才合併,不要在 child 遍歷過程中就更新答案。

備考建議

優先級 重點 推薦題號
⭐⭐⭐ 圖 BFS/DFS/Dijkstra LC 399、LC 787、LC 743、LC 1631
⭐⭐⭐ 樹 DP / 直徑 LC 543、LC 124、LC 968、LC 1372
⭐⭐ 字串 / 字元集 LC 49、LC 438、LC 76
⭐⭐ 複合資料結構 LC 146、LC 460、LC 1146
實作題 LC 271、LC 535

時間分配:90 分鐘 = 簡單題 30 min + 難題 50 min + 複查 10 min。不要先全部讀完再寫——Hackerrank 的 IDE 有 30 秒延遲,浪費時間。


FAQ

Q1:Google New Grad OA 和 Intern OA 一樣嗎?

題型一致,但 New Grad 難度普遍高 0.5-1 個等級。Intern 是 2 題 90 分鐘 LC Medium 為主,New Grad 第二題經常出現 LC Medium-Hard / 簡單 Hard。評分線也更嚴格:Intern 一般 1 題全過 + 1 題部分就能過,New Grad 需要 2 題全過

Q2:Google 沒有 Referral 也能拿到 OA 嗎?

可以。Google 2026 Early Career 程序按「提交時間」排隊,referral 只是提速,並不保證直接進 OA 池。關鍵是早投——一畝三分地 2026-04 資料顯示,9 月開放後前 2 週提交的 candidate 進入 OA 的比例約 30%,9 月底降到 10%。

Q3:OA 通過後多久 Onsite?

歷年平均 2-4 週進入 Recruiter call,6-10 週完成全部 5 輪 onsite注意 2026 cycle 整體延後:4 月通過 OA 的 candidate 普遍報告 5-6 月才約 onsite。

Q4:Hackerrank 平台和其他公司用的 CodeSignal 有什麼區別?

Hackerrank 的 IDE 更樸素,沒有 code completion,編譯執行有 5-10 秒延遲。兩個適配技巧

  1. 在本地 VS Code 寫好再貼上
  2. print 除錯時盡量減少呼叫次數

Q5:題目用什麼語言寫最穩?

Python 仍是首選。Java / C++ 在 Google 內部更受歡迎,但 OA 階段沒有任何加分——評分純看 hidden test 通過率。Go / Rust 慎用:Hackerrank 的部分 helper 函式不全。

Q6:Google New Grad Onsite 流程是什麼樣?

通過 OA 後:

  1. Recruiter Call(30 min):聊背景 + 時間安排
  2. Onsite × 5 輪:4 輪 coding + 1 輪 Googleyness(行為面)
  3. Hiring Committee(HC)評分:committee 不見 candidate,純看面試官打分
  4. Team Match(2-6 週):HC 通過後才進 team match
  5. Offer Letter(2025-2026 cycle 平均 L3 SWE base salary $148K + sign-on)

整個流程從 OA 到 offer 通常 3-5 個月


正在準備 Google New Grad / Intern OA?

Google OA 看起來「不難」,但評分線高 + hidden test 嚴苛,純刷題的命中率有限。我們整理了 2025-2026 cycle Google New Grad 20+ 真題題庫(含變體),並按「圖 / 樹 / 字串 / 設計」四個方向輸出體系化備考路徑,歡迎聯繫。

立即加微信 Coding0201取得 Google OA 真題題庫

聯絡方式

Email: [email protected] Telegram: @OAVOProxy