最近陪同學刷完 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,或者不確定自己的實現細節是否穩,可以瞭解一下我們的 遠端實戰助攻方案 —— 類比全真考場節奏,現場語音指導,一次上手。