Savantlabs Senior Software Engineer Interview Experience (6 YOE, 2025)
Question Details
R1 2 hour coding assignment. Question at the end. ### R2 2 hour interview Q1: `You are given a graph of cities with name as integer, and an start city. At minute 0, an infection starts from the ci
Full Details
R1 2 hour coding assignment. Question at the end. ### R2 2 hour interview Q1: You are given a graph of cities with name as integer, and an start city. At minute 0, an infection starts from the city with value start. Each minute, a city becomes infected if: - The city is currently uninfected. - The city is adjacent to an infected city. Return the number of minutes needed for the entire tree to be infected. graph = ["1->5", "1->3", "5->4", "4->9", "4->2", "3->10", "3->6"] start = 3 output = 4 Q2: Write code to print dfs and bfs of a given graph. The node information will be user-defined (unlike the typical leetcode graphs where node values will be 0, 1, 2 and so on). R1 Coding assignment:4 levels each with passing criteria. L1: Setup the data model Read the 2 JSON documents in src/main/java/resources/data, understand the data model. Edit the ShoppingList and ShoppingListItem classes in the codinpad.model package. Complete the ShoppingListRepositoryTests test and make it pass. L2: Bootstrap the DB with the 2 given JSON files. Edit DataConfig.java, bootstrap the DB using the 2 JSON files under src/main/java/resources/data Complete the DataConfigTests.testBootstrapDb and make it pass. L3: Surface data via REST API In the “API Request” window, try calling the following 3 APIs GET /shopping_lists GET /shopping_lists/1 GET /shopping_lists/1/items They should all give a 500 (not 404) error, which is expected, as we have not implemented the endpoints yet. Edit the ShoppingListResource.java and make the APIs work in the “API Request” window. Complete ShoppingListResourceTests test and make it pass. L4: Add dynamic info to data model Add a price field to the ShoppingListItem model, which is persisted in DB. When bootstrapping the DB, assign a positive price to all the items. Add a cost field to the ShoppingList model, which is NOT persisted in DB. When calling the getShoppingListDetail (GET /shopping_lists/{id}) endpoint, compute the cost field on-the-fly. But do not compute it in the getAllShoppingLists (GET /shopping_lists) endpoint. Update ShoppingListResourceTests to reflect this change Sample data model: resources/data/file1 [{ "name": "Whey isolate protein powder", "unit": "Pound", "quantity": 5 }, { "name": "Chunk light tuna", "unit": null, "quantity": 12 }, { "name": "Rotisserie chicken", "unit": null, "quantity": 1 },...
About This Question
This is a reported interview question from a savantlabs interview for a swe role (senior level) reported in 2026.
It covers the following topics: Binary Tree, Graph, System Design, Queue .
Topics
About Savantlabs Interview Reports
This question was reported by a candidate who interviewed at Savantlabs. LeakCode aggregates interview reports from 10+ sources, including 1Point3Acres, Glassdoor, LeetCode Discuss, Blind, Reddit, Indeed, and Nowcoder. Each report is translated where necessary, deduplicated against existing entries, and tagged by company, role, round type, and reporting date.
Use this question as one calibration data point, not a memorization target. Companies typically rotate their question pools every 2-4 months; the exact wording of a 2024 question may differ from what you encounter today. The underlying pattern, difficulty level, and follow-up depth at Savantlabs are the higher-signal extractions to take from this report.
For broader preparation context, the Savantlabs interview process typically includes a recruiter screen, one or two technical phone screens, and a 4-5 round on-site loop covering coding, system design (at L4+ levels), and behavioral. Reports tagged on LeakCode show the round-by-round distribution and typical difficulty calibration. To browse questions filtered by round type and seniority, use the company hub linked above.
How To Practice This Type of Question
Solve similar problems on LeetCode under timed conditions (25-35 minutes per medium difficulty). The goal is pattern recognition: recognize the underlying technique (sliding window, two-pointer, BFS, memoized recursion, etc.) within 60-90 seconds of reading. Strong candidates verbalize their hypothesis out loud before coding, then iterate based on feedback. Weak candidates dive into implementation immediately, lose time on the wrong approach, and run out of time for follow-ups.
Companies update their question pools every 2-4 months. The exact wording of any given question may have been retired by the time you interview. Focus your prep on the pattern, not the specific problem. The patterns that appear in Savantlabs reports consistently are the ones worth investing in; one-off niche problems are not.
During Your Savantlabs Round
Apply the standard interview round template: clarify requirements (2-3 minutes), state your approach out loud and confirm direction with the interviewer (3-5 minutes), code with narration (15-25 minutes), test with concrete examples including edge cases (5 minutes), discuss optimization or trade-offs if time permits (5 minutes). This template is universally accepted across FAANG and adjacent companies; deviating from it produces weaker interviewer feedback signal.
The single most predictive failure mode in Savantlabs reports tagged "no hire": not asking clarifying questions. Interviewers are explicitly trained to weight this. Strong candidates ask 3-5 clarifying questions even on problems that look obvious; weak candidates dive into code immediately. The clarifying-question check is often the first signal recorded in the interviewer's written notes.