← 返回部落格列表 ZipRecruiter OA 實戰手冊|字串匹配 + 技能圖 VO輔助
ZipRecruiter

ZipRecruiter OA 實戰手冊|字串匹配 + 技能圖 VO輔助

2026-05-23

ZipRecruiter 是美國最大的 AI 招聘平台之一,SDE / ML Eng 團隊拆分到 Matching、Search、Recommendations、Trust & Safety 四條業務線。OA 題面多從招聘平台業務衍生:JD 關鍵字匹配、候選人技能圖推薦、文字去噪 / 標準化

ZipRecruiter OA 概覽

維度 詳情
平台 HackerRank / CoderPad
時長 60–90 分鐘
題量 2–3 道(含 1 道偏字串)
難度 LC Medium 為主
評分 自動判題 + 隱藏 stress test

主線一:JD 關鍵字匹配

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#」要保留特殊字元,所以正規要謹慎。

主線二:技能圖推薦

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:
        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 近似演算法。

主線三:文字去噪 / 標準化

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輔助 實戰路徑

針對 ZipRecruiter SDE 這種「業務向 + 字串重 + 自動判題嚴」的特點:

加微信 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