Once it has been decided we are bringing you in for interviews, your interview performance is much more critical than your educational/work background. Based on interviews, we regularly hire engineers with no college degree and only a couple years of experience at a higher level than engineers with many years of experience and a master's degree in Computer Science.
Your projects and work experience may develop your coding skills in various programming languages and object-oriented design. However, it will not be enough to be proficient in data structures and algorithms. Coding interviews are a learned skill. It requires a lot of practice and studying outside of your job responsibilities.
These prerequisites are for Java interviewees only. Move onto the next section if you're prepping with a different programming language. If you have not decided on a programming language yet, I strongly recommend Java. The most popular prep resources are written in Java.
Practicing with mock interviews is mandatory. I cannot stress this enough. LeetCode is incredible but the actual coding portion of an interview should only be about 15 minutes of a 45-minute Google interview. You're spending a lot of time talking through potential solutions and trade-offs before you start coding. After you're done coding, you need to walk us through test cases. You will not pass a difficult Google-level coding interview without live interview practice and feedback. If you are an experienced software engineer and a top performer at your current employer:
- At 20+ mock interviews, you have a very high chance of getting hired at L4+. At L5+, you are also required to succeed at System Design interviews.
- At 10- mock interviews, you're relying on a lot of luck. Even if you pass, you will most likely get hired at L-1.
Mock interview resources:
- Technical Mock Interview
- This is a paid service with high quality interviewers from Google, Facebook, and Amazon with detailed verbal/written feedback and personalized coaching. I strongly recommend doing at least 10 mocks through here.
- interviewing.io
- This is a free service. It is a hiring platform where it will connect you with potential employers if you pass enough interviews. The quality of feedback is poor in comparison to Technical Mock Interview.
- pramp.com
- This is a free service. It is a peer-to-peer mock interview platform. Another great resource if you're trying to do as many mocks as possible.
- Friends and colleagues
- Find other engineers to practice with. Start an interview club with your friends. Meet weekly to go through videos and coding exercises together.
- Mentor
- Find a mentor. Reach out to other software engineers you respect. Ask them to meet with you regularly for mentoring sessions.
- For every algorithm, understand its time and space complexity (Big O) characteristics.
- Chapter VI: Big O - Cracking the Coding Interview
- A lot of coding questions can be solved with various algorithms. Talking through the Big O of each is essential in trade-off discussions.
- Solve '2Sum' Coding/Engineering Interview - How to: Work at Google (YouTube)
- This is the flow and pacing of discussing a solution, coding, and testing that you should follow.
- Week 1: Analysis of Algorithms section - Algorithms, Part I (Princeton University)
- Memorize order-of-growth classifications.
- Memorize the binary search algorithm. Many solutions are variations of binary search.
- Skip Week 1: Union-Find section.
- LeetCode Binary Search Problems 29, 33-35, 50, 69
- Week 2: Elementary Sorts - Algorithms, Part I (Princeton University)
- Familiarize yourself with these basic sorts. Don't memorize them.
- Week 3: Mergesort and Quicksort - Algorithms, Part I (Princeton University)
- Recommended Mergesort and Quicksort Algorithms - My Notes
- Only memorize the mergesort algorithm. Many solutions are variations of mergesort.
- LeetCode Array Problems 11, 15, 16, 18, 26, 27, 31
- LeetCode Google Problems 1-3, 5
- Stanford Library - Linked List
- Week 2: Stacks and Queues - Algorithms, Part I (Princeton University)
- LeetCode Google Problems 17, 20, 22
- Stanford Library - Binary Tree
- Week 4: Elementary Symbol Tables - Algorithms, Part I (Princeton University)
- Recommended Binary Tree Algorithms - My Notes
- Memorize these binary tree algorithms.
- LeetCode Tree Problems 94-96, 98-100
- LeetCode Google Problems 54, 56, 66
- LeetCode Tree Problems 101-106
- LeetCode Google Problems 155, 162, 173
- Week 4: Priority Queues - Algorithms, Part I (Princeton University)
- LeetCode Heap Problems 23, 215, 218, 239, 253, 264, 295
- LeetCode Google Problems 42, 200, 208
Remainder of Algorithms, Part I (Princeton University)
- Skip all of Week 5.
- Study Week 6: Hash Tables section only.
Many LeetCode Medium and Difficult problems are advanced versions of Easy problems. Practicing and understanding a large number of Easy problems builds a strong foundation to set you up for success with Medium/Hard problems. Also, going through a high volume of Easy problems will increase your coding speed.
- Complete all of the LeetCode Easy Collection
You should expect to get asked a couple graph questions at Google. Don't bother interviewing if you haven't mastered and memorized graph algorithms. Also, get comfortable in recognizing when a problem requires a graph solution instead of a binary tree solution (and vice versa).
- Week 1: Undirected Graphs and Directed Graphs - Algorithms, Part II (Princeton University)
- Recommended Graph Algorithms - My Notes
- Memorize these graph algorithms. Graph solutions are usually variations of DFS and BFS.
- Graph Search, DFS and BFS - Gayle McDowell (YouTube)
- Solve 'Shortest Reach' Using BFS - Gayle McDowell (YouTube)
- Solve 'Connected Cells' Using DFS - Gayle McDowell (YouTube)
- Graph Data Structure And Algorithms - GeeksforGeeks
- LeetCode Graph Problems 133, 207, 210, 261, 269, 310, 323
Remainder of Algorithms, Part II (Princeton University)
- Skip all of Week 3.
- Study Week 4: Tries section only.
- Skip all of Week 5 and Week 6.
Unless you're interviewing for an entry-level L3 position, you should expect to get asked a couple dynamic programming questions at Google. These require a lot of practice to get down.
- Get very comfortable with permutations, combinations, and backtracking.
- Memoization and Dynamic Programming - Gayle McDowell (YouTube)
- Solve 'Recursive Staircase' Using Recursion - Gayle McDowell (YouTube)
- Solve 'Coin Change' Using Memoization and DP - Gayle McDowell (YouTube)
- LeetCode Dynamic Programming Problems
This section is absolutely required. Do not skip any of these problems.
- Complete all of the LeetCode Get Well Prepared for Google Interview Questions
- Algorithms, Part I - Princeton University
- Algorithms, Part II - Princeton University
- Algorithms, Fourth Edition (Deluxe)
- Cracking the Coding Interview
- Gayle McDowell - YouTube Videos
- GeeksforGeeks - Dynamic Programming
- GeeksforGeeks - Graph Data Structure And Algorithms
- Technical Mock Interview
- interviewing.io
- pramp.com