ZipRecruiter is one of the largest AI recruiting platforms in the US, with SDE / ML Eng teams split across Matching, Search, Recommendations, and Trust & Safety. OA questions derive from real platform business: JD keyword matching, candidate skill-graph recommendation, text normalization. This playbook plus a VO assistance roadmap.
ZipRecruiter OA Snapshot
| Dimension | Detail |
|---|---|
| Platform | HackerRank / CoderPad |
| Duration | 60–90 minutes |
| Questions | 2–3 (one is string-heavy) |
| Difficulty | LC Medium |
| Grading | Auto + hidden stress tests |
Line 1: JD Keyword Matching
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
Watch for "c++", "c#" — preserve special chars in the regex.
Line 2: Skill-Graph Recommendation
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
Brute greedy is O(V² · E) — passes V ≤ 200; advanced variants want set-cover approximation.
Line 3: Text Normalization
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,
}
High-Frequency Cheat Sheet
| Problem Type | Frequency | Core Pattern |
|---|---|---|
| JD keyword matching | ★★★★★ | regex + set + simple variants |
| Skill-graph recommend | ★★★★ | BFS closure + greedy |
| Resume normalization | ★★★★ | re.split + dict mapping |
| Trie autocomplete | ★★★ | Trie + DFS |
| LRU / Top-K | ★★★ | LinkedHashMap / heapq |
VO Assistance Path
oavoservice Packages
- OA Assistance: same-day reasoning sanity-check + edge-case debrief
- VO Assistance mocks: 4–5 round onsite — search system design, ML pipeline, ZipRecruiter-style scenarios
- VO Proxy: same-day realtime support
- Behavioral script: ZipRecruiter values "Bias for Action" and "Customer Obsession"
Add WeChat Coding0201 for pricing.
From Tripping on String Problems to Passing ZipRecruiter OA
We were glad to help this cohort pass the ZipRecruiter SDE OA. Many candidates told us string problems look LC Easy, but ZipRecruiter's hidden tests cover emoji, Unicode, plural variants, HTML tags — pure LC grinding doesn't cut it.
If you're prepping ZipRecruiter, LinkedIn, Indeed, or Greenhouse SDE OA / VO and feel directionless on string edge cases + business wrapping, contact oavoservice. We tailor OA / VO assistance to your gaps.
FAQ
Which language for ZipRecruiter OA?
Python / Java / Go / TypeScript. Community reports: ~75% Python (string handling fluency).
Same OA across Matching and Search teams?
Same backbone; Matching leans ML pipeline + recommendation graphs, Search leans inverted index + ranking signals. Both contain a string problem.
How many VO rounds?
Typically 4–5: 1 algo + 1 system design + 1 ML / data + 1 behavioral + 1 HM.
Cooldown if failed?
Usually 6 months. Matching / Search / T&S OA buckets are separate — can re-apply across tracks earlier.
Preparing ZipRecruiter SDE OA / VO?
👉 Add WeChat: Coding0201 — grab the ZipRecruiter VO assistance pack.
Contact
Email: [email protected]
Telegram: @OAVOProxy