system-design-interview [github]

logo

How to prepare system design questions for IT company

System design is a very broad topic. Even a software engineer with many years of working experience at 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 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 your 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 (master/slave 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:
* Globally Distributed Content Delivery.

Design a Google document system
Reference:
* google-mobwrite
* Differential Synchronization.

Design a random ID generation system
Reference:
* Announcing Snowflake
* snowflake.

Design a key-value database
Reference:
* Introduction to Redis.

Design the Facebook news seed function
Reference:
* What are best practices for building something like a News Feed?
* What are the scaling issues to keep in mind while developing a social network feed?
* Activity Feeds Architecture

Design the Facebook timeline function
Reference:
* Building Timeline
* Facebook Timeline.

Design a function to return the top k requests during past time interval
Reference:
* Efficient Computation of Frequent and Top-k Elements in Data Streams
* An Optimal Strategy for Monitoring Top-k Queries in Streaming Windows

Design an online multiplayer card game
Reference:
* How to Create an Asynchronous Multiplayer Game
* How to Create an Asynchronous Multiplayer Game Part 2: Saving the Game State to Online Database
* How to Create an Asynchronous Multiplayer Game Part 3: Loading Games from the Database
* How to Create an Asynchronous Multiplayer Game Part 4: Matchmaking
* Real Time Multiplayer in HTML5

Design a graph search function
Reference:
* Building out the infrastructure for Graph Search
* Indexing and ranking in Graph Search
* The natural language interface of Graph Search and Erlang at Facebook.

Design a picture sharing system
Reference:
* Flickr Architecture
* Instagram Architecture.

Design a search engine
Reference:
* How would you implement Google Search?
* Implementing Search Engines

Design a recommendition system
Reference:
* Hulu’s Recommendation System
* Recommender Systems

Design a tinyurl system
Reference:
* System Design for Big Data-tinyurl
* URL Shortener API.

Design a garbage collection system
Reference:
* Baby’s First Garbage Collector.

Design a scalable web crawling system
Reference:
* Design and Implementation of a High-Performance Distributed Web Crawler

Design the Facebook chat function
Reference:
* Erlang at Facebook
* Facebook Chat

Design a trending topic system
Reference:
* Implementing Real-Time Trending Topics With a Distributed Rolling Count Algorithm in Storm
* Early detection of Twitter trends explained

Design a cache system
Reference:
* Introduction to Memcached.

[⬆] 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值