- Published on
Uber | SDE 2 | Bangalore | July 2024 [Offer]
- Author
- Shared Anonymously
Status: 3 YOE, CS from Tier 1\1.5
Position: SDE II at seed-stage start-up
Location: Bangalore
Date: July, 2024
Interview
OA. If cut-off score met, a TPS is scheduled. If that is cleared, four on-site interviews - DSA, LLD, HLD, and HM.
Online Assessment
Question: 3 questions. All LeetCode Easy to Medium.
Performance; Solved all of them with all tests cases
Technical Phone Screen
Question: Given a size N array, for every K sized rolling window in the array, find the minimum absolute difference between any two elements in the K sized window.
Performance: Implemented a working solution with time complexity O(NKlogK), however the expectation was to do better and provide a solution with time complexity O(NlogK). Idea behind the optimal solution is to do a one-time construction of K sized sorted set of the first window and a K - 1 sized sorted set of the difference between the sorted elements of the first window in time complexity O(KlogK). Iteration through the array (removal of the first window element, addition of the next element, and computation of the minimum absolute diff of the window) can be performed in O(logK) each, leading to an overall complexity of O(NlogK + KlogK) = O(NlogK)
Since I wasn't able to implement or even clearly discuss the optimal solution, wasn't expecting an onsite interview call, but did receive one.
Onsite DSA
Question 1: Construct an N sized array consisting of elements from 0 to N - 1 given K subsequences of that array. It can be assumed that at least one valid answer always exists. Follow-up: In case of multiple valid solutions, return the one that corresponds to the "lowest" value. (i.e. [0, 1, 2, 3] is lower than [0, 2, 1, 3])
Performance: Was able to solve both the question and follow-up with optimal time complexity. The first part can be solved by topological sort. The second part requires a minor modification in the topological sort DFS to ensure that the numbers are always traversed in descending order (since topological sort involves a final reversal step of the elements).
Question 2: String manipulation. Same as this post.
Performace: Implemented working solution. Trie seemed like overkill given the set of elements is limited, and the interviewer seemed to agree, so a simple hash-map based approach was enough.
LLD
Question: Well defined logging library API with get and set methods. Data was expected to be handled in memory.
Performance: First implemented functionally complete solution with appropriate design patterns such as singleton and fluent. Then discussed and partially implemented improvements such as concurrency handling with locking and time complexity optimisation.
Ran into some strange compilation issues while working on the optimisation and wasn't able to fully complete all the requirements discussed, but no major gaps.
HLD
Question: Don't recall the exact problem statement, but it was well-defined. The interviewer copy-pasted a list of requirements rather than verbally discussing a high level problem statement.
Performance: Since the problem statement was well-defined, the interview was more straightforward than a usual HLD round.
HM
Several behavioural questions, with cross questioning. Focused a lot on experience managing multiple stakeholders.
Compensation
Notes
The interviews were comprehensive and covered pretty much all standard topics. However, the hardest part of the process was getting the initial call from the recruiter. Had to use personal referrals and just be patient.
I regularly used LeetCode for DSA. Read up about design patterns and multithreading for the LLD interview. Watched videos from the System Design Interview YouTube channel and read a few case studies from Alex Xu's books for HLD. Existing Uber interview experiences were helpful in finetuning preparation before each round.