My Interview Experience at Google [L5 Offer]
Comprehensive Insights: A Deep Dive into the Journey from Preparation Through Interviews to Securing the Offer.
Note: I won’t be able to provide the exact questions due to the confidentiality agreement (NDA) in place.
If you are only interested in my preparation Go here
If you are only interested in my Google interviews Go here
I used to work at Facebook London with the Instagram team when I started thinking about moving back to India. I might share my reasons for this in another article.
Checkout my interview experience at META
In November 2022, a Google recruiter contacted me. They mentioned an opening for an L5 role in Bengaluru and asked if I was interested.
Since I was already contemplating a move to India, and I had previously interviewed with Google but was offered a lower position (L4) than I had aimed for, I had joined META at the E5 level after that experience (you can find details about my META interview here).
I informed the recruiter that I wanted to schedule the interview for March 2023. This was because I was about to become a father, and I wanted to allocate time to my family during this significant period.
The recruiter agreed to my request and provided interview preparation materials. He mentioned that he would follow up in March. In the meantime, he consistently checked in to see how my preparation was going.
This time around, I had a unique challenge in my preparation journey — a delightful addition to the family, a newborn. With diapers and coding competing for my attention, carving out focused study time became quite the adventure! I had about 25–30 days to master both the art of baby soothing and acing the interview.
My preparation
Solved approximately 75 LeetCode questions.
Emphasized the following topics for DSA round:
- Graph: BFS, DFS, Topological sort, Shortest Path
- Tree: Binary tree, Binary search Tree, N child tree
- Trie: Prefix search, Word search with counts
- Disjoint set union
- Heap: Median in a stream, Sliding window maximum, Top k elements
- Binary Search: Lower bound, Upper bound, Questions where binary search is not the obvious choice
- Sliding window and 2 pointers based questions
- Dynamic programming
- Strings: KMP, String sorting
- Adhoc questions on the application of Array, Stack, Queue, HashMap, TreeMap
System design preparation:
- Read a few research papers:
– Amazon Dynamo: Amazon’s Highly Available Key-Value Store
– The Google File System
– Spanner: Google’s Globally Distributed Database
– Cassandra — A Decentralized Structured Storage System
– MapReduce: Simplified Data Processing on Large Clusters
– Bigtable: A Distributed Storage System for Structured Data - Practiced popular system design problems like designing a URL shortening service, Pastebin, Instagram, Dropbox, Facebook Messenger, Twitter, YouTube/Netflix, Typeahead Suggestion, API Rate Limiter, Twitter Search.
- Practiced system design for some Google products, including Google Search, YouTube, Google Photo Sharing and Storage, Google Docs, Google Drive.
- Revised system design concepts such as CAP and PACELC theroem, SQL vs No-SQL, Types of No-SQL databases and their applications, Consistent Hashing, Bloom Filters, Load Balancers, Horizontal Scaling, Caching, Database Partitioning/Sharding, Indexes, Rate Limiting, Distributed Queues, Request Deduplication.
- Watched few YouTube videos on system design.
Gave 7 mock interviews — 3 with friends and 4 on Pramp.
My Interviews
Round 1 DSA (45 minutes)
Tree, Post order traversal, Topological sorting
During the interview, the interviewer shared a lengthy question in the code editor and asked me to read it. After reading, I asked several clarifying questions to better understand the problem.
Once I had a clear understanding, I suggested using a Tree as a data structure and applying post-order traversal to solve the problem. The interviewer then requested that I explain the solution using an example, which I did.
After explaining, the interviewer asked me to implement the solution. As I started writing the code, I aimed to make it modular. For this purpose, I created a TreeNode class, a TreeClass, and a separate class specifically for solving the problem. Due to time constraints and my focus on modularity, I faced a bit of a challenge, but I managed to write a working code in the end.
The interviewer had a few follow-up questions but couldn’t ask them due to time constraints. By the end of the round I knew that I messed up. I realised later that same problem can be solved using topological sorting.
Round 2 DSA (1 hour)
N children tree, Tree traversals
For the second round, I was surprised to find that the interview was scheduled for 1 hour, as Google’s DSA rounds typically last 45 minutes.
Once the interview began, I quickly realized why this round was extended to 1 hour. The interviewer presented the problem using a Google Doc that contained a lengthy question spanning 4–5 pages. Additionally, there was a slide with a diagram to provide a comprehensive overview of the problem.
Upon seeing the extensive problem, I felt a bit nervous. While reading through the problem, I found myself forgetting details from earlier pages, reaching page 3. Thankfully, the interviewer was very helpful and took the time to explain the problem. I asked numerous clarifying questions, and it took me approximately 20–25 minutes to fully grasp the intricacies of the problem.
Similar to the question’s complexity, the solution for this problem was also extensive. The problem was centered around trees, specifically n-children trees. Despite the challenge, I managed to write the complete code. By the end of the round, I was a bit sweaty, but I felt confident that I had performed well.
Round 3 DSA (45 minutes)
Medium Leetcode problem, Tree, Heap, Recursion
This round differed from the previous two. The interviewer presented a standard LeetCode problem, specifically a medium-level one with a focus on trees and a slight modification. I swiftly offered a solution, verified it with examples, and was then asked to write the code. I promptly coded the solution and provided both time and space complexity.
Follow-up 1: The interviewer altered the problem slightly and asked how I would modify my code to accommodate the new feature. I quickly identified the necessary change, making my code not only adaptable to the modification but also more modular for accommodating such changes easily by using strategy design pattern.
Follow-up 2: The interviewer presented a challenging follow-up question. It took me some time to find the optimal solution, and explaining the solution with examples also consumed some time. The modifications I had made earlier to enhance code modularity proved beneficial in quickly adapting to the changes asked in follow-up 2. I was able to write code within time.
Follow-up 3: This is around productionizing my solution. I provide few approach through which my code can work in production environment.
After concluding this round, I felt confident.
After the first three rounds, the recruiter shared feedback in one of the DSA round I received mixed feedback. I already suspected this because I felt I didn’t perform well in round 1. The recruiter recommended an additional DSA round to ensure there were no concerns from the hiring committee, considering the strong hire feedback from the other two rounds.
Round 4 DSA (45 minutes)
Strings, Sorting, Binary Search, Trie
I was already feeling nervous about this round. The interviewer presented a problem I hadn’t encountered before. While the problem itself wasn’t overly difficult, it required applying multiple DSA concepts like hashing, sorting, binary search, upper bound, lower bound, and considering corner cases. Additionally, the interviewer requested proper tests to be written.
After pondering for about 5 minutes (and thinking out loud), I managed to devise an algorithm to solve the problem. I explained the solution, verified it with examples, and then provided the time and space complexity of my solution. The interviewer then asked me to write the code. I quickly wrote the code, created test cases, and ensured that all corner cases were covered.
Follow-up 1: The interviewer posed a follow-up question, making a slight modification in the input and expecting an even more optimal solution. After considering a few examples, I came up with a solution using a Trie that met the interviewer’s expectations.
Follow-up 2: The interviewer inquired about the scalability of my solution for handling very large datasets and its viability in a production environment. I discussed the option of sharding the trie data structure, outlining various strategies for effective sharding. Additionally, I presented an alternative approach using a key->value store, although we did not delve deeply into this alternative. After this interviewer asked me implement trie based solution
The code for this follow-up was lengthy, and I had to rush to finish it within the time limit. Overall, this round went well.
Round 5 System design (45 minutes)
The interviewer tasked me with designing one of Google’s products. Armed with prior knowledge of the system, I efficiently supplied functional and non-functional requirements after a few clarifying questions, confirming them with the interviewer. The conversation then evolved into a detailed discussion about specific features, making this round more conversational in nature.
We delved into multiple approaches, thoroughly examining the pros and cons of each. The interviewer’s interactive and supportive demeanor transformed this round from a typical interview into a technical discussion. Overall, it was a great experience.
However, on the downside, I was uncertain about the performance in this round.
Round 6 Googlyness (45 minutes)
We delved into my prior work experiences and explored the reasons behind my decision to leave META. Following that, the interviewer posed some Googlyness questions, which were situational in nature. The session featured several intriguing scenarios presented by the interviewer, and I responded by drawing from my past projects and experiences. The interviewer maintained a friendly and supportive demeanor throughout.
In summary, this round unfolded smoothly, and I felt it went well.
Cleared Google’s interview
I waited eagerly for the results during this long period. The recruiter mentioned that they were waiting for the Hiring Committee’s decision in our few interactions. After three weeks, the recruiter called to congratulate me, sharing the good news that I passed Google’s interview, and the Hiring Committee gave a positive result.
Offer Negotiation and Acceptance
This time, I didn’t engage in much offer negotiation, unlike when I received an offer from META. The initial offer was in line with my expectations, so I happily accepted it.
Similar to META, Google offered generous relocation benefits, making the transition from London to Bengaluru much smoother.
Team matching
The team matching process at Google is quite extensive. I had several meetings with various team managers to find the right fit. Eventually, I joined the Google Cloud Databases team, which I found to be very intriguing.
I officially joined Google on October 16, 2023. Here’s a brief timeline of the journey:
- November 2022: Recruiter reached out to me
- March 2023: I underwent the interview process
- August 2023: Received the offer
- October 2023: Joined Google
Key Takeaways
- Develop a solid grasp of data structures and their applications. Tree questions were a recurring theme in three rounds of my interview.
- Google emphasizes the quality of your solution, unlike META, where speed is the primary focus.
- The responses to follow-up questions carry significant weight.
- Be prepared for lengthy problems and writing substantial code during the interview.
- Some follow-up questions may delve into complexities related to implementing your solution in a production environment.
Like most software engineers, landing a job at Google has been a dream of mine for many years. Google is revered for its engineering culture, challenging problems, and innovative technologies. Having the opportunity to work at such an influential company alongside some of the sharpest minds in the industry has been my biggest motivation.
After an intense interview process requiring thorough preparation, I am thrilled to now call myself a Googler. I look forward to continually challenging myself on impactful projects and expanding my skills while learning from my talented colleagues. I’m excited to see what the future holds in this next chapter of my career.
Thank you for taking the time to read. Feel free to connect with me on LinkedIn if you require any assistance! I’m more than happy to help with your interview preparation or provide guidance for your career.
Follow me on LinkedIn: LinkedIn Profile
Similar interesting read
Read about my interview experience at Facebook
Read about my interview experience at Amazon
Also have a look at these amazing course from designGuru.
Course link
