Top Related Projects
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
The Patterns of Scalable, Reliable, and Performant Large-Scale Systems
A curated list of awesome System Design (A.K.A. Distributed Systems) resources.
💯 Curated coding interview preparation materials for busy software engineers
A complete computer science study plan to become a software engineer.
Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.
Quick Overview
The "system-design-interview" repository by checkcheckzz is a comprehensive collection of resources and materials for preparing for system design interviews. It covers various aspects of system design, including scalability, distributed systems, and design patterns, providing a valuable reference for software engineers and developers.
Pros
- Extensive coverage of system design topics and concepts
- Well-organized structure with categorized resources
- Regularly updated with new content and contributions from the community
- Includes both theoretical knowledge and practical examples
Cons
- May be overwhelming for beginners due to the vast amount of information
- Some links may become outdated over time
- Lacks interactive elements or hands-on exercises
- Primarily focused on interview preparation rather than in-depth system design implementation
Note: As this is not a code library, the code example and quick start sections have been omitted as per the instructions.
Competitor Comparisons
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
Pros of system-design-primer
- More comprehensive and structured content, covering a wide range of system design topics
- Includes interactive diagrams and visualizations to aid understanding
- Regularly updated with new content and improvements
Cons of system-design-primer
- Can be overwhelming for beginners due to the extensive amount of information
- Focuses more on theoretical concepts and less on practical implementation examples
Code comparison
system-design-primer:
class LRUCache:
def __init__(self, capacity):
self.capacity = capacity
self.cache = OrderedDict()
def get(self, key):
if key not in self.cache:
return -1
self.cache.move_to_end(key)
return self.cache[key]
system-design-interview:
# No specific code examples provided in the repository
The system-design-primer repository includes code examples to illustrate concepts, while system-design-interview primarily focuses on textual explanations and resources without code snippets.
Both repositories serve as valuable resources for preparing for system design interviews, with system-design-primer offering a more structured and comprehensive approach, while system-design-interview provides a curated list of resources and topics to explore.
The Patterns of Scalable, Reliable, and Performant Large-Scale Systems
Pros of awesome-scalability
- More comprehensive coverage of scalability topics beyond just system design interviews
- Regularly updated with new resources and information
- Includes practical examples and case studies from real-world companies
Cons of awesome-scalability
- Less focused on interview preparation specifically
- May be overwhelming for beginners due to the breadth of information
- Lacks structured learning path or progression
Code comparison
While both repositories primarily focus on system design concepts and don't contain much code, awesome-scalability does include some code snippets in its examples. Here's a brief comparison:
awesome-scalability:
def calculate_consistent_hash(key, nodes):
h = hash(key)
for node in sorted(nodes):
if h <= hash(node):
return node
return nodes[0]
system-design-interview: No specific code examples are provided in this repository.
Summary
awesome-scalability offers a broader range of topics and resources related to scalability, making it suitable for ongoing learning and reference. system-design-interview is more focused on interview preparation, providing a curated list of resources specifically tailored for system design interviews. Choose based on your immediate goals: comprehensive scalability knowledge or interview preparation.
A curated list of awesome System Design (A.K.A. Distributed Systems) resources.
Pros of awesome-system-design
- More comprehensive and up-to-date resource list
- Includes a wider range of topics, including distributed systems and microservices
- Better organization with clear categories and subcategories
Cons of awesome-system-design
- Less focus on specific interview questions and scenarios
- Fewer detailed explanations and examples for each topic
- May be overwhelming for beginners due to the extensive list of resources
Code comparison
Not applicable for these repositories, as they are primarily curated lists of resources and don't contain significant code samples.
Summary
awesome-system-design offers a more extensive and well-organized collection of resources covering a broader range of system design topics. It's particularly useful for those looking to deepen their knowledge beyond interview preparation.
system-design-interview, on the other hand, is more focused on interview-specific content and provides more detailed explanations for common system design scenarios. It may be more suitable for those specifically preparing for system design interviews.
Both repositories serve as valuable resources for learning about system design, with awesome-system-design being more comprehensive and system-design-interview being more interview-focused.
💯 Curated coding interview preparation materials for busy software engineers
Pros of tech-interview-handbook
- More comprehensive coverage of various interview topics, including algorithms, system design, and behavioral questions
- Regularly updated with new content and community contributions
- Includes practical tips and strategies for interview preparation and performance
Cons of tech-interview-handbook
- Less focused on system design specifically, which may be a priority for some candidates
- Can be overwhelming due to the breadth of topics covered
- May require more time to navigate and find specific information
Code comparison
While both repositories primarily focus on conceptual content rather than code examples, tech-interview-handbook does include some code snippets for algorithm problems. Here's a brief comparison:
tech-interview-handbook:
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
system-design-interview: No specific code examples are provided in this repository, as it focuses on high-level system design concepts and principles.
A complete computer science study plan to become a software engineer.
Pros of coding-interview-university
- Comprehensive coverage of computer science fundamentals
- Structured learning path with clear progression
- Includes practical coding exercises and projects
Cons of coding-interview-university
- May be overwhelming for beginners due to its extensive content
- Focuses more on general CS knowledge than specific system design concepts
- Requires significant time investment to complete the entire curriculum
Code Comparison
While both repositories primarily focus on conceptual knowledge, coding-interview-university includes more code examples and exercises. Here's a brief comparison:
coding-interview-university:
def binary_search(list, item):
low = 0
high = len(list) - 1
while low <= high:
mid = (low + high) // 2
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
system-design-interview:
No direct code examples available. The repository focuses on system design concepts and architecture diagrams rather than implementation details.
The coding-interview-university repository provides more hands-on coding examples, while system-design-interview concentrates on high-level system architecture and design principles.
Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.
Pros of system-design-101
- More comprehensive coverage of system design topics, including cloud services and modern technologies
- Better visual aids with diagrams and illustrations to explain complex concepts
- Regular updates and contributions from the community, keeping content fresh
Cons of system-design-101
- Less focused on interview-specific questions and scenarios
- May be overwhelming for beginners due to the breadth of topics covered
Code comparison
While both repositories primarily focus on system design concepts rather than code examples, system-design-101 occasionally includes code snippets to illustrate specific points. For example:
system-design-101:
def consistent_hash(key):
return hash(key) % NUM_SERVERS
system-design-interview: No direct code examples provided.
Summary
system-design-101 offers a more comprehensive and visually appealing resource for learning system design concepts, with regular updates and community contributions. However, system-design-interview may be more suitable for those specifically preparing for interviews, as it focuses on common interview questions and scenarios. The choice between the two depends on the learner's goals and experience level.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
How to prepare system design questions for an IT company
System design is a very broad topic. Even a software engineer with many years of working experience at a top IT company may not be an expert on system design. If you want to become an expert, you need to read many books, articles, and solve real large scale system design problems.
This repository only teaches you how to handle the system design interview with a systematic approach in a short time. You can dive into each topic if you have time. Of course, welcome to add your thoughts!
Table of Contents
- System Design Interview Tips
- Basic Knowledge about System Design
- Company Engineering Blogs
- Products and Systems
- Hot Questions and Reference
- Good Books
- Object Oriented Design
[â¬] System Design Interview Tips:
Clarify the constraints and identify the user cases
Spend a few minutes questioning the interviewer and agreeing on the scope of the system. Remember to make sure you know all the requirements the interviewer didn't tell you about in the beginning.
User cases indicate the main functions of the system, and constraints list the scale of the system such as requests per second, requests types, data written per second, data read per second.
High-level architecture design
Sketch the important components and the connections between them, but don't go into some details. Usually, a scalable system includes webserver (load balancer), service (service partition), database (primary/secondary database cluster plug cache).
Component design
For each component, you need to write the specific APIs for each component. You may need to finish the detailed OOD design for a particular function. You may also need to design the database schema for the database.
[â¬] Basic Knowledge about System Design:
Here are some articles about system design related topics.
- The Anatomy Of A System Design Interview
- How to Succeed in a System Design Interview
- How to Rock a Systems Design Interview
- System Interview
- Scalability for Dummies
- Scalable Web Architecture and Distributed Systems
- Numbers Everyone Should Know
- Fallacies of distributed systems
- Scalable System Design Patterns
- Introduction to Architecting Systems for Scale
- Transactions Across Datacenters
- A Plain English Introduction to CAP Theorem
- The CAP FAQ
- Paxos Made Simple
- Consistent Hashing
- NOSQL Patterns
- Scalability, Availability & Stability Patterns
Of course, if you want to dive into system related topics, here is a good collection of reading list about services-engineering, and a good collection of material about distributed systems.
[â¬] Company Engineering Blogs:
If you are going to have an onsite with a company, you should read their engineering blog.
- High Scalability
- The GitHub Blog
- Engineering at Quora
- Yelp Engineering Blog
- Twitter Engineering
- Facebook Engineering
- Yammer Engineering
- Etsy Code as Craft
- Foursquare Engineering Blog
- Airbnb Engineering
- WebEngage Engineering Blog
- LinkedIn Engineering
- The Netflix Tech Blog
- BankSimple Simple Blog
- Square The Corner
- SoundCloud Backstage Blog
- Flickr Code
- Instagram Engineering
- Dropbox Tech Blog
- Cloudera Developer Blog
- Bandcamp Tech
- Oyster Tech Blog
- THE REDDIT BLOG
- Groupon Engineering Blog
- Songkick Technology Blog
- Google AI Blog
- Google Developers Blog
- Pinterest Engineering Blog
- Twilio Engineering Blog
- Bitly Engineering Blog
- Uber Engineering Blog
- Godaddy Engineering
- Splunk Blog
- Coursera Engineering Blog
- PayPal Engineering Blog
- Nextdoor Engineering Blog
- Booking.com Development Blog
- Microsoft Engineering Blog
- Scalyr Engineering Blog
- Myntra Engineering Blog
- Fastly Blog
- AWS Architecture Blog
- Lyft Engineering Blog
- Wish Engineering
- Doordash Engineering
- SnowFlake Blog
- Palantir Blog
[â¬] Products and Systems:
The following papers/articles/slides can help you to understand the general design idea of different real products and systems.
- MapReduce: Simplified Data Processing on Large Clusters
- Bigtable: A Distributed Storage System for Structured Data
- The Google File System
- The Chubby lock service for loosely-coupled distributed systems
- Dynamo: Amazon's Highly Available Key-value Store
- Introduction to Memcached
- Cassandra Introduction Features
- Introduction to HBase
- Introduction to MongoDB
- Introduction to Redis
- Storm
- Introduction to Zookeeper
- Kafka
- YouTube Architecture
- Scaling Pinterest
- Google Architecture
- Scaling Twitter
- The WhatsApp Architecture
- Flickr Architecture
- Amazon Architecture
- Stack Overflow Architecture
- Pinterest Architecture
- Tumblr Architecture
- Instagram Architecture
- TripAdvisor Architecture
- Scaling Mailbox
- Salesforce Architecture
- ESPN Architecture
- Uber Architecture
- DropBox Design
- Splunk Architecture
[â¬] Hot Questions and Reference:
There are some good references for each question. The references here are slides and articles.
Design a CDN network
Reference:
Design a Google document system
Reference:
Design a random ID generation system
Reference:
Design a key-value database
Reference:
Design the Facebook news feed function
Reference:
- What are best practices for building something like a News Feed?
- What are the scaling issues to keep in mind while developing a social network feed?
- Activity Feeds Architecture
Design the Facebook timeline function
Reference:
Design a function to return the top k requests during past time interval
Reference:
- Efficient Computation of Frequent and Top-k Elements in Data Streams
- An Optimal Strategy for Monitoring Top-k Queries in Streaming Windows
Design an online multiplayer card game
Reference:
- How to Create an Asynchronous Multiplayer Game
- How to Create an Asynchronous Multiplayer Game Part 2: Saving the Game State to Online Database
- How to Create an Asynchronous Multiplayer Game Part 3: Loading Games from the Database
- How to Create an Asynchronous Multiplayer Game Part 4: Matchmaking
- Real Time Multiplayer in HTML5
Design a graph search function
Reference:
- Building out the infrastructure for Graph Search
- Indexing and ranking in Graph Search
- The natural language interface of Graph Search and Erlang at Facebook
Design a picture sharing system
Reference:
Design a search engine
Reference:
Design a recommendation system
Reference:
Design a tinyurl system
Reference:
Design a garbage collection system
Reference:
Design a scalable web crawling system
Reference:
Design the Facebook chat function
Reference:
Design a trending topic system
Reference:
- Implementing Real-Time Trending Topics With a Distributed Rolling Count Algorithm in Storm
- Early detection of Twitter trends explained
Design a cache system
Reference:
[â¬] Good Books:
- Big Data: Principles and best practices of scalable realtime data systems
- Real-Time Analytics: Techniques to Analyze and Visualize Streaming Data
- Building Microservices: Designing Fine-Grained Systems
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
[â¬] Object Oriented Design:
Tips for OOD Interview
Clarify the scenario, write out user cases
Use case is a description of sequences of events that, taken together, lead to a system doing something useful. Who is going to use it and how they are going to use it. The system may be very simple or very complicated.
Special system requirements such as multi-threading, read or write oriented.
Define objects
Map identity to class: one scenario for one class, each core object in this scenario for one class.
Consider the relationships among classes: certain class must have unique instance, one object has many other objects (composition), one object is another object (inheritance).
Identify attributes for each class: change noun to variable and action to methods.
Use design patterns such that it can be reused in multiple applications.
Useful Websites
Top Related Projects
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
The Patterns of Scalable, Reliable, and Performant Large-Scale Systems
A curated list of awesome System Design (A.K.A. Distributed Systems) resources.
💯 Curated coding interview preparation materials for busy software engineers
A complete computer science study plan to become a software engineer.
Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot