├── .github └── FUNDING.yml ├── Amazon Dynamo db database design.pdf ├── Books ├── ByteByteGo_SystemDesignHandbook.pdf ├── Concurrent Programming in Java Design Principles.pdf ├── Design Patterns Elements of Reusable Object-Oriented Software.pdf ├── Designing Data Intensive Applications - Martin Kleppmann.pdf ├── Handwritten - System Design Notes from Linkedin post.pdf ├── Head First Design Patterns.pdf └── README.md ├── Google File System.pdf ├── LICENSE ├── README.md └── System Design Interesting Reads.pdf /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [NirmalSilwal] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: ['https://www.paypal.com/paypalme/NirmalSilwal'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /Amazon Dynamo db database design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/Amazon Dynamo db database design.pdf -------------------------------------------------------------------------------- /Books/ByteByteGo_SystemDesignHandbook.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/Books/ByteByteGo_SystemDesignHandbook.pdf -------------------------------------------------------------------------------- /Books/Concurrent Programming in Java Design Principles.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/Books/Concurrent Programming in Java Design Principles.pdf -------------------------------------------------------------------------------- /Books/Design Patterns Elements of Reusable Object-Oriented Software.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/Books/Design Patterns Elements of Reusable Object-Oriented Software.pdf -------------------------------------------------------------------------------- /Books/Designing Data Intensive Applications - Martin Kleppmann.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/Books/Designing Data Intensive Applications - Martin Kleppmann.pdf -------------------------------------------------------------------------------- /Books/Handwritten - System Design Notes from Linkedin post.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/Books/Handwritten - System Design Notes from Linkedin post.pdf -------------------------------------------------------------------------------- /Books/Head First Design Patterns.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/Books/Head First Design Patterns.pdf -------------------------------------------------------------------------------- /Books/README.md: -------------------------------------------------------------------------------- 1 | # Design Patterns notes: 2 | 3 | - Always prefer **Composition** over **Inheritance**. 4 | - Whenever you code, code for interface not for the implementation. 5 | 6 | ### ```A. Creational Design Pattern``` 7 | 1. Singleton 8 | 2. Factory 9 | 3. Abstract Factory 10 | 4. Builder 11 | 5. Prototype 12 | 13 | ### ```B. Structural Design Pattern``` 14 | 6. Adapter 15 | 7. Composite 16 | 8. Proxy 17 | 9. Fly Weight 18 | 10. Facade 19 | 11. Bridge 20 | 12. Decorator 21 | 22 | ### ```C. Behavioral Design Pattern``` 23 | 13. Template Method 24 | 14. Mediator 25 | 15. Chain of Responsibility 26 | 16. Observer 27 | 17. Strategy 28 | 18. Command 29 | 19. State 30 | 20. Visitor 31 | 21. Iterator 32 | 22. Interpretor 33 | 23. Memento 34 | -------------------------------------------------------------------------------- /Google File System.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/Google File System.pdf -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Nirmal Silwal 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # System Design resources for Interview preparation 2 | 3 | ### Motivation: WHY I am making this repository? 4 | 5 | ```diff 6 | As a beginner I wanted to learn how to design large scale distributed systems. 7 | 8 | Prepare for the System Design interview. 9 | ``` 10 | 11 | As you might know that we need to have good understanding of various Computer Science Fundamentals involving **Distributed Systems, Computer Network, Operating System** along with good problem solving skills (**Data Structures and Algorithms**) for acing the interviews at top product based companies. 12 | 13 | Let's first learn **Basic Concepts** for *designing higly scalable data intensive applications*. 14 | 15 | - Caching 16 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/caching.html) - gitbooks 17 | - [educative post](https://www.educative.io/courses/grokking-the-system-design-interview/3j6NnJrpp5p) 18 | - [medium article](https://medium.com/system-designing-interviews/system-design-chapter-4-caching-b59a4cf83f10) 19 | 20 | - Data Partitioning 21 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/sharding-or-data-partitioning.html) - gitbooks 22 | - [educative post](https://www.educative.io/courses/grokking-the-system-design-interview/mEN8lJXV1LA) 23 | - [ScienceDirect post](https://www.sciencedirect.com/topics/computer-science/data-partitioning) 24 | 25 | - Sharding 26 | - [medium article](https://medium.com/system-designing-interviews/system-design-chapter-2-sharding-484960c18f6) 27 | - [Understanding Database Sharding](https://www.digitalocean.com/community/tutorials/understanding-database-sharding) - digital ocean 28 | 29 | - Load Balancing 30 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/load-balancing.html) - gitbooks 31 | - [educative post](https://www.educative.io/courses/grokking-the-system-design-interview/3jEwl04BL7Q) 32 | - [medium article](https://medium.com/system-designing-interviews/system-design-chapter-3-load-balancing-e1c89148e37) 33 | 34 | - Indexes 35 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/indexes.html) - gitbooks 36 | 37 | 38 | - Proxies 39 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/proxies.html) - gitbooks 40 | 41 | - Queues 42 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/queues.html) - gitbooks 43 | 44 | 45 | - Redundancy and Replication 46 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/redundancy-and-replication.html) - gitbooks 47 | - [educative post](https://www.educative.io/courses/grokking-the-system-design-interview/xV1qvj6PKkJ) 48 | - [medium post](https://medium.com/baseds/redundancy-and-replication-duplicating-in-a-distributed-system-7ab4322d7378#:~:text=Both%20of%20them%20involve%20creating,all%20of%20its%20other%20copies.) 49 | 50 | 51 | - SQL vs NoSQL 52 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/sql-vs-nosql.html) - gitbooks 53 | 54 | 55 | - CAP Theorem 56 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/cap-theorem.html) - gitbooks 57 | - [educative post](https://www.educative.io/courses/grokking-the-system-design-interview/RMkqx1Egxqz) 58 | - [CAP Theorem: Revisited](https://robertgreiner.com/cap-theorem-revisited/) 59 | 60 | 61 | - Consistent Hashing 62 | - [brief explanation](https://weifoo.gitbooks.io/systemdesign/content/chapter1/consistent-hashing.html) - gitbooks 63 | - [educative post](https://www.educative.io/courses/grokking-the-system-design-interview/B81vnyp0GpY) 64 | - [A Guide to Consistent Hashing](https://www.toptal.com/big-data/consistent-hashing#:~:text=Consistent%20Hashing%20is%20a%20distributed,without%20affecting%20the%20overall%20system.) 65 | - [detailed explanation](https://www.acodersjourney.com/system-design-interview-consistent-hashing/) 66 | 67 | 68 | > ## [System Design Interview Questions – Concepts You Should Know](https://www.freecodecamp.org/news/systems-design-for-interviews/) 69 | 70 | 71 | ## Design Questions 72 | 73 | 1. Designing Tiny URL 74 | - [Educative io post](https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR) 75 | - [Geek for Geeks](https://www.geeksforgeeks.org/how-to-design-a-tiny-url-or-url-shortener/) post 76 | - [Medium](https://medium.com/better-programming/how-would-you-design-tinyurl-and-instagram-987dfc06cbe9) - Tiny URL and Instagram design 77 | - [Leetcode](https://leetcode.com/discuss/interview-question/124658/Design-a-URL-Shortener-(-TinyURL-)-System/) discussion 78 | - [Detailed blog](https://nlogn.in/designing-a-realtime-scalable-url-shortening-service-like-tiny-url/) by *nlogn* 79 | - [YouTube video explanation](https://www.youtube.com/watch?v=JQDHz72OA3c&list=PLkQkbY7JNJuC99VDJcpQdww-4aT3QhdJv&index=21) 80 | 81 | 82 | 83 | 2. Designing Instagram 84 | - [Educative io post](https://www.educative.io/courses/grokking-the-system-design-interview/m2yDVZnQ8lG) 85 | - [Instagram Architecture](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) 86 | 87 | 88 | 3. Designing Twitter 89 | - [Educative io post](https://www.educative.io/courses/grokking-the-system-design-interview/m2G48X18NDO) 90 | - [gitbooks post](https://weifoo.gitbooks.io/systemdesign/content/system-design-examples/twitter.html) 91 | - [YouTube video explanation](https://www.youtube.com/watch?v=wYk0xPP_P_8&list=PLkQkbY7JNJuC99VDJcpQdww-4aT3QhdJv&index=19) 92 | 93 | 94 | 4. Designing Dropbox 95 | - [Educative io](https://www.educative.io/courses/grokking-the-system-design-interview/m22Gymjp4mG) 96 | - [gitbooks post](https://weifoo.gitbooks.io/systemdesign/content/system-design-examples/dropbox.html) 97 | - [YouTube video explanation](https://www.youtube.com/watch?v=U0xTu6E2CT8&list=PLkQkbY7JNJuC99VDJcpQdww-4aT3QhdJv&index=14) 98 | 99 | 100 | 5. Designing YouTube or Netflix 101 | - [Educative io post](https://www.educative.io/courses/grokking-the-system-design-interview/xV26VjZ7yMl) 102 | - [YouTube video explanation](https://www.youtube.com/watch?v=psQzyFfsUGU&list=PLkQkbY7JNJuC99VDJcpQdww-4aT3QhdJv&index=20) 103 | 104 | 105 | 6. Designing a Parking lot 106 | - [Educative io post](https://www.educative.io/courses/grokking-the-object-oriented-design-interview/gxM3gRxmr8Z) 107 | - [YouTube video explanation](https://www.youtube.com/watch?v=tVRyb4HaHgw) 108 | 109 | 110 | 7. Designing Whatsapp - Chat Messaging System 111 | - [Gaurav Sen explanation on YouTube](https://www.youtube.com/watch?v=vvhC64hQZMk) 112 | - [YouTube video explanation](https://www.youtube.com/watch?v=ovnrSH6G6vw) 113 | 114 | 115 | 8. Designing Facebook Messenger 116 | - [medium article](https://medium.com/@eileen.code4fun/design-facebook-messenger-438d76639985) 117 | 118 | 119 | 120 | ## Blogs 121 | - [High Scalability](http://highscalability.com/) 122 | - [The complete guide to System Design in 2022 by Educative.io](https://www.educative.io/blog/complete-guide-to-system-design) 123 | - [Medium](https://medium.com/system-design-blog) - system design concepts 124 | - [How Web Works](https://github.com/vasanthk/how-web-works) 125 | - [Hired In Tech](https://www.hiredintech.com/courses/system-design) - System Design for Tech Interviews 126 | - [101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) 127 | - [Introduction to Distributed System Design](https://www.hpcs.cs.tsukuba.ac.jp/~tatebe/lecture/h23/dsys/dsd-tutorial.html) - Google Code University 128 | - [Hackernoon](https://hackernoon.com/anatomy-of-a-system-design-interview-4cb57d75a53f) - Anatomy of a System Design Interview 129 | - [How NOT to design Netflix in your 45-minute System Design Interview?](https://hackernoon.com/how-not-to-design-netflix-in-your-45-minute-system-design-interview-64953391a054) 130 | - [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](https://instagram-engineering.com/what-powers-instagram-hundreds-of-instances-dozens-of-technologies-adf2e22da2ad) 131 | - [How to Develop Chat System Design like Facebook Messenger | Whatsapp](https://www.cronj.com/blog/how-to-develop-chat-system-design-like-facebook-messenger/) 132 | - [8 Steps to acing your next system design interview](https://www.hackerearth.com/blog/developers/8-steps-to-acing-your-next-system-design-interview/) 133 | - [best practices for building something like a news feed](https://www.quora.com/Software-Engineering-Best-Practices/What-are-the-best-practices-for-building-something-like-a-news-feed) 134 | 135 | 136 | 137 | **Understanding Google File System Architecture (GFS)** 138 | - [GFS original paper](https://github.com/NirmalSilwal/system-design-resources/blob/master/Google%20File%20System.pdf) 139 | - [MIT lecture - YouTube](https://www.youtube.com/watch?v=EpIgvowZr00) 140 | - [IIT Patna lecture - YouTube](https://www.youtube.com/watch?v=EpIgvowZr00) 141 | - Detailed explantion by [ScienceDirect](https://www.sciencedirect.com/topics/computer-science/google-file-system) 142 | - [MapReduce Simplified Data Processing on Large Clusters](https://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) 143 | 144 | 145 | **Understanding Google Search engine** 146 | - [The Anatomy of a Large-Scale Hypertextual Web Search Engine](http://infolab.stanford.edu/~backrub/google.html) 147 | 148 | 149 | **Understanding DynamoDB Architecture** 150 | - [Dynamo: Amazon’s Highly Available Key-value Store](https://github.com/NirmalSilwal/system-design-resources/blob/master/Amazon%20Dynamo%20db%20database%20design.pdf) 151 | - [Best Practices for Designing and Architecting with DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html) 152 | 153 | ## Video Tutorials on System Design 154 | - [Gaurav Sen playlist](https://www.youtube.com/playlist?list=PLMCXHnjXnTnvo6alSjVkgxV-VH6EPyvoX) - must do playlist 155 | - [Grokking the System Design Interview](https://www.youtube.com/playlist?list=PL73KFetZlkJSZ9vTDSJ1swZhe6CIYkqTL) 156 | - [Udit Agarwal low level designs, design patterns, system design videos](https://www.youtube.com/c/anomaly2104/playlists) - suggested by Googler :) 157 | - [Tech Dummies playlist](https://www.youtube.com/c/TechDummiesNarendraL/playlists) 158 | - [Redis system design - Distributed cache System design](https://www.youtube.com/watch?v=DUbEgNw-F9c&list=PLkQkbY7JNJuC99VDJcpQdww-4aT3QhdJv&index=17) 159 | - [S3 system design | cloud storage system design | Distributed cloud storage system design](https://www.youtube.com/watch?v=UmWtcgC96X8) 160 | - [Yelp system design](https://www.youtube.com/watch?v=TCP5iPy8xqo) 161 | - [Uber system design](https://www.youtube.com/watch?v=umWABit-wbk&t=2s) 162 | - [Netflix system design](https://www.youtube.com/watch?v=psQzyFfsUGU&t=4s) 163 | - [Twitter system design](https://www.youtube.com/watch?v=wYk0xPP_P_8&t=1s) 164 | - [Tushar Roy playlist](https://www.youtube.com/playlist?list=PLrmLmBdmIlps7GJJWW9I7N0P0rB0C3eY2) 165 | - [System Design Interview channel](https://www.youtube.com/c/SystemDesignInterview/videos) 166 | - [Reditt Scaling](https://www.youtube.com/playlist?list=PLVi1LmRuKQ0NINQfjKLVen7J2lZFL35wP) 167 | - [Amazon System Design Preparation (SIP)](https://www.youtube.com/watch?v=gf8R7sgme6o) 168 | - [Success in tech playlist](https://www.youtube.com/playlist?list=PLA8lYuzFlBqAy6dkZHj5VxUAaqr4vwrka) - Coding and System Design Interview Questions 169 | - [Think Software channel playlist](https://www.youtube.com/playlist?list=PLK8IOvtbwVsuYW8KovGg9o6dlhspym8O_) - Systems Design Interview Questions 170 | - [Scalability lecture by David Mellan Harvard](https://www.youtube.com/watch?v=-W9F__D3oY4&list=PLmhRNZyYVpDmLpaVQm3mK5PY5KB_4hLjE&index=10) 171 | - [Code Karle YouTube playlists](https://www.youtube.com/c/codeKarle/playlists) and their [website blogs](https://www.codekarle.com/) 172 | - [Design Patterns in Object Oriented Programming playlist](https://www.youtube.com/playlist?list=PLrhzvIcii6GNjpARdnO4ueTUAVR9eMBpc) - Christopher Okhravi 173 | - [Design Patterns by Sudo Code](https://www.youtube.com/c/sudoCODE/playlists) - Googler's suggestion 174 | 175 | ## Tech Talk 176 | - [Facebook and memcached - Tech Talk](https://www.youtube.com/watch?v=UH7wkvcf0ys&t=283s) 177 | - ["Caching at Netflix: The Hidden Microservice" by Scott Mansfield](https://www.youtube.com/watch?v=Rzdxgx3RC0Q) 178 | - [Why Google Stores Billions of Lines of Code in a Single Repository](https://www.youtube.com/watch?v=W71BTkUbdqE) 179 | - [Scaling Instagram Infrastructure](https://www.youtube.com/watch?v=hnpzNAPiC0E) 180 | - [Google Production Environment](https://www.youtube.com/watch?v=dhTVVWzpc4Q) 181 | - [Microservices at Netflix Scale: Principles, Tradeoffs & Lessons Learned](https://www.youtube.com/watch?v=57UK46qfBLY) 182 | - [Four Distributed Systems Architectural Patterns by Tim Berglund](https://www.youtube.com/watch?v=tpspO9K28PM) 183 | - [Seattle Conference on Scalability: YouTube Scalability](https://www.youtube.com/watch?v=ZW5_eEKEC28) 184 | - [Operations at Twitter: Scaling Beyond 100 Million Users](https://www.youtube.com/watch?v=z8LU0Cj6BOU) 185 | - [Scaling Redis at Twitter](https://www.youtube.com/watch?v=rP9EKvWt0zo) 186 | 187 | 188 | ## System Design Cheatsheet 189 | 1. [basic concepts](https://gist.github.com/vasanthk/485d1c25737e8e72759f#system-design-cheatsheet) 190 | 2. [Scalable System Design Patterns](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html) 191 | 192 | ## System Design Template 193 | - [template here](https://leetcode.com/discuss/career/229177/My-System-Design-Template) 194 | 195 | ## Understanding Design Patterns 196 | - [design patterns for Humans](https://github.com/kamranahmedse/design-patterns-for-humans) 197 | - [Refactoring guru design patterns](https://refactoring.guru/design-patterns) 198 | 199 |
200 | 201 | ## ```Extras``` 202 | ### Notable github repo to understand concepts more 203 | - [system-design-and-architecture](https://github.com/puncsky/system-design-and-architecture) 204 | - [system-design-primer](https://github.com/donnemartin/system-design-primer) 205 | 206 | ### Interview Ready repo on system design resources 207 | - [link here](https://github.com/InterviewReady/system-design-resources) 208 | -------------------------------------------------------------------------------- /System Design Interesting Reads.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NirmalSilwal/system-design-resources/61b643d67a9c9a357313311cdaa3af5f9f928a22/System Design Interesting Reads.pdf --------------------------------------------------------------------------------