system-design-interview README

The project's README from github.com/checkcheckzz/system-design-interview. As one markdown file: README.md.

logo

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:

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

system-design-interview (checkcheckzz/system-design-interview)

Searching Database…

这是什么?这是一份精选指南,用于准备 IT 公司的系统设计面试,内容涵盖面试技巧、系统设计基础知识、工程博客、真实产品架构,以及常见设计题和参考资料。
这是教程、书籍,还是链接列表?这是一个结构化的链接和文章列表,按主题组织,包括面试技巧、基础知识、工程博客、真实产品架构、热门题目及参考资料,以及优秀书籍。
我应该从哪里开始学习?先阅读“系统设计面试技巧”部分,学习解题思路(明确需求、勾勒高层架构、设计各个组件),然后阅读“系统设计基础知识”相关文章,最后再去看“热门题目”部分。
我需要什么工具或账号才能使用这些内容吗?不需要。这只是一个 README 文件,里面链接了外部文章、论文和工程博客,用浏览器打开阅读即可。
链接的文章还是最新的吗?该仓库创建于 2014 年,很多链接的工程博客文章和架构文章都来自那个时期,因此部分内容和链接可能已经过时。
包含哪些练习题?列出了一些“热门题目”,例如设计 CDN 网络、键值数据库、新闻信息流、搜索引擎、短网址服务、网络爬虫和聊天系统,每道题都附有推荐的参考阅读材料。
也包含面向对象设计(OOD)面试的内容吗?包含。有一个专门的部分,提供 OOD 面试技巧,涵盖用例、对象定义、类之间的关系和属性。
会推荐具体的书籍吗?会,例如《Big Data: Principles and best practices of scalable realtime data systems》和《Designing Data-Intensive Applications》。
有真实公司架构的链接吗?有,链接了描述 YouTube、Twitter、Instagram、Dropbox、Uber 和 Amazon 等系统架构的文章。
Size
0.3 MB
Stars
23.9K
Updated
CommitDec 23
Age
12y
Commits · 90 Days