Note: Don't forget to upvote if you find this post helpful. Also, let me know in the comments if you have any questions. I will try to answer them. Thanks for reading!
Hi everyone, before I say anything, I would like to thank the entire LeetCode Community for all the help and encouragement over the last one year for the interview preparation.
My Past LeetCode Posts on my Facebook Interview Experience:
Virtual Onsite: https://leetcode.com/discuss/interview-experience/1096480/Facebook-or-E5-or-Bay-Area-or-Virtual-Onsite
Phone Interview: https://leetcode.com/discuss/interview-experience/1107713/Facebook-or-E5-or-Bay-Area-or-Phone-Screen
Offer Details: https://leetcode.com/discuss/compensation/1118731/Facebook-or-Software-Engineer-(E5)-or-Bay-Area-or-Offer-or-March-2021
I am glad to inform you all that I accepted the Facebook Offer last week.
In the past comments, you all asked a lot of excellent questions. One of the most frequent questions across all my posts was about my Facebook interview preparation journey/strategy. I thought I would answer it in detail in a separate post so that everyone can benefit from it.
It took me about 7-8 months to thoroughly prepare for the interviews. And then about two months to give all the interviews. So, you can say that the entire process took a period of 10 months.
Coding:
I started my interview preparation by preparing for Coding Interviews. I initially tried to read the Cormen Algorithms Book, but I soon realized after reading numerous interview experiences that it may not be the correct route for me. I then shifted my focus to doing the LeetCode algorithms questions directly. In the beginning, I could not get into the rhythm of doing questions daily, and there was a lot of friction. Each question was taking a lot of time, and at times it felt like giving up. Then, someone suggested that I should put a time limit of 15 mins for doing each question. If I cannot solve it myself within that time, I should directly look into the solution, learn from it and then move ahead to the next question. This approach helped a lot in covering a vast amount of problems on Leetcode.
Along with this modification in strategy, I also started setting a weekly goal instead of a daily goal as weekends were more productive than weekdays. In the beginning, I aimed to finish at least 25 new questions each week. Once I became more comfortable and my speed increased, I was able to bump that number to about 40 questions each week.
As I was preparing, I also realized that this interview preparation was like a sliding window. Whatever questions I solved about two months ago, I started forgetting them in the third month. To overcome this, I allocated 1-2 days every week for revising all the questions that I did in the previous week and the earlier questions that I have forgotten. This helped a lot in keeping the questions refreshed in my mind.
In the beginning, I focused on Easy questions to gain confidence and get some consistency. Once I overcame the friction of doing questions, I moved onto the medium and hard questions. Also, initially, I was doing questions based on separate topics like Array, Strings, Dynamic Programming, Graph, etc. Later, I started to focus more on the company-specific questions on LeetCode. For Facebook, I did all the questions that came in the last one year and sorted them by their frequency.
Towards the end, I did several mock interviews with my friends, which helped me with my communication and on how to answer the questions during the interview. Facebook uses CoderPad for coding questions. You can also sign-up for their free trial and practice questions there with your friends so that you can get familiar with the environment before your actual interview.
System Design:
I only started preparing for System Design around the 6th month of my interview preparation. As many people have suggested before, I also took the Gr**** the System Design Course from Ed**** (Sorry for the * as LeetCode does not allow me to write those words in the post. I hope you can guess the course).
I also read the famous System Design Primer on Github and reviewed the posts tagged under System Design on LeetCode Discuss - https://leetcode.com/discuss/interview-question?currentPage=1&orderBy=most_votes&query=&tag=system-design
Since the interview was virtual, I used an iPad + Pencil with screen sharing (Quick Time Player on Mac). It helped a lot with drawing the diagrams. Facebook offered me three choices - Google Drawings, BlueJeans Whiteboard, or ScreenShare your choice. As mentioned earlier, I chose the last one.
Behavior:
I prepared for behavioral interviews towards the end, right before starting my interviews. Preparing for Amazon Leadership Principles helped a lot in framing answers for most of the behavioral questions asked in different companies. I prepared around 5-6 stories from my experience beforehand. During the interview, these stories helped a lot as I did not need to think and frame the answers on the spot.
Resume Preparation and LinkedIn Profile:
I did not spend much time on this part. At max, two weekends to finalize both of them. I used the ModernCV template on Overleaf and created a one-page resume. For the LinkedIn Profile, I listed all my experience and education and a brief description for all of them. Finally, I got them reviewed by my friends and fixed both of them based on their suggestions.
To summarize, it was a challenging journey. The main thing was never to give up and keep moving forward. I hope some of the tips mentioned above will also help you in your interview preparation journey as they helped me. The journey may be quite tough for some people, but don't lose hope as the result of this hard work can be very awesome.
Best of luck everyone for your upcoming interviews, and always remember - "A LeetCode a day keeps unemployment away" 🙂