最近陪同学刷完 ZipRecruiter 的 2026 New Grad OA,这套题可以说是“中等偏易但很考细节”的代表。
题目不卷算法,核心在于设计与实现能力——尤其是类设计、接口一致性、以及数据结构更新的边界条件。整体分四个 Level,每一关都在前一关基础上递进,难度平滑但坑点很多。
Level 1 – Basic CRUD
Problem:
Implement an in-memory database that supports three operations: set, get, and delete.
Each key represents a dictionary, and each field name within it must be unique.
Example:
set("user1", "name", "Alice")
get("user1", "name") -> "Alice"
delete("user1", "name") -> True
思路:
这一关属于热身题,考基本的数据结构操作。可以直接用嵌套 dict 实现:
db[key][field] = value
操作逻辑:
set():若 key 不存在则初始化;get():查不到返回None;delete():成功删除返回 True,否则 False。
虽然题目简单,但细节必须干净,比如 key 不存在时不能直接抛异常。
Level 2 – Scanning & Prefix Filtering
Problem:
Extend the database to support field scanning and prefix-based filtering.
scan(key)→ Return all fields under the given key, sorted lexicographically.scan_by_prefix(key, prefix)→ Return only fields that start with the given prefix.
Output format:
["field1(value1)", "field2(value2)"]
思路:
这一关测试遍历、过滤和输出格式化能力。
可以用 Python 的列表推导式实现:
fields = sorted(db[key].items())
res = [f"{f}({v})" for f, v in fields if f.startswith(prefix)]
注意:
- key 不存在时返回
[]而不是None; - 输出顺序要字典序;
- 前缀匹配区分大小写。
这一关虽然没什么算法,但如果格式错一个括号都会被判 fail。
Level 3 – TTL Management
Problem:
Add timestamp and TTL (Time To Live) to each field.
A field becomes invalid when timestamp >= start + ttl.
The database must auto-clean expired fields before each operation.
Example:
set_at_with_ttl("user1", "session", "abc", start=100, ttl=10)
get_at("user1", "session", timestamp=105) -> "abc"
get_at("user1", "session", timestamp=111) -> None # expired
思路:
这一关是整套 OA 的关键,考察时间状态同步。
可以这样设计数据结构:
db[key][field] = {"val": v, "start": t, "ttl": ttl}
实现重点:
- 清理函数 (cleanup): 每次操作前清除过期字段;
- get_at():判断字段是否仍在有效期内;
- delete_at():删除前也要调用清理逻辑。
TTL 是整个系统“动态性”的来源,很多人容易忽略在 delete 操作中也需要清理,导致测试结果不一致。
Level 4 – Backup & Restore
Problem:
Implement backup and restore functionality for the database.
backup(t)→ Save the current state at timet.restore(t_backup, t_now)→ Restore the database to a previous state, but TTL must recalculate based ont_now.
思路:
这是最系统设计的一关,重点在 状态复制 和 时间偏移调整。
快照机制:
snapshots[t] = deepcopy(db)
snapshots[t] = deepcopy(db)
恢复逻辑:
从快照重建当前 db;
重新计算 TTL 剩余时间;
对已过期的字段执行清理。
最大的坑在于 TTL 不能直接照搬,必须根据恢复时刻 t_now 动态调整,否则会出现“过期字段复活”的 bug。
整体感受
ZipRecruiter 这套 OA 很有层次感:
- 从基础 CRUD 到系统级 Backup;
- 每一关都模拟真实工程中的核心模块;
- 难度不高,但实现必须“干净”。
属于那种做完之后能明显感觉到代码设计功底提升的题型。
更像是一次“微型系统设计”的实战,而非纯刷题。
建议与复盘
如果你准备类似的 OA(如 ZipRecruiter、Robinhood、DoorDash、Dropbox),建议:
- 多练 类设计 + 状态更新 的题;
- 熟悉 时间逻辑 与 TTL-type cache;
- 保持代码结构整洁、接口一致;
- 输出与边界条件要符合测试严格要求。
这类 OA 更看重你的“代码工程感”——写得稳、逻辑通、边界无误,就是赢。
Programhelp · 无痕远程助攻,让你高效通过 OA
这次 ZipRecruiter OA,很多同学都反映:题目逻辑不难,但实现细节太多、debug 环节特别容易卡时间。尤其像 TTL 管理和 Backup 恢复这种题,一不小心就超时或漏逻辑。
我们团队在陪练这类设计型 OA 时,会提供 无延迟语音助攻 + 联机实时思路提示,帮学员在卡点时快速梳理实现结构、理清 edge case,不需要自己死磕。
所有操作都在你本地完成,无痕、安全、不留任何协作痕迹,同时还能训练出清晰的代码组织思维。
过去几个月,我们已经陪学生顺利搞定包括 ZipRecruiter、Dropbox、DoorDash、Meta Infra、Stripe 等在内的系统实现类 OA,平均通过率远超自练。
如果你也即将刷 OA,或者不确定自己的实现细节是否稳,可以了解一下我们的 远程实战助攻方案 —— 模拟全真考场节奏,现场语音指导,一次上手。