Preparation links and resources for system design questions
9,252
stars
32
commits
May 10, 2024
updated
Learning about and implementing large-scale distributed system is not easy. I do not want to give the impression that it's something that can be learnt in a month. What this repository aims to achieve, is for software engineers and students to get a rough idea of how the thought process of designing a large scale works and how big companies have managed to solve really hard problems. Along with that, there is a recent trend for companies to have an open-ended interview with system design questions, which is at times hard for engineers of all levels if they haven't gotten the opportunity to work on such systems themselves.
This is a collection of links/documents for the following use cases: a) Prepare for a system design or open-ended rounds. b) Learn more about how large-scale systems work and thought process of designing a new system.
For a very broad overview please go through these lectures, really useful:
Gaurav Sen's system design series Starts from simple stuff like load balancing and message queues, then moves to building full systems like Whatsapp and Tinder.
david malans cs75 scalability talk Feel free to go through other lectures if needed.
Designing data intensive appliations This is by far one of the best books about large-scale systems and the practical challenges encountered during building them. It's focussed more on data-oriented applications though.
System Design Interview Preperation Series by CodeKarle This is a collection of some of the most commonly asked system design interview question explain in a very detailed and straight forward manner.
These talks should give you a starting point on how to think about such problems.
But before you begin, here are some topics(in no particular order) which in my opinion you should have a decent idea of before proceeding.
I found hiredintech videos an excellent place to start with. The way how to approach a design question as given in the link is really useful. It goes into how we start with clearing the use-cases of the system, then thinking in the abstract manner of the various component and the interactions. Think about the bottlenecks of the system and what is more critical for your system (eg latency vs reliability vs uptime etc) Address those giving the tradeoff of your approach.
system design in crack the coding interview: good approach on how to begin attacking a problem by first solving for a small usecase then expanding the system.
The best way to prepare for such questions is do mock interviews, pick any topic (given below) try to come up with a design and then go and see how and why it is designed in that manner. There is absolutely no alternative to practice!! Whiteboarding a system design question is similar to actually writing code and testing it! Just reading will only take you so far.
These are the steps I go through mentally in the interviews, followed by actual interview experiences:
It generally depends what you are and you will be working on. Also what your level is but these are some of the more frequent interview questions.
Personally I looked into the following architectures:
courtesy checkcheckzz
Depending on where you are interviewing, go through the company blog. VERY USEFUL IN INTERVIEWS! It really helps if you have an idea of the architecture, as the questions asked will generally be of that domain and your prior knowledge will help out here.
I would HIGHLY recommend you do not take a shortcut unless you have a week or so for an interview. System design is best learnt by practising, shortcuts might help you in the short term, but would recommend coming back to this link for an in-depth understanding after the interview
Best of luck :+1:, feel free to send pull requests to add more content to this git!
Preparation links and resources for system design questions
9,252
stars
32
commits
May 10, 2024
updated
Learning about and implementing large-scale distributed system is not easy. I do not want to give the impression that it's something that can be learnt in a month. What this repository aims to achieve, is for software engineers and students to get a rough idea of how the thought process of designing a large scale works and how big companies have managed to solve really hard problems. Along with that, there is a recent trend for companies to have an open-ended interview with system design questions, which is at times hard for engineers of all levels if they haven't gotten the opportunity to work on such systems themselves.
This is a collection of links/documents for the following use cases: a) Prepare for a system design or open-ended rounds. b) Learn more about how large-scale systems work and thought process of designing a new system.
For a very broad overview please go through these lectures, really useful:
Gaurav Sen's system design series Starts from simple stuff like load balancing and message queues, then moves to building full systems like Whatsapp and Tinder.
david malans cs75 scalability talk Feel free to go through other lectures if needed.
Designing data intensive appliations This is by far one of the best books about large-scale systems and the practical challenges encountered during building them. It's focussed more on data-oriented applications though.
System Design Interview Preperation Series by CodeKarle This is a collection of some of the most commonly asked system design interview question explain in a very detailed and straight forward manner.
These talks should give you a starting point on how to think about such problems.
But before you begin, here are some topics(in no particular order) which in my opinion you should have a decent idea of before proceeding.
I found hiredintech videos an excellent place to start with. The way how to approach a design question as given in the link is really useful. It goes into how we start with clearing the use-cases of the system, then thinking in the abstract manner of the various component and the interactions. Think about the bottlenecks of the system and what is more critical for your system (eg latency vs reliability vs uptime etc) Address those giving the tradeoff of your approach.
system design in crack the coding interview: good approach on how to begin attacking a problem by first solving for a small usecase then expanding the system.
The best way to prepare for such questions is do mock interviews, pick any topic (given below) try to come up with a design and then go and see how and why it is designed in that manner. There is absolutely no alternative to practice!! Whiteboarding a system design question is similar to actually writing code and testing it! Just reading will only take you so far.
These are the steps I go through mentally in the interviews, followed by actual interview experiences:
It generally depends what you are and you will be working on. Also what your level is but these are some of the more frequent interview questions.
Personally I looked into the following architectures:
courtesy checkcheckzz
Depending on where you are interviewing, go through the company blog. VERY USEFUL IN INTERVIEWS! It really helps if you have an idea of the architecture, as the questions asked will generally be of that domain and your prior knowledge will help out here.
I would HIGHLY recommend you do not take a shortcut unless you have a week or so for an interview. System design is best learnt by practising, shortcuts might help you in the short term, but would recommend coming back to this link for an in-depth understanding after the interview
Best of luck :+1:, feel free to send pull requests to add more content to this git!