GRAB | SDE-1 | Bangalore, India | Nov 2021 [Reject]
Summary
I interviewed for an SDE-1 position at Grab in Bangalore, India, in late 2021. Despite performing well in most technical rounds, I was ultimately rejected due to my performance in the Low-Level Design round, which involved implementing an LFU cache.
Full Experience
I have approximately 0.7 years of experience, holding a B.Tech from a Tier-3 institution, having graduated in 2020. My background in problem-solving is extensive, with over 1000+ LeetCode questions solved, an 1800+ rating on Codechef, and a Codeforces Specialist title.
Each interview round was meticulously structured for 1 hour.
Online Assessment:
The online assessment consisted of three questions administered on Codility, where I achieved a perfect 100% score. The problems included an array-based question (LeetCode Medium), a binary tree with path tracing problem (LeetCode Medium), and a graph theory question (LeetCode Medium).
Systems Design:
This round was conducted by two interviewers. After a brief period of general introductions, we delved into the core problem: designing a Microsoft Teams-like Employee Report System. My task was to implement five specific APIs. These APIs covered functionalities such as providing a list of all reportees for a given manager, identifying an employee's direct manager, removing a manager and reassigning their succeeding employees to higher-level managers, and calculating various employee counts. This round leaned heavily towards a machine coding or Low-Level Design (LLD) style, requiring implementation using Object-Oriented Programming (OOP) principles. I utilized a graph algorithm to address the problem. The follow-up discussion explored strategies for preprocessing and caching values to enhance performance for high-volume API requests. Additional discussions touched upon Python, Operating Systems, Stack, Heap, and my motivations for joining Grab. Overall, I felt this round went quite well.
Data Structures and Algorithms:
As I was particularly confident in Data Structures and Algorithms, I approached this round with enthusiasm. I successfully solved a binary tree-based question (LeetCode Medium) within 10 minutes and an array-based question (LeetCode Medium) in another 10 minutes. A follow-up question, requiring an in-place solution for the array problem, took me an additional 20 minutes. With time still remaining, the interviewer presented another string-based question (LeetCode Medium), which I also solved with an optimal approach.
Low Level Design:
In this round, I was tasked with implementing an In-Memory Cache incorporating the Least Frequently Used (LFU) eviction policy. This was a new problem for me, and despite receiving numerous hints, I could only manage to devise an inefficient, heap-based solution. This round proved to be quite challenging, demanding not only the implementation of an in-memory cache but also the intricate LFU algorithm, all while adhering to SOLID/OOP principles. My performance in this round garnered mixed reviews.
Hiring Manager:
The hiring manager round progressed smoothly. We engaged in discussions about my past projects, my current responsibilities, and various technical concepts such as Microservices, Concurrency, Database Management Systems (DBMS), Operating Systems (OS), and REST principles. A specific design question also arose concerning the data model for a system akin to BookMyShow.
Verdict:
Ultimately, I was rejected, primarily due to my performance in the Low-Level Design round. I found the LLD round to be overly difficult, as implementing a complete LFU cache from scratch with full adherence to SOLID/OOP principles seemed impractical within the given time constraints. However, I received positive feedback for all other rounds, and I appreciated the helpful demeanor of the interviewers.
Interview Questions (3)
Design a Microsoft Teams-like Employee Report System. I was required to implement 5 APIs that would handle functionalities such as providing all reportees for a manager, identifying the direct manager of an employee, managing the removal of a manager and redirecting their reports to higher managers, and calculating employee counts. The implementation should follow OOPS principles (similar to a machine coding/LLD exercise). Follow-up discussions involved strategies for preprocessing and caching values to ensure faster results for high-volume API requests.
Implement an In-Memory Cache along with the Least Frequently Used (LFU) eviction policy. This task required applying SOLID/OOPS principles throughout the implementation of both the cache and the LFU algorithm.
During the hiring manager round, I was asked to discuss and design the data model for a system similar to BookMyShow.
Preparation Tips
My preparation for the interviews involved extensive problem-solving practice. I completed over 1000+ LeetCode questions, achieved an 1800+ rating on Codechef, and became a Codeforces Specialist, which significantly bolstered my confidence in algorithmic challenges.