Friday, September 17, 2021

My interview experience - Google (Accepted) | Microsoft (Declined)

 Original post: Link

Hello everyone,

First things first, thanks a lot for your help and support throughout my preparation journey.
I would like to share my interview experience to give back to the community.

I interviewed with Facebook (E5), Google (L5), Microsoft(L64), Uber (L5A) and Atlassian(P5).
Got down-leveled to E4 in Facebook, received offers from Google and Microsoft and had to cancel 1-2 remaining rounds of Uber and Atlassian because of time constraints (More details later)

Here's my preparation and interview journey:

February 2021 :

A Google recruiter reached out to me via LinkedIn and I decided to give it a shot and connected with her sometime in 2nd half of Feb. After a ~30 minutes chat with her I knew it's not going to be easy and I need to start preparing ASAP. Didn't even have a Resume to share it with her.

I did not give any interviews for 7 years and was out of touch. I created my Leetcode account last year when one of my friend who joined Facebook, told me about it. But I barely solved 4-5 easy/mediums by this time. I was also not prepared for system design interviews. Bought Leetcode subscription.

March 2021 :

I really liked the concept of Daily Challenges in Leetcode. I targeted easy problems for first couple of weeks to boost confidence. Thankfully, I didn't get stuck in any easy but my solutions were not optimized and needed improvements. I started doing Leetcode daily challenges from March onwards and continued my streak till sometime in August. I even got 5 badges (March 2021-July 2021). I also started brushing up my DSA and went through various YT channels and Crckng the codng intr*iew book. (Will share the details/links towards the end of this post)

May 2021 :

This is when Facebook recruiter reached out to me and we decided to have a screening round in June.

June 2021 :

By this time, I had focused 90% of my preparation time on coding and was fairly confident by now. Had solved 350+ LC problems with main focus on mediums. I also solved ~50 Hard problems as well. I created a list of important questions during this time and had solved them 3-4 times before the interviews so that I understood the concept very well.
I cleared FB phone screening round. Was given 2 LC mediums and solved both pretty fast including follow-ups. It was 45 mins interview and we were done even before 40 mins.

This is when I started focusing on system design. Bought DDIA book and few other subscriptions.

July 2021 :

Completed reading DDIA book and went through Gr__k__ng the Sy_t_m D_s_gn interview course.
Only did Leetcode daily challenges this month and went through 10-15 FB tagged problems(sorted by frequency) before the interview.
Spent 1-2 days in preparing for behavioural round as well.

Had 2 coding + 1 product design + 1 behavioural round with Facebook.

In 1 coding round I had to solve 2 LC mediums and in other round 1 LC easy and 1 LC Hard was given. Solved all 4 problems. These were all variations of FB tagged problems on Leetcode and if you have solved them, it's fairly easy. Yep, FB is very predictable w.r.t. coding.
I had very strong feedback for 2 coding rounds, good feedback for behavioural but my product design round didn't meet E5 expectations. This was I believe happened due to following reasons:

  • Never did a mock-up before or gave any product design interview before. This was the first time for me in an interview setup so was a bit nervous a well. I would highly recommend doing some mock interviews.
  • I had prepared extensively for system design which focuses heavily on the system side (Database, Schema, Partitioning, Replication etc.). In product design, you are expected to focus more on the API side and High level functionality.
    I was not given a choice between product design and system design round. Talk to your recruiter and see if you can schedule the round where you are strong at.

Recruiter reached out to me and offered to send my packet to HC for E4 as feedback for product design didn't meet the bar for E5. I declined as it was not worth and a down-level for my experience.

Had Google's screening round, 1 easy and 1 medium with lot of follow-ups in both. Did well and cleared this round.

August 2021 :

This month was spent mostly in interviews and I didn't practice much from coding perspective.

Microsoft :

Round 1 (Coding):  It was a online assessment round. I had to solve 2 problems in 90 mins time. These 2 problems were new to me and I didn't find them on Leetcode. I'll categorize them as LC medium from algorithm perspective. But I had to write a lot of boiler-plate code unlike the usual LC mediums. You are given few visible test-cases and option to add custom test-cases. When you submit, 10-12 hidden test-cases are executed which are only visible post submission. So make sure you write your own test-cases well. After talking to various folks and going through community discussions, I also focused on code quality.
I was able to solve both of them in 60 mins. Spent next 15 mins in adding comments in various functions to explain what they were doing. I also mentioned time and space complexity wherever I felt it was required. This is really important as this was not the screening round for me but an actual coding round where I would be judged not just on code correctness but also on code quality/modularity.
My score was 100% (I passed all the visible and hidden test-cases for both the problems)

Round 2(Coding): 2 LC mediums with follow-ups. This went really well. Since we completed the coding exercise in ~35 mins, spent next 10 mins discussing my work experience/projects.

Round 3(LLD): First 10-15 mins were spent on my work experience. I had to design a Parking-Lot. Went well. You can find a lot of example/tutorials on Y**tb etc.

Round 4(HLD): This was the Hiring Manager round. First 20 mins spent on my projects and various discussions w.r.t. how I handled a particular scenario and why I chose one technology over other. Next was given a popular HLD question. I did very well here. I believe this round differentiated between L63/L64 level and given my interview performance, I was offered L64 eventually.

Round 5(Director): This was mostly project discussions and behavioural questions. Nothing technical. Went well.

Google :

I had 3 coding rounds , 1 system design and 1 googlyness round.

Round 1 (Coding): 1 ambiguous problem with follow-ups. Expectation was to gather requirements and frame the problem statement. Once the scope was defined I provided few solutions with Time/Space complexities. Coded the same. Had few follow-ups w.r.t. what changes I'd make to make it thread-safe etc. This went well.

Round 2(Coding): 2 problems were given. First was related to 2-D matrix and 2nd was a graph problem. Solved both.

Round 3(Coding): A problem statement was given related to a e-commerce website. Had to gather requirements and once the scope was clear I understood it was a graph problem. Provided solutions using both DFS and BFS approach, implemented using DFS. Follow-up was again how to make it thread-safe. Next was kind of LLD question where I was given a problem and was expected to define classes/schema and relations. I provided a generic solution which would scale even for cases outside of problem statement scope.

Round 4(System Design): Was a given a problem related to a real life scenario. Very practical but not something you'd find on any YT channel or course. Since I had never seen the problem before there were no biases or known design in my mind. Kept it simple from the beginning. After gathering functional and non-functional requirements and some back-of-the-envelope estimations presented a very simple high level design. I literally drew just 3 components: client, server and a database. Then started talking about how I can scale each layer and talked about trade-offs as well. This was 1 hr round and first 45 mins went pretty well. In last 15 minutes I wasn't sure about what to talk about more as I was not getting any feedback from my interviewer. I believe he only talked during first 10 mins when I was gathering requirements and he had to answer my queries. In last 15 mins I thought of providing an algorithm of how to implement my approach and talked about few data-structures as well (although this might not be in scope of system design round). After the interview I knew it won't be a No Hire but was also not sure whether it would be Lean Hire or Hire etc.

Round 5(Googlyness): This was the best round. I discussed about various scenarios and situations following the STAR approach. I had prepared a lot of answers w.r.t. ambiguity, leadership, conflict, strengths etc. but I was kind of surprised as he didn't ask any direct questions which you usually prepare. I guess I only used 1 prepared story and rest was on the fly. But if you had prepared enough, you'll know what to answer and how to answer and would be able to relate to it using one of your experiences/projects.

Problems asked in Google were not directly from LC or any other platform. If you had practiced enough, you'll be able to solve them.
Make sure you gather requirements, ask questions before jumping to solution. Keep talking and explain your thought process through-out. This is very important as interviewer would be able to judge you better and provide hints, if required.

Uber :

Screening Round: This was rather unexpected as interviewer gave me a LC Hard graph problem!! Who expects a LC hard in screening ?
Well, Graph theory is one of my favorite and kind of my strength too, so I solved the problem well within time limit.
At the start of the interview she told that if I could write the psuedo-code, that'd we fine too. But since we had time, I wrote some test-cases and tried the ones she copied pasted as well. All worked, pheww.

Round 1(Coding): 2 LC medium types. 1 related to Linked-Listed and other binary tree problem. Solved both.

Round 2(Coding): 1 data-structure design problem with lot of follow-ups including making it thread safe. Similar to Design a HashMap with custom O(1) operations. I was able to come up with design and implemented the same with O(1) complexity. Couldn't find the variation given to me on Leetcode.

Round 3(System Design): Design Uber. (yep, LOL)

Round 4 (Hiring Manager): Mostly project discussions and Behavioural questions.

Round 5 (Behavioral) - Cancelled. I received offers from Google and Microsoft and asked them to cancel as I had a deadline to make a decision on offers.

Atlassian :

I felt Atlassian's interviews are really practical and they don't ask questions which you won't be expected to solve on a daily-basis.
No screening round here, just a 30 min discussion with recruiter before scheduling interviews:

Round 1(Coding) : 1 problem was given. I was expected to code the same in my preferred IDE (IntelliJ, Eclipse etc.). Focus was mostly on data-structures and code quality. The algorithm itself was really easy if you write data-structures. I used HashMap, Set and PriorityQueue in my solution. Created multiple classes, methods etc. Wrote a few test-cases. You end-up writing a lot of boiler-plate code in IDE as you need to write the main class and method, instantiate everything and then create test-cases. I even used a debugger to debug one of the test-case. This round went well.

Round 2(Machine Coding): Asked to implement a Rate-Limiter. Used an IDE again. Was given 1 problem statement and was expected to write a Object-oriented and modular code.  This also went well.

Feedback of both the rounds were positive and recruiter scheduled 3 more rounds for me. 1 Design and 2 Cultural fit types. But I had to cancel them all as I had a deadline to make a decision on offers.

Preparation Strategy:

Coding:

  • Leetcode
    • Would recommend buying premium subscription. It's worth it.
    • Try to do daily Leetcode challenges. It helps you in being consistent and also covers variety of problems.
    • I used Explore card of Google and Facebook and tried to solve most of the problems.
    • Top 100 questions by frequency.
  • Crckg the Cdng Intriew book
  • YT channels/videos:
    • Data Structure lectures by Abdul Bari
    • Graph Theory by Willian Fiset
  • Few Tips:
    • Try to solve a problem by yourself, even if you are not able to come-up with an optimal solution.
    • Think about time and space complexity of your solution. Identify sections which can be optimised and think of a better solution/ data structure.
    • Check Leetcode Solutions/ Refer Discuss section. After understanding the approach, try to implement it yourself without taking a look at code. This would help you in really understanding the concept.
    • Try to beat 90% of solutions by runtime.

System Design:

  • Book: DDIA (MUST READ if targeting Google)
  • Book: System Design _Interview by Alex Xu
  • System Design Primer by Donne Martin
  • Courses - Gr_k_i_g the System Design and Gr_k_i_g the Ad__nced System Design
  • YT:
    • System Design Interview videos by Mikhail Smarshchok.
    • InfoQ videos and presentations
    • Go through Architecture of popular systems such as GFS, Kafka, Cassandra etc.

Time Management: I had a decent work-load in my day job. So spent ~2 hours on average on a working day and 4-5 hours on weekends/holidays.

Current Leetcode stats: ~440 solved (E: 100, M: 272, H: 70)

As many of you queries w.r.t. Competitive Programming, I'm not a competitive programmer and I don't think you need to be one to qualify any of these interviews.

Offers :
Microsoft (L64) : https://leetcode.com/discuss/compensation/1447596/Microsoft-or-SSE-(L64)-or-India
Google (L5) : https://leetcode.com/discuss/compensation/1466646/Google-or-L5-or-Bangalore

Hope this helps.


No comments:

Post a Comment

My Journey from a Tier-3 College to Microsoft, Google, and Meta: Lessons Learned

Original post: Link   Time to give back to community. Went through couple of post myself and got inspired and belief that cracking FAANG is ...