ZipRecruiter(NYSE: ZIP)作为美国最大求职平台之一,OA 题面非常聚焦自家业务:Job Matching 评分、字符串相似度匹配、Skill Graph。本篇整理近一年 OA 经验复盘,覆盖 SDE / Data Scientist 两条 track,给出完整解法和 OA辅助 接入方式。
ZipRecruiter OA 概览
| 维度 | 详情 |
|---|---|
| 投放渠道 | HackerRank |
| 时长 | 75 分钟 |
| 题量 | 2–3 题(含 1 道 SQL 或概率) |
| 主考方向 | 字符串、匹配评分、图、SQL |
| 评分 | 全自动判题 + 部分代码风格扣分 |
| 通过率 | 社区反馈约 45% |
主线一:Job Matching 评分
题面特征
给定一个 Job(id, title, skills, salary) 和一组 Candidate(id, skills, expected_salary),要求实现 match_score(job, candidate),返回 0–100 的匹配分。
评分规则(题面给定)
- skill overlap:每命中一个 +10
- salary:候选期望 ≤ job 上限 +20,否则按差距打折
- title 关键词:title 中包含候选 top skill +10
Python 解法
def match_score(job, candidate):
score = 0
js = set(job['skills'])
cs = set(candidate['skills'])
score += 10 * len(js & cs)
if candidate['expected_salary'] <= job['salary']:
score += 20
else:
diff = candidate['expected_salary'] - job['salary']
score += max(0, 20 - diff // 1000)
title_lower = job['title'].lower()
for s in candidate.get('top_skills', []):
if s.lower() in title_lower:
score += 10
break
return min(100, score)
易错点:题面里规则的优先级(salary 差距按 1000 / 5000 / 整数)是字面定义,不能自己发挥。社区反馈最常见错误是 (diff // 1000) 写成 diff / 1000 导致浮点四舍五入。
主线二:字符串相似度匹配
题面特征
给定两个字符串 query 和 title,计算:
- 公共子串最长长度
- edit distance
- token Jaccard
社区反馈最多的是 edit distance + 1 道延伸题:「求 query 与一组 titles[] 中 edit distance ≤ k 的所有 title」。
Python 解法(标准 edit distance + 过滤)
def edit_distance(a, b):
m, n = len(a), len(b)
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(m + 1):
dp[i][0] = i
for j in range(n + 1):
dp[0][j] = j
for i in range(1, m + 1):
for j in range(1, n + 1):
if a[i - 1] == b[j - 1]:
dp[i][j] = dp[i - 1][j - 1]
else:
dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1])
return dp[m][n]
def filter_titles(query, titles, k):
return [t for t in titles if edit_distance(query, t) <= k]
优化建议:当 titles 数量很大时(社区反馈隐藏 case 有 10^5 数量级),需要先用 长度差过滤(abs(len(q)-len(t)) > k 时直接跳过)。
主线三:Skill Graph(图连通)
题面特征
给定 skill 之间的 (parent, child) 关系(如 Java → Spring、Spring → SpringBoot),实现:
descendants(skill):返回所有子代 skillis_related(a, b):判断 a 是不是 b 的祖先
Python 解法
from collections import defaultdict, deque
class SkillGraph:
def __init__(self, edges):
self.children = defaultdict(set)
self.parents = defaultdict(set)
for p, c in edges:
self.children[p].add(c)
self.parents[c].add(p)
def descendants(self, skill):
result = set()
q = deque([skill])
while q:
cur = q.popleft()
for c in self.children[cur]:
if c not in result:
result.add(c)
q.append(c)
return result
def is_related(self, a, b):
return b in self.descendants(a)
易错点:图可能成环(社区反馈隐藏 case 有 A→B, B→A 的 self-cycle),用 visited 集合避免无限循环。
ZipRecruiter OA 高频题分布
| 题型 | 频率 | 关键考点 | 易错点 |
|---|---|---|---|
| Job Matching 评分 | ★★★★★ | 字典 + 规则字面化 | 浮点四舍五入 |
| 字符串相似度 | ★★★★ | edit distance + 长度过滤 | 大数据集 TLE |
| Skill Graph | ★★★★ | BFS + 环检测 | 自环 |
| SQL Top-K 推荐 | ★★★ | 窗口 + JOIN | partition 边界 |
| 简历关键词提取 | ★★ | 正则 + 词典 | 大小写敏感 |
OA辅助 实战路径
oavoservice 的 OA辅助 服务
- 题型分桶:按 Job Matching / 字符串 / Graph / SQL 分桶,每桶 4 道变体
- 大数据集优化:edit distance 长度差过滤、字符串预处理模板
- OA 当天实时辅助:低延迟思路核对 + 边界 case 提醒
- VO 衔接:ZipRecruiter onsite 4 轮(coding + sysdesign + BQ + HM),mentor 不变
一份「规则字面化」清单
ZipRecruiter 题面特别喜欢给一堆字面规则:「salary 差距按 1000 取整,最多扣 20 分」「skill overlap 命中一个加 10 分」。我们维护了一份 规则字面化清单,列出所有「不能自己优化、必须严格按题面」的判分点。OA辅助 学员可以直接拿到这份清单。
具体方案与报价,加微信 Coding0201 沟通。
FAQ
ZipRecruiter OA 用什么语言?
HackerRank 全语言支持;社区反馈 Python / Java 各占 ~40%。
OA 通过后多久面试?
社区反馈通常 5–7 天发 phone screen,整体节奏比 FAANG 快。
ZipRecruiter 和 Indeed / LinkedIn 题库重叠吗?
字符串 + Graph 部分重叠 ~60%,Job Matching 题型 ZipRecruiter 独家。
OA 没过冷却期多久?
通常 6 个月。换岗位(如 SDE → DS)一般另算池子。
正在准备 ZipRecruiter / Indeed / LinkedIn / Glassdoor 面试?
oavoservice 长期追踪招聘平台公司(ZipRecruiter / Indeed / LinkedIn / Glassdoor / Handshake)的 OA + VO 真题。mentor 来自一线 matching / search / recommendation 团队,可以提供 题型分桶、规则字面化训练、大数据集优化、HackerRank 平台模拟 等 OA辅助 / VO辅助 服务。
👉 立即添加微信:Coding0201,获取 ZipRecruiter 高频题与 OA辅助 方案。
联系方式
Email: [email protected]
Telegram: @OAVOProxy