Pārlūkot izejas kodu

Merged scalability and systems design.

John Washam 8 gadi atpakaļ
vecāks
revīzija
7805195b6c
1 mainītis faili ar 79 papildinājumiem un 64 dzēšanām
  1. 79 64
      README.md

+ 79 - 64
README.md

@@ -202,9 +202,6 @@ Then test it out on a computer to make sure it's not buggy from syntax.
     - nothing to implement
     - [x] Harvard CS50 - Asymptotic Notation: https://www.youtube.com/watch?v=iOq5kSKqeR4
     - [x] Big O Notations (general quick tutorial) - https://www.youtube.com/watch?v=V6mKVRU1evU
-    - [x] TopCoder:
-        - Computational Complexity: Section 1: https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/
-        - Computational Complexity: Section 1: https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/
     - [x] Big O Notation (and Omega and Theta) - best mathematical explanation:
         - https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN
     - [x] Skiena:
@@ -217,6 +214,9 @@ Then test it out on a computer to make sure it's not buggy from syntax.
     - [x] UC Berkeley Big Omega: https://youtu.be/ca3e7UVmeUc
     - [x] Amortized Analysis: https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN
     - [x] Illustrating "Big O": https://class.coursera.org/algorithmicthink1-004/lecture/63
+    - [x] TopCoder (includes recurrence relations and master theorem):
+        - Computational Complexity: Section 1: https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/
+        - Computational Complexity: Section 2: https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/
     - [x] Cheat sheet: http://bigocheatsheet.com/
 
 
@@ -828,13 +828,71 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
         - [x] Keynote David Beazley - Topics of Interest (Python Asyncio): https://www.youtube.com/watch?v=ZzfHjytDceU
         - [x] Mutex in Python: https://www.youtube.com/watch?v=0zaPs8OtyKY
 
-- [x] **Scalability & Data Handling:**
-    - Distill large data sets to single values
-    - Transform one data set to another
-    - Handling obscenely large amounts of data
-    - [x] Articles & Videos:
+
+    Scalability and System Design are very large topics with many topics and resources, since there is a lot to consider 
+    when designing a software/hardware system that can scale. Expect to spend quite a bit of time on this.
+
+- [x] **System Design, Scalability, Data Handling:**
+    - Considerations from Yegge:
+        - scalability
+            - Distill large data sets to single values
+            - Transform one data set to another
+            - Handling obscenely large amounts of data
+        - system design
+            - features sets
+            - interfaces
+            - class hierarchies
+            - designing a system under certain constraints
+            - simplicity and robustness
+            - tradeoffs
+            - performance analysis and optimization
+
+    - [x] START HERE: 
+        System Design from HiredInTech: http://www.hiredintech.com/system-design/
+    - [x] https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023
+    - [x] Algorithm design: http://www.hiredintech.com/algorithm-design/
+    - [x] Database Normalization - 1NF, 2NF, 3NF and 4NF: https://www.youtube.com/watch?v=UrYLYV7WSHM
+    - [x] https://github.com/checkcheckzz/system-design-interview
+        - There are a lot of resources in this one. Look through the articles and examples.
+    - [ ] http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/
+    - [ ] Software Design Lecture Videos - can skip through some if you already have a good OO background
+        - [ ] Chapter 1 - Software and Software Engineering: https://www.youtube.com/watch?v=maE3PxV4mk0
+        - [ ] Chapter 2 (Part 1) - Basics of Object-Orientation: https://www.youtube.com/watch?v=noe17Sg5Uas
+        - [ ] Chapter 2 (Part 2) - Inheritance, polymorphism and review of key Java concepts: https://www.youtube.com/watch?v=NSJ0zNQ2Ilk
+        - [ ] Chapter 3 (Part 1) - Reuse, Frameworks, and Basic Client-Server Concepts: https://www.youtube.com/watch?v=H7kLteC0vJY
+        - [ ] Chapter 3 (Part 2) - Client-Server Architecture, Network Concepts, and Networking in Java: https://www.youtube.com/watch?v=0W4iYsHjhlY
+        - [ ] Chapter 4 (Part 1) - Simplechat and Requirements: https://www.youtube.com/watch?v=_c-lYobWpjc 
+        - [ ] Chapter 4 (Part 2) - Developing Requirements: https://www.youtube.com/watch?v=JDbZa5q4NzM
+        - [ ] Chapter 5 (Part 1) - Class Diagrams: https://www.youtube.com/watch?v=_c-lYobWpjc
+        - [ ] Chapter 5 (Part 2) - Aggregation, OCL, Genealogy Example, Process for Developing Diagrams: https://www.youtube.com/watch?v=ozHk4LEaBJs
+        - [ ] Chapter 5 (Part 3) - Developing a Class Diagram for the Bank Account Management System: https://www.youtube.com/watch?v=Kg1hL-etRwE
+        - [ ] Chapter 6 (Part 1) - Patterns: https://www.youtube.com/watch?v=LAP2A80Ajrg
+        - [ ] Chapter 6 (Part 2) - General Hierarchy, Player-Role, Singleton, Observer, Delegation: https://www.youtube.com/watch?v=U8-PGsjvZc4
+        - [ ] Chapter 6 (Part 3) - Adapter, Facade, Read-Only Interface, Proxy: https://www.youtube.com/watch?v=7sduBHuex4c
+        - [ ] Chapter 7 (Part 1) - Users, Use Cases, User Interface Design: https://www.youtube.com/watch?v=zoANpUOLCn0
+        - [ ] Chapter 7 (Part 2) - Evaluating a UI, Implementing a UI in Java: https://www.youtube.com/watch?v=Ip18LJdy6UY
+        - [ ] Chapter 8 - State and Activity Diagrams: https://www.youtube.com/watch?v=5IQgKtRuyiY
+        - [ ] Chapter 9 (Part 1) - Software Architecture and Design: https://www.youtube.com/watch?v=FMKv8Vozf5c
+        - [ ] Chapter 9 (Part 2) - Design Principles, Software Architecture: https://www.youtube.com/watch?v=XQnytAeZrWE
+        - [ ] Chapter 9 (Part 3) - Pipe-and-Filter Architecture and Design Documents: https://www.youtube.com/watch?v=ZmsUizg6gPY
+        - [ ] Chapter 10 and 11 - Testing process, Inspection, Process Models, Cost Estimation, Team Building: https://www.youtube.com/watch?v=L8x3OuZcEsc
+    - [ ] SOLID OOP Principles:
+        - [ ] S– Single Responsibility Principle | Single responsibility to each Object
+            - http://www.oodesign.com/single-responsibility-principle.html
+            - http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html
+        - [ ] O– Open/Closed Principal  | On production level Objects are ready for extension for not for modification
+            - https://en.wikipedia.org/wiki/Open/closed_principle
+            - http://www.oodesign.com/open-close-principle.html
+        - [ ] L– Liskov Substitution Principal | Base Class and Derived class follow ‘IS A’ principal
+            - http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle
+            - http://www.oodesign.com/liskov-s-substitution-principle.html
+        - [ ] I – Interface segregation principle | If an implementation don’t require then don’t implement it.
+            - http://efectivejava.blogspot.in/2013/09/interface-segregation-principleisp-java.html
+        - [ ] D-Dependency Inversion principle | Reduce the dependency In composition of objects.
+            - http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important
+    - [x] Scalability:
         - [x] Great overview: https://www.youtube.com/watch?v=-W9F__D3oY4
-        - [ ] Short series: 
+        - [x] Short series: 
             - http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones
             - http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database
             - http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache
@@ -842,7 +900,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
         - [x] Scaling mobile games to a global audience using App Engine and Cloud Datastore: https://www.youtube.com/watch?v=9nWyWwY2Onc
         - [x] How Google Does Planet-Scale Engineering for Planet-Scale Infra: https://www.youtube.com/watch?v=H4vMcD7zKM0
         - [x] The Importance of Algorithms: https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/
-        - [ ] Sharding: http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html
+        - [x] Sharding: http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html
         - [x] Scale at Facebook (2009): https://www.infoq.com/presentations/Scale-at-Facebook
         - [x] Scale at Facebook (2012), "Building for a Billion Users": https://www.youtube.com/watch?v=oodS71YtkGU
         - [x] Engineering for the Long Game - Astrid Atkinson Keynote: https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4
@@ -870,6 +928,17 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
         - [x] A 360 Degree View Of The Entire Netflix Stack: http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html
         - [x] Latency Is Everywhere And It Costs You Sales - How To Crush It: http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it
         - [x] Serverless (very long, just need the gist): http://martinfowler.com/articles/serverless.html
+        - [x] What Powers Instagram: Hundreds of Instances, Dozens of Technologies: http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances
+        - [x] Cinchcast Architecture - Producing 1,500 Hours Of Audio Every Day: http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html
+        - [x] Justin.Tv's Live Video Broadcasting Architecture: http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html
+        - [x] Playfish's Social Gaming Architecture - 50 Million Monthly Users And Growing: http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html
+        - [x] TripAdvisor Architecture - 40M Visitors, 200M Dynamic Page Views, 30TB Data: http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html
+        - [x] PlentyOfFish Architecture: http://highscalability.com/plentyoffish-architecture
+        - [x] Salesforce Architecture - How They Handle 1.3 Billion Transactions A Day: http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html
+        - [x] ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second: http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html
+        - [x] Twitter 
+            - O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter": https://www.youtube.com/watch?v=5cKTP36HVgI
+            - Timelines at Scale: https://www.infoq.com/presentations/Twitter-Timeline-Scalability
     
 - [ ] **About Google**:
     - [ ] How Search Works:
@@ -903,59 +972,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
     - [x] The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets: http://www.joelonsoftware.com/articles/Unicode.html
     - [x] What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text: http://kunststube.net/encoding/
 
-- [ ] **System design**
-    There are subjects here that overlap with scalability. So some of this is software design and some is systems design.
-    I moved the scalability stuff to the Scalability section.
-        - features sets
-        - interfaces
-        - class hierarchies
-        - designing a system under certain constraints
-        - simplicity and robustness
-        - tradeoffs
-        - performance analysis and optimization
-    - [x] https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023
-    - [x] System Design: http://www.hiredintech.com/system-design/
-    - [x] Algorithm design: http://www.hiredintech.com/algorithm-design/
-    - [ ] Database normalization: http://www.studytonight.com/dbms/database-normalization
-    - [ ] https://github.com/checkcheckzz/system-design-interview
-    - [ ] http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/
-    - [ ] Lecture Videos - can skip through some if you already have a good OO background
-        - [ ] Chapter 1 - Software and Software Engineering: https://www.youtube.com/watch?v=maE3PxV4mk0
-        - [ ] Chapter 2 (Part 1) - Basics of Object-Orientation: https://www.youtube.com/watch?v=noe17Sg5Uas
-        - [ ] Chapter 2 (Part 2) - Inheritance, polymorphism and review of key Java concepts: https://www.youtube.com/watch?v=NSJ0zNQ2Ilk
-        - [ ] Chapter 3 (Part 1) - Reuse, Frameworks, and Basic Client-Server Concepts: https://www.youtube.com/watch?v=H7kLteC0vJY
-        - [ ] Chapter 3 (Part 2) - Client-Server Architecture, Network Concepts, and Networking in Java: https://www.youtube.com/watch?v=0W4iYsHjhlY
-        - [ ] Chapter 4 (Part 1) - Simplechat and Requirements: https://www.youtube.com/watch?v=_c-lYobWpjc 
-        - [ ] Chapter 4 (Part 2) - Developing Requirements: https://www.youtube.com/watch?v=JDbZa5q4NzM
-        - [ ] Chapter 5 (Part 1) - Class Diagrams: https://www.youtube.com/watch?v=_c-lYobWpjc
-        - [ ] Chapter 5 (Part 2) - Aggregation, OCL, Genealogy Example, Process for Developing Diagrams: https://www.youtube.com/watch?v=ozHk4LEaBJs
-        - [ ] Chapter 5 (Part 3) - Developing a Class Diagram for the Bank Account Management System: https://www.youtube.com/watch?v=Kg1hL-etRwE
-        - [ ] Chapter 6 (Part 1) - Patterns: https://www.youtube.com/watch?v=LAP2A80Ajrg
-        - [ ] Chapter 6 (Part 2) - General Hierarchy, Player-Role, Singleton, Observer, Delegation: https://www.youtube.com/watch?v=U8-PGsjvZc4
-        - [ ] Chapter 6 (Part 3) - Adapter, Facade, Read-Only Interface, Proxy: https://www.youtube.com/watch?v=7sduBHuex4c
-        - [ ] Chapter 7 (Part 1) - Users, Use Cases, User Interface Design: https://www.youtube.com/watch?v=zoANpUOLCn0
-        - [ ] Chapter 7 (Part 2) - Evaluating a UI, Implementing a UI in Java: https://www.youtube.com/watch?v=Ip18LJdy6UY
-        - [ ] Chapter 8 - State and Activity Diagrams: https://www.youtube.com/watch?v=5IQgKtRuyiY
-        - [ ] Chapter 9 (Part 1) - Software Architecture and Design: https://www.youtube.com/watch?v=FMKv8Vozf5c
-        - [ ] Chapter 9 (Part 2) - Design Principles, Software Architecture: https://www.youtube.com/watch?v=XQnytAeZrWE
-        - [ ] Chapter 9 (Part 3) - Pipe-and-Filter Architecture and Design Documents: https://www.youtube.com/watch?v=ZmsUizg6gPY
-        - [ ] Chapter 10 and 11 - Testing process, Inspection, Process Models, Cost Estimation, Team Building: https://www.youtube.com/watch?v=L8x3OuZcEsc
-    - [ ] SOLID OOP Principles:
-        - [ ] S– Single Responsibility Principle | Single responsibility to each Object
-            - http://www.oodesign.com/single-responsibility-principle.html
-            - http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html
-        - [ ] O– Open/Closed Principal  | On production level Objects are ready for extension for not for modification
-            - https://en.wikipedia.org/wiki/Open/closed_principle
-            - http://www.oodesign.com/open-close-principle.html
-        - [ ] L– Liskov Substitution Principal | Base Class and Derived class follow ‘IS A’ principal
-            - http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle
-            - http://www.oodesign.com/liskov-s-substitution-principle.html
-        - [ ] I – Interface segregation principle | If an implementation don’t require then don’t implement it.
-            - http://efectivejava.blogspot.in/2013/09/interface-segregation-principleisp-java.html
-        - [ ] D-Dependency Inversion principle | Reduce the dependency In composition of objects.
-            - http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important
-        
- 
 - [ ] **Familiarize yourself with a unix-based code editor: emacs & vi(m)**
     - suggested by Yegge, from an old Amazon recruiting post
     - vi(m):
@@ -1322,7 +1338,6 @@ Some of mine (I already may know answer to but want their opinion or team perspe
     - [x] Coursera (Scala): https://www.coursera.org/learn/parprog1/home/week/1
     - [x] Efficient Python for High Performance Parallel Computing: https://www.youtube.com/watch?v=uY85GkaYzBk
     
-
 - [ ] Discrete math (see videos below)
 
 - [ ] Go: