← Back to blog ZipRecruiter OA Experience Review|Match Scoring + String Similarity + System Design OA Assist Playbook
ZipRecruiter

ZipRecruiter OA Experience Review|Match Scoring + String Similarity + System Design OA Assist Playbook

2026-05-23

ZipRecruiter (NYSE: ZIP), one of the largest U.S. job platforms, runs an OA that aligns tightly with its product: Job Matching scoring, string similarity, and Skill Graph. This review covers SDE and Data Scientist tracks based on the last year of community reports, with full solutions and an OA assist playbook.

ZipRecruiter OA Snapshot

Dimension Detail
Platform HackerRank
Duration 75 minutes
Questions 2–3 (one SQL or probability)
Focus Strings, match scoring, graphs, SQL
Grading Auto + partial code-style deductions
Pass rate ~45% per community

Track 1: Job Matching Score

Surface

Given Job(id, title, skills, salary) and a list of Candidate(id, skills, expected_salary), implement match_score(job, candidate) returning a 0–100 match score.

Scoring rules (prompt-specified)

Python Solution

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)

Trap: the gap-to-deduction mapping is literally specified in the prompt — never improvise. The most common bug is diff / 1000 (float) instead of diff // 1000 (int), which throws off rounding.

Track 2: String Similarity

Surface

Given strings query and title, compute:

Most common follow-up: filter titles[] where edit_distance(query, t) ≤ k.

Python Solution (edit distance + filter)

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]

Optimization: with 10^5 titles (hidden case reported), pre-filter by length: skip when abs(len(q)-len(t)) > k.

Track 3: Skill Graph

Surface

Given (parent, child) skill edges (e.g., Java → Spring, Spring → SpringBoot), implement:

Python Solution

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)

Trap: graphs may cycle (A→B, B→A is a reported hidden case). Use a visited set to avoid infinite loops.

Frequency Distribution

Track Frequency Key Surface Common Trap
Job Matching ★★★★★ Dict + literal rules Float rounding
String similarity ★★★★ Edit distance + length pre-filter Large input TLE
Skill Graph ★★★★ BFS + cycle handling Self-cycle
SQL Top-K Recommendation ★★★ Window + JOIN Partition boundary
Resume keyword extraction ★★ Regex + lexicon Case sensitivity

OA Assist Playbook

What oavoservice OA assist gives you

A "rule-literal" checklist

ZipRecruiter loves stacking literal scoring rules: "salary gap divides by 1000 with max 20 deduction", "skill overlap +10 per hit". We maintain a rule-literal checklist that catalogs every "you must follow the prompt exactly, do not optimize" scoring rule. OA assist members get it directly.

Add WeChat Coding0201 for pricing and scope.


FAQ

What languages does ZipRecruiter OA accept?

All HackerRank-supported languages. Community shows Python / Java each at ~40%.

How fast does ZipRecruiter move?

Phone screen typically within 5–7 days — quicker than FAANG.

Overlap with Indeed / LinkedIn?

String + Graph overlap ~60%; Job Matching is ZipRecruiter-specific.

Cooldown if I fail?

Usually 6 months. Cross-role (SDE → DS) goes into a different pool.


Preparing for ZipRecruiter / Indeed / LinkedIn / Glassdoor?

oavoservice tracks job platform companies (ZipRecruiter / Indeed / LinkedIn / Glassdoor / Handshake). Our mentors come from live matching / search / recommendation teams and deliver question bucketing, rule-literal training, large-input optimization, and HackerRank simulation.

👉 Add WeChat: Coding0201 for the ZipRecruiter bank and OA assist plan.


Contact

Email: [email protected]
Telegram: @OAVOProxy