|
@@ -255,7 +255,7 @@ Sometimes the classes are not in session so you have to wait a couple of months,
|
|
- [ ] Cracking The Coding Interview Set 1:
|
|
- [ ] Cracking The Coding Interview Set 1:
|
|
- [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
|
|
- [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
|
|
- [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
|
|
- [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
|
|
-- [ ] Cracking the Facebook Coding Interview
|
|
|
|
|
|
+- [ ] Cracking the Facebook Coding Interview:
|
|
- [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI)
|
|
- [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI)
|
|
- [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg)
|
|
- [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg)
|
|
- [ ] Prep Course:
|
|
- [ ] Prep Course:
|
|
@@ -281,7 +281,7 @@ You could also use these, but read around first. There may be caveats:
|
|
- JavaScript
|
|
- JavaScript
|
|
- Ruby
|
|
- Ruby
|
|
|
|
|
|
-Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)
|
|
|
|
|
|
+Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/).
|
|
|
|
|
|
You need to be very comfortable in the language and be knowledgeable.
|
|
You need to be very comfortable in the language and be knowledgeable.
|
|
|
|
|
|
@@ -334,8 +334,8 @@ I haven't read these two, but they are highly rated and written by Sedgewick. He
|
|
- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
|
|
- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
|
|
- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
|
|
- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
|
|
- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf)
|
|
- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf)
|
|
- - Rich and detailed collection of Data Structures and Algorithms.
|
|
|
|
- - Great for first-timers.
|
|
|
|
|
|
+ - Rich and detailed collection of Data Structures and Algorithms
|
|
|
|
+ - Great for first-timers
|
|
|
|
|
|
If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource.
|
|
If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource.
|
|
|
|
|
|
@@ -351,13 +351,13 @@ OR:
|
|
- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
|
|
- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
|
|
- by Goodrich, Tamassia, Goldwasser
|
|
- by Goodrich, Tamassia, Goldwasser
|
|
- used as optional text for CS intro course at UC Berkeley
|
|
- used as optional text for CS intro course at UC Berkeley
|
|
- - see my book report on the Python version below. This book covers the same topics.
|
|
|
|
|
|
+ - see my book report on the Python version below. This book covers the same topics
|
|
|
|
|
|
### Python
|
|
### Python
|
|
|
|
|
|
- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
|
|
- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
|
|
- by Goodrich, Tamassia, Goldwasser
|
|
- by Goodrich, Tamassia, Goldwasser
|
|
- - I loved this book. It covered everything and more.
|
|
|
|
|
|
+ - I loved this book. It covered everything and more
|
|
- Pythonic code
|
|
- Pythonic code
|
|
- my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
|
|
- my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
|
|
- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf)
|
|
- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf)
|
|
@@ -377,7 +377,7 @@ Please, read so you won't make my mistakes:
|
|
|
|
|
|
[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/).
|
|
[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/).
|
|
|
|
|
|
-A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn)
|
|
|
|
|
|
+A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn).
|
|
|
|
|
|
### 2. Use Flashcards
|
|
### 2. Use Flashcards
|
|
|
|
|
|
@@ -401,16 +401,16 @@ your brain.
|
|
An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember.
|
|
An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember.
|
|
It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms.
|
|
It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms.
|
|
|
|
|
|
-My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya))
|
|
|
|
|
|
+My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)).
|
|
|
|
|
|
-### 3. Start doing coding interview questions while you're learning data structures and algorithms,
|
|
|
|
|
|
+### 3. Start doing coding interview questions while you're learning data structures and algorithms
|
|
|
|
|
|
You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic,
|
|
You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic,
|
|
and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding
|
|
and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding
|
|
linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem,
|
|
linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem,
|
|
or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge,
|
|
or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge,
|
|
but how you apply the knowledge. There are several books and sites I recommend.
|
|
but how you apply the knowledge. There are several books and sites I recommend.
|
|
-See here for more: [Coding Question Practice](#coding-question-practice)
|
|
|
|
|
|
+See here for more: [Coding Question Practice](#coding-question-practice).
|
|
|
|
|
|
### 4. Review, review, review
|
|
### 4. Review, review, review
|
|
|
|
|
|
@@ -436,12 +436,12 @@ These are prevalent technologies but not part of this study plan:
|
|
Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement.
|
|
Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement.
|
|
|
|
|
|
Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
|
|
Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
|
|
-- C - using structs and functions that take a struct * and something else as args.
|
|
|
|
|
|
+- C - using structs and functions that take a struct * and something else as args
|
|
- C++ - without using built-in types
|
|
- C++ - without using built-in types
|
|
- C++ - using built-in types, like STL's std::list for a linked list
|
|
- C++ - using built-in types, like STL's std::list for a linked list
|
|
- Python - using built-in types (to keep practicing Python)
|
|
- Python - using built-in types (to keep practicing Python)
|
|
- and write tests to ensure I'm doing it right, sometimes just using simple assert() statements
|
|
- and write tests to ensure I'm doing it right, sometimes just using simple assert() statements
|
|
-- You may do Java or something else, this is just my thing.
|
|
|
|
|
|
+- You may do Java or something else, this is just my thing
|
|
|
|
|
|
You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview).
|
|
You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview).
|
|
|
|
|
|
@@ -464,10 +464,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
## Prerequisite Knowledge
|
|
## Prerequisite Knowledge
|
|
|
|
|
|
- [ ] **Learn C**
|
|
- [ ] **Learn C**
|
|
- - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying.
|
|
|
|
|
|
+ - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying
|
|
- [ ] [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
|
|
- [ ] [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
|
|
- This is a short book, but it will give you a great handle on the C language and if you practice it a little
|
|
- This is a short book, but it will give you a great handle on the C language and if you practice it a little
|
|
- you'll quickly get proficient. Understanding C helps you understand how programs and memory work.
|
|
|
|
|
|
+ you'll quickly get proficient. Understanding C helps you understand how programs and memory work
|
|
- [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:**
|
|
@@ -480,8 +480,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
## Algorithmic complexity / Big-O / Asymptotic analysis
|
|
## Algorithmic complexity / Big-O / Asymptotic analysis
|
|
|
|
|
|
- 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 lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge.
|
|
|
|
|
|
+- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review
|
|
|
|
+- If some 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)
|
|
@@ -545,7 +545,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
- [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0)
|
|
- [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0)
|
|
- [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w)
|
|
- [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w)
|
|
- [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
|
|
- [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
|
|
- - not the whole video, just portions about Node struct and memory allocation.
|
|
|
|
|
|
+ - not the whole video, just portions about Node struct and memory allocation
|
|
- [ ] Linked List vs Arrays:
|
|
- [ ] Linked List vs Arrays:
|
|
- [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9)
|
|
- [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9)
|
|
- [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd)
|
|
- [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd)
|
|
@@ -576,7 +576,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
- ### Stack
|
|
- ### Stack
|
|
- [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ)
|
|
- [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ)
|
|
- [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4)
|
|
- [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4)
|
|
- - [ ] Will not implement. Implementing with array is trivial.
|
|
|
|
|
|
+ - [ ] Will not implement. Implementing with array is trivial
|
|
|
|
|
|
- ### Queue
|
|
- ### Queue
|
|
- [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4)
|
|
- [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4)
|
|
@@ -757,7 +757,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
- I wouldn't recommend sorting a linked list, but merge sort is doable.
|
|
- I wouldn't recommend sorting a linked list, but merge sort is doable.
|
|
- [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
|
|
- [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
|
|
|
|
|
|
-- For heapsort, see Heap data structure above. Heap sort is great, but not stable.
|
|
|
|
|
|
+- For heapsort, see Heap data structure above. Heap sort is great, but not stable
|
|
|
|
|
|
- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
|
|
- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
|
|
- [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort)
|
|
- [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort)
|
|
@@ -799,7 +799,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
- [ ] Mergesort: O(n log n) average and worst case
|
|
- [ ] Mergesort: O(n log n) average and worst case
|
|
- [ ] Quicksort O(n log n) average case
|
|
- [ ] Quicksort O(n log n) average case
|
|
- Selection sort and insertion sort are both O(n^2) average and worst case
|
|
- Selection sort and insertion sort are both O(n^2) average and worst case
|
|
- - For heapsort, see Heap data structure above.
|
|
|
|
|
|
+ - For heapsort, see Heap data structure above
|
|
|
|
|
|
- [ ] Not required, but I recommended them:
|
|
- [ ] Not required, but I recommended them:
|
|
- [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3)
|
|
- [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3)
|
|
@@ -830,7 +830,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- adjacency map
|
|
- adjacency map
|
|
- 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 trade offs, and how to implement them in real code
|
|
- BFS and DFS - know their computational complexity, their trade offs, 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)
|
|
@@ -886,8 +886,8 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
|
|
- [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
|
|
- [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
|
|
- [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
|
|
- [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
|
|
- [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
|
|
- - when it is appropriate to use it
|
|
|
|
- - how is tail recursion better than not?
|
|
|
|
|
|
+ - When it is appropriate to use it?
|
|
|
|
+ - How is tail recursion better than not?
|
|
- [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
|
|
- [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
|
|
- [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc)
|
|
- [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc)
|
|
|
|
|
|
@@ -998,16 +998,16 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread)
|
|
- [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread)
|
|
- Covers:
|
|
- Covers:
|
|
- Processes, Threads, Concurrency issues
|
|
- Processes, Threads, Concurrency issues
|
|
- - difference between processes and threads
|
|
|
|
- - processes
|
|
|
|
- - threads
|
|
|
|
- - locks
|
|
|
|
- - mutexes
|
|
|
|
- - semaphores
|
|
|
|
- - monitors
|
|
|
|
- - how they work
|
|
|
|
- - deadlock
|
|
|
|
- - livelock
|
|
|
|
|
|
+ - Difference between processes and threads
|
|
|
|
+ - Processes
|
|
|
|
+ - Threads
|
|
|
|
+ - Locks
|
|
|
|
+ - Mutexes
|
|
|
|
+ - Semaphores
|
|
|
|
+ - Monitors
|
|
|
|
+ - How they work?
|
|
|
|
+ - Deadlock
|
|
|
|
+ - Livelock
|
|
- CPU activity, interrupts, context switching
|
|
- CPU activity, interrupts, context switching
|
|
- Modern concurrency constructs with multicore processors
|
|
- Modern concurrency constructs with multicore processors
|
|
- [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2)
|
|
- [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2)
|
|
@@ -1016,7 +1016,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack)
|
|
- Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack)
|
|
- Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy.
|
|
- Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy.
|
|
- Context switching
|
|
- Context switching
|
|
- - How context switching is initiated by the operating system and underlying hardware
|
|
|
|
|
|
+ - How context switching is initiated by the operating system and underlying hardware?
|
|
- [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
|
|
- [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
|
|
- [ ] concurrency in Python (videos):
|
|
- [ ] concurrency in Python (videos):
|
|
- [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
|
|
- [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
|
|
@@ -1043,8 +1043,8 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
|
|
- [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
|
|
|
|
|
|
- ### Scheduling
|
|
- ### Scheduling
|
|
- - in an OS, how it works
|
|
|
|
- - can be gleaned from Operating System videos
|
|
|
|
|
|
+ - In an OS, how it works?
|
|
|
|
+ - Can be gleaned from Operating System videos
|
|
|
|
|
|
- ### 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)
|
|
@@ -1056,12 +1056,12 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp)
|
|
- [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp)
|
|
- [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
|
|
- [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
|
|
|
|
|
|
- If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
|
|
|
|
|
|
+ If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects).
|
|
|
|
|
|
- ### Tries
|
|
- ### Tries
|
|
- Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits
|
|
- Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits
|
|
- to track the path.
|
|
|
|
- - I read through code, but will not implement.
|
|
|
|
|
|
+ to track the path
|
|
|
|
+ - I read through code, but will not implement
|
|
- [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
|
|
- [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
|
|
- [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries)
|
|
- [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries)
|
|
- [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries)
|
|
- [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries)
|
|
@@ -1093,7 +1093,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
|
|
|
|
- ### Networking
|
|
- ### Networking
|
|
- **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/computers-and-internet-code-org)
|
|
- [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org)
|
|
- [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8)
|
|
- [ ] [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)
|
|
- [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0)
|
|
@@ -1114,13 +1114,13 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
|
|
|
|
- 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
|
|
- Considerations:
|
|
- Considerations:
|
|
- - scalability
|
|
|
|
|
|
+ - Scalability
|
|
- Distill large data sets to single values
|
|
- Distill large data sets to single values
|
|
- Transform one data set to another
|
|
- Transform one data set to another
|
|
- Handling obscenely large amounts of data
|
|
- Handling obscenely large amounts of data
|
|
- - system design
|
|
|
|
|
|
+ - System design
|
|
- features sets
|
|
- features sets
|
|
- interfaces
|
|
- interfaces
|
|
- class hierarchies
|
|
- class hierarchies
|
|
@@ -1134,7 +1134,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
|
|
- [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
|
|
- [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/)
|
|
- [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/)
|
|
- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
|
|
- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
|
|
-- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below.
|
|
|
|
|
|
+- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below
|
|
- [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
|
|
- [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
|
|
- [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
|
|
- [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
|
|
- [ ] [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)
|
|
@@ -1201,30 +1201,30 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|
- [ ] Twitter:
|
|
- [ ] Twitter:
|
|
- [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI)
|
|
- [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI)
|
|
- [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
|
|
- [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
|
|
- - For even more, see "Mining Massive Datasets" video series in the [Video Series](#video-series) section.
|
|
|
|
|
|
+ - For even more, see "Mining Massive Datasets" video series in the [Video Series](#video-series) section
|
|
- [ ] 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:
|
|
- [ ] 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: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
|
|
- review: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
|
|
- [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
|
|
- [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
|
|
- [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
|
|
- [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
|
|
- flow:
|
|
- flow:
|
|
1. Understand the problem and scope:
|
|
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
|
|
|
|
|
|
+ - 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:
|
|
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
|
|
|
|
|
|
+ - 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:
|
|
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
|
|
|
|
|
|
+ - Layers (service, data, caching)
|
|
|
|
+ - Infrastructure: load balancing, messaging
|
|
|
|
+ - Rough overview of any key algorithm that drives the service
|
|
|
|
+ - Consider bottlenecks and determine solutions
|
|
- Exercises:
|
|
- Exercises:
|
|
- [Design a CDN network: old article](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972)
|
|
- [Design a CDN network: old article](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972)
|
|
- [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake)
|
|
- [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake)
|
|
@@ -1258,12 +1258,12 @@ Now that you know all the computer science topics above, it's time to practice a
|
|
**Coding question practice is not about memorizing answers to programming problems.**
|
|
**Coding question practice is not about memorizing answers to programming problems.**
|
|
|
|
|
|
Why you need to practice doing programming problems:
|
|
Why you need to practice doing programming problems:
|
|
-- problem recognition, and where the right data structures and algorithms fit in
|
|
|
|
-- gathering requirements for the problem
|
|
|
|
-- talking your way through the problem like you will in the interview
|
|
|
|
-- coding on a whiteboard or paper, not a computer
|
|
|
|
-- coming up with time and space complexity for your solutions
|
|
|
|
-- testing your solutions
|
|
|
|
|
|
+- Problem recognition, and where the right data structures and algorithms fit in
|
|
|
|
+- Gathering requirements for the problem
|
|
|
|
+- Talking your way through the problem like you will in the interview
|
|
|
|
+- Coding on a whiteboard or paper, not a computer
|
|
|
|
+- Coming up with time and space complexity for your solutions
|
|
|
|
+- Testing your solutions
|
|
|
|
|
|
There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming
|
|
There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming
|
|
interview books, too, but I found this outstanding:
|
|
interview books, too, but I found this outstanding:
|
|
@@ -1304,15 +1304,15 @@ Take coding challenges every day, as many as you can.
|
|
Coding Interview Question Videos:
|
|
Coding Interview Question Videos:
|
|
- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
|
|
- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
|
|
- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
|
|
- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
|
|
- - Super for walkthroughs of problem solutions.
|
|
|
|
|
|
+ - Super for walkthroughs of problem solutions
|
|
- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
|
|
- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
|
|
- - Good explanations of solution and the code.
|
|
|
|
- - You can watch several in a short time.
|
|
|
|
|
|
+ - Good explanations of solution and the code
|
|
|
|
+ - You can watch several in a short time
|
|
- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder)
|
|
- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder)
|
|
|
|
|
|
Challenge sites:
|
|
Challenge sites:
|
|
- [LeetCode](https://leetcode.com/)
|
|
- [LeetCode](https://leetcode.com/)
|
|
- - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing.
|
|
|
|
|
|
+ - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing
|
|
- [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode)
|
|
- [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode)
|
|
- See Nick White Videos above for short code-throughs
|
|
- See Nick White Videos above for short code-throughs
|
|
- [HackerRank](https://www.hackerrank.com/)
|
|
- [HackerRank](https://www.hackerrank.com/)
|
|
@@ -1334,9 +1334,9 @@ Challenge repos:
|
|
- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges)
|
|
- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges)
|
|
|
|
|
|
Mock Interviews:
|
|
Mock Interviews:
|
|
-- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview.
|
|
|
|
|
|
+- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview
|
|
- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews
|
|
- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews
|
|
-- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies.
|
|
|
|
|
|
+- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies
|
|
- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously.
|
|
- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously.
|
|
|
|
|
|
|
|
|
|
@@ -1360,7 +1360,7 @@ Have a story, not just data, about something you accomplished.
|
|
- What's a tough problem you've solved?
|
|
- What's a tough problem you've solved?
|
|
- Biggest challenges faced?
|
|
- Biggest challenges faced?
|
|
- Best/worst designs seen?
|
|
- Best/worst designs seen?
|
|
-- Ideas for improving an existing product.
|
|
|
|
|
|
+- Ideas for improving an existing product
|
|
- How do you work best, as an individual and as part of a team?
|
|
- How do you work best, as an individual and as part of a team?
|
|
- Which of your skills or experiences would be assets in the role and why?
|
|
- Which of your skills or experiences would be assets in the role and why?
|
|
- What did you most enjoy at [job x / project y]?
|
|
- What did you most enjoy at [job x / project y]?
|
|
@@ -1411,40 +1411,40 @@ You're never really done.
|
|
These are here so you can dive into a topic you find interesting.
|
|
These are here so you can dive into a topic you find interesting.
|
|
|
|
|
|
- [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)
|
|
- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
|
|
- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/)
|
|
- [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
|
|
|
|
- - the canonical design patterns book
|
|
|
|
|
|
+ - AKA the "Gang Of Four" book, or GOF
|
|
|
|
+ - 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)
|
|
- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
|
|
- As a review and problem recognition
|
|
- As a review and problem recognition
|
|
- - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview.
|
|
|
|
|
|
+ - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview
|
|
- This book has 2 parts:
|
|
- 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.
|
|
|
|
|
|
+ - 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
|
|
- Can rent it on kindle
|
|
- Answers:
|
|
- Answers:
|
|
- [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
|
|
- [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/)
|
|
- [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
|
|
- [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
|
|
- [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
|
|
- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
|
|
- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
|
|
- - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief.
|
|
|
|
- - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like.
|
|
|
|
|
|
+ - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief
|
|
|
|
+ - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like
|
|
- These chapters are worth the read to give you a nice foundation:
|
|
- These chapters are worth the read to give you a nice foundation:
|
|
- Chapter 2 - Numeric Representation
|
|
- Chapter 2 - Numeric Representation
|
|
- Chapter 3 - Binary Arithmetic and Bit Operations
|
|
- Chapter 3 - Binary Arithmetic and Bit Operations
|
|
@@ -1456,15 +1456,15 @@ You're never really done.
|
|
- Chapter 10 - Instruction Set Architecture
|
|
- Chapter 10 - Instruction Set Architecture
|
|
- Chapter 11 - Memory Architecture and Organization
|
|
- Chapter 11 - Memory Architecture and Organization
|
|
- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
|
|
- [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
|
|
|
|
|
|
+ - **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)
|
|
- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055)
|
|
- For a richer, more up-to-date (2017), but longer treatment
|
|
- For a richer, more up-to-date (2017), but longer treatment
|
|
|
|
|
|
- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
|
|
- [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
|
|
- 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.
|
|
|
|
|
|
+ that is just an intro. This a guidebook on program design and architecture
|
|
|
|
|
|
## Additional Learning
|
|
## Additional Learning
|
|
|
|
|
|
@@ -1518,7 +1518,7 @@ You're never really done.
|
|
- [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
|
|
- [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
|
|
- [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
|
|
- [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
|
|
- [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
|
|
- [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
|
|
- - See more in MIT 6.050J Information and Entropy series below.
|
|
|
|
|
|
+ - See more in MIT 6.050J Information and Entropy series below
|
|
|
|
|
|
- ### Parity & Hamming Code (videos)
|
|
- ### Parity & Hamming Code (videos)
|
|
- [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
|
|
- [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
|
|
@@ -1529,19 +1529,19 @@ You're never really done.
|
|
- [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
|
|
- [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
|
|
|
|
|
|
- ### Entropy
|
|
- ### Entropy
|
|
- - also see videos below
|
|
|
|
- - make sure to watch information theory videos first
|
|
|
|
|
|
+ - Also see videos below
|
|
|
|
+ - Make sure to watch information theory videos first
|
|
- [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176)
|
|
- [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176)
|
|
|
|
|
|
- ### Cryptography
|
|
- ### Cryptography
|
|
- - also see videos below
|
|
|
|
- - make sure to watch information theory videos first
|
|
|
|
|
|
+ - Also see videos below
|
|
|
|
+ - Make sure to watch information theory videos first
|
|
- [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
|
|
- [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
|
|
- [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
|
|
- [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
|
|
- [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
|
|
- [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
|
|
|
|
|
|
- ### Compression
|
|
- ### Compression
|
|
- - make sure to watch information theory videos first
|
|
|
|
|
|
+ - Make sure to watch information theory videos first
|
|
- Computerphile (videos):
|
|
- Computerphile (videos):
|
|
- [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w)
|
|
- [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w)
|
|
- [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko)
|
|
- [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko)
|
|
@@ -1621,8 +1621,8 @@ You're never really done.
|
|
- [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
|
|
- [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
|
|
|
|
|
|
- ### Locality-Sensitive Hashing
|
|
- ### Locality-Sensitive Hashing
|
|
- - used to determine the similarity of documents
|
|
|
|
- - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same.
|
|
|
|
|
|
+ - Used to determine the similarity of documents
|
|
|
|
+ - The opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same
|
|
- [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html)
|
|
- [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html)
|
|
|
|
|
|
- ### van Emde Boas Trees
|
|
- ### van Emde Boas Trees
|
|
@@ -1639,11 +1639,11 @@ You're never really done.
|
|
to move any accessed key to the root." - Skiena
|
|
to move any accessed key to the root." - Skiena
|
|
- Of these, I chose to implement a splay tree. From what I've read, you won't implement a
|
|
- Of these, I chose to implement a splay tree. From what I've read, you won't implement a
|
|
balanced search tree in your interview. But I wanted exposure to coding one up
|
|
balanced search tree in your interview. But I wanted exposure to coding one up
|
|
- and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code.
|
|
|
|
- - splay tree: insert, search, delete functions
|
|
|
|
|
|
+ and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code
|
|
|
|
+ - Splay tree: insert, search, delete functions
|
|
If you end up implementing red/black tree try just these:
|
|
If you end up implementing red/black tree try just these:
|
|
- - search and insertion functions, skipping delete
|
|
|
|
- - I want to learn more about B-Tree since it's used so widely with very large data sets.
|
|
|
|
|
|
+ - Search and insertion functions, skipping delete
|
|
|
|
+ - I want to learn more about B-Tree since it's used so widely with very large data sets
|
|
- [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
|
|
- [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
|
|
|
|
|
|
- **AVL trees**
|
|
- **AVL trees**
|
|
@@ -1652,7 +1652,7 @@ You're never really done.
|
|
The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly
|
|
The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly
|
|
balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it
|
|
balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it
|
|
attractive for data structures that may be built once and loaded without reconstruction, such as language
|
|
attractive for data structures that may be built once and loaded without reconstruction, such as language
|
|
- dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter).
|
|
|
|
|
|
+ dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter)
|
|
- [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
|
|
- [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
|
|
- [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
|
|
- [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
|
|
- [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
|
|
- [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
|
|
@@ -1662,7 +1662,7 @@ You're never really done.
|
|
- In practice:
|
|
- In practice:
|
|
Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors,
|
|
Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors,
|
|
data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory,
|
|
data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory,
|
|
- networking and file system code) etc.
|
|
|
|
|
|
+ networking and file system code) etc
|
|
- [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY)
|
|
- [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY)
|
|
- MIT Lecture: Splay Trees:
|
|
- MIT Lecture: Splay Trees:
|
|
- Gets very mathy, but watch the last 10 minutes for sure.
|
|
- Gets very mathy, but watch the last 10 minutes for sure.
|
|
@@ -1677,7 +1677,7 @@ You're never really done.
|
|
for example, many data structures used in computational geometry can be based on red–black trees, and
|
|
for example, many data structures used in computational geometry can be based on red–black trees, and
|
|
the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java,
|
|
the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java,
|
|
the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor
|
|
the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor
|
|
- hashcodes, a Red-Black tree is used.
|
|
|
|
|
|
+ hashcodes, a Red-Black tree is used
|
|
- [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
|
|
- [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
|
|
- [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
|
|
- [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
|
|
- [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
|
|
- [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
|
|
@@ -1713,7 +1713,7 @@ You're never really done.
|
|
B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to
|
|
B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to
|
|
its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary
|
|
its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary
|
|
block in a particular file. The basic problem is turning the file block i address into a disk block
|
|
block in a particular file. The basic problem is turning the file block i address into a disk block
|
|
- (or perhaps to a cylinder-head-sector) address.
|
|
|
|
|
|
+ (or perhaps to a cylinder-head-sector) address
|
|
- [B-Tree](https://en.wikipedia.org/wiki/B-tree)
|
|
- [B-Tree](https://en.wikipedia.org/wiki/B-tree)
|
|
- [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html)
|
|
- [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html)
|
|
- [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
|
|
- [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
|
|
@@ -1725,8 +1725,8 @@ You're never really done.
|
|
|
|
|
|
|
|
|
|
- ### k-D Trees
|
|
- ### k-D Trees
|
|
- - great for finding number of points in a rectangle or higher dimension object
|
|
|
|
- - a good fit for k-nearest neighbors
|
|
|
|
|
|
+ - Great for finding number of points in a rectangle or higher dimension object
|
|
|
|
+ - A good fit for k-nearest neighbors
|
|
- [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk)
|
|
- [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk)
|
|
- [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
|
|
- [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
|
|
|
|
|