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" 同組)。要求:
- 找到大小恰好為 k 的分組
- 在這些分組中,回傳字典序最小的代表字串(取每組裡字典序最小的)
- 如果不存在 size = k 的組,回傳
""
解題思路
經典 hashmap by character set。兩個細節坑:
- 字元集要排序去重:
"".join(sorted(set(w))) - 同組裡要選字典序最小的「原字串」——不是排序後的字元集
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 次」約束 + 「找最大乘積」。
- 狀態:
(currency, hops) - 邊權:rate(乘法關係)
- 演算法:因為求 最大乘積,用 Dijkstra 變體 + 取對數 / 直接維護最大堆
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 + 維護兩個最佳子樹:
- 對每個節點 u,做 DFS 維護「從 u 出發往子樹的最長 path」,path 包含
(累計邊權, 路徑上最大 node_cost) - 在 u 處合併兩個子樹:
edge_sum1 + edge_sum2 + max(max_node1, max_node2, node_cost[u])
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 秒延遲。兩個適配技巧:
- 在本地 VS Code 寫好再貼上
- 用
print除錯時盡量減少呼叫次數
Q5:題目用什麼語言寫最穩?
Python 仍是首選。Java / C++ 在 Google 內部更受歡迎,但 OA 階段沒有任何加分——評分純看 hidden test 通過率。Go / Rust 慎用:Hackerrank 的部分 helper 函式不全。
Q6:Google New Grad Onsite 流程是什麼樣?
通過 OA 後:
- Recruiter Call(30 min):聊背景 + 時間安排
- Onsite × 5 輪:4 輪 coding + 1 輪 Googleyness(行為面)
- Hiring Committee(HC)評分:committee 不見 candidate,純看面試官打分
- Team Match(2-6 週):HC 通過後才進 team match
- 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