我最近刚刷完 ZipRecruiter CodeSignal OA ,全程 4 道题,70 分钟左右完成,拿到了满分(600/600)。把真实遇到的题目和详细解析分享出来,希望对正在准备 ZipRecruiter 或其他用 CodeSignal GCA的同学有帮助。

ZipRecruiter CodeSignal OA 概览
ZipRecruiter 的 OA 属于典型的 CodeSignal General Coding Framework,难度 LeetCode Easy ~ Medium,前两题送分,第 3 题需要一点小技巧,第 4 题实现量较大但算法不难。很多人在 40-50 分钟内就能满分通过,关键在于时间管理和边缘情况处理。
ZipRecruiter OA 基本信息
- 平台:CodeSignal(部分为 proctored,需要打开摄像头 + 麦克风,准备好身份证)。
- 题量与时间:4 道题,70 分钟(我实际 42 分钟提交,有人反馈 120 分钟版本,但多数是 70 分钟)。
- 评分:总分通常 600 分(新毕业生/早期职位常见),通过所有测试用例即可满分。
- 难度:Easy ~ Medium。前 1-2 题 Easy,第 3 题 Easy-Medium,第 4 题 Medium(代码量大)。
- 推荐做题顺序(经典策略):Task 1 → Task 2 → Task 4 → Task 3 前两题是送分题,第 4 题实现重但无复杂算法,第 3 题可能藏 prefix sum 或哈希优化技巧。
Task 1:基础食谱 CRUD 操作
实现无用户数据的食谱基础增删改查功能:
addRecipe(self, name: str, ingredients: list[str], steps: list[str]) -> str | None- 功能:添加一条新食谱,返回其
recipe_id。 recipe_id格式为"recipe" + 序号,序号从 1 开始递增(如recipe1、recipe2)。- 若已存在同名食谱(不区分大小写),返回
None。
- 功能:添加一条新食谱,返回其
getRecipe(self, recipe_id: str) -> list[str]- 功能:根据
recipe_id查询食谱。 - 返回格式:
[name, ingredients_as_string, steps_as_string]。ingredients_as_string:食材列表用逗号拼接的字符串,顺序与添加时一致。steps_as_string:步骤列表用逗号拼接的字符串。
- 若食谱不存在,返回空列表
[]。
- 功能:根据
updateRecipe(self, recipe_id: str, name: str, ingredients: list[str], steps: list[str]) -> bool- 功能:更新指定
recipe_id的食谱信息。 - 返回值:更新成功返回
True;若食谱不存在,或新名称与现有食谱冲突(不区分大小写),返回False。
- 功能:更新指定
Task 2:食谱搜索与排序
实现按条件搜索和排序食谱的功能:
searchRecipesByIngredient(self, ingredient: str) -> list[str]- 功能:搜索包含指定食材的所有食谱(不区分大小写)。
- 排序规则:先按食材数量升序排列,食材数量相同则按
recipe_id升序排列。 - 返回:匹配的食谱 ID 列表。
listRecipes(self, sort_by: str) -> list[str]- 功能:返回所有食谱的 ID 列表,按指定规则排序。
- 支持的排序选项:
"name":按食谱名称字典序升序排列,名称相同则按recipe_id升序。"ingredient_count":按食材数量升序排列,数量相同则按recipe_id升序。
- 无效的排序选项(如
"unknown_sort")默认按"name"排序。
示例
add_recipe("Soup", ["water", "vegetables", "salt"], ["boil", "stir"]) # 返回 "recipe1"
add_recipe("Stew", ["beef", "salt", "vegetables"], ["cook", "serve"]) # 返回 "recipe2"
search_recipes_by_ingredient("salt") # 返回 ["recipe1", "recipe2"](两者食材数量均为3,按ID升序)
search_recipes_by_ingredient("sugar") # 返回 [](无匹配食谱)
list_recipes("ingredient_count") # 返回 ["recipe1", "recipe2"](食材数量相同,按ID升序)
list_recipes("unknown_sort") # 返回 ["recipe1", "recipe2"](无效选项默认按名称排序)
Task 3:用户账户与权限管理
引入用户系统,支持食谱编辑并记录编辑次数:
addUser(self, user_id: str) -> bool- 功能:添加新用户。
- 返回值:添加成功返回
True;若用户 ID 已存在,返回False。
editRecipe(self, user_id: str, recipe_id: str, new_name: str, new_ingredients: list[str], new_steps: list[str]) -> bool- 功能:用户编辑指定食谱。所有用户均可编辑任意食谱,需保证食谱名称唯一性(不区分大小写)。
- 返回值:编辑成功返回
True;若用户 / 食谱不存在,或新名称与现有食谱冲突,返回False。 - 额外要求:记录每条食谱的编辑次数。
Task 4:食谱版本控制与回滚
实现食谱的版本历史记录与回滚功能:
versionRecipe(self, recipe_id: str) -> list[str]- 功能:返回指定食谱的所有版本记录,按版本号升序排列。
- 单条版本记录格式:
"<版本号>:<食谱名称>:<食材字符串>:<步骤字符串>:<last_edited_by>"。last_edited_by:编辑者 ID,通过editRecipe修改时为用户 ID,通过updateRecipe修改时为字符串"system"。
- 规则:通过
addRecipe创建的食谱初始无版本记录,第一次编辑后生成版本历史;若食谱不存在或从未被编辑过,返回空列表[]。
rollbackRecipe(self, recipe_id: str, version: int) -> bool- 功能:将食谱回滚到指定版本。
- 规则:
- 回滚时会创建一条新的版本记录,
last_edited_by字段标记为"rollback",并追加到版本历史中(原有历史保持不变)。 - 回滚后,食谱的名称、食材、步骤恢复为指定版本的状态。
- 回滚时会创建一条新的版本记录,
- 返回值:回滚成功返回
True;若食谱不存在、指定版本号不存在,或回滚后名称与现有食谱冲突,返回False。
示例
add_recipe("Cookies", ["flour", "chocolate"], ["mix", "bake"]) # 返回 "recipe1"
add_user("user1") # 返回 True
add_user("user2") # 返回 True
edit_recipe("user1", "recipe1", "Cookies", ["flour", "chocolate", "sugar"], ["mix", "bake"]) # 返回 True(第一次编辑,生成版本1)
edit_recipe("user2", "recipe1", "Cookies", ["flour", "chocolate", "sugar", "eggs"], ["mix", "bake"]) # 返回 True(第二次编辑,生成版本2)
version_recipe("non_existent_recipe") # 返回 [](食谱不存在)
version_recipe("recipe1") # 返回 ["1:Cookies:flour,chocolate,sugar:mix,bake:user1", "2:Cookies:flour,chocolate,sugar,eggs:mix,bake:user2"]
rollback_recipe("recipe1", 1) # 成功后新增版本3,记录为 "3:Cookies:flour,chocolate,sugar:mix,bake:rollback"
其他经验
- 拿满分不一定 100% 进下一轮(有 600/600 仍被拒的案例),但通过率较高。
- ZipRecruiter OA 相对友好,重点考察仔细实现 + 边缘处理能力,而非高阶算法。
- 如果你是New Grad,OA 通常自动发送。
这次 OA 顺利通过,后面进入 VO 了(如果有后续会继续分享)。有同样面 ZipRecruiter、Capital One、Optiver 等 CodeSignal OA 的同学,欢迎评论区交流具体题目变种或做题心得!
如果大家时间紧张、 proctored 环境不方便、或者想确保 100% 通过所有测试用例,可以参考 ProgramHelp 的专业 OA代写服务 。 专注 大厂笔试、HackerRank、牛客网、CodeSignal 等平台的在线评测代写,通过远程控制实现无痕操作,确保所有测试用例 100% 通过,不通过不收费。安全可靠,很多同学反馈帮助很大,尤其适合想稳过 OA 的情况。
祝大家 OA 满分,冲 Offer!