|
8 years ago | |
---|---|---|
README.md | 8 years ago |
Learn how to design large scale systems from the open source community.
Understand real-world architectures.
Prep for the system design interview.
Learning how to design scalable systems will make you a better engineer.
System design is a broad topic. There is a vast amount of resources scattered throughout the web on system design principles.
This repo is an organized collection of resources to help you learn how to build systems at scale.
Topics for learning system design:
This is an early draft of a continually updated, open source project.
Contributions are welcome!
In addition to coding interviews, system design is a required component of the technical interview process at many tech companies.
Practice common system design interview questions and compare your results with sample discussions, code, and diagrams.
Additional topics for interview prep:
No, you don't need to know everything here to prepare for the interview.
What you are asked in an interview depends on variables such as:
More experienced candidates are generally expected to know more about system design. Architects or team leads might be expected to know more than individual contributors. Top tech companies are likely to have one or more design interview rounds.
Check out the sister repo interactive-coding-challenges for coding interview resources.
Learn from the community.
Feel free to submit pull requests to help:
Content that needs some polishing is placed under development.
Review the Contributing Guidelines.
Summaries of various system design topics, including pros and cons. Everything is a trade-off.
Each section contains links to more in-depth resources.
Suggested topics to review based on your interview timeline (short, medium, long).
Start broad and go deeper in a few areas. It helps to know a little about various key system design topics. Adjust the following guide based on your experience, what positions you are interviewing for, and which companies you are interviewing with.
Short | Medium | Long | |
---|---|---|---|
Read through the System design topics to get a broad understanding of how systems work | :+1: | :+1: | :+1: |
Read through a few articles in the Company engineering blogs for the companies you are interviewing with | :+1: | :+1: | :+1: |
Read through a few Real world architectures | :+1: | :+1: | :+1: |
Review How to approach a system design interview question | :+1: | :+1: | :+1: |
Work through System design interview questions with solutions | Some | Many | Most |
Work through Object-oriented design interview questions with solutions | Some | Many | Most |
Review Additional system design interview questions | Some | Many | Most |
How to tackle a system design interview question.
The system design interview is an open-ended conversation. You are expected to lead it.
You can use the following steps to guide the discussion. To help solidify this process, work through the System design interview questions with solutions section using the following steps.
Gather requirements and scope the problem. Ask questions to clarify use cases and constraints. Discuss assumptions.
Outline a high level design with all important components.
Dive into details for each core component. For example, if you were asked to design a url shortening service, discuss:
Identify and address bottlenecks, given the constraints. For example, do you need the following to address scalability issues?
Discuss potential solutions and trade-offs. Everything is a trade-off. Address bottlenecks using principles of scalable system design.
You might be asked to do some estimates by hand. Refer to the Appendix for the following resources:
Check out the following links to get a better idea of what to expect:
Common system design interview questions with sample discussions, code, and diagrams.
Solutions linked to content in the
solutions/
folder.
Question | |
---|---|
Design Pastebin.com (or Bit.ly) | Solution |
Design the Twitter timeline (or Facebook feed) Design Twitter search (or Facebook search) |
Solution |
Design a web crawler | Solution |
Design Mint.com | Solution |
Design the data structures for a social network | Solution |
Design a key-value store for a search engine | Solution |
Design Amazon's sales ranking by category feature | Solution |
Design a system that scales to millions of users on AWS | Solution |
Add a system design question | Contribute |
Common object-oriented design interview questions with sample discussions, code, and diagrams.
Solutions linked to content in the
solutions/
folder.Note: This section is under development
Question | |
---|---|
Design a deck of cards to be used for blackjack | Solution |
Design a call center | Solution |
Design a hash map | Solution |
Design a least recently used cache | Solution |
Design a parking lot | Solution |
Design a chat server | Solution |
Design a circular array | Contribute |
Add an object-oriented design question | Contribute |