What is a system design interview?
You would be asked a question to design a solution to a real world engineering problem
It can cover anything from large service architecture (gmail or gmaps), to algorithms, to hardware constraints.
It’ll be more of a conversation with you taking the lead - if you have in depth knowledge of a certain area, take the opportunity to showcase your depth of knowledge to the interviewer
What are our interviewers looking out for?
Your ability to provide a concrete, realistic and quantitative design (i.e. Does your design work for that problem? You might have to go into specific details like numbers - i.e. numbers of machines required, possible queries per second, etc)
Your ability to implement API and interface design (i.e. whether its easy to use and works well with other teams in the organization, or with existing parts of the system)
Your ability to discuss the properties of the system (i.e. Given a certain architecture, does it favor latency?)
Your ability to discuss the tradeoffs and options ( i.e. Don’t just mention that you will use a database. Explain why you choose that? What are the alternative options? Talk through the options and explain why you’ve made that choice)
How do you productionize: Reliability and scale
How can I prepare for a system design interview?
Review distributed systems concepts
Consider the entire spectrum of requirement gathering: time, cost, throughput, users, latency, storage, etc
Think about: How would I determine what is a good latency? How robust and how scalable can it be? How do I productionize it and scale it in a manner that caters to the users?
Think about: How will you build a flexible design? What components will you keep variable, and what components will you set in stone?
Approach you can adopt for a system design interview
Scope the requirements
Always ask clarifying questions! The problem statement will be incomplete, so ask for solid requirements
Design the solution
Feel free to start with something simple!
Be flexible! Don’t be afraid to make changes on some of the designs you have laid out. Interviewer might be giving you hints and guiding you in a certain direction.
Deep Dive in sub-areas
Iterate
Improve and adapt. Consider scalability, reliability, flexibility and maintainability
Always think about backup plans - On scalability, have you designed it in such a way that it can handle data center outage?
Useful resources
YouTube: Building software systems at Google and Lessons Learned
Software Engineering advice from building large-scale distributed systems
Other resources for practice/ refresher
Reading materials if you have time:
You might want to prepare on the following topics (not all will be assessed):
API design
Systems architecture
Capacity/ latency/ throughput
Scalability
Network Design
Fault tolerance
System level interactions and trade-offs
Comments
Post a Comment