The community has been very helpful and it is my turn to give back. Here it goes!
Status: 15+ YOE at non FAANG
Position applied: Senior Software Engineer at Uber
Location: Sunnyvale/New York
Date: Aug'22
Application
Applied online on thier job portal. Recruiter reached out for a different team.**
Platform used
Code Signal
Phone Screen
Multiple iterations of a problem ultimately leading to a scenario similar to
https://leetcode.com/problems/climbing-stairs/
I was able to write the top down memoization based solution with time remaining and interviewer was satisfied with the approach. Although as expected, he did mentioned about bottom up, space optimized approach as an alternative.
Result: Got result same day : it went well.
Takeaway: Speed matters. If you are able to code complete, there are high chances of getting through.
Onsite was 5 rounds on the same day. I was a bit nervous the night before and slept intermittently.
Round1(DSA- coding)
https://leetcode.com/problems/random-pick-with-weight/
I started with the correct approach, however took time to complete the code. I was going back and forth b/w code, code signal whiteboard and pen/paper to solve the problem and talk out loud to explain my thought process. I think that backfired. So although in 45 minutes, I was able to complete all the test cases, interviewer was not satisfied.
Result: No Hire
Takeaway: Sleep well before the interview and it is okay for a few seconds of own time to think about the problem/solution.
Round2(LLD-Coding)
Multiple iterations, ultimately leadind to desinging own API Rate limiter
https://leetcode.com/discuss/interview-question/system-design/124558/Uber-or-Rate-Limiter
I implemented an interface like this
limiter() i/p: array of object - {count,timestamp} ; o/p true/false for each element of the array. This interface has obvious limitations, but the interviewer didn't stop me there.
After coding complete, he pointed of better interface:
multiple calls to limiter(), with i/p as {id,timestamp} and o/p true/false on each call.
Result: No hire
Takeaway: Collaborate with the interviewer on Low Level Design type questions where function i/p o/p is open ended.
Round3(Design-previosly solved)
The interviewer was late. I talked through the project. There was domain specific technology/term I used and that stuck him. The focus shifted from my interview to his bio on how he wrote the specification of that domain problem in his past life. Lastly he mentioned that all new joinees at Uber are from Meta, Amazon or Google and they want only people who go into the source code of each library they use!
Result: No surprise- no hire
Round4(Design-new prob)
Design Uber Eats
For design problems, instead of Gr** the sys* design and other recommended resources like donnemartin, this time, I focussed on newly released system design
https://leetcode.com/explore/learn/card/system-design/
I bought the premium and was very convinced that this seems to be sufficient expectations on HLD interviews: high level components and their interactions.
During the interview, I realized that this is table stakes. What they expect is API and schema design as well, that meets functional and non functional requirements.
Result: No hire
Takeaway: Follow the commonly known template for system design e.g.
Requirements(functional and non functional)
High level components/interactions
API Design
DB Schema
Scalability, availability, operational readiness and redundancy at each layer
Round5(behavioral)
Standard questions to be answered in Situation->Action->Result format from the previous experiences.
Result
Recruiter shared outcome the next day.
Final thoughts
Practice on following a structured approach to each types of questions, coding, LLD, HLD and behavioral.
Hope that helps! Feel free to comment on your experience and prep strategy.


