2026 ZipRecruiter CodeSignal OA 真實題目分享 | 4 道題 70 分鐘全 AC 經驗

我最近剛刷完 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:編輯者 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
 0