For senior hiring, both code test and system design are required.
(PS: How to prepare code test: here)
Now let’s think how to prepare for system design interviews!
- Examine relevancy: Does the candidate have relevant working experience? Especially for critical problems in my projects.
- Examine potential: How deep the candidate understand about the concepts in our domains, and also the painpoints.
- Examine skills: Is he/she able to bring up a qualified architecture design with given constraints by discussing together.
It’s hard to fake it, if you don’t have enough hands-on experience.
- It’s not about the final architecture design. It’s about your thinking process. It’s about your assumptions and judgments.
Your thinking process indicates: 1. Working with unknown: How you can breakdown/convert complex problems into small/easy ones 2. Relevancy in the domain: How deep your experience 3. Your communication skills. How good you can convince others Your assumptions and judgments indicate: 1. how you would do better trade-off which fits into the project 2. How you can simplify the problems.
- It’s not about accuracy, but about relevancy. You can make any assumptions. But then try to make reasonable estimations afterwards.
- No one expect you to be a super man/woman. But remember to show your expertises and strengths. And how they can benefit the team.
- Everything is a trade-off. After getting familiar with best practices, most likely you will see no silver bullets when you design solutions.
- Avoid feeling frustrated, if your interview doesn’t go well. Even for the same question, different interviewers can make the interview totally different. Take it easy.
Resources To Learn System Design:
- YouTube For System Design
- Papers For System Design
- GitHub For System Design
- Data Structures In System Design
- Concepts For System Design
- Books For System Design
- Blogs For System Design
- Typical Trade-Off In System Design
- Typical Question: How Does Consistent Hashing Work?
- Resource: Software Design Patterns
- Resource: Patterns Of Container Architecture Design
- Resource: Key Facts In Cloud Systems
- Resource: General Principles In Cloud Computing
- Resource: Fundamental Questions In System Design
- Message Queue For Async Programming
- How To Save Users’ Login Credentials In Your DB?
- How Heartbeat Work
- Explain: What Problems Of MySQL Master HA Are?
- Explain: Pessimistic And Optimistic Locking
- Explain: Monitoring System
- Explain: Gossip Protocol
- Explain Two-phase commit/Three-phase commit
- Explain SSTable (Sorted Strings Table)
- Explain Paxos Algorithm
- Explain LSM (Log Structured Merge Trees)
- Explain Eventual Consistency
- Explain Delayed Queue
- Explain DB Indexing
- Explain Data Partition & Sharding
- Explain CRDTs (Conflict-Free Replicated Data Types)
- Explain CAP Theorem
- Explain Bloom Filter
- Design: What You Will Do, If Your DB Runs Into Split Brain?
- Design: What Are Your Experience With Session Design?
- Design: Poll vs Push
- Design: How To Migrate Cluster Across Regions
- Design: How Does LoadBalancer Work?
- Design: How Does DNS Work?
- Design: How Does Caching Work
- Design: DB Replication
- Design: A Distributed Lock
- Design: A Distributed Counter
- Design Replication Process For Huge File Changes
- Deep Dive Into System Design
- Deep Dive Into Memory Management
- Deep Dive Into HTTP Protocol
- DB: SQL and NoSQL
- Concurrency & Communication
- Concepts For System Design
Services Or System Design:
- Explain: Vector Clocks/Version Vectors
- Design: Uber Backend
- Design: Google Suggestion Service
- Design: An Elevator Service
- Design: A Photo Reference Counting System At Scale
- Design: A Parking Lot Service
Features Or OO Design:
- Design data-intensive application:
- Systems Performance: Enterprise and the Cloud
- Designing Distributed Systems
- Clean Architecture
- System Design Interview – An insider’s guide Kindle Edition
See more blog_posts.
Original URL: https://architect.dennyzhang.com/system-design-interview