donnemartin/system-design-primer

Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

GitHub에서 열기 ↗ designdesign-patternsdesign-systemdevelopmentinterviewinterview-practiceinterview-questionsprogrammingpythonsystemwebweb-applicationwebapp
356,951
GitHub 스타
57,118
포크
Python
언어
NOASSERTION
라이선스
2026.03.20
최근 푸시
2026.05.02
별표한 날

AI 분석

설치 난이도: 쉬움
큐레이터 노트
시스템 설계 면접 준비와 대규모 시스템 아키텍처 학습에 매우 유용한 자료입니다. 특히 Anki 플래시카드와 실제 면접 문제 풀이가 강점이며, 지속적으로 업데이트되는 오픈소스 프로젝트이므로 신뢰할 수 있습니다.

강점

  • 방대한 시스템 설계 지식을 체계적으로 정리하여 한 곳에서 학습할 수 있도록 구성되어 있습니다.
  • Anki 플래시카드를 제공하여 반복 학습을 통해 개념을 효과적으로 기억할 수 있습니다.
  • 실제 면접 질문과 모범 답안을 포함하여 실전 대비에 유용합니다.

약점

  • README가 매우 길어 초보자가 처음 접근하기에 부담스러울 수 있습니다.
  • 일부 내용은 지속적으로 업데이트되지만, 특정 섹션은 최신 트렌드를 완전히 반영하지 못할 수 있습니다.

주의사항

  • 모든 내용을 외울 필요는 없으며, 면접 일정과 경험에 맞춰 선택적으로 학습하는 것이 좋습니다.
  • 예제 솔루션은 참고용이며, 실제 면접에서는 자신만의 접근 방식으로 설명하는 것이 중요합니다.

시작 가이드

  • README의 시스템 설계 주제 목록을 훑어보고, 자신의 학습 일정에 맞춰 우선순위를 정하세요.
  • Anki 플래시카드 덱을 다운로드하여 반복 학습을 시작하세요.
  • 면접 대비를 위해 '시스템 설계 면접 문제와 해답' 섹션의 문제를 직접 풀어보고 모범 답안과 비교해보세요.

README 한국어 번역

이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.

English ∙ 日本語 ∙ 简体中文 ∙ 繁體中文 | العَرَبِيَّة‎বাংলাPortuguês do BrasilDeutschελληνικάעבריתItaliano한국어فارسیPolskiрусский языкEspañolภาษาไทยTürkçetiếng ViệtFrançais | Add Translation

Help translate this guide!

The System Design Primer

<p align="center"> <img src="images/jj3A5N8.png"> <br/> </p>

Motivation

Learn how to design large-scale systems.

>

Prep for the system design interview.

Learn how to design large-scale systems

Learning how to design scalable systems will help you become a better engineer.

System design is a broad topic. There are a vast number 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.

Learn from the open source community

This is a continually updated, open source project.

Contributions are welcome!

Prep for the system design interview

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 solutions: discussions, code, and diagrams.

Additional topics for interview prep:

  • Study guide
  • How to approach a system design interview question
  • System design interview questions, with solutions
  • Object-oriented design interview questions, with solutions
  • Additional system design interview questions

Anki flashcards

<p align="center"> <img src="images/zdCAkB3.png"> <br/> </p>

The provided Anki flashcard decks use spaced repetition to help you retain key system design concepts.

Great for use while on-the-go.

Coding Resource: Interactive Coding Challenges

Looking for resources to help you prep for the Coding Interview?

<p align="center"> <img src="images/b4YtAEN.png"> <br/> </p>

Check out the sister repo Interactive Coding Challenges, which contains an additional Anki deck:

Contributing

Learn from the community.

Feel free to submit pull requests to help:

  • Fix errors
  • Improve sections
  • Add new sections
  • Translate

Content that needs some polishing is placed under development.

Review the Contributing Guidelines.

Index of system design topics

Summaries of various system design topics, including pros and cons. Everything is a trade-off.

>

Each section contains links to more in-depth resources.

<p align="center"> <img src="images/jrUBAF7.png"> <br/> </p>

  • System design topics: start here
  • Step 1: Review the scalability video lecture
  • Step 2: Review the scalability article
  • Next steps
  • Performance vs scalability
  • Latency vs throughput
  • Availability vs consistency
  • CAP theorem
  • CP - consistency and partition tolerance
  • AP - availability and partition tolerance
  • Consistency patterns
  • Weak consistency
  • Eventual consistency
  • Strong consistency
  • Availability patterns
  • Fail-over
  • Replication
  • Availability in numbers
  • Domain name system
  • Content delivery network
  • Push CDNs
  • Pull CDNs
  • Load balancer
  • Active-passive
  • Active-active
  • Layer 4 load balancing
  • Layer 7 load balancing
  • Horizontal scaling
  • Reverse proxy (web server)
  • Load balancer vs reverse proxy
  • Application layer
  • Microservices
  • Service discovery
  • Database
  • Relational database management system (RDBMS)
  • Master-slave replication
  • Master-master replication
  • Federation
  • Sharding
  • Denormalization
  • SQL tuning
  • NoSQL
  • Key-value store
  • Document store
  • Wide column store
  • Graph Database
  • SQL or NoSQL
  • Cache
  • Client caching
  • CDN caching
  • Web server caching
  • Database caching
  • Application caching
  • Caching at the database query level
  • Caching at the object level
  • When to update the cache
  • Cache-aside
  • Write-through
  • Write-behind (write-back)
  • Refresh-ahead
  • Asynchronism
  • Message queues
  • Task queues
  • Back pressure
  • Communication
  • Transmission control protocol (TCP)
  • User datagram protocol (UDP)
  • Remote procedure call (RPC)
  • Representational state transfer (REST)
  • Security
  • Appendix
  • Powers of two table
  • Latency numbers every programmer should know
  • Additional system design interview questions
  • Real world architectures
  • Company architectures
  • Company engineering blogs
  • Under development
  • Credits
  • Contact info
  • License

Study guide

Suggested topics to review based on your interview timeline (short, medium, long).

!Imgur

Q: For interviews, do I need to know everything here?

A: 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:

  • How much experience you have
  • What your technical background is
  • What positions you are interviewing for
  • Which companies you are interviewing with
  • Luck

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.

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 timeline, experience, what positions you are interviewing for, and which companies you are interviewing with.

  • Short timeline - Aim for breadth with system design topics. Practice by solving some interview questions.
  • Medium timeline - Aim for breadth and some depth with system design topics. Practice by solving many interview questions.
  • Long timeline - Aim for breadth and more depth with system design topics. Practice by solving most interview questions.
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 approach a system design interview question

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.

Step 1: Outline use cases, constraints, and assumptions

Gather requirements and scope the problem. Ask questions to clarify use cases and constraints. Discuss assumptions.

  • Who is going to use it?
  • How

[...truncated...]

원본 저장소: donnemartin/system-design-primer

라이선스: NOASSERTION

게재 제외를 원하시면 삭제 요청을 보내주세요.