Monday, June 1, 2020

FAANG : The Journey | Post 1 -Interview Experience

Note: This is not my personal experience, i just shared it out, because i liked it.. Enjoy   :)

This is my first offer from one of FAANG companies after a decade of IT experience. So, I wanted to contribute to the LC community with my experience.

Applying for FAANG: I never applied directly on FAANG job portals or referred by anyone. I was always reached out by Recruiters for positions in LinkedIn. So, I would advise anyone reading this and not getting FAANG calls to improve on their LinkedIn profile. Pointers for good LinkedIn profile: (https://www.topresume.com/career-advice/10-ways-to-create-a-winning-linkedin-profile). important ones are 1) create attractive summary 2) ask for recommendations from your colleagues from each company / college friends / lecturers 3) increase your connections to increase your visibility on being searched... i used LinkedIn 1 month trail to increase my connections... in summary, treat ur LinkedIn profile as your social resume...

Previous FAANG attempts:

Rejected at Amazon onsite in 2016 Sep
Rejected at Google phone interview in 2019 Feb
Rejected at Amazon onsite in 2019 Feb
Current attempts:

Amazon interview April 2020 (offer)
Microsoft onsite May 2020 (no offer, but they were okay to refer me to other teams)
Facebook onsite May 2020 (no offer, i cleared coding, didn't clear E5 bar for system design, despite a follow-up design round)
Amazon April 2020 (Signed NDA, can't reveal questions):
Phone Interview (1hr): 10 mins LP + 30 mins LC medium + 10 mins - system design teaser + 10 mins Q/A
Onsite Virtual (Each round 50 mins):
Round 1 (Coding): 15 mins LP + 30 mins LC medium + 5 mins Q/A
Round 2 (Coding): 10 mins LP + 35 mins (not in leetcode, coding+OOP focus)+ 5 mins Q/A
Round 3 (Coding): 15 mins LP + 30 mins (similar to project dependencies in CTCI) + 5 mins Q/A
Round 4 (System design): 10 mins LP + design question not in *** (35 mins) + 5 mins Q/A

Microsoft April/May 2020 (Signed NDA, can't reveal questions):
Tech Screening (1hr): 15 mins coding (LC easy) + 10 mins knowledge based + 30 mins system design

Onsite Virtual (each 1 hour):
Round 1: 45 mins system design + 10 mins coding teaser + 5 mins Q/A
Round 2: 55 mins - two system design questions (1 discussion, 1 coding type) + 5 mins Q/A
Round 3: 50 mins - Coding + OOAD
Round 4: Hiring manager + behavioral

Facebook April/May 2020 (Signed NDA, can't reveal questions):
Tech Screening (45 mins): Coding (LC medium) 30 mins + Followup on same problem (10 mins) + 5 mins Q/A
Onsite Virtual (each round 45 mins):
Round 1 (Coding): 2 LC medium questions + 1 LC easy - solved all 3
Round 2 (Behavioral/Coding): 25 mins behavioral + 10 mins coding teaser (not in LC)
Round 3 (Coding): 1 LC medium + other medium (not in LC) - solved both
Round 4 (Design/Architecture): system design question not in ***.
Round 5 (Coding): 1 LC medium with followup + 1 LC medium -solved 1st, 2nd explained approach + halfway code

Followup System Design (1 week later): Similar to one in ***

Interview Preparation:

Leetcode premium (like company wise filter/sort by frequency etc..)

Solved Amazon, Microsoft, Facebook interview cards in LC Premium before each interview

System Design

Designing Data Intensive Applications book (love this book so much, feel every s/w engineer to have copy of this)
*** on educa__tive
System design primer
Few other Tech Talks videos on distributed systems
Behavioral

Prepared STAR matrix for all situations (like conflict, innovation, failures, learn etc) in a spreadsheet format, based on your current company projects, and previous in reverse chronological order.
Advice is to prepare for the STAR matrix considering only recent 3-5 years experience (if you have more years of experience, so if asked you can recollect).
pick 1 to 3 projects in resume, where you know full architecture, how it works end to end so you can explain when asked... also be prepared to answer question like how would you redesign those architectures of those projects, if you were given chance.
Data Structures/Algorithms Prep
If you want refresher on data structures (by Google engineer, William Fiset):
https://www.youtube.com/playlist?list=PLDV1Zeh2NRsB6SWUrDFW2RmDotAfPbeHu

or refer to Abdul Bari's on udemy/youtube.

tech interview handbook https://yangshun.github.io/tech-interview-handbook/introduction

LC PREP:

I started doing leetcode around late 2018 and completed about 200 problems before giving interviews in Amazon and Google around Feb/March 2019. With Google, my bad luck then was mis-understanding the problem, and jumping into the code wasting about 25 mins of phone interview time. Then I stopped doing leetcode for about 10 months due to personal reasons.

In 2020, COVID situation helped a bit in doing more leetcode, as I'm not stepping out like before, eventually completing about 140+ problems in a span of 6 weeks before my interviews.

I also tried doing Leetcode weekly contests to judge where I stand when solving unknown problems in a time frame. My best was solving 3 problems in about 10+ contests but never solved all 4 problems in the contest. Based on my feeling, if you are able to consistently solve 2 or 3+ problems continuously for about 8+ contests, you are in a good position to give FAANG interviews.

When solving LC problems, here is my general approach:

Try to figure out a solution for 30 minutes,
Refer to the leetcode solutions if exists.
Look at solutions posted in LC Discuss forum thread -- sorted by Votes and looking at top 3-5 solutions to get ideas on different approaches.
Pick my favorite among own solution, LC solutions & Discuss forum solutions (i.e. step 2/3)
Code for the problem again based on my favorite solution and submit it.
In the event, if i come back to this solved problem later, i refer to my previous submitted solution so I can recollect easily.
System Design Prep:

This is not straight forward like LC problems. So, it is continuous learning, so even if you think you know everything, you may not.

My advice is to do following depending on available time for you:

Read a chapter/topic in book 'Designing Data Intensive Applications' (everyday to have a consistency)

Read a topic system design primer (if not option 1)

Watch tech talk videos from top companies (youtube, scale, infoq, aws reInvent etc)

Learn distributed system design patterns (eg: micro service patterns, self healing design etc)

Read FAANG and other top company engineering blogs to see how they solved interesting problems they came across.

Software engineering daily has some podcasts posted every week (listen to your interested areas)

Grooking system design (has step by step approach) good for interviews.. (read 1 problem every day before interviews)

Once you are at a comfortable stage, start practising with your friends 1-on-1 mocks either using whiteboard if you have (or) using online drawing tools like google drawing.

Be prepared to expect questions outside of ***, or whatever problems you have seen so far in an interview.

System design expectations are different for each role, experience, and company you are interviewing with. I feel Recruiters generally give good pointers about areas where you will be evaluated, so try to use that to see how you may be judged in the interview.

My approach for solving system design in an interview:

Functional Requirements / Use Cases - Spend max of 5 mins here. (Note: not asking questions is red flag)
Non-Functional Requirements/NFR (scalability, latency, CAP, durability etc)- 2 minutes
Back of the envelope (capacity) estimations - Spend max of 2-5 mins.
Generic High Level Design (HLD)-- covering in-flow and outflow of data -- 5-10 mins
Data Model / APIs (as applicable) - 5 mins
Scale each component in HLD depending on NFR - 10 mins
Verify your design / Discuss trade-offs of your design with interviewer (important) - 5 mins
Make your own notes on below items which you can refer to the day before each interview as a quick reference.

Your programming language - important data structure methods
Math formulas - eg: GCD, area, euclidean distance between points etc..
big-o cheat sheet
system design steps
latency numbers every programmer needs to know
Behavioral STAR matrix
Lastly, If you fail in the interview, don't worry!! after the interview, try to analyse your performance, and note down where you could have done better so you go strong next time. I honestly felt I gave best attempts at Facebook and Microsoft despite no offers. sometimes, i guess luck also needs to favor us despite our hard work..

Hope this post helps at least a few people!!! Upvote if you like it!! All the best for your interviews!!


No comments:

Post a Comment