2026 ZipRecruiter CodeSignal OA real question sharing | 4 questions 70 minutes full AC experience

43 Views
No Comment

I just finished it recently ZipRecruiter CodeSignal OA, a total of 4 questions, took about 70 minutes to complete, and received a perfect score (600/600). I will share the real problems encountered and detailed analysis, hoping to be helpful to students who are preparing for ZipRecruiter or other students using CodeSignal GCA.

2026 ZipRecruiter CodeSignal OA real question sharing | 4 questions 70 minutes full AC experience

ZipRecruiter CodeSignal OA Overview

ZipRecruiter's OA belongs to the typical CodeSignal General Coding Framework, with a difficulty level of LeetCode Easy ~ Medium. Points are awarded for the first two questions, the third question requires a little skill, and the fourth question requires a large amount of implementation but the algorithm is not difficult. Many people get a perfect pass in 40-50 minutes, the key is time management and edge case handling.

ZipRecruiter OA basic information

  • Platform: CodeSignal (part of it is proctored, you need to turn on the camera + microphone, and prepare your ID card).
  • Question amount and time: 4 questions, 70 minutes (I actually submitted it in 42 minutes, someone reported a 120-minute version, but most are 70 minutes).
  • Score: Total marks are usually 600 points (common for new graduates/early stage positions), with full marks achieved by passing all test cases.
  • Difficulty:Easy~Medium. The first 1-2 questions are Easy, the 3rd question is Easy-Medium, and the 4th question is Medium (large amount of code).
  • Recommended order of questions(Classic strategy): Task 1 → Task 2 → Task 4 → Task 3. The first two questions are for free points. Question 4 implements a heavy but not complicated algorithm. Question 3 may hide prefix sum or hash optimization techniques.

Task 1: Basic recipe CRUD operations

Implement basic addition, deletion, modification and query functions of recipes without user data:

  1. AddRecipe(self, name: str, ingredients: list[str], steps: list[str]) -> str | None
    • Function: Add a new recipe and return its Recipe_id.
    • Recipe_id The format is "recipe" + serial number, the sequence number starts from 1 and increases (such asRecipe1,Recipe2).
    • If a recipe with the same name already exists (case-insensitive), return None.
  2. GetRecipe(self, recipe_id: str) -> list[str]
    • Function: According to Recipe_id Check out the recipe.
    • Return format:[name, ingredients_as_string, steps_as_string].
      • Ingredients_as_string: The ingredient list is a string concatenated with commas, in the same order as when added.
      • Steps_as_string: The step list is a string concatenated with commas.
    • If the recipe does not exist, an empty list is returned [].
  3. UpdateRecipe(self, recipe_id: str, name: str, ingredients: list[str], steps: list[str]) -> bool
    • Function: update specified Recipe_id Recipe information.
    • Return value: Update successfully returned True;If the recipe does not exist, or the new name conflicts with an existing recipe (not case sensitive), return False.

Task 2: Recipe search and sorting

Implement the function of searching and sorting recipes by conditions:

  1. SearchRecipesByIngredient(self, ingredient: str) -> list[str]
    • Function: Search all recipes containing specified ingredients (case insensitive).
    • Sorting rules: First, sort by the quantity of ingredients in ascending order. If the quantity of ingredients is the same, sort by Recipe_id Sort in ascending order.
    • Returns: a list of matching recipe IDs.
  2. ListRecipes(self, sort_by: str) -> list[str]
    • Function: Returns a list of IDs of all recipes, sorted by specified rules.
    • Supported sorting options:
      • "name": Arrange in ascending dictionary order by recipe name. If the names are the same, sort them in ascending order. Recipe_id Ascending order.
      • "ingredient_count": Arrange in ascending order by the quantity of ingredients. If the quantities are the same, sort by Recipe_id Ascending order.
    • Invalid sort option (such as "unknown_sort") default press "name" Sort.

Example

Add_recipe("Soup", ["water", "vegetables", "salt"], ["boil", "stir"]) # Return "recipe1"
add_recipe("Stew", ["beef", "salt", "vegetables"], ["cook", "serve"]) # Return "recipe2"
search_recipes_by_ingredient("salt") # Return ["recipe1", "recipe2"] (the number of ingredients in both is 3, in ascending order by ID)
search_recipes_by_ingredient("sugar") # Return [] (no matching recipe)
list_recipes("ingredient_count") # Return ["recipe1", "recipe2"] (the same number of ingredients, in ascending order by ID)
list_recipes("unknown_sort") # Return ["recipe1", "recipe2"] (invalid options default to sorting by name)

Task 3: User account and permission management

Introduce the user system to support recipe editing and record the number of edits:

  1. AddUser(self, user_id: str) -> bool
    • Function: Add new user.
    • Return value: Returned successfully after adding True;If the user ID already exists, return False.
  2. EditRecipe(self, user_id: str, recipe_id: str, new_name: str, new_ingredients: list[str], new_steps: list[str]) -> bool
    • Function: User edits specified recipes. All users can edit any recipe, and the recipe name must be unique (not case-sensitive).
    • Return value: Returned successfully after editing True;If the user/recipe does not exist, or the new name conflicts with an existing recipe, return False.
    • Additional requirement: Record the number of edits for each recipe.

Task 4: Recipe version control and rollback

Implement version history and rollback functions for recipes:

  1. VersionRecipe(self, recipe_id: str) -> list[str]
    • Function: Returns all version records of the specified recipe, sorted by version number in ascending order.
    • Single version record format:"::::".
      • Last_edited_by: Editor ID, via EditRecipe When modifying, it is the user ID, passed UpdateRecipe String when modified "system".
    • Rules: Pass AddRecipe The created recipe has no version record initially, and a version history is generated after the first edit; if the recipe does not exist or has never been edited, an empty list is returned. [].
  2. RollbackRecipe(self, recipe_id: str, version: int) -> bool
    • Function: Roll back the recipe to the specified version.
    • Rule:
      • A new version record will be created when rolling back.Last_edited_by Fields are marked "rollback", and appended to the version history (the original history remains unchanged).
      • After rollback, the name, ingredients, and steps of the recipe are restored to the state of the specified version.
    • Return value: Rollback returns successfully True;If the recipe does not exist, the specified version number does not exist, or the name conflicts with the existing recipe after rollback, return False.

Example

Add_recipe("Cookies", ["flour", "chocolate"], ["mix", "bake"]) # Return "recipe1"
add_user("user1") # Return True
add_user("user2") # Return True
edit_recipe("user1", "recipe1", "Cookies", ["flour", "chocolate", "sugar"], ["mix", "bake"]) # Return True (first edit, generate version 1)
edit_recipe("user2", "recipe1", "Cookies", ["flour", "chocolate", "sugar", "eggs"], ["mix", "bake"]) # Return True (second edit, generate version 2)
version_recipe("non_existent_recipe") # Return [] (recipe does not exist)
version_recipe("recipe1") # Return ["1:Cookies:flour,chocolate,sugar:mix,bake:user1", "2:Cookies:flour,chocolate,sugar,eggs:mix,bake:user2"]
rollback_recipe("recipe1", 1) # After success, add version 3, recorded as "3:Cookies:flour,chocolate,sugar:mix,bake:rollback"

Other experiences

  • Getting full marks does not necessarily mean 100% admission to the next round (there are 600/600 cases that are still rejected), but the passing rate is higher.
  • ZipRecruiter OA is relatively friendly and focuses on careful implementation + edge processing capabilities rather than high-order algorithms.
  • If you are a New Grad, OA is usually sent automatically.

This time I passed the OA successfully and later entered the VO (will continue to share if there is any follow-up). If you have the same experience with CodeSignal OA such as ZipRecruiter, Capital One, Optiver, etc., please feel free to share specific question variants or experience in the comment area!

If you are pressed for time, the proctored environment is inconvenient, or you want to ensure that all test cases pass 100%, you can refer to ProgramHelp’s professional OA writing service . Focus on online evaluation ghostwriting for Dachang Written Test, HackerRank, Niuke.com, CodeSignal and other platforms, and achieve traceless operation through remote control to ensure that all test cases pass 100%. If they fail, there will be no charge. It is safe and reliable, and many students have given feedback that it is very helpful. It is especially suitable for those who want to overcome OA.

I wish everyone perfect scores for OA and get an offer!

author avatar
Jory Wang Amazon Senior Software Development Engineer
Amazon senior engineer, focusing on the research and development of infrastructure core systems, has rich practical experience in system scalability, reliability and cost optimization. Currently focusing on FAANG SDE interview coaching, helping 30+ candidates successfully obtain L5/L6 Offers within one year.
END
 0