Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 27 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ This repository only teaches you how to handle the system design interview with
- [ ] [Products and Systems](#system)
- [ ] [Hot Questions and Reference](#qs)
- [ ] [Good Books](#bk)
- [ ] [Video Tutorials](#video)
- [ ] [Object Oriented Design](#ood)

### [[⬆]](#toc) <a name='tips'>System Design Interview Tips:</a>
Expand All @@ -22,14 +23,14 @@ This repository only teaches you how to handle the system design interview with
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
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.
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
Expand Down Expand Up @@ -60,7 +61,7 @@ a good collection of material about [distributed systems](http://dancres.github.

### [[⬆]](#toc) <a name='blog'>Company Engineering Blogs:</a>

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

* [High Scalability](http://highscalability.com/)
* [The GitHub Blog](https://github.com/blog/category/engineering)
Expand Down Expand Up @@ -101,7 +102,7 @@ If you are going to have an onsite with a company, you should read their enginee

### [[⬆]](#toc) <a name='system'>Products and Systems:</a>

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

* [MapReduce: Simplied Data Processing on Large Clusters](http://static.googleusercontent.com/media/research.google.com/zh-CN/us/archive/mapreduce-osdi04.pdf)
* [Bigtable: A Distributed Storage System for Structured Data](http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/chang06bigtable.pdf)
Expand Down Expand Up @@ -137,7 +138,7 @@ The following papers/articles/slides can help you to understand the general desi

### [[⬆]](#toc) <a name='qs'>Hot Questions and Reference:</a>

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

**Design a CDN network**
Reference:
Expand All @@ -149,8 +150,8 @@ Reference:
* [Differential Synchronization](https://neil.fraser.name/writing/sync/)

**Design a random ID generation system**
Reference:
* [Announcing Snowflake](https://blog.twitter.com/2010/announcing-snowflake)
Reference:
* [Announcing Snowflake](https://blog.twitter.com/2010/announcing-snowflake)
* [snowflake](https://github.com/twitter/snowflake/)

**Design a key-value database**
Expand All @@ -159,13 +160,13 @@ Reference:

**Design the Facebook news feed function**
Reference:
* [What are best practices for building something like a News Feed?](http://www.quora.com/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?](http://www.quora.com/Activity-Streams/What-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed)
* [What are best practices for building something like a News Feed?](http://www.quora.com/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?](http://www.quora.com/Activity-Streams/What-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed)
* [Activity Feeds Architecture](http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture)

**Design the Facebook timeline function**
Reference:
* [Building Timeline](https://www.facebook.com/note.php?note_id=10150468255628920)
Reference:
* [Building Timeline](https://www.facebook.com/note.php?note_id=10150468255628920)
* [Facebook Timeline](http://highscalability.com/blog/2012/1/23/facebook-timeline-brought-to-you-by-the-power-of-denormaliza.html)

**Design a function to return the top k requests during past time interval**
Expand All @@ -184,12 +185,12 @@ Reference:
**Design a graph search function**
Reference:
* [Building out the infrastructure for Graph Search](https://www.facebook.com/notes/facebook-engineering/under-the-hood-building-out-the-infrastructure-for-graph-search/10151347573598920)
* [Indexing and ranking in Graph Search](https://www.facebook.com/notes/facebook-engineering/under-the-hood-indexing-and-ranking-in-graph-search/10151361720763920)
* [Indexing and ranking in Graph Search](https://www.facebook.com/notes/facebook-engineering/under-the-hood-indexing-and-ranking-in-graph-search/10151361720763920)
* [The natural language interface of Graph Search](https://www.facebook.com/notes/facebook-engineering/under-the-hood-the-natural-language-interface-of-graph-search/10151432733048920) and [Erlang at Facebook](http://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf)

**Design a picture sharing system**
Reference:
* [Flickr Architecture](http://highscalability.com/flickr-architecture)
* [Flickr Architecture](http://highscalability.com/flickr-architecture)
* [Instagram Architecture](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)

**Design a search engine**
Expand All @@ -203,14 +204,14 @@ Reference:
* [Recommender Systems](http://ijcai13.org/files/tutorial_slides/td3.pdf)

**Design a tinyurl system**
Reference:
* [System Design for Big Data-tinyurl](http://n00tc0d3r.blogspot.com/)
Reference:
* [System Design for Big Data-tinyurl](http://n00tc0d3r.blogspot.com/)
* [URL Shortener API](https://developers.google.com/url-shortener/?csw=1)

**Design a garbage collection system**
Reference:
* [Baby's First Garbage Collector](http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/)

**Design a scalable web crawling system**
Reference:
* [How can I build a web crawler from scratch?](https://www.quora.com/How-can-I-build-a-web-crawler-from-scratch)
Expand All @@ -224,7 +225,7 @@ Reference:
Reference:
* [Implementing Real-Time Trending Topics With a Distributed Rolling Count Algorithm in Storm](http://www.michael-noll.com/blog/2013/01/18/implementing-real-time-trending-topics-in-storm/)
* [Early detection of Twitter trends explained](http://snikolov.wordpress.com/2012/11/14/early-detection-of-twitter-trends/)

**Design a cache system**
Reference:
* [Introduction to Memcached](http://www.slideshare.net/oemebamo/introduction-to-memcached)
Expand All @@ -236,6 +237,14 @@ Reference:
* [Building Microservices: Designing Fine-Grained Systems](http://www.amazon.com/Building-Microservices-Sam-Newman/dp/1491950358)
* [Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems](https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321)

### [[⬆]](#toc) <a name='video'>Video Tutorials:</a>

* [DESIGN A PARKING LOT - asked at Google, Facebook](https://www.youtube.com/watch?v=DSGsa0pu8-k)
* [How to design Twitter? Interview question at Facebook, Google, Microsoft](https://www.youtube.com/watch?v=KmAyPUv9gOY)
* [System Design: Uber Lyft ride sharing services - Interview question](https://www.youtube.com/watch?v=J3DY3Te3A_A)
* [System Design: Messenger service like Whatsapp or WeChat - Interview Question](https://www.youtube.com/watch?v=5m0L0k8ZtEs)
* [System Design : Design a service like TinyUrl](https://www.youtube.com/watch?v=fMZMm_0ZhK4)

### [[⬆]](#toc) <a name='ood'>Object Oriented Design:</a>

#### Tips for OOD Interview
Expand All @@ -259,7 +268,3 @@ Use design patterns such that it can be reused in multiple applications.
#### Useful Websites

* [101 Design Patterns & Tips for Developers](http://sourcemaking.com/design-patterns-and-tips)