Grokking System Design
Source: educative
Interview Process
- Scope the problem
- Don’t make assumptions.
- Ask clarifying questions to understand the constraints and use cases.
- Steps
- Requirements clarifications
- System interface definition
- Sketch up an abstract design
- Building blocks of the system
- Relationships between them
- Steps
- Back-of-the-envelope estimation
- Defining data model
- High-level design
- Identify and address the bottlenecks
- Use the fundamental principles of scalable system design
- Steps
- Detailed design
- Identifying and resolving bottlenecks
Distributed System Design Basics
- Key Characterics
- Loading balancing
- Caching
- Sharding
- Indexes
- Proxies
- Queues
- Redundancy
- SQL vs. NoSQL
- CAP Theorem
- Consistent Hashing
- Client Server Communication