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)
# 检测可达性:如果某 prereq 在 graph 里不存在且不在 known,视为不可达
for v in visited:
if v not in known and v not in graph and v != target and v not in graph:
# 叶节点 prereq 必须在 known 才能解锁
if v not in known:
pass # 已计入 needed
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