System Design Interview Questions

Last Updated: 2023-12-07

Entry-level positions may only have coding interviews; otherwise you should expect at least one system design interviews.

Types of System Design Interview Questions

These are the common types of the design questions, though they are not mutually exclusive.

Object-oriented design

Design the Objects and their interactions, the most common examples are "design an elevator" and "design a garage".

Data Model Design

This is about how data would be stored and retrieved. You can choose SQL or NoSQL databases, then design the schema, how to setup index and how to query the data(join, filter, aggregate, etc). Expect the requirements to be changed midway, this would be a test of the flexibility of your schema.

Example can be designing a book sharing system that user can lend book to others or borrow from others.

Google's schema design guide: https://cloud.google.com/spanner/docs/schema-design

API Design

If REST API: Understand the verbs of HTTP, design the end points.

Or alternatively, choose gRPC or GraphQL.

Distributed System Design

Start with a plain, simple and straightforward design, then gradually scale up the system: replicas, sharding, load balancer, cache, etc.

Things to understand

  • Concurrency. Do you understand threads, deadlock, and starvation? Do you know how to parallelize algorithms? Do you understand consistency and coherence?
  • Networking. Do you roughly understand IPC and TCP/IP? Do you know the difference between throughput and latency, and when each is the relevant factor?
  • Abstraction. You should understand the systems you’re building upon. Do you know roughly how an OS, file system, and database work? Do you know about the various levels of caching in a modern OS?
  • Real-World Performance. You should be familiar with the speed of everything your computer can do, including the relative performance of RAM, disk, SSD and your network.
  • Estimation. Estimation, especially in the form of a back-of-the-envelope calculation, is important because it helps you narrow down the list of possible solutions to only the ones that are feasible. Then you have only a few prototypes or micro-benchmarks to write.
  • Availability and Reliability. Are you thinking about how things can fail, especially in a distributed environment? Do know how to design a system to cope with network failures? Do you understand durability?

Example Questions

  • Design a distributed cache/hash (the most fundamental questions, could be the building block for other questions.) bottleneck: skewed data(hot words)
  • top k: top k requests or videos or music
  • Design a tinyurl service
  • Design typeahead in search: could be google search, could be facebook friend search, different optimizations
  • Design a search engine(status search)
  • Design load balancer
  • Design live comment/twitter feed/facebook feed
  • Design an elevator control system
  • Design a distributed unique ID service
  • How would you design the feature in LinkedIn where it computes how many hops there are between you and another person?
  • If you were to design a web platform for online chess games, how would you do that?
  • Design an ID allocator which can allocate and de-allocate from a range of 1-1,000,000
  • Design and implement a web crawler(single and multi-threaded)

External Links

Design a tinyurl system

Design a CDN network

Design a Google document system

Design a random ID generation system

Design a key-value database

Design the Facebook news feed function

Design the Facebook timeline function

Design a function to return the top k requests during past time interval

Design an online multiplayer card game

Design a graph search function

Design a picture sharing system

Design a search engine

Design a recommendition system

Design a garbage collection system

Design a scalable web crawling system

Design the chat function

Design a trending topic system

Design a cache system

More Links