System Design interview expectations have increased significantly in the past 3 years.
Before that, interviewers were generally looking for good thought process and a fundamental sense of designing a system.
When candidates started preparing more, the entire pool got more knowledgeable. So today, I recommend that you acquire a good knowledge of web backend design.
Caveat: This is for general system design interviews, which mainly deal with backend design. If you are interviewing for a specific role, such as an iOS engineer, you may have a different format. Make sure you ask your recruiter about this.
Here is a list of topics we teach at Interview Camp. These give you a very strong base and set you up many common questions.
Here are some tips for your interview:
Bait the Interviewer
System Design interviews are very open-ended. Where the conversation goes is decided both by you and the interviewer. Here is what I mean:
- You: To search faster by name, I will add an index on the ‘name’ field.
- Interviewer: Great, how does an index work?
- You: … (you hadn’t prepared database indexes, so you answer on the fly)
- You: To help manage our requests, we will use a load balancer.
- Interviewer: Great, what are different load balancing algorithms?
- You: So the simplest algorithm is round-robin… (you had prepared load balancing)
In Situation 1, you mentioned a component that you haven’t prepared for. In case the interviewer asks you about it, you will have to figure out on the fly.
In Situation 2, you mentioned a component you had prepared beforehand, so when the interviewer asks you, you are ready with the details.
You want to maximize Situation 2 as much as possible. It comes down to preparing as many common components a possible and then utilizing them in your designs.
Practice Diagrams Beforehand
Diagrams are perhaps the most important part of the interview because they communicate your design. You want to practice some critical diagrams beforehand.
This also comes down to Baiting. The diagram is a menu for the interviewer to choose from. They will typically ask you to go deeper into one or more of the components in your diagram.
So make sure you prepare beforehand and are not caught off-guard.
A great way to learn about real systems is by reading academic papers of famous systems.
Now, while reading them, you don’t need to understand the whole thing cover by cover. Many papers are >50 pages long and go into great depth. You want to extract as much knowledge as you need, which really comes down to understanding the architecture.
Don’t be flustered if you find them too complicated. Understand the high-level design, and why they designed it that way. Then go into as much detail as you’re comfortable with. If this is new to you, I recommend you start with the MapReduce paper.
Lastly, remember that it is a conversation. The best sign that a System Design interview is going well is that the interviewer is engaged and asking you a lot of questions. Sometimes, it might seem like they are criticizing you. But really, they are being involved and probably enjoying it themselves.
Original answer on Quora: What system design topics should I study to prepare for tech interviews?