System Design and Scalability
this section is more related to the back-end than the front-end, but it's good to know from a broader view:
- Communication: it's more important in the system design than dealing with a specific coding algorithm question. because most of the time, a lot of details won't be covered in the problem description, so the candidate should communicate with the interviewer to avoid unnecessary assumptions.
- Start from a broad view: otherwise it's easy to miss important tips in the description.
- List your assumption or state them: this will allow the interviewer to correct me if the candidate gets it wrong.
- Implementation: all the talking but not being able to actually implement it will hardly persuade your interviewer.
Steps about implementation:
- Make sure I understand the question.
- Develop a solution without the limitation of the question to get the general guideline for my solution.
- Now, add the limitation back, how will you improve it to fit the question? (limitation might be something like limited memory, time complexity, or space complexity.)
Keys Concepts:
- Scaling(Horizontal, Vertical)
- Load Balancer
- Caching
- Asynchronous Processing & Queues
- Database Partitioning(Sharding)
- Database Denormalization(for relational Database)
- Networking Metrics(Bandwidth, Latency, Throughput)
- MapReduce(a combination of Map step with Reduce step, used when processing huge amounts of data)
Other topics to be aware of:
- Failures
- Availability and Reliability
- Read-heavy or Write-heavy
- Security