A curated collection of system design concepts, patterns, and architectures designed as a comprehensive refresher for technical interviews.
It contains my personal collection of notes and resources I consider important for preparing for system design interviews.
This repository serves as:
- Interview Refresher: Quick review of essential system design concepts
- Visual Learning Guide: Mermaid diagrams and clear explanations for better retention
- Start with Fundamentals: Build strong foundational knowledge
- Go Deeper with Advanced Topics: Authentication, multi-region, and specialized paradigms
- Explore Architectures: Understand patterns and their applications
- Practice with Systems: Apply concepts to real-world design problems
- Challenge Ideas: Question assumptions and understand trade-offs
Essential building blocks for understanding distributed systems and scalable architectures. See the full index.
- Client-Server Model - Request-response patterns, DNS, service roles
- Network Protocols - TCP/IP stack, browser request flow, protocol trade-offs
- Latency and Throughput - Performance metrics, optimization strategies
- HTTP Versions - HTTP/1.0 to HTTP/3, QUIC, performance trade-offs
- REST API - Resource modeling, HTTP semantics, versioning
- Communication Patterns - REST, RPC, GraphQL, messaging
- Real-Time Communication - Short/long polling, SSE, WebSockets
- Availability - SLOs, uptime targets, failover patterns
- Reliability - Correctness over time, failure handling patterns
- Scalability - Scale-up/out, bottlenecks, scaling patterns
- Caching - Cache strategies, levels, invalidation patterns
- Proxies - Forward/reverse proxies, load balancers, CDNs
- Load Balancing - Distribution algorithms, health checks
- Resilience - Failure isolation, graceful degradation, recovery
- Observability - Metrics, logs, traces, alerts, telemetry design
- Concurrency Control - Threads, locks, semaphores, deadlocks
- Hashing - Consistent hashing, partitioning strategies
- Bloom Filters - Membership checks, false positives
- Checksums - Data integrity, hash verification, error detection
- Relational Databases - ACID properties, SQL optimization, indexing
- Non-Relational Databases - NoSQL types, CAP theorem trade-offs
- Database Replication - Master-slave, master-master patterns
- Database Sharding - Horizontal partitioning strategies
- Database Concurrency Control - Isolation levels, anomalies, locking strategies
- CAP and PACELC Theorems - Distributed systems constraints
- Leader Election - Leader-follower pattern, failover, leases
- Consensus - Quorum, Raft vs Paxos, consistency guarantees
- Pub/Sub - Messaging patterns, event-driven architectures
- Rate Limiting - Traffic control, algorithms, implementation
- Back-of-the-Envelope Calculations - Estimation techniques, performance numbers
In-depth notes for specialized or deep-dive interview topics. See the full index.
- OAuth 2.0 - Authorization flows, PKCE, tokens, scopes
- Multi-Region Replication - Global deployment, replication topologies
- MapReduce - Distributed batch processing paradigm
- Peer-to-Peer Networks - Decentralized architectures, DHT
Proven architectural approaches for building scalable and maintainable systems.
- Layered Architecture - Traditional n-tier separation of concerns
- Hexagonal Architecture - Ports and adapters pattern
- Microservices Architecture - Distributed service-oriented design
- Event-Driven Architecture - Asynchronous communication patterns
- Event Sourcing - State as sequence of events
- CQRS - Command Query Responsibility Segregation
- Circuit Breaker - Fault tolerance and graceful degradation
- Two-Phase Commit - Distributed transaction coordination
- Saga Pattern - Managing distributed transactions
- Transactional Outbox - Reliable event publishing
Real-world system design problems with comprehensive solutions.
- URL Shortening System - Design bit.ly or tinyurl.com.
- OCR File Processing System - Design a system to process 100,000 files per hour using OCR to extract text from PDF documents.
More system designs coming soon...
Curated external resources for deepening system design knowledge.
Repositories
- System Design Primer - Comprehensive collection of system design concepts
- System Design 101 - Visual explanations by ByteByteGo
- Awesome System Design Resources - Curated list of resources
Video Learning
- Hello Interview - System Design Walkthroughs - Detailed interview walkthroughs
- codeKarle - System Design Questions - Interview-focused content
Online Courses
- Grokking the System Design Interview - Interview preparation
- Educative - Modern System Design - Comprehensive course
Engineering Blogs
- Netflix Tech Blog - Streaming and microservices insights
- Uber Engineering - Real-time systems and data processing
- Meta Engineering - Large-scale social systems
- AWS Architecture Blog - Cloud-native patterns
System Design Newsletters
- ByteByteGo - Weekly system design insights
- System Design Newsletter - Deep dives into architecture
- Software Architecture Monday - Architecture patterns
Distributed Systems
- MapReduce - Simplified data processing on large clusters
- Bigtable - Distributed storage system for structured data
- Dynamo - Amazon's highly available key-value store
Transaction Management
- Sagas - Managing long-lived transactions
- Life beyond Distributed Transactions - Alternative approaches to ACID
This repository reflects personal learning and interview preparation. While primarily for personal use, suggestions and improvements are welcome through issues and pull requests.