Prior to the interview process, I think one of the few things that will help is to figure out what is the highest priority items to study and practice, there are a few strategies:
This is what I was mostly focused on. In terms of the depth of studying material, this method is best suited if you have no experience in these topics. This can be considered as learning a specific topic in school, which requires basic knowledge. For best return on investment, I recommend the following algorithm/patterns/data structures to focus on first in priority:
- Graph / Tree Traversals - DFS, BFS, pre-order, in-order, post-order, level-order, and all the other graph algorithms
- Linked List - Linked List as a backing data structure to something, Linked List traversal, and search
- Hashmap, Hashset, Caching - Prefix sum, Caching implementations
- Array - List, Indexing
- Pointers - Two and more pointers, Sliding window, Search
- Divide and Conquer (log n operations) - Heap, Binary Search, Partition algorithms (Quick select)
- Uncommon Algorithms / Data Structures - Interval (merging the start, and end), Trie, Union-Find, Dynamic Programming, Greedy
I will only recommend this method if you are well versed in many of the patterns and data structures. There is no one set of methods to practice this portion, but these are the most common:
- Random Pick and Study - Pick any topic and select a random question from the top 100 most frequent in the past 6 months. This can also be a good chance to fill in gaps in your knowledge. Time yourself in this manner too (you can use the timer extension)
- Partnered Mock Practice - Find a random partner to conduct mocked interviews. Use a rubric such as this to grade each other (example rubric)
- Paid Mock Practice - Use any of the following: interviewing.io or Pramp. Note: This may be cost-prohibitive so use wisely
- Partnered Study - Find a studying buddy, and do random practice with them. Form a study group. This was one of the things that helped me a lot.
This method is used close to your interview dates; it can fall into several categories:
- Specific Company Study - Companies usually have question banks and topics that are commonly present in these interviews (writing new questions is hard). You can focus on the topics companies love to ask or just frequently ask. E.g. Facebook is known to have a frequently updated list in Leetcode.
- Specific Topic Study - Top off your knowledge or refresh it prior to the interview date.
In reality, you should use all three main methods, just in different stages of preparation.
System Design Interview
Since I don’t have too much experience interviewing on system design, I mostly copied over these points from one of my senior engineer friend’s study guides:
- Develop basic concepts of Distributed System design
- Read Designing Data-Intensive Applications by Martin Kleppman (I consider it as a Bible for Distributed Systems Design and I read it before every interview)
- This is themain resource you will pretty much need at SE II levels in FAANG+. You can supplement with some readings in SQL vs No SQL, Caching solutions, Pub/Sub queues, Data modeling, API Gateway, and CDN. If you have time, watch these MIT Lecture on Distributed Systems
- Come up with your own methodology for approaching any design problems.