ZipRecruiter 2026 SDE Intern / NG OA 走 CodeSignal General Coding Assessment(GCA)的常見模板:70 分鐘 4 題,難度梯度從 L1 到 L4。題目本身不算難,但 ZipRecruiter 特別偏愛字串處理 + 招聘場景圖論,沒刷過他們風格的同學很容易在最後一題超時。本文按真題盤點 → 節奏 → 解法 → 踩雷的順序給出完整複盤。
OA 平台與節奏
| 維度 | 詳情 |
|---|---|
| 平台 | CodeSignal GCA |
| 題量 | 4 道 Coding |
| 時長 | 70 分鐘 |
| 難度梯度 | L1 簡單 → L4 困難 |
| 評分 | 0–600 分,按題目難度加權 |
| 通過線 | 通常 ≥ 480 分進下一輪 |
| 監考 | CodeSignal 攝影機 + 螢幕監控 |
CodeSignal 的特點是前 3 題分值低(合計 ~ 360),第 4 題佔 ~ 240,所以前 3 題必須全過,第 4 題再盡力 partial。
2026 春招真題盤點(4 道)
Q1(L1):陣列遍歷計數 — 10 分鐘內必拿
給定字串陣列 words,回傳長度為 k 的字串數量。
def count_length_k(words, k):
return sum(1 for w in words if len(w) == k)
時間複雜度:O(n)
Q2(L2):字串變形 — Job Title 標準化
輸入一個 job title 字串(含混合大小寫、連字符、多餘空格),輸出標準化版本:每個單詞首字母大寫,單詞間單一空格,去掉前後空格。
def normalize_title(s):
return " ".join(part.capitalize() for part in s.split())
進階版本(如果有連字符需要保留):
def normalize_with_hyphen(s):
def cap_token(tok):
return "-".join(p.capitalize() for p in tok.split("-"))
return " ".join(cap_token(t) for t in s.split())
時間複雜度:O(n)
Q3(L3):Job-Skill 匹配評分
給定 candidate 的 skill 列表和一組 job 的 required skills,輸出每個 job 與 candidate 的Jaccard 相似度降序排序後的前 k 個 job。
def top_k_jobs(candidate_skills, jobs, k):
cs = set(candidate_skills)
scored = []
for job_id, required in jobs:
rs = set(required)
union = cs | rs
inter = cs & rs
score = len(inter) / len(union) if union else 0.0
scored.append((score, job_id))
scored.sort(key=lambda x: (-x[0], x[1]))
return [job_id for _, job_id in scored[:k]]
時間複雜度:O(m · (s + r) + m log m),m 是 job 數
Q4(L4):Skill Graph 關鍵路徑
給定 skill graph(每個 skill 有先修依賴),求 candidate 從已掌握集合 S 出發,額外學習多少 skill 後能解鎖 target skill t。如果無法解鎖,回傳 -1。
要點:
- 構建反向依賴圖:要解鎖 t,必須先解鎖它的所有 prereq
- 從 t 出發 DFS / BFS,沿 prereq 方向走,統計未掌握的節點數
- 注意環(題目可能 promise DAG,但穩妥起見偵測一下)
from collections import defaultdict
def min_skills_to_unlock(graph, known, target):
"""
graph: dict[skill] -> list[prereq skills]
known: set of skills candidate already has
target: target skill
"""
if target in known:
return 0
visited = set()
stack = [target]
needed = 0
while stack:
cur = stack.pop()
if cur in visited:
continue
visited.add(cur)
if cur in known:
continue
needed += 1
for prereq in graph.get(cur, []):
if prereq not in visited:
stack.append(prereq)
return needed
時間複雜度:O(V + E)
注意:題目的真實變體可能要求返回最短的「學習順序」,那時需要拓撲排序 + BFS 層級。
70 分鐘節奏建議
0–10 分鐘 Q1 拿滿(含 sample case)
10–25 分鐘 Q2 拿滿 + 處理 edge case
25–45 分鐘 Q3 拿滿(注意 Jaccard 分母為 0 的情況)
45–68 分鐘 Q4 盡可能拿 partial,至少跑通 sample
68–70 分鐘 回看提交,確認沒有 syntax error
關鍵:CodeSignal 不允許查看歷史提交分數,所以每題寫完必須自己跑過 sample + 至少 2 個 edge case 再提交。
ZipRecruiter 風格的 4 個細節
- 字串題特別多:和招聘業務相關(job title、resume、skill)
- 資料量不大:n ≤ 10⁴,但題目會卡 O(n²) 通不過
- 樣例非常寬鬆:sample case 簡單,hidden case 才嚴
- Q4 經常超時:因為沒讀完題目就開始寫
常見踩雷
- Q2 用
s.title():會把 "iOS" 變成 "Ios",錯答 - Q3 union 為空時除以 0 沒處理
- Q4 沒考慮 target 已經在 known 裡直接回傳 0
- 用 print debug 而忘記刪(CodeSignal 會扣「程式碼品質」分)
- 最後 1 分鐘在改程式碼導致提交失敗
CodeSignal 的「程式碼品質」評分
CodeSignal GCA 除了 correctness,還會給code quality score(A–F):
| 維度 | 影響 |
|---|---|
| 變數命名 | tmp/x/y 一律扣 |
| 函式拆分 | 80 行單函式會扣 |
| 註釋 | 完全沒註釋不扣,但註釋錯誤會扣 |
| 用 print debug | 留在提交裡扣 |
程式碼品質從 A 降到 C,總分會折損 ~ 50。
我們見過的高分模式
oavoservice 學員中 ZipRecruiter CodeSignal 拿到 600 滿分的,普遍特徵是:前 3 題各留 1–2 分鐘 sanity check + 第 4 題至少 partial。我們 OA輔助 流程會針對 CodeSignal 評分細則做程式碼風格審計。
具體方案與報價,加微信 Coding0201 溝通。
FAQ
ZipRecruiter CodeSignal 難度怎麼樣?
L1–L3 偏簡單(LC easy/medium),L4 是 LC medium-hard。整體比 Meta CodeSignal 簡單一檔。
600 分能拿 onsite 嗎?
社群回饋 ≥ 480 分進 phone screen,≥ 540 通常有 onsite。600 是 differentiator。
CodeSignal 可以用 ChatGPT 嗎?
不可以。CodeSignal 攝影機 + 螢幕監控 + 切視窗偵測,違規會被 blacklist。
Python 在 CodeSignal 會 TLE 嗎?
L1–L3 不會。L4 可能會,建議用 Python 3 + 簡潔實作,避免不必要的 deepcopy。
正在準備 ZipRecruiter / Indeed / Glassdoor / LinkedIn 等招聘平台 OA?
oavoservice 長期追蹤招聘平台與 CodeSignal GCA 的 OA 真題。mentor 來自一線 SWE,可提供字串題專項、Skill Graph 類題型、CodeSignal 程式碼品質審計等 OA輔助 服務。
👉 立即加微信:Coding0201,取得 ZipRecruiter CodeSignal OA 完整備考方案。
聯絡方式
Email: [email protected]
Telegram: @OAVOProxy