parent
eaed5dd016
commit
e417324830
56
README.md
56
README.md
|
@ -48,9 +48,9 @@ Additional topics for interview prep:
|
||||||
|
|
||||||
The provided [Anki flashcard decks](https://apps.ankiweb.net/) use spaced repetition to help you retain key system design concepts.
|
The provided [Anki flashcard decks](https://apps.ankiweb.net/) use spaced repetition to help you retain key system design concepts.
|
||||||
|
|
||||||
* [System design deck](https://github.com/donnemartin/system-design-primer/blob/master/resources/flash_cards/System%20Design.apkg)
|
* [System design deck](resources/flash_cards/System%20Design.apkg)
|
||||||
* [System design exercises deck](https://github.com/donnemartin/system-design-primer/blob/master/resources/flash_cards/System%20Design%20Exercises.apkg)
|
* [System design exercises deck](resources/flash_cards/System%20Design%20Exercises.apkg)
|
||||||
* [Object oriented design exercises deck](https://github.com/donnemartin/system-design-primer/blob/master/resources/flash_cards/OO%20Design.apkg)
|
* [Object oriented design exercises deck](resources/flash_cards/OO%20Design.apkg)
|
||||||
|
|
||||||
Great for use while on-the-go.
|
Great for use while on-the-go.
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ Feel free to submit pull requests to help:
|
||||||
|
|
||||||
Content that needs some polishing is placed [under development](#under-development).
|
Content that needs some polishing is placed [under development](#under-development).
|
||||||
|
|
||||||
Review the [Contributing Guidelines](https://github.com/donnemartin/system-design-primer/blob/master/CONTRIBUTING.md).
|
Review the [Contributing Guidelines](CONTRIBUTING.md).
|
||||||
|
|
||||||
## Index of system design topics
|
## Index of system design topics
|
||||||
|
|
||||||
|
@ -226,10 +226,10 @@ Outline a high level design with all important components.
|
||||||
|
|
||||||
### Step 3: Design core components
|
### Step 3: Design core components
|
||||||
|
|
||||||
Dive into details for each core component. For example, if you were asked to [design a url shortening service](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md), discuss:
|
Dive into details for each core component. For example, if you were asked to [design a url shortening service](solutions/system_design/pastebin/README.md), discuss:
|
||||||
|
|
||||||
* Generating and storing a hash of the full url
|
* Generating and storing a hash of the full url
|
||||||
* [MD5](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md) and [Base62](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md)
|
* [MD5](solutions/system_design/pastebin/README.md) and [Base62](solutions/system_design/pastebin/README.md)
|
||||||
* Hash collisions
|
* Hash collisions
|
||||||
* SQL or NoSQL
|
* SQL or NoSQL
|
||||||
* Database schema
|
* Database schema
|
||||||
|
@ -272,61 +272,61 @@ Check out the following links to get a better idea of what to expect:
|
||||||
|
|
||||||
| Question | |
|
| Question | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Design Pastebin.com (or Bit.ly) | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md) |
|
| Design Pastebin.com (or Bit.ly) | [Solution](solutions/system_design/pastebin/README.md) |
|
||||||
| Design the Twitter timeline (or Facebook feed)<br/>Design Twitter search (or Facebook search) | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/twitter/README.md) |
|
| Design the Twitter timeline (or Facebook feed)<br/>Design Twitter search (or Facebook search) | [Solution](solutions/system_design/twitter/README.md) |
|
||||||
| Design a web crawler | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/web_crawler/README.md) |
|
| Design a web crawler | [Solution](solutions/system_design/web_crawler/README.md) |
|
||||||
| Design Mint.com | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/mint/README.md) |
|
| Design Mint.com | [Solution](solutions/system_design/mint/README.md) |
|
||||||
| Design the data structures for a social network | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/social_graph/README.md) |
|
| Design the data structures for a social network | [Solution](solutions/system_design/social_graph/README.md) |
|
||||||
| Design a key-value store for a search engine | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/query_cache/README.md) |
|
| Design a key-value store for a search engine | [Solution](solutions/system_design/query_cache/README.md) |
|
||||||
| Design Amazon's sales ranking by category feature | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/sales_rank/README.md) |
|
| Design Amazon's sales ranking by category feature | [Solution](solutions/system_design/sales_rank/README.md) |
|
||||||
| Design a system that scales to millions of users on AWS | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md) |
|
| Design a system that scales to millions of users on AWS | [Solution](solutions/system_design/scaling_aws/README.md) |
|
||||||
| Add a system design question | [Contribute](#contributing) |
|
| Add a system design question | [Contribute](#contributing) |
|
||||||
|
|
||||||
### Design Pastebin.com (or Bit.ly)
|
### Design Pastebin.com (or Bit.ly)
|
||||||
|
|
||||||
[View exercise and solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md)
|
[View exercise and solution](solutions/system_design/pastebin/README.md)
|
||||||
|
|
||||||
![Imgur](http://i.imgur.com/4edXG0T.png)
|
![Imgur](http://i.imgur.com/4edXG0T.png)
|
||||||
|
|
||||||
### Design the Twitter timeline and search (or Facebook feed and search)
|
### Design the Twitter timeline and search (or Facebook feed and search)
|
||||||
|
|
||||||
[View exercise and solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/twitter/README.md)
|
[View exercise and solution](solutions/system_design/twitter/README.md)
|
||||||
|
|
||||||
![Imgur](http://i.imgur.com/jrUBAF7.png)
|
![Imgur](http://i.imgur.com/jrUBAF7.png)
|
||||||
|
|
||||||
### Design a web crawler
|
### Design a web crawler
|
||||||
|
|
||||||
[View exercise and solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/web_crawler/README.md)
|
[View exercise and solution](solutions/system_design/web_crawler/README.md)
|
||||||
|
|
||||||
![Imgur](http://i.imgur.com/bWxPtQA.png)
|
![Imgur](http://i.imgur.com/bWxPtQA.png)
|
||||||
|
|
||||||
### Design Mint.com
|
### Design Mint.com
|
||||||
|
|
||||||
[View exercise and solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/mint/README.md)
|
[View exercise and solution](solutions/system_design/mint/README.md)
|
||||||
|
|
||||||
![Imgur](http://i.imgur.com/V5q57vU.png)
|
![Imgur](http://i.imgur.com/V5q57vU.png)
|
||||||
|
|
||||||
### Design the data structures for a social network
|
### Design the data structures for a social network
|
||||||
|
|
||||||
[View exercise and solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/social_graph/README.md)
|
[View exercise and solution](solutions/system_design/social_graph/README.md)
|
||||||
|
|
||||||
![Imgur](http://i.imgur.com/cdCv5g7.png)
|
![Imgur](http://i.imgur.com/cdCv5g7.png)
|
||||||
|
|
||||||
### Design a key-value store for a search engine
|
### Design a key-value store for a search engine
|
||||||
|
|
||||||
[View exercise and solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/query_cache/README.md)
|
[View exercise and solution](solutions/system_design/query_cache/README.md)
|
||||||
|
|
||||||
![Imgur](http://i.imgur.com/4j99mhe.png)
|
![Imgur](http://i.imgur.com/4j99mhe.png)
|
||||||
|
|
||||||
### Design Amazon's sales ranking by category feature
|
### Design Amazon's sales ranking by category feature
|
||||||
|
|
||||||
[View exercise and solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/sales_rank/README.md)
|
[View exercise and solution](solutions/system_design/sales_rank/README.md)
|
||||||
|
|
||||||
![Imgur](http://i.imgur.com/MzExP06.png)
|
![Imgur](http://i.imgur.com/MzExP06.png)
|
||||||
|
|
||||||
### Design a system that scales to millions of users on AWS
|
### Design a system that scales to millions of users on AWS
|
||||||
|
|
||||||
[View exercise and solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md)
|
[View exercise and solution](solutions/system_design/scaling_aws/README.md)
|
||||||
|
|
||||||
![Imgur](http://i.imgur.com/jj3A5N8.png)
|
![Imgur](http://i.imgur.com/jj3A5N8.png)
|
||||||
|
|
||||||
|
@ -340,12 +340,12 @@ Check out the following links to get a better idea of what to expect:
|
||||||
|
|
||||||
| Question | |
|
| Question | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Design a hash map | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/object_oriented_design/hash_table/hash_map.ipynb) |
|
| Design a hash map | [Solution](solutions/object_oriented_design/hash_table/hash_map.ipynb) |
|
||||||
| Design a least recently used cache | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/object_oriented_design/lru_cache/lru_cache.ipynb) |
|
| Design a least recently used cache | [Solution](solutions/object_oriented_design/lru_cache/lru_cache.ipynb) |
|
||||||
| Design a call center | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/object_oriented_design/call_center/call_center.ipynb) |
|
| Design a call center | [Solution](solutions/object_oriented_design/call_center/call_center.ipynb) |
|
||||||
| Design a deck of cards | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/object_oriented_design/deck_of_cards/deck_of_cards.ipynb) |
|
| Design a deck of cards | [Solution](solutions/object_oriented_design/deck_of_cards/deck_of_cards.ipynb) |
|
||||||
| Design a parking lot | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/object_oriented_design/parking_lot/parking_lot.ipynb) |
|
| Design a parking lot | [Solution](solutions/object_oriented_design/parking_lot/parking_lot.ipynb) |
|
||||||
| Design a chat server | [Solution](https://github.com/donnemartin/system-design-primer/blob/master/solutions/object_oriented_design/online_chat/online_chat.ipynb) |
|
| Design a chat server | [Solution](solutions/object_oriented_design/online_chat/online_chat.ipynb) |
|
||||||
| Design a circular array | [Contribute](#contributing) |
|
| Design a circular array | [Contribute](#contributing) |
|
||||||
| Add an object-oriented design question | [Contribute](#contributing) |
|
| Add an object-oriented design question | [Contribute](#contributing) |
|
||||||
|
|
||||||
|
|
|
@ -331,7 +331,7 @@ class SpendingByCategory(MRJob):
|
||||||
|
|
||||||
**Important: Do not simply jump right into the final design from the initial design!**
|
**Important: Do not simply jump right into the final design from the initial design!**
|
||||||
|
|
||||||
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](../scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
||||||
|
|
||||||
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
||||||
|
|
||||||
|
|
|
@ -239,7 +239,7 @@ To delete expired pastes, we could just scan the **SQL Database** for all entrie
|
||||||
|
|
||||||
**Important: Do not simply jump right into the final design from the initial design!**
|
**Important: Do not simply jump right into the final design from the initial design!**
|
||||||
|
|
||||||
State you would do this iteratively: 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
State you would do this iteratively: 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](../scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
||||||
|
|
||||||
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
||||||
|
|
||||||
|
|
|
@ -216,7 +216,7 @@ Refer to [When to update the cache](https://github.com/donnemartin/system-design
|
||||||
|
|
||||||
**Important: Do not simply jump right into the final design from the initial design!**
|
**Important: Do not simply jump right into the final design from the initial design!**
|
||||||
|
|
||||||
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](../scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
||||||
|
|
||||||
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
||||||
|
|
||||||
|
|
|
@ -243,7 +243,7 @@ For internal communications, we could use [Remote Procedure Calls](https://githu
|
||||||
|
|
||||||
**Important: Do not simply jump right into the final design from the initial design!**
|
**Important: Do not simply jump right into the final design from the initial design!**
|
||||||
|
|
||||||
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](../scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
||||||
|
|
||||||
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
||||||
|
|
||||||
|
|
|
@ -254,7 +254,7 @@ For internal communications, we could use [Remote Procedure Calls](https://githu
|
||||||
|
|
||||||
**Important: Do not simply jump right into the final design from the initial design!**
|
**Important: Do not simply jump right into the final design from the initial design!**
|
||||||
|
|
||||||
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](../scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
||||||
|
|
||||||
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
||||||
|
|
||||||
|
|
|
@ -226,7 +226,7 @@ The response would be similar to that of the home timeline, except for tweets ma
|
||||||
|
|
||||||
**Important: Do not simply jump right into the final design from the initial design!**
|
**Important: Do not simply jump right into the final design from the initial design!**
|
||||||
|
|
||||||
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](../scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
||||||
|
|
||||||
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
||||||
|
|
||||||
|
|
|
@ -260,7 +260,7 @@ For internal communications, we could use [Remote Procedure Calls](https://githu
|
||||||
|
|
||||||
**Important: Do not simply jump right into the final design from the initial design!**
|
**Important: Do not simply jump right into the final design from the initial design!**
|
||||||
|
|
||||||
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
State you would 1) **Benchmark/Load Test**, 2) **Profile** for bottlenecks 3) address bottlenecks while evaluating alternatives and trade-offs, and 4) repeat. See [Design a system that scales to millions of users on AWS](../scaling_aws/README.md) as a sample on how to iteratively scale the initial design.
|
||||||
|
|
||||||
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
It's important to discuss what bottlenecks you might encounter with the initial design and how you might address each of them. For example, what issues are addressed by adding a **Load Balancer** with multiple **Web Servers**? **CDN**? **Master-Slave Replicas**? What are the alternatives and **Trade-Offs** for each?
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue