2026 ZipRecruiter CodeSignal OA 真实题目分享 | 4 道题 70 分钟全 AC 经验

38Times read
No Comments

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

2026 ZipRecruiter CodeSignal OA 真实题目分享 | 4 道题 70 分钟全 AC 经验

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 操作

实现无用户数据的食谱基础增删改查功能:

  1. addRecipe(self, name: str, ingredients: list[str], steps: list[str]) -> str | None
    • 功能:添加一条新食谱,返回其 recipe_id
    • recipe_id 格式为 "recipe" + 序号,序号从 1 开始递增(如recipe1recipe2)。
    • 若已存在同名食谱(不区分大小写),返回 None
  2. getRecipe(self, recipe_id: str) -> list[str]
    • 功能:根据 recipe_id 查询食谱。
    • 返回格式:[name, ingredients_as_string, steps_as_string]
      • ingredients_as_string:食材列表用逗号拼接的字符串,顺序与添加时一致。
      • steps_as_string:步骤列表用逗号拼接的字符串。
    • 若食谱不存在,返回空列表 []
  3. updateRecipe(self, recipe_id: str, name: str, ingredients: list[str], steps: list[str]) -> bool
    • 功能:更新指定 recipe_id 的食谱信息。
    • 返回值:更新成功返回 True;若食谱不存在,或新名称与现有食谱冲突(不区分大小写),返回 False

Task 2:食谱搜索与排序

实现按条件搜索和排序食谱的功能:

  1. searchRecipesByIngredient(self, ingredient: str) -> list[str]
    • 功能:搜索包含指定食材的所有食谱(不区分大小写)。
    • 排序规则:先按食材数量升序排列,食材数量相同则按 recipe_id 升序排列。
    • 返回:匹配的食谱 ID 列表。
  2. 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:用户账户与权限管理

引入用户系统,支持食谱编辑并记录编辑次数:

  1. addUser(self, user_id: str) -> bool
    • 功能:添加新用户。
    • 返回值:添加成功返回 True;若用户 ID 已存在,返回 False
  2. editRecipe(self, user_id: str, recipe_id: str, new_name: str, new_ingredients: list[str], new_steps: list[str]) -> bool
    • 功能:用户编辑指定食谱。所有用户均可编辑任意食谱,需保证食谱名称唯一性(不区分大小写)。
    • 返回值:编辑成功返回 True;若用户 / 食谱不存在,或新名称与现有食谱冲突,返回 False
    • 额外要求:记录每条食谱的编辑次数。

Task 4:食谱版本控制与回滚

实现食谱的版本历史记录与回滚功能:

  1. versionRecipe(self, recipe_id: str) -> list[str]
    • 功能:返回指定食谱的所有版本记录,按版本号升序排列。
    • 单条版本记录格式:"<版本号>:<食谱名称>:<食材字符串>:<步骤字符串>:<last_edited_by>"
      • last_edited_by:编辑者 ID,通过 editRecipe 修改时为用户 ID,通过 updateRecipe 修改时为字符串 "system"
    • 规则:通过 addRecipe 创建的食谱初始无版本记录,第一次编辑后生成版本历史;若食谱不存在或从未被编辑过,返回空列表 []
  2. 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!

author avatar
Jory Wang Amazon资深软件开发工程师
Amazon 资深工程师,专注 基础设施核心系统研发,在系统可扩展性、可靠性及成本优化方面具备丰富实战经验。 目前聚焦 FAANG SDE 面试辅导,一年内助力 30+ 位候选人成功斩获 L5 / L6 Offer。
End of text
 0