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