From 4a06d2e404baeb51fd9be9c7921449f81017ab3b Mon Sep 17 00:00:00 2001 From: John Washam Date: Wed, 14 Sep 2016 11:01:41 -0700 Subject: [PATCH] Added better system design outline. Added it to cheat sheets. --- README.md | 43 +++++++++++++++++--------- extras/cheat sheets/system-design.pdf | Bin 0 -> 26471 bytes 2 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 extras/cheat sheets/system-design.pdf diff --git a/README.md b/README.md index 02171b9..5b6d188 100644 --- a/README.md +++ b/README.md @@ -948,21 +948,36 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - Timelines at Scale: https://www.infoq.com/presentations/Twitter-Timeline-Scalability - [x] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world: - review: System Design from HiredInTech: http://www.hiredintech.com/system-design/ + - [cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - flow: - - ask about constraints - - determine use cases - - abstract, high level design - - bottlenecks - - scaling - - Design a CDN network: http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci - - Design a random ID generation system: https://blog.twitter.com/2010/announcing-snowflake - - Design a key-value database: http://www.slideshare.net/dvirsky/introduction-to-redis - - Design a function to return the top k requests during past time interval: https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf - - Design an online multiplayer card game: http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html - - Design a picture sharing system: http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html - - Design a recommendation system: http://ijcai13.org/files/tutorial_slides/td3.pdf - - Design a URL-shortener system: copied from above: http://www.hiredintech.com/system-design/the-system-design-process/ - - Design a cache system: https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/ + 1. Understand the problem and scope: + - define the use cases, with interviewer's help + - suggest additional features + - remove items that interviewer deems out of scope + - assume high availability is required, add as a use case + 2. Think about constraints: + - ask how many requests per month + - ask how many requests per second (they may volunteer it or make you do the math) + - estimate reads vs. writes percentage + - keep 80/20 rule in mind when estimating + - how much data written per second + - total storage required over 5 years + - how much data read per second + 3. Abstract design: + - layers (service, data, caching) + - infrastructure: load balancing, messaging + - rough overview of any key algorithm that drives the service + - consider bottlenecks and determine solutions + - Exercises: + - Design a CDN network: http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci + - Design a random ID generation system: https://blog.twitter.com/2010/announcing-snowflake + - Design a key-value database: http://www.slideshare.net/dvirsky/introduction-to-redis + - Design a function to return the top k requests during past time interval: https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf + - Design an online multiplayer card game: http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html + - Design a picture sharing system: http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html + - Design a recommendation system: http://ijcai13.org/files/tutorial_slides/td3.pdf + - Design a URL-shortener system: copied from above: http://www.hiredintech.com/system-design/the-system-design-process/ + - Design a cache system: https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/ - [ ] **About Google**: - [ ] How Search Works: diff --git a/extras/cheat sheets/system-design.pdf b/extras/cheat sheets/system-design.pdf new file mode 100644 index 0000000000000000000000000000000000000000..810240f572c18729aa254168f552a66cf5d1e4ae GIT binary patch literal 26471 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

$V(yU3u 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 M>*`RyRgggaA1(A^*8l(j literal 0 HcmV?d00001