ZipRecruiter 是美国最大的 AI 招聘平台之一,SDE / ML Eng 团队拆分到 Matching、Search、Recommendations、Trust & Safety 四条业务线。OA 题面多从招聘平台业务衍生:JD 关键词匹配、候选人技能图推荐、文本去噪 / 标准化。本文整合社区面经,给出 OA 实战手册 + VO辅助 接入路径。
ZipRecruiter OA 概览
| 维度 | 详情 |
|---|---|
| 平台 | HackerRank / CoderPad |
| 时长 | 60–90 分钟 |
| 题量 | 2–3 道(含 1 道偏字符串) |
| 难度 | LC Medium 为主 |
| 评分 | 自动判题 + 隐藏 stress test |
主线一:JD 关键词匹配
题目
给一段 JD(自由文本)和候选人技能列表 skills[]。返回 JD 中包含的技能列表(大小写不敏感、忽略复数 s 的简单变体)。
import re
def match_skills(jd, skills):
norm = jd.lower()
text = re.sub(r'[^a-z0-9+/# ]', ' ', norm)
tokens = set(text.split())
found = []
for s in skills:
ks = s.lower()
ks_alt = ks[:-1] if ks.endswith('s') else ks + 's'
if ks in tokens or ks_alt in tokens:
found.append(s)
return found
注意:「c++」、「c#」要保留特殊字符,所以正则要谨慎。
主线二:技能图推荐
题目
skills_graph 是技能间的「常一起出现」无向图(带权 = 共现次数)。给定候选人技能 owned[] 和招聘需求 required[],求最少补学技能数让候选人覆盖所有 required,可以通过技能图传递学习(学到 A 即可视为掌握 A 的所有邻接技能中权 ≥ θ 的技能)。
from collections import deque, defaultdict
def min_learn(skills_graph, owned, required, theta):
adj = defaultdict(list)
for u, v, w in skills_graph:
if w >= theta:
adj[u].append(v)
adj[v].append(u)
def closure(seed):
seen = set(seed)
q = deque(seed)
while q:
x = q.popleft()
for y in adj[x]:
if y not in seen:
seen.add(y)
q.append(y)
return seen
have = closure(owned)
missing = [r for r in required if r not in have]
learned = 0
while missing:
# greedy: 学一个能 closure 出最多 missing 的
best, best_gain = None, -1
for s in adj:
if s in have:
continue
gain = len(closure(list(have) + [s]) & set(missing))
if gain > best_gain:
best, best_gain = s, gain
if best is None or best_gain <= 0:
return -1
have = closure(list(have) + [best])
missing = [r for r in required if r not in have]
learned += 1
return learned
这道题暴力贪心是 O(V² · E),能过 V ≤ 200 的样例;进阶版要求 set cover 近似算法。
主线三:文本去噪 / 标准化
题目
简历 / JD 标题字段(如 "Sr. software ENGINEER (Backend) – Remote")。要求标准化:去多空格、统一大小写、解析括号 / 破折号后的修饰词。
import re
PREFIX = {'sr.': 'Senior', 'jr.': 'Junior', 'sr': 'Senior'}
def normalize_title(t):
t = re.sub(r'\s+', ' ', t.strip())
parts = re.split(r'[–\-]', t, maxsplit=1)
head, tail = parts[0].strip(), parts[1].strip() if len(parts) > 1 else ''
paren = re.findall(r'\(([^)]+)\)', head)
head_clean = re.sub(r'\s*\([^)]+\)\s*', ' ', head).strip()
words = head_clean.split()
out = []
for w in words:
out.append(PREFIX.get(w.lower(), w.title()))
return {
'title': ' '.join(out),
'modifier': [p.strip() for p in paren],
'location': tail,
}
一亩三分地高频题速查
| 题型 | 频率 | 核心模板 |
|---|---|---|
| JD 关键词匹配 | ★★★★★ | 正则 + 集合 + 简单变体 |
| 技能图推荐 | ★★★★ | BFS closure + 贪心 |
| 简历标准化 | ★★★★ | re.split + 字典映射 |
| Trie 自动补全 | ★★★ | Trie + DFS |
| LRU / Top-K | ★★★ | LinkedHashMap / heapq |
VO辅助 实战路径
oavoservice 套餐
针对 ZipRecruiter SDE 这种「业务向 + 字符串重 + 自动判题严」的特点:
- OA辅助:当天思路核对 + 边界 case 复盘
- VO辅助 mock:mentor 出 4–5 轮 onsite,针对 search 系统设计、ML pipeline 等 ZipRecruiter 风格题
- VO代面:当天实时辅助
- 行为面剧本:ZipRecruiter 重视 "Bias for Action"、"Customer Obsession"
加微信 Coding0201 沟通方案与报价。
从字符串题翻车到顺利通过 ZipRecruiter OA
这次很高兴帮这批同学顺利通过 ZipRecruiter SDE OA。很多同学反馈,字符串题看着 LC Easy,但 ZipRecruiter 的隐藏测试覆盖了 emoji、unicode、复数变体、HTML 标签 等多种现实数据噪声,光刷 LC 完全不够用。
如果你也在准备 ZipRecruiter、LinkedIn、Indeed、Greenhouse 这类招聘平台 SDE 的 OA / VO,感觉一个人复习字符串边界 + 业务包装方向模糊,欢迎联系 oavoservice。我们会根据你的具体水平和弱点,提供专业的 OA / VO 实战辅助服务和一对一 VO辅助 指导。
FAQ
ZipRecruiter OA 必须用什么语言?
可选 Python / Java / Go / TypeScript。社区面经反馈:~75% 候选人用 Python(字符串处理顺)。
Matching team 和 Search team 的 OA 一样吗?
题型主线一样,但 Matching 偏 ML pipeline + 推荐图,Search 偏倒排索引 + 排序信号。两者都会给一道字符串题。
ZipRecruiter VO 几轮?
通常 4–5 轮:1 算法 + 1 系统设计 + 1 ML / data + 1 行为 + 1 HM。
OA 没过冷却期?
通常 6 个月。Matching / Search / T&S 三条线 OA 池子是分开的,可以更早换岗位再投。
正在准备 ZipRecruiter SDE OA / VO?
👉 立即添加微信:Coding0201,获取 ZipRecruiter 高频题与 VO辅助 方案。
联系方式
Email: [email protected]
Telegram: @OAVOProxy