Hiring Position Details
Position: SWE L4
Location: Mountain View
Phone Interview
45 minute interview conducted over Google Meets and Google Docs.
- Introduction (5 minutes)
- 1 Coding Problem (35 minutes)
- Never seen the problem before and wasn't able to find any variant of the problem online. Would rank as a high-medium to hard LC problem.
- Produced a solution that solved most cases, but failed to handle an edge case (5 minutes)
- Spent some time trying to think of a general solution. Got a hint from the interviewer. (25 minutes)
- Coded the solution and provided space/time complexities (5 minutes)
- Q/A (5 minutes)
Result: Passed
Virtual Onsite Interview
Five 45-minute interviews conducted over Google Meets and Google Docs starting from 10:00 to 16:00. 15 minute breaks between each interview and a lunch break from 12:45 to 14:15.
Coding Interview 1
- Introduction (10 minutes)
- 1 Coding Problem (35 minutes)
- Never seen the problem before and wasn't able to find any variants of the problem online. Would rank as a LC hard.
- Produced a suboptimal brute force solution (15 minutes)
- Could not produce an optimal solution, but was close. Started with Greedy and then slowly ventured in DP land, (20 minutes)
- Ran out of time
Coding Interview 2
- Introduction (5 minutes)
- 1 Coding Problem (30 minutes)
- Never seen before, but found variant online
- Needed a few hints, but produced optimal solution and provided space/time complexities
- Q/A (5 minutes)
Coding Interview 3
- Introduction (15 minutes)
- Talked a lot about experience, background, and interests
- Coding Problem - Part 1 (10 minutes)
- Never seen the problem before and wasn't able to find any variants of the problem online
- Produced and coded out optimal solution and provided space/time complexities
- Coding Problem - Part 2 (10 minutes)
- Interviewer added more scenarios
- Produced and coded out optimal solution
- Coding Problem - Part 3 (5 minutes)
- Interviewer noted that there's no need to code this part
- Talked out how we would solve the problem out generically and with scale (assuming some of the constants given in prior parts are no longer constants and were configurable)
- Provided a few solutions and stated each solution's space/time complexities
- Q/A (5 minutes)
Coding Interview 4
- No introduction
- Coding Problem - Part 1 (10 minutes)
- LC medium problem variant (Not Google tagged)
- Produced and coded out optimal solution (in time) and provided space/time complexities
- Coding Problem - Part 2 (20 minutes)
- Redo problem but with constant space instead and "reasonable" time complexity
- Produced and coded out optimal solution and provided space/time complexities
- Required a hint from interviewer
- Q/A (15 minutes)
Coding Interview 5
- Super brief introduction (0-1 minute)
- Warm Up (5 minutes)
- Algorithm problems
- No code necessary aside from talking out how I would solve it
- Data Structure Design / Coding Problem - Part 1 (20 minutes)
- Never seen problem before and not even sure how to search for this one
- Produced and coded out optimal data structure/solution
- Data Structure Design / Coding Problem - Part 2 (15 minutes)
- A lot of freebies and constants given in the first part can no longer be assumed
- Provided various approaches and space/time complexities for each. Interviewer had a preference for one which we ended up coding out
- Produced and coded out optimal data structure/solution
- Q/A (5 minutes)
Result: Passed hiring committee. Now pending team matching before offer.
Preparation
Been preparing since June. Completed 118 LC problems before phone interview and another 107 between phone and onsite. Distributions are 31% easy, 61% medium, and 8% hard.
This is the final schedule I had and I followed it for most days. But there are days when I'm just burnt out from the previous day or from work and I have to rest instead. Don't push yourself and don't jump into something extreme right away. Decent probability of blowing a mental fuse and feeling defeated (mental will go a long way). Start simple and work your way up (ramp up similarly to a marathon training program).
Final Routine:
- Every day
- Do the daily problem (Jun/Jul/Aug challenge) first thing in the morning
- Made ~21:00/21:30 the hard limit every day where I need to do something fun afterward
- Mon/Tues/Thurs
- Focus: Completion/Understanding
- 2-4 LC problems (on top of the daily)
- Don't care how long it takes. Just care about completion and understanding the optimal solutions.
- Try to think of as many approaches as possible and write it in the code comments. You don't need to code it out.
- If I can't produce an optimal solution by 1.5 hours, then I'll look at the solutions. My criteria for understanding the solution is being able to describe the algorithm and rationale in words and no code.
- Wed
- Focus: Context switching between coding and systems design
- 2 LC problems
- Study system design (Mainly used System Design Primer and good ole youtube)
- Fri
- Rest
- Don't even look at anything interview related aside from the daily problem in the morning.
- Sat
- Focus: Stamina
- Just non-stop problems all day to train up long term focus
- 09:00-12:00 -- 2-4 LC problems
- 12:00-15:00 -- Break
- 15:00-18:00 -- 2-4 LC problems
- 18:00-19:30 -- Break/Dinner
- 19:30-21:00 -- LC weekly contest
- Sun
- Focus: Speed / Rest
- 2-3 LC problems timed with hard limit
- After that, just rest
Advice
- Practice commentating about everything you're doing. I think there's a lot of subtle tidbits of knowledge we take for granted in our everyday work, but can demonstrate our prowess in that language.
- Like in Java, using a StringBuilder instead or allocating an initial size to a collection if we know its max
- Opinions on returning null or empty values from helper methods
- Approach every problem with a purpose
- Are you aiming for speed?
- Are you aiming to learn some patterns? Are you aiming to practice some data structure or algorithm?
- Are you aiming to just increment the problems completed count?
- Have a purpose. It'll help your focus and it'll help your mental.
- Don't practice memorizing problems. Learn the patterns, but don't rely on them.
- Coding problem patterns should be taken like the GoF Design Patterns. Start with the problem and then find patterns that help optimize or make cleaner. You don't start with the command pattern and then try to fit the problem into it.
- Practice solving problems without code.
- You can waste a lot of time writing and rewriting if you don't have a solution or only parts of a solution.
- Also without code, you are not tunnel visioned by data structures or methods the language provides
- Have a "training" plan, consistently practice, and make sure to rest.
- Have a cheer squad (esp from those companies you're interviewing at). Job hunting and interviewing is a mentally exhausting journey. I have a chat group with friends from the 3 companies I was interviewing at. I talk to all of them about my concerns and what I'm feeling. And likewise, they check in on me often to see how my prep is going. Having that support goes a long way.