37

System Design Interview

 4 years ago
source link: https://www.tuicool.com/articles/jmAjEv6
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

673mye6.png!web

How to prepare system design questions for an IT company

System design is a very broad topic. Even a software engineer with many years of working experience at a top IT company may not be an expert on system design. If you want to become an expert, you need to read many books, articles, and solve real large scale system design problems.

This repository only teaches you how to handle the system design interview with a systematic approach in a short time. You can dive into each topic if you have time. Of course, welcome to add your thoughts!

Table of Contents

  • System Design Interview Tips
  • Basic Knowledge about System Design
  • Company Engineering Blogs
  • Hot Questions and Reference
  • Object Oriented Design

System Design Interview Tips:

Clarify the constraints and identify the user cases

Spend a few minutes questioning the interviewer and agreeing on the scope of the system. Remember to make sure you know all the requirements the interviewer didn't tell you about in the beginning.

User cases indicate the main functions of the system, and constraints list the scale of the system such as requests per second, requests types, data written per second, data read per second.

High-level architecture design

Sketch the important components and the connections between them, but don't go into some details. Usually, a scalable system includes webserver (load balancer), service (service partition), database (primary/secondary database cluster plug cache).

Component design

For each component, you need to write the specific APIs for each component. You may need to finish the detailed OOD design for a particular function. You may also need to design the database schema for the database.

Basic Knowledge about System Design:

Here are some articles about system design related topics.

Of course, if you want to dive into system related topics, here is a good collection of reading list about services-engineering , and a good collection of material about distributed systems .

Company Engineering Blogs:

If you are going to have an onsite with a company, you should read their engineering blog.

Products and Systems:

The following papers/articles/slides can help you to understand the general design idea of different real products and systems.

Hot Questions and Reference:

There are some good references for each question. The references here are slides and articles.

Design a CDN network

Reference:

Design a Google document system

Reference:

Design a random ID generation system

Reference:

Design a key-value database

Reference:

Design the Facebook news feed function

Reference:

Design the Facebook timeline function

Reference:

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

Reference:

Design an online multiplayer card game

Reference:

Design a graph search function

Reference:

Design a picture sharing system

Reference:

Design a search engine

Reference:

Design a recommendation system

Reference:

Design a tinyurl system

Reference:

Design a garbage collection system

Reference:

Design a scalable web crawling system

Reference:

Design the Facebook chat function

Reference:

Design a trending topic system

Reference:

Design a cache system

Reference:

Good Books:

Object Oriented Design:

Tips for OOD Interview

Clarify the scenario, write out user cases

Use case is a description of sequences of events that, taken together, lead to a system doing something useful. Who is going to use it and how they are going to use it. The system may be very simple or very complicated.

Special system requirements such as multi-threading, read or write oriented.

Define objects

Map identity to class: one scenario for one class, each core object in this scenario for one class.

Consider the relationships among classes: certain class must have unique instance, one object has many other objects (composition), one object is another object (inheritance).

Identify attributes for each class: change noun to variable and action to methods.

Use design patterns such that it can be reused in multiple applications.

Useful Websites


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK