|
@@ -5,6 +5,8 @@
|
|
> as a Software Development Engineer at Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)!
|
|
> as a Software Development Engineer at Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)!
|
|
> You probably won't have to study as much as I did. Anyway, everything you need is here.
|
|
> You probably won't have to study as much as I did. Anyway, everything you need is here.
|
|
>
|
|
>
|
|
|
|
+> I studied about 8-12 hours a day, for several months. This is my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
|
|
|
|
+>
|
|
> The items listed here will prepare you well for an interview at just about any software company,
|
|
> The items listed here will prepare you well for an interview at just about any software company,
|
|
> including the giants: Amazon, Facebook, Google or Microsoft.
|
|
> including the giants: Amazon, Facebook, Google or Microsoft.
|
|
>
|
|
>
|
|
@@ -47,7 +49,7 @@
|
|
|
|
|
|
This is my multi-month study plan for going from web developer (self-taught, no CS degree) to software engineer for a large company.
|
|
This is my multi-month study plan for going from web developer (self-taught, no CS degree) to software engineer for a large company.
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
This is meant for **new software engineers** or those switching from
|
|
This is meant for **new software engineers** or those switching from
|
|
software/web development to software engineering (where computer science knowledge is required). If you have
|
|
software/web development to software engineering (where computer science knowledge is required). If you have
|
|
@@ -111,10 +113,8 @@ If you want to be a reliability engineer or operations engineer, study more from
|
|
- [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms)
|
|
- [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms)
|
|
- [Caches](#caches)
|
|
- [Caches](#caches)
|
|
- [Processes and Threads](#processes-and-threads)
|
|
- [Processes and Threads](#processes-and-threads)
|
|
- - [Papers](#papers)
|
|
|
|
- [Testing](#testing)
|
|
- [Testing](#testing)
|
|
- [Scheduling](#scheduling)
|
|
- [Scheduling](#scheduling)
|
|
- - [Implement system routines](#implement-system-routines)
|
|
|
|
- [String searching & manipulations](#string-searching--manipulations)
|
|
- [String searching & manipulations](#string-searching--manipulations)
|
|
- [Tries](#tries)
|
|
- [Tries](#tries)
|
|
- [Floating Point Numbers](#floating-point-numbers)
|
|
- [Floating Point Numbers](#floating-point-numbers)
|
|
@@ -178,6 +178,7 @@ If you want to be a reliability engineer or operations engineer, study more from
|
|
- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
|
|
- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
|
|
- [Video Series](#video-series)
|
|
- [Video Series](#video-series)
|
|
- [Computer Science Courses](#computer-science-courses)
|
|
- [Computer Science Courses](#computer-science-courses)
|
|
|
|
+- [Papers](#papers)
|
|
|
|
|
|
</details>
|
|
</details>
|
|
|
|
|
|
@@ -233,6 +234,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr
|
|
- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ)
|
|
- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ)
|
|
- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY)
|
|
- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY)
|
|
- [Believe you can change](http://www.aaronsw.com/weblog/dweck)
|
|
- [Believe you can change](http://www.aaronsw.com/weblog/dweck)
|
|
|
|
+- [Think you're not smart enough to work at Google? Well, think again](https://www.youtube.com/watch?v=uPOJ1PR50ag)
|
|
|
|
|
|
## About Video Resources
|
|
## About Video Resources
|
|
|
|
|
|
@@ -263,6 +265,10 @@ Sometimes the classes are not in session so you have to wait a couple of months,
|
|
- Learn how to make yourself ready for software engineer interviews from a former Google interviewer.
|
|
- Learn how to make yourself ready for software engineer interviews from a former Google interviewer.
|
|
- [ ] [Python for Data Structures, Algorithms, and Interviews! (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/):
|
|
- [ ] [Python for Data Structures, Algorithms, and Interviews! (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/):
|
|
- A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more.
|
|
- A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more.
|
|
|
|
+ - [ ] [Intro to Data Structures and Algorithms using Python! (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513):
|
|
|
|
+ - A free Python centric data structures and algorithms course.
|
|
|
|
+ - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256):
|
|
|
|
+ - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios.
|
|
|
|
|
|
</details>
|
|
</details>
|
|
|
|
|
|
@@ -295,7 +301,7 @@ This is a shorter list than what I used. This is abbreviated to save you time.
|
|
|
|
|
|
### Interview Prep
|
|
### Interview Prep
|
|
|
|
|
|
-- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
|
|
|
|
|
|
+- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4nd Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/)
|
|
- answers in C++ and Java
|
|
- answers in C++ and Java
|
|
- this is a good warm-up for Cracking the Coding Interview
|
|
- this is a good warm-up for Cracking the Coding Interview
|
|
- not too difficult, most problems may be easier than what you'll see in an interview (from what I've read)
|
|
- not too difficult, most problems may be easier than what you'll see in an interview (from what I've read)
|
|
@@ -305,6 +311,8 @@ This is a shorter list than what I used. This is abbreviated to save you time.
|
|
<details>
|
|
<details>
|
|
<summary>If you have tons of extra time:</summary>
|
|
<summary>If you have tons of extra time:</summary>
|
|
|
|
|
|
|
|
+Choose one:
|
|
|
|
+
|
|
- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
|
|
- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
|
|
- [ ] Elements of Programming Interviews (Java version)
|
|
- [ ] Elements of Programming Interviews (Java version)
|
|
- [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
|
|
- [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
|
|
@@ -333,17 +341,12 @@ This is a shorter list than what I used. This is abbreviated to save you time.
|
|
|
|
|
|
</details>
|
|
</details>
|
|
|
|
|
|
-<details>
|
|
|
|
-<summary>If you have more time (I want this book):</summary>
|
|
|
|
-
|
|
|
|
-- [ ] [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055)
|
|
|
|
- - For a richer, more up-to-date (2017), but longer treatment
|
|
|
|
-
|
|
|
|
-</details>
|
|
|
|
|
|
|
|
### Language Specific
|
|
### Language Specific
|
|
|
|
|
|
-**You need to choose a language for the interview (see above).** Here are my recommendations by language. I don't have resources for all languages. I welcome additions.
|
|
|
|
|
|
+**You need to choose a language for the interview (see above).**
|
|
|
|
+
|
|
|
|
+Here are my recommendations by language. I don't have resources for all languages. I welcome additions.
|
|
|
|
|
|
If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems.
|
|
If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems.
|
|
**You can skip all the video lectures in this project**, unless you'd like a review.
|
|
**You can skip all the video lectures in this project**, unless you'd like a review.
|
|
@@ -396,48 +399,6 @@ OR:
|
|
|
|
|
|
</details>
|
|
</details>
|
|
|
|
|
|
-### Optional Books
|
|
|
|
-
|
|
|
|
-**Some people recommend these, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:**
|
|
|
|
-
|
|
|
|
-<details>
|
|
|
|
-<summary>Optional Books</summary>
|
|
|
|
-
|
|
|
|
-- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
|
|
|
|
- - As a review and problem recognition
|
|
|
|
- - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview.
|
|
|
|
- - This book has 2 parts:
|
|
|
|
- - class textbook on data structures and algorithms
|
|
|
|
- - pros:
|
|
|
|
- - is a good review as any algorithms textbook would be
|
|
|
|
- - nice stories from his experiences solving problems in industry and academia
|
|
|
|
- - code examples in C
|
|
|
|
- - cons:
|
|
|
|
- - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects
|
|
|
|
- - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have
|
|
|
|
- - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material.
|
|
|
|
- - algorithm catalog:
|
|
|
|
- - this is the real reason you buy this book.
|
|
|
|
- - about to get to this part. Will update here once I've made my way through it.
|
|
|
|
- - Can rent it on kindle
|
|
|
|
- - Answers:
|
|
|
|
- - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
|
|
|
|
- - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
|
|
|
|
- - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
|
|
|
|
-
|
|
|
|
-- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
|
|
|
|
- - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently.
|
|
|
|
- - aka CLR, sometimes CLRS, because Stein was late to the game
|
|
|
|
-
|
|
|
|
-- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
|
|
|
|
- - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but
|
|
|
|
- that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter.
|
|
|
|
-
|
|
|
|
-- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~
|
|
|
|
- - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results.
|
|
|
|
- - Would rather spend time on coding problems from another book or online coding problems.
|
|
|
|
-
|
|
|
|
-</details>
|
|
|
|
|
|
|
|
## Before you Get Started
|
|
## Before you Get Started
|
|
|
|
|
|
@@ -512,7 +473,7 @@ You don't need all these. You need only [one language for the interview](#pick-o
|
|
|
|
|
|
Why code in all of these?
|
|
Why code in all of these?
|
|
- Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
|
|
- Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
|
|
-- Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
|
|
|
|
|
|
+- Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python or Java))
|
|
- Make use of built-in types so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)
|
|
- Make use of built-in types so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)
|
|
|
|
|
|
I may not have time to do all of these for every subject, but I'll try.
|
|
I may not have time to do all of these for every subject, but I'll try.
|
|
@@ -539,7 +500,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
- [answers to questions](https://github.com/lekkas/c-algorithms)
|
|
- [answers to questions](https://github.com/lekkas/c-algorithms)
|
|
|
|
|
|
- [ ] **How computers process a program:**
|
|
- [ ] **How computers process a program:**
|
|
- - [ ] [How CPU executes a program](https://www.youtube.com/watch?v=XM4lGflQFvA)
|
|
|
|
|
|
+ - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA)
|
|
- [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA)
|
|
- [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA)
|
|
- [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU)
|
|
- [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU)
|
|
- [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60)
|
|
- [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60)
|
|
@@ -552,7 +513,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
<details>
|
|
<details>
|
|
<summary>Algorithmic complexity / Big-O / Asymptotic analysis</summary>
|
|
<summary>Algorithmic complexity / Big-O / Asymptotic analysis</summary>
|
|
|
|
|
|
-- nothing to implement
|
|
|
|
|
|
+- Nothing to implement
|
|
|
|
+- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review.
|
|
|
|
+- If some of the lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge.
|
|
- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
|
|
- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
|
|
- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
|
|
- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
|
|
- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
|
|
- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
|
|
@@ -560,21 +523,18 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
- [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
|
|
- [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
|
|
- [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf)
|
|
- [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf)
|
|
- [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/)
|
|
- [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/)
|
|
-- [ ] [Orders of Growth (video)](https://class.coursera.org/algorithmicthink1-004/lecture/59)
|
|
|
|
-- [ ] [Asymptotics (video)](https://class.coursera.org/algorithmicthink1-004/lecture/61)
|
|
|
|
|
|
+- [ ] [Orders of Growth (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX)
|
|
|
|
+- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM)
|
|
- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98)
|
|
- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98)
|
|
- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc)
|
|
- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc)
|
|
- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
|
|
- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
|
|
-- [ ] [Illustrating "Big O" (video)](https://class.coursera.org/algorithmicthink1-004/lecture/63)
|
|
|
|
|
|
+- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv)
|
|
- [ ] TopCoder (includes recurrence relations and master theorem):
|
|
- [ ] TopCoder (includes recurrence relations and master theorem):
|
|
- [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/)
|
|
- [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/)
|
|
- [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/)
|
|
- [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/)
|
|
- [ ] [Cheat sheet](http://bigocheatsheet.com/)
|
|
- [ ] [Cheat sheet](http://bigocheatsheet.com/)
|
|
|
|
|
|
|
|
|
|
- If some of the lectures are too mathy, you can jump down to the bottom and
|
|
|
|
- watch the discrete mathematics videos to get the background knowledge.
|
|
|
|
-
|
|
|
|
</details>
|
|
</details>
|
|
|
|
|
|
## Data Structures
|
|
## Data Structures
|
|
@@ -762,7 +722,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
- basic tree construction
|
|
- basic tree construction
|
|
- traversal
|
|
- traversal
|
|
- manipulation algorithms
|
|
- manipulation algorithms
|
|
- - [ ] [BFS(breadth-first search) and DFS(depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM)
|
|
|
|
|
|
+ - [ ] [BFS(breadth-first search) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM)
|
|
- BFS notes:
|
|
- BFS notes:
|
|
- level order (BFS, using queue)
|
|
- level order (BFS, using queue)
|
|
- time complexity: O(n)
|
|
- time complexity: O(n)
|
|
@@ -933,11 +893,11 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- Familiarize yourself with each representation and its pros & cons
|
|
- Familiarize yourself with each representation and its pros & cons
|
|
- BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
|
|
- BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
|
|
- When asked a question, look for a graph-based solution first, then move on if none.
|
|
- When asked a question, look for a graph-based solution first, then move on if none.
|
|
-
|
|
|
|
|
|
+
|
|
- [ ] MIT(videos):
|
|
- [ ] MIT(videos):
|
|
- [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
|
|
- [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
|
|
- - [ ] [Depth-First Search]((https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
|
|
|
|
-
|
|
|
|
|
|
+ - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
|
|
|
|
+
|
|
- [ ] Skiena Lectures - great intro:
|
|
- [ ] Skiena Lectures - great intro:
|
|
- [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
|
|
- [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
|
|
- [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
|
|
- [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
|
|
@@ -980,8 +940,6 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- [ ] list strongly connected components
|
|
- [ ] list strongly connected components
|
|
- [ ] check for bipartite graph
|
|
- [ ] check for bipartite graph
|
|
|
|
|
|
-You'll get more graph practice in Skiena's book (see Books section below) and the interview books
|
|
|
|
-
|
|
|
|
</details>
|
|
</details>
|
|
|
|
|
|
## Even More Knowledge
|
|
## Even More Knowledge
|
|
@@ -1001,6 +959,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc)
|
|
- [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc)
|
|
|
|
|
|
- ### Dynamic Programming
|
|
- ### Dynamic Programming
|
|
|
|
+ - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for dynamic programming.
|
|
- This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky.
|
|
- This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky.
|
|
- I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved.
|
|
- I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved.
|
|
- [ ] Videos:
|
|
- [ ] Videos:
|
|
@@ -1029,7 +988,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
|
|
- [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
|
|
- [ ] Object-Oriented Software Engineering: Software Dev Using UML and Java (21 videos):
|
|
- [ ] Object-Oriented Software Engineering: Software Dev Using UML and Java (21 videos):
|
|
- Can skip this if you have a great grasp of OO and OO design practices.
|
|
- Can skip this if you have a great grasp of OO and OO design practices.
|
|
- - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
|
|
|
+ - [OOSE: Software Dev Using UML and Java (video)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
- [ ] SOLID OOP Principles:
|
|
- [ ] SOLID OOP Principles:
|
|
- [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
|
|
- [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
|
|
- [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
|
|
- [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
|
|
@@ -1153,38 +1112,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU)
|
|
- [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU)
|
|
- [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
|
|
- [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
|
|
|
|
|
|
-- ### Papers
|
|
|
|
- - Reading all from end to end with full comprehension will likely take more time than you have. I recommend being selective on papers and their sections.
|
|
|
|
- - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
|
|
|
|
- - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
|
|
|
|
- - [implemented in Go](https://godoc.org/github.com/thomas11/csp)
|
|
|
|
- - [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
|
|
|
|
- - replaced by Colossus in 2012
|
|
|
|
- - [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
|
|
|
|
- - mostly replaced by Cloud Dataflow?
|
|
|
|
- - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
|
|
|
|
- - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
|
|
|
|
- - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf)
|
|
|
|
- - [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)
|
|
|
|
- - The Dynamo paper kicked off the NoSQL revolution
|
|
|
|
- - [ ] [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf)
|
|
|
|
- - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf)
|
|
|
|
- - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
|
|
|
|
- - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/)
|
|
|
|
- - paper not available
|
|
|
|
- - [ ] 2012: AddressSanitizer: A Fast Address Sanity Checker:
|
|
|
|
- - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
|
|
|
|
- - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
|
|
|
|
- - [ ] 2013: Spanner: Google’s Globally-Distributed Database:
|
|
|
|
- - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
|
|
|
|
- - [video](https://www.usenix.org/node/170855)
|
|
|
|
- - [ ] [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
|
|
|
|
- - [ ] [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
|
|
|
|
- - [ ] [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
|
|
|
|
- - [ ] [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf )
|
|
|
|
- - [ ] [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
|
|
|
|
- - [ ] [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
|
|
|
|
-
|
|
|
|
- ### Testing
|
|
- ### Testing
|
|
- To cover:
|
|
- To cover:
|
|
- how unit testing works
|
|
- how unit testing works
|
|
@@ -1208,10 +1135,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- in an OS, how it works
|
|
- in an OS, how it works
|
|
- can be gleaned from Operating System videos
|
|
- can be gleaned from Operating System videos
|
|
|
|
|
|
-- ### Implement system routines
|
|
|
|
- - understand what lies beneath the programming APIs you use
|
|
|
|
- - can you implement them?
|
|
|
|
-
|
|
|
|
- ### String searching & manipulations
|
|
- ### String searching & manipulations
|
|
- [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
|
|
- [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
|
|
- [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
|
|
- [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
|
|
@@ -1240,7 +1163,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
|
|
- [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
|
|
- [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/competitive-programming/tutorials/using-tries/)
|
|
- [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/competitive-programming/tutorials/using-tries/)
|
|
- [ ] [Stanford Lecture (real world use case) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
|
|
- [ ] [Stanford Lecture (real world use case) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
|
|
- - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
|
|
|
|
|
|
+ - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
|
|
|
|
|
|
- ### Floating Point Numbers
|
|
- ### Floating Point Numbers
|
|
- [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (video - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU)
|
|
- [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (video - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU)
|
|
@@ -1251,7 +1174,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/)
|
|
- [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/)
|
|
|
|
|
|
- ### Endianness
|
|
- ### Endianness
|
|
- - [ ] [Big And Little Endian](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html)
|
|
|
|
|
|
+ - [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html)
|
|
- [ ] [Big Endian Vs Little Endian (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
|
|
- [ ] [Big Endian Vs Little Endian (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
|
|
- [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
|
|
- [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
|
|
- Very technical talk for kernel devs. Don't worry if most is over your head.
|
|
- Very technical talk for kernel devs. Don't worry if most is over your head.
|
|
@@ -1261,15 +1184,15 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions**
|
|
- **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions**
|
|
- otherwise, this is just good to know
|
|
- otherwise, this is just good to know
|
|
- [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro)
|
|
- [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro)
|
|
- - [ ] [UDP and TCP: Comparison of Transport Protocols](https://www.youtube.com/watch?v=Vdc8TCESIg8)
|
|
|
|
- - [ ] [TCP/IP and the OSI Model Explained!](https://www.youtube.com/watch?v=e5DEVa9eSN0)
|
|
|
|
- - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial.](https://www.youtube.com/watch?v=nomyRJehhnM)
|
|
|
|
- - [ ] [HTTP](https://www.youtube.com/watch?v=WGJrLqtX7As)
|
|
|
|
- - [ ] [SSL and HTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
|
|
|
|
- - [ ] [SSL/TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
|
|
|
|
- - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
|
|
|
|
- - [ ] [Video Series (21 videos)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j)
|
|
|
|
- - [ ] [Subnetting Demystified - Part 5 CIDR Notation](https://www.youtube.com/watch?v=t5xYI0jzOf4)
|
|
|
|
|
|
+ - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8)
|
|
|
|
+ - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0)
|
|
|
|
+ - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM)
|
|
|
|
+ - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As)
|
|
|
|
+ - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
|
|
|
|
+ - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
|
|
|
|
+ - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
|
|
|
|
+ - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j)
|
|
|
|
+ - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4)
|
|
- [ ] Sockets:
|
|
- [ ] Sockets:
|
|
- [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
|
|
- [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
|
|
- [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
|
|
- [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
|
|
@@ -1281,7 +1204,8 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
<details>
|
|
<details>
|
|
<summary>System Design, Scalability, Data Handling</summary>
|
|
<summary>System Design, Scalability, Data Handling</summary>
|
|
|
|
|
|
-- **You can expect system design questions if you have 4+ years of experience.**
|
|
|
|
|
|
+**You can expect system design questions if you have 4+ years of experience.**
|
|
|
|
+
|
|
- Scalability and System Design are very large topics with many topics and resources, since
|
|
- 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.
|
|
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.
|
|
Expect to spend quite a bit of time on this.
|
|
@@ -1310,13 +1234,15 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
|
|
- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
|
|
- [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk)
|
|
- [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk)
|
|
- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
|
|
- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
|
|
-- [ ] Paxos Consensus algorithm:
|
|
|
|
- - [short video](https://www.youtube.com/watch?v=s8JqcZtvnsM)
|
|
|
|
- - [extended video with use case and multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o)
|
|
|
|
- - [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)
|
|
|
|
|
|
+- [ ] Consensus Algorithms:
|
|
|
|
+ - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM)
|
|
|
|
+ - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE)
|
|
|
|
+ - [ ] [Easy-to-read paper](https://raft.github.io/)
|
|
|
|
+ - [ ] [Infographic](http://thesecretlivesofdata.com/raft/)
|
|
- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
|
|
- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
|
|
- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
|
|
- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
|
|
- [ ] Scalability:
|
|
- [ ] Scalability:
|
|
|
|
+ - You don't need all of these. Just pick a few that interest you.
|
|
- [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4)
|
|
- [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4)
|
|
- [ ] Short series:
|
|
- [ ] Short series:
|
|
- [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
|
|
- [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
|
|
@@ -1333,7 +1259,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0)
|
|
- [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0)
|
|
- [ ] [The Importance of Algorithms](https://www.topcoder.com/community/competitive-programming/tutorials/the-importance-of-algorithms/)
|
|
- [ ] [The Importance of Algorithms](https://www.topcoder.com/community/competitive-programming/tutorials/the-importance-of-algorithms/)
|
|
- [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html)
|
|
- [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html)
|
|
- - [ ] [Scale at Facebook (2009)](https://www.infoq.com/presentations/Scale-at-Facebook)
|
|
|
|
- [ ] [Scale at Facebook (2012), "Building for a Billion Users" (video)](https://www.youtube.com/watch?v=oodS71YtkGU)
|
|
- [ ] [Scale at Facebook (2012), "Building for a Billion Users" (video)](https://www.youtube.com/watch?v=oodS71YtkGU)
|
|
- [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
|
|
- [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
|
|
- [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)
|
|
- [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)
|
|
@@ -1347,7 +1272,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
|
|
- [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
|
|
- [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
|
|
- [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
|
|
- [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
|
|
- [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
|
|
- - [ ] [Egnyte Architecture: Lessons Learned In Building And Scaling A Multi Petabyte Distributed System](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html)
|
|
|
|
- [ ] [Machine Learning Driven Programming: A New Programming For A New World](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
|
|
- [ ] [Machine Learning Driven Programming: A New Programming For A New World](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
|
|
- [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
|
|
- [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
|
|
- [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
|
|
- [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
|
|
@@ -1356,7 +1280,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
|
|
- [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
|
|
- [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)
|
|
- [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)
|
|
- [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html)
|
|
- [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html)
|
|
- - [ ] [Does AMP Counter An Existential Threat To Google?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html)
|
|
|
|
- [ ] [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)
|
|
- [ ] [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)
|
|
- [ ] [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)
|
|
- [ ] [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)
|
|
- [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html)
|
|
- [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html)
|
|
@@ -1454,7 +1377,7 @@ No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard.
|
|
large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard".
|
|
large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard".
|
|
I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick.
|
|
I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick.
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
Supplemental:
|
|
Supplemental:
|
|
|
|
|
|
@@ -1583,17 +1506,51 @@ You're never really done.
|
|
<details>
|
|
<details>
|
|
<summary>Additional Books</summary>
|
|
<summary>Additional Books</summary>
|
|
|
|
|
|
-- [ ] [The Unix Programming Environment](https://www.amazon.com/dp/013937681X)
|
|
|
|
|
|
+- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X)
|
|
- an oldie but a goodie
|
|
- an oldie but a goodie
|
|
-- [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/)
|
|
|
|
|
|
+- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/)
|
|
- a modern option
|
|
- a modern option
|
|
-- [ ] [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
|
|
|
|
-- [ ] [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/)
|
|
|
|
|
|
+- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
|
|
|
|
+- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/)
|
|
- a gentle introduction to design patterns
|
|
- a gentle introduction to design patterns
|
|
-- [ ] [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
|
|
|
|
|
|
+- [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
|
|
- aka the "Gang Of Four" book, or GOF
|
|
- aka the "Gang Of Four" book, or GOF
|
|
- the canonical design patterns book
|
|
- the canonical design patterns book
|
|
-- [ ] [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/)
|
|
|
|
|
|
+- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/)
|
|
|
|
+- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
|
|
|
|
+ - As a review and problem recognition
|
|
|
|
+ - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview.
|
|
|
|
+ - This book has 2 parts:
|
|
|
|
+ - class textbook on data structures and algorithms
|
|
|
|
+ - pros:
|
|
|
|
+ - is a good review as any algorithms textbook would be
|
|
|
|
+ - nice stories from his experiences solving problems in industry and academia
|
|
|
|
+ - code examples in C
|
|
|
|
+ - cons:
|
|
|
|
+ - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects
|
|
|
|
+ - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have
|
|
|
|
+ - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material.
|
|
|
|
+ - algorithm catalog:
|
|
|
|
+ - this is the real reason you buy this book.
|
|
|
|
+ - about to get to this part. Will update here once I've made my way through it.
|
|
|
|
+ - Can rent it on kindle
|
|
|
|
+ - Answers:
|
|
|
|
+ - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
|
|
|
|
+ - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
|
|
|
|
+ - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
|
|
|
|
+
|
|
|
|
+- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
|
|
|
|
+ - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently.
|
|
|
|
+ - aka CLR, sometimes CLRS, because Stein was late to the game
|
|
|
|
+
|
|
|
|
+- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055)
|
|
|
|
+ - For a richer, more up-to-date (2017), but longer treatment
|
|
|
|
+
|
|
|
|
+- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
|
|
|
|
+ - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but
|
|
|
|
+ that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter.
|
|
|
|
+
|
|
|
|
+</details>
|
|
|
|
|
|
</details>
|
|
</details>
|
|
|
|
|
|
@@ -1702,7 +1659,6 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
|
|
- [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
|
|
- [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
|
|
|
|
|
|
- ### Garbage collection
|
|
- ### Garbage collection
|
|
- - [ ] [Compilers (video)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff)
|
|
|
|
- [ ] [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
|
|
- [ ] [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
|
|
- [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits)
|
|
- [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits)
|
|
- [ ] [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
|
|
- [ ] [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
|
|
@@ -1747,8 +1703,8 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
|
|
|
|
|
|
- ### Bloom Filter
|
|
- ### Bloom Filter
|
|
- Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k)
|
|
- Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k)
|
|
- - [Bloom Filters](https://www.youtube.com/watch?v=-SuTGoFYjZs)
|
|
|
|
- - [Bloom Filters | Mining of Massive Datasets | Stanford University](https://www.youtube.com/watch?v=qBTdukbzc78)
|
|
|
|
|
|
+ - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs)
|
|
|
|
+ - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](https://www.youtube.com/watch?v=qBTdukbzc78)
|
|
- [Tutorial](http://billmill.org/bloomfilter-tutorial/)
|
|
- [Tutorial](http://billmill.org/bloomfilter-tutorial/)
|
|
- [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
|
|
- [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
|
|
|
|
|
|
@@ -2079,12 +2035,44 @@ Sit back and enjoy. "Netflix and skill" :P
|
|
|
|
|
|
## Computer Science Courses
|
|
## Computer Science Courses
|
|
|
|
|
|
-<details>
|
|
|
|
-<summary>Computer Science Courses</summary>
|
|
|
|
-
|
|
|
|
- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science)
|
|
- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science)
|
|
- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses)
|
|
- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses)
|
|
|
|
|
|
|
|
+## Papers
|
|
|
|
+
|
|
|
|
+<details>
|
|
|
|
+<summary>Papers</summary>
|
|
|
|
+
|
|
|
|
+- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
|
|
|
|
+- [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
|
|
|
|
+ - [implemented in Go](https://godoc.org/github.com/thomas11/csp)
|
|
|
|
+- [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
|
|
|
|
+ - replaced by Colossus in 2012
|
|
|
|
+- [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
|
|
|
|
+ - mostly replaced by Cloud Dataflow?
|
|
|
|
+- [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
|
|
|
|
+ - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
|
|
|
|
+- [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf)
|
|
|
|
+- [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)
|
|
|
|
+ - The Dynamo paper kicked off the NoSQL revolution
|
|
|
|
+- [ ] [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf)
|
|
|
|
+- [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf)
|
|
|
|
+- [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
|
|
|
|
+- [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/)
|
|
|
|
+ - paper not available
|
|
|
|
+- [ ] 2012: AddressSanitizer: A Fast Address Sanity Checker:
|
|
|
|
+ - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
|
|
|
|
+ - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
|
|
|
|
+- [ ] 2013: Spanner: Google’s Globally-Distributed Database:
|
|
|
|
+ - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
|
|
|
|
+ - [video](https://www.usenix.org/node/170855)
|
|
|
|
+- [ ] [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
|
|
|
|
+- [ ] [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
|
|
|
|
+- [ ] [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
|
|
|
|
+- [ ] [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf )
|
|
|
|
+- [ ] [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
|
|
|
|
+- [ ] [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
|
|
|
|
+
|
|
</details>
|
|
</details>
|
|
|
|
|
|
## LICENSE
|
|
## LICENSE
|