What system design & distributed systems topics should I study to prepare for a Google interview?

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 to answer a lot of common questions.

Here are some tips for your interview:

1. 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:

Situation 1:

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)

Situation 2:

You: To search faster by name, I will add an index on the ‘name’ field.

Interviewer: Great, how does an index work?

You: So an index improves the speed of data operations by… (you had prepared indexes)

In Situation 1, you mentioned a component that you haven’t prepared. In case the interviewer asks you about it, you will have to figure it 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 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.

2. 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 the baiting point above. 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.

3. Read Papers

A great way to learn about real systems is by reading academic papers of some 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 are comfortable with. If this is new to you, I recommend that 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.

Our original answer on Quora


Please enter your comment!
Please enter your name here