Always think about different approaches, think better approaches and say it.
Step 1:
Ask questions, don't assume (at lease check your assumption)
- whether this is algorithm or design problem?
Step 2: System interface definition
- interface, main functions
Step 3: High level design with some diagram
Back-of-the-envelope capacity estimation
Defining the data model
Identifying and resolving bottlenecks
Make a List:
- main functions of the system
- locate bottleneck + how to scale
Unique challenges of these features/system
Non-function features
Unique features
Rate limiter - scalable, availability, DDos
Priority - Critical vs Non-Critical
Load smoothy or spiky(predictable or not)?
Use cases analysis
- How client is going to use it
Locate the problem of the current design
- show you are aware of them
How to optimize it if possible
How to scale
Separate of concerns
Separate or not
Rate limiter - embedded in application or seperated
Tiny url - separate write, read api
Follow the user case, end to end What's the bottleneck, the challenge
How to scale
How to handle change - node added/removed/crashed
The features of these functions
- read/write ratio, read heavy or write heavy or both
How to use it
Senario
Better user experience
User perceived experience/speed
- cheat, approximate
Thinking from client/user perspective
How they use it, what they would like to know
Extra functions that may be related or needed
API Design
Idempotency
Idempotency key
Back pressure exponential backoff
Randomness, Jitter
Fault-tolerant
Retry
Timeout
Rate limit
Degrade
Separation of services
Priority - Critical vs Non-Critical
Offline tasks
Use data from offline tasks
- topn followers, interest getCore
限流
削峰
异步处理
用户体验
用户交互
及时拒绝,防止雪崩
How to Conduct System Design Interview
In memory -> persistence
Step 1:
Ask questions, don't assume (at lease check your assumption)
- whether this is algorithm or design problem?
Step 2: System interface definition
- interface, main functions
Step 3: High level design with some diagram
Back-of-the-envelope capacity estimation
Defining the data model
Identifying and resolving bottlenecks
Make a List:
- main functions of the system
- locate bottleneck + how to scale
Unique challenges of these features/system
Non-function features
Unique features
Rate limiter - scalable, availability, DDos
Priority - Critical vs Non-Critical
Load smoothy or spiky(predictable or not)?
Use cases analysis
- How client is going to use it
Locate the problem of the current design
- show you are aware of them
How to optimize it if possible
How to scale
Separate of concerns
Separate or not
Rate limiter - embedded in application or seperated
Tiny url - separate write, read api
Follow the user case, end to end What's the bottleneck, the challenge
How to scale
How to handle change - node added/removed/crashed
- read/write ratio, read heavy or write heavy or both
How to use it
Senario
Better user experience
User perceived experience/speed
- cheat, approximate
Thinking from client/user perspective
How they use it, what they would like to know
Extra functions that may be related or needed
API Design
Idempotency
Idempotency key
Back pressure exponential backoff
Randomness, Jitter
Fault-tolerant
Retry
Timeout
Rate limit
Degrade
Separation of services
Priority - Critical vs Non-Critical
Offline tasks
Use data from offline tasks
- topn followers, interest getCore
削峰
异步处理
用户体验
用户交互
及时拒绝,防止雪崩
How to Conduct System Design Interview
In memory -> persistence