← 返回博客列表 ZipRecruiter OA 真题复盘:2026 New Grad SWE 在线评估|一亩三分地
ZipRecruiter

ZipRecruiter OA 真题复盘:2026 New Grad SWE 在线评估|一亩三分地

2026-05-12

ZipRecruiter 是美国领先的在线招聘平台,连接数百万求职者与雇主。其 SWE OA 考察标准算法能力,侧重字符串处理匹配算法数据结构设计——这些正是构建求职推荐平台的核心挑战。

OA 概览

维度 详情
平台 HackerRank
时长 90 分钟
题量 3 道编程题
难度 Easy-Medium
考察重点 字符串、数组、图、匹配算法

题型一:字符串匹配与处理

简历关键词匹配

给定职位描述中的关键词列表和一组简历,按关键词匹配分数对简历排名。

def rank_resumes(job_keywords, resumes):
    results = []
    keywords_lower = set(k.lower() for k in job_keywords)
    
    for resume_id, text in resumes:
        words = set(text.lower().split())
        score = len(keywords_lower & words)
        results.append((resume_id, score))
    
    results.sort(key=lambda x: (-x[1], x[0]))
    return results

职位名称标准化

def normalize_titles(titles):
    abbreviations = {
        'sr': 'senior', 'jr': 'junior', 'mgr': 'manager',
        'eng': 'engineer', 'dev': 'developer', 'swe': 'software engineer'
    }
    suffixes_to_remove = ['i', 'ii', 'iii', 'iv', 'v']
    
    normalized = []
    for title in titles:
        words = title.lower().strip().split()
        while words and words[-1] in suffixes_to_remove:
            words.pop()
        words = [abbreviations.get(w, w) for w in words]
        normalized.append(' '.join(words))
    
    return normalized

题型二:基于图的推荐

技能图求职推荐

def recommend_jobs(user_skills, jobs, threshold=0.7):
    recommendations = []
    
    for job_id, required_skills in jobs:
        if not required_skills:
            continue
        match_count = len(user_skills & required_skills)
        match_ratio = match_count / len(required_skills)
        
        if match_ratio >= threshold:
            recommendations.append({
                'job_id': job_id,
                'match_ratio': match_ratio,
                'missing_skills': required_skills - user_skills
            })
    
    recommendations.sort(key=lambda x: -x['match_ratio'])
    return recommendations

公司关系图最短路径

from collections import deque, defaultdict

def shortest_company_path(employees, company_a, company_b):
    graph = defaultdict(set)
    
    for emp_id, companies in employees:
        for i in range(len(companies)):
            for j in range(i + 1, len(companies)):
                graph[companies[i]].add(companies[j])
                graph[companies[j]].add(companies[i])
    
    queue = deque([(company_a, [company_a])])
    visited = {company_a}
    
    while queue:
        current, path = queue.popleft()
        if current == company_b:
            return path
        for neighbor in graph[current]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append((neighbor, path + [neighbor]))
    
    return []

题型三:数据结构设计

求职申请追踪系统

from collections import defaultdict

class ApplicationTracker:
    def __init__(self):
        self.applications = {}
        self.user_apps = defaultdict(list)
        self.company_apps = defaultdict(list)
        self.app_id = 0
    
    def apply(self, user_id, company_id, job_id, timestamp):
        self.app_id += 1
        self.applications[self.app_id] = {
            'user_id': user_id, 'company_id': company_id,
            'job_id': job_id, 'status': 'APPLIED',
            'applied_at': timestamp
        }
        self.user_apps[user_id].append(self.app_id)
        self.company_apps[company_id].append(self.app_id)
        return self.app_id
    
    def update_status(self, app_id, new_status, timestamp):
        if app_id not in self.applications:
            return False
        self.applications[app_id]['status'] = new_status
        return True
    
    def get_response_rate(self, company_id):
        apps = [self.applications[aid] for aid in self.company_apps[company_id]]
        if not apps:
            return 0.0
        responded = sum(1 for a in apps if a['status'] != 'APPLIED')
        return responded / len(apps)

FAQ

ZipRecruiter OA 难度如何?

ZipRecruiter OA 整体偏简单,大约在 LeetCode Easy 到 Medium 之间。重点是写出干净正确的代码,而非复杂算法。适合偏好实际问题的候选人。

ZipRecruiter 完整面试流程是什么?

典型流程:OA → 技术电话面(1 轮)→ Onsite(3-4 轮,含编码、系统设计和行为面试)。整个流程通常 3-4 周。

ZipRecruiter 用什么技术栈?

主要使用 Python、Ruby on Rails 和 React。后端采用微服务架构,ML/推荐系统是平台核心。

ZipRecruiter New Grad 薪资水平如何?

New Grad SWE 总包通常在 $130K-$170K(基础薪资 + 奖金 + 股权),具体取决于地点和经验。


正在准备 ZipRecruiter OA?

oavoservice 提供专业的 OA/VO 辅助服务。

👉 立即添加微信:Coding0201获取辅助方案


联系方式

Email: [email protected]
Telegram: @OAVOProxy