Interview Experience - 169 - Uber | SDE-2 | Software Engineer II
Summary
📌 Job Role: Backend Engineer (Software Engineer II)
🔢 Number of Rounds: 6
📜 Offer Status: Offer
📍 Location: Bangalore
👤 Candidate Name: Not disclosing due to signed NDA
Interview Process
Recruiter contacted me through LinkedIn. The process started with an initial recruiter call, followed by an online coding assessment, then a data structures round, a machine coding round, a system design round, and finally a hiring manager discussion.
The entire process took about one month. Each interview round lasted for about one hour. I received the selection confirmation mail a week after the HM round, and the actual offer letter with compensation details came another week later.
Preparation Guide
For coding rounds, I mainly practiced LeetCode Medium and Hard problems. I focused especially on problems related to graphs, trees, and common data structure patterns.
For system design, I took a different approach. Instead of relying on YouTube channels that often provide a superficial overview, I studied system design talks from companies like Netflix, Uber, and Reddit. I also read engineering blogs from these companies. This gave me insights into real-world tradeoffs, scaling challenges, and asynchronous programming patterns. I made notes on common design patterns and referred back to them while preparing.
For machine coding, I specifically prepared around concurrency, asynchronous programming, thread synchronization, and designing extensible object-oriented solutions.
Overall, my preparation was heavily practice-driven with an emphasis on problem-solving and scalability tradeoffs.
Interview Rounds
Round 1: Recruiter Call
Duration: ~30 minutes
Difficulty Level: Easy
Experience:
This was a simple introductory discussion with the recruiter. No technical questions were asked. The recruiter mainly explained the role, location, and expectations. I gave a brief overview of my current experience and why I was interested in Uber.
Key Learnings:
This round is straightforward. Be clear about your role preference and motivation.
Round 2: Online Coding Assessment
Duration: 90 minutes
Difficulty Level: Hard
Experience:
The first technical round was conducted on the CodeSignal platform. There were two questions:
The first was very similar to a LeetCode Hard question. Though it wasn’t the exact same, the underlying idea and pattern were identical.
The second problem was of high-end Medium difficulty.
Topics included Binary Search Trees, Deques, and Graphs. The expectation was to solve both problems completely and pass all hidden test cases. I was able to solve both and progressed to the next round.
Key Learnings:
Practice LeetCode Medium and Hard problems extensively. Pay attention to time and space optimizations because passing all test cases is mandatory.
Round 3: Data Structures Round
Duration: 60 minutes
Difficulty Level: Hard
Experience:
This round again focused on problem-solving. A graph problem (equivalent to a LeetCode Hard) was asked. The interviewer expected a complete, working solution with all test cases passing.
I initially suggested multiple approaches, including DFS, BFS, and Disjoint Set. After discussing tradeoffs, I implemented the BFS-based solution. The interviewer tested my code with additional cases, and it worked successfully.
Key Learnings:
Deepen your understanding of graph problems.
Be ready to discuss multiple approaches before finalizing one.
Demonstrate awareness of pros/cons of different strategies.
Round 4: Machine Coding
Duration: 90 minutes
Difficulty Level: Hard
Experience:
This was the round I had prepared the most for. A problem statement was given, and I had to design a scalable, object-oriented solution and implement it fully.
The focus was on:
Designing for extensibility and performance.
Using asynchronous programming.
Handling concurrency, threads, and synchronization properly.
I was able to come up with a design and implement it in the given time. This round heavily tested my low-level design skills and coding discipline.
Key Learnings:
Prepare around concurrency and multithreading.
Focus on thread synchronization, communication between threads, and parallel execution.
Don’t just solve — aim to design a clean, extensible system.
Round 5: System Design
Duration: 60 minutes
Difficulty Level: Hard
Experience:
This round had two parts:
I was asked to explain a project I had designed from scratch. The focus was on my approach to scaling, tradeoffs, and how I handled failures.
The interviewer then gave a fresh design problem. I was expected to design the system with a strong focus on scalability and asynchronous processing.
I applied design principles and patterns I had noted from studying real-world engineering blogs and talks. The discussion went well, and I was able to answer most follow-up questions.
Key Learnings:
Real-world case studies are much more valuable than generic YouTube prep.
Highlight tradeoffs clearly (consistency vs availability, sync vs async).
Demonstrate awareness of patterns like caching, sharding, load balancing, etc.
Round 6: Hiring Manager Round
Duration: 60 minutes
Difficulty Level: Medium
Experience:
The final round with the Hiring Manager was more behavioral and project-focused. I was asked about my past projects, including one in detail where I explained architecture, decisions made, and challenges faced. Some behavioral questions around teamwork, conflict resolution, and ownership were also discussed.
Key Learnings:
Prepare detailed explanations of past projects.
Be structured in explaining problem, solution, tradeoffs, and impact.
Be authentic in behavioral responses — Uber values ownership and impact.
Final Thoughts
The overall Uber interview process was rigorous but fair. Each round was structured to test a different skill: problem-solving, coding discipline, low-level design, high-level system design, and behavioral competencies.
Key takeaways for future candidates:
Strongly practice LeetCode Medium and Hard problems, especially graphs and trees.
For machine coding, focus on concurrency, threads, and clean OOP design.
For system design, study real-world systems via engineering blogs and conference talks rather than generic prep content.
Be ready to discuss your past projects in detail with a focus on impact and ownership.
Overall, preparation should be balanced across coding, design, and communication. With focused preparation, the process is very much crackable.


