Finalized rename.

This commit is contained in:
John Washam 2017-02-27 12:17:55 -08:00
parent b0de6485fe
commit a42d48f6ff
3 changed files with 103 additions and 804 deletions

238
README.md
View File

@ -1,28 +1,29 @@
# Google Interview University # Coding Interview University
>**I originally created this as a short to-do list of study topics, but it grew to the large list you see today. Working at >**I originally created this as a short to-do list of study topics for becoming a software engineer, but it grew to the large list you see today.
Google was the original motivator, hence the name. [I didn't get an interview at Google](https://googleyasheck.com/i-didnt-get-hired-heres-why/), The items listed here will prepare you well for in an interview at just about any software company, including the giants: Amazon, Facebook, Google or Microsoft.**
but the repo name lives on, and it would mess up a lot of folks to change it now. The items listed here will prepare you
for a career at just about any software company, including the giants: Amazon, Microsoft, Google, and Facebook.**
> >
> *Best of luck to you!* > *Best of luck to you!*
Translations: Translations:
- [中文版本](translations/README-cn.md) - [中文版本](translations/README-cn.md)
- translations in progress: - translations in progress:
- [Español](https://github.com/jwasham/google-interview-university/issues/80) - [Español](https://github.com/jwasham/coding-interview-university/issues/80)
- [हिन्दी](https://github.com/jwasham/google-interview-university/issues/81) - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81)
- [עברית](https://github.com/jwasham/google-interview-university/issues/82) - [עברית](https://github.com/jwasham/coding-interview-university/issues/82)
- [Bahasa Indonesia](https://github.com/jwasham/google-interview-university/issues/101) - [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101)
- [Arabic](https://github.com/jwasham/google-interview-university/issues/98) - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98)
- [Vietnamese](https://github.com/jwasham/google-interview-university/issues/92) - [Vietnamese](https://github.com/jwasham/coding-interview-university/issues/92)
- [Turkish](https://github.com/jwasham/google-interview-university/issues/90) - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90)
- [French](https://github.com/jwasham/google-interview-university/issues/89) - [French](https://github.com/jwasham/coding-interview-university/issues/89)
- [Russian](https://github.com/jwasham/google-interview-university/issues/87) - [Russian](https://github.com/jwasham/coding-interview-university/issues/87)
- [Ukrainian](https://github.com/jwasham/google-interview-university/issues/106) - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106)
- [Brazilian Portuguese](https://github.com/jwasham/google-interview-university/issues/113) - [Brazilian Portuguese](https://github.com/jwasham/coding-interview-university/issues/113)
- [Korean](https://github.com/jwasham/google-interview-university/issues/118) - [Korean](https://github.com/jwasham/coding-interview-university/issues/118)
- [Polish](https://github.com/jwasham/google-interview-university/issues/122) - [Telugu](https://github.com/jwasham/coding-interview-university/issues/117)
- [Polish](https://github.com/jwasham/coding-interview-university/issues/122)
- [German](https://github.com/jwasham/coding-interview-university/issues/135)
- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140)
## What is it? ## What is it?
@ -30,21 +31,12 @@ This is my multi-month study plan for going from web developer (self-taught, no
![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) ![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg)
You'll see a lot of Google-related items, but I've tried to generalize the list to make it useful for everyone. This is meant for **new software engineers** or those switching from
This list was extracted and expanded from Google's coaching notes, so these are the things you need to know.
There are extra items I added at the bottom that may come up in the interview or be helpful in solving a problem. Many items are from
Steve Yegge's "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" and are reflected
sometimes word-for-word in Google's coaching notes.
I've pared down what you need to know from what Yegge recommends. I've altered Yegge's requirements
from information received from a contact at Google. 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
many years of experience and are claiming many years of software engineering experience, expect a harder interview. many years of experience and are claiming many years of software engineering experience, expect a harder interview.
[Read more here](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/).
If you have many years of software/web development experience, note that large software companies like Google, Amazon, If you have many years of software/web development experience, note that large software companies like Google, Amazon,
Facebook and Microsoft software engineering as different from software/web development, and they require computer science knowledge. Facebook and Microsoft view software engineering as different from software/web development, and they require computer science knowledge.
If you want to be a reliability engineer or systems engineer, study more from the optional list (networking, security). If you want to be a reliability engineer or systems engineer, study more from the optional list (networking, security).
@ -106,6 +98,11 @@ If you want to be a reliability engineer or systems engineer, study more from th
- [Scheduling](#scheduling) - [Scheduling](#scheduling)
- [Implement system routines](#implement-system-routines) - [Implement system routines](#implement-system-routines)
- [String searching & manipulations](#string-searching--manipulations) - [String searching & manipulations](#string-searching--manipulations)
- [Tries](#tries)
- [Floating Point Numbers](#floating-point-numbers)
- [Unicode](#unicode)
- [Endianness](#endianness)
- [Networking](#networking)
- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience)
- [Final Review](#final-review) - [Final Review](#final-review)
- [Coding Question Practice](#coding-question-practice) - [Coding Question Practice](#coding-question-practice)
@ -121,9 +118,6 @@ If you want to be a reliability engineer or systems engineer, study more from th
- [Additional Books](#additional-books) - [Additional Books](#additional-books)
- [Additional Learning](#additional-learning) - [Additional Learning](#additional-learning)
- [Compilers](#compilers) - [Compilers](#compilers)
- [Floating Point Numbers](#floating-point-numbers)
- [Unicode](#unicode)
- [Endianness](#endianness)
- [Emacs and vi(m)](#emacs-and-vim) - [Emacs and vi(m)](#emacs-and-vim)
- [Unix command line tools](#unix-command-line-tools) - [Unix command line tools](#unix-command-line-tools)
- [Information theory](#information-theory) - [Information theory](#information-theory)
@ -131,18 +125,17 @@ If you want to be a reliability engineer or systems engineer, study more from th
- [Entropy](#entropy) - [Entropy](#entropy)
- [Cryptography](#cryptography) - [Cryptography](#cryptography)
- [Compression](#compression) - [Compression](#compression)
- [Networking](#networking) (if you have networking experience or want to be a systems engineer, expect questions)
- [Computer Security](#computer-security) - [Computer Security](#computer-security)
- [Garbage collection](#garbage-collection) - [Garbage collection](#garbage-collection)
- [Parallel Programming](#parallel-programming) - [Parallel Programming](#parallel-programming)
- [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems)
- [A*](#a)
- [Fast Fourier Transform](#fast-fourier-transform) - [Fast Fourier Transform](#fast-fourier-transform)
- [Bloom Filter](#bloom-filter) - [Bloom Filter](#bloom-filter)
- [HyperLogLog](#hyperloglog) - [HyperLogLog](#hyperloglog)
- [Locality-Sensitive Hashing](#locality-sensitive-hashing) - [Locality-Sensitive Hashing](#locality-sensitive-hashing)
- [van Emde Boas Trees](#van-emde-boas-trees) - [van Emde Boas Trees](#van-emde-boas-trees)
- [Augmented Data Structures](#augmented-data-structures) - [Augmented Data Structures](#augmented-data-structures)
- [Tries](#tries)
- [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees)
- [Balanced search trees](#balanced-search-trees) - [Balanced search trees](#balanced-search-trees)
- AVL trees - AVL trees
@ -162,7 +155,6 @@ If you want to be a reliability engineer or systems engineer, study more from th
- [Geometry, Convex hull](#geometry-convex-hull) - [Geometry, Convex hull](#geometry-convex-hull)
- [Discrete math](#discrete-math) - [Discrete math](#discrete-math)
- [Machine Learning](#machine-learning) - [Machine Learning](#machine-learning)
- [Go](#go)
- [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)
@ -193,7 +185,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr
`git checkout -b progress` `git checkout -b progress`
`git remote add jwasham https://github.com/jwasham/google-interview-university` `git remote add jwasham https://github.com/jwasham/coding-interview-university`
`git fetch --all` `git fetch --all`
@ -232,7 +224,7 @@ Sometimes the classes are not in session so you have to wait a couple of months,
- [ ] [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)
- [ ] How to Get a Job at the Big 4: - [ ] How to Get a Job at the Big 4:
- [ ] ['How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft' (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
- [ ] Prep Course: - [ ] Prep Course:
- [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed):
@ -269,18 +261,15 @@ This is a shorter list than what I used. This is abbreviated to save you time.
- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
- answers in C++ and Java - answers in C++ and Java
- recommended in Google candidate coaching
- 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)
- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
- answers in Java - answers in Java
- recommended on the [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/)
If you have tons of extra time: If you have tons of extra time:
- [ ] [Elements of Programming Interviews](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)
- all code is in C++, very good if you're looking to use C++ in your interview - [ ] [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
- a good book on problem solving in general.
### Computer Architecture ### Computer Architecture
@ -366,12 +355,6 @@ OR:
- algorithm catalog: - algorithm catalog:
- this is the real reason you buy this book. - 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. - about to get to this part. Will update here once I've made my way through it.
- To quote Yegge: "More than any other book it helped me understand just how astonishingly commonplace
(and important) graph problems are they should be part of every working programmer's toolkit. The book also
covers basic data structures and sorting algorithms, which is a nice bonus. But the gold mine is the second half
of the book, which is a sort of encyclopedia of 1-pagers on zillions of useful problems and various ways to solve
them, without too much detail. Almost every 1-pager has a simple picture, making it easy to remember. This is a
great way to learn how to identify hundreds of problem types."
- Can rent it on kindle - Can rent it on kindle
- Half.com is a great resource for textbooks at good prices. - Half.com is a great resource for textbooks at good prices.
- Answers: - Answers:
@ -381,7 +364,6 @@ OR:
- [ ] [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. - **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.
- To quote Yegge: "But if you want to come into your interviews *prepped*, then consider deferring your application until you've made your way through that book."
- Half.com is a great resource for textbooks at good prices. - Half.com is a great resource for textbooks at good prices.
- aka CLR, sometimes CLRS, because Stein was late to the game - aka CLR, sometimes CLRS, because Stein was late to the game
@ -407,7 +389,7 @@ through my notes and making flashcards so I could review.
Read please so you won't make my mistakes: Read please so you won't make my mistakes:
[Retaining Computer Science Knowledge](https://googleyasheck.com/retaining-computer-science-knowledge/) [Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/)
### 2. Use Flashcards ### 2. Use Flashcards
@ -445,8 +427,7 @@ There are a lot of distractions that can take up valuable time. Focus and concen
## What you won't see covered ## What you won't see covered
This big list all started as a personal to-do list made from Google interview coaching notes. These are prevalent These are prevalent technologies but not part of this study plan:
technologies but were not mentioned in those notes:
- SQL - SQL
- Javascript - Javascript
@ -656,7 +637,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- binary search using recursion - binary search using recursion
- ### Bitwise operations - ### Bitwise operations
- [ ] [Bits cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32) - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, << - [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro: - [ ] Good intro:
@ -843,11 +824,12 @@ If you need more detail on this subject, see "Sorting" section in [Additional De
Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were.
- Notes from Yegge: - Notes:
- There are three basic ways to represent a graph in memory: - There are 4 basic ways to represent a graph in memory:
- objects and pointers - objects and pointers
- matrix - adjacency matrix
- adjacency list - adjacency list
- 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 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.
@ -878,13 +860,6 @@ Graphs can be used to represent many problems in computer science, so this secti
- Full Coursera Course: - Full Coursera Course:
- [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
- Yegge: If you get a chance, try to study up on fancier algorithms:
- [ ] Dijkstra's algorithm - see above - 6.006
- [ ] A*
- [ ] [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
- [ ] [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
- [ ] [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
- I'll implement: - I'll implement:
- [ ] DFS with adjacency list (recursive) - [ ] DFS with adjacency list (recursive)
- [ ] DFS with adjacency list (iterative with stack) - [ ] DFS with adjacency list (iterative with stack)
@ -917,7 +892,6 @@ 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
- **NOTE:** DP is a valuable technique, but it is not mentioned on any of the prep material Google provides. But you could get a problem where DP provides an optimal solution. So I'm including it.
- 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:
@ -1069,11 +1043,10 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
- ### Papers - ### Papers
- These are Google papers and well-known 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. - 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) - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
- [implemented in Go](https://godoc.org/github.com/thomas11/csp) - [implemented in Go](https://godoc.org/github.com/thomas11/csp)
- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
- [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) - [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
- replaced by Colossus in 2012 - 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) - [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
@ -1081,7 +1054,9 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - [ ] [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) - [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) - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf)
- [ ] [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) - [ ] [2007: Dynamo: Amazons Highly Available Key-value Store](https://www.akkadia.org/drepper/cpumemory.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)](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)
- [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.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) - [ ] [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/) - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/)
@ -1138,14 +1113,62 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
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
- 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.
- [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1)
- [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
- [ ] Short course videos:
- [ ] [Introduction To Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
- [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
- [ ] [Implementing A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
- [ ] [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/data-science/data-science-tutorials/using-tries/)
- [ ] [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)
- ### 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)
- [ ] 32 bit: [IEEE754 32-bit floating point binary (video)](https://www.youtube.com/watch?v=50ZYcZebIec)
- ### Unicode
- [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html)
- [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/)
- ### Endianness
- [ ] [Big And Little Endian](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html)
- [ ] [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)
- Very technical talk for kernel devs. Don't worry if most is over your head.
- The first half is enough.
- ### Networking
- **if you have networking experience or want to be a systems engineer, expect questions**
- otherwise, this is just good to know
- [ ] [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)
- [ ] Sockets:
- [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
- [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
## System Design, Scalability, Data Handling ## System Design, Scalability, Data Handling
- **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.
- Considerations from Yegge: - 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
@ -1234,7 +1257,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- For even more, see "Mining Massive Datasets" video series in the Video Series section. - For even more, see "Mining Massive Datasets" video series in the 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: [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- [cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - [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 - define the use cases, with interviewer's help
@ -1322,8 +1345,6 @@ There is a great intro for methodical, communicative problem solving in an inter
interview books, too, but I found this outstanding: interview books, too, but I found this outstanding:
[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) [Algorithm design canvas](http://www.hiredintech.com/algorithm-design/)
[My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/)
No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a
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.
@ -1383,7 +1404,6 @@ Mock Interviews:
## Your Resume ## Your Resume
- [Ten Tips for a (Slightly) Less Awful Resume](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html)
- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed
@ -1457,29 +1477,17 @@ You're never really done.
## Additional Learning ## Additional Learning
These topics will likely not come up in an interview, but I added them to help you become a well-rounded
software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox.
- ### Compilers - ### Compilers
- [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
- [ ] [Harvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo) - [ ] [Harvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
- [ ] [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk) - [ ] [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk)
- [ ] [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU) - [ ] [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
- ### 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)
- [ ] 32 bit: [IEEE754 32-bit floating point binary (video)](https://www.youtube.com/watch?v=50ZYcZebIec)
- ### Unicode
- [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html)
- [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/)
- ### Endianness
- [ ] [Big And Little Endian](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html)
- [ ] [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)
- Very technical talk for kernel devs. Don't worry if most is over your head.
- The first half is enough.
- ### Emacs and vi(m) - ### Emacs and vi(m)
- suggested by Yegge, from an old Amazon recruiting post: Familiarize yourself with a unix-based code editor - Familiarize yourself with a unix-based code editor
- vi(m): - vi(m):
- [Editing With vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) - [Editing With vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr)
- [VIM Adventures](http://vim-adventures.com/) - [VIM Adventures](http://vim-adventures.com/)
@ -1500,7 +1508,7 @@ You're never really done.
- [(maybe) Org Mode In Depth: Managing Structure (video)](https://www.youtube.com/watch?v=nsGYet02bEk) - [(maybe) Org Mode In Depth: Managing Structure (video)](https://www.youtube.com/watch?v=nsGYet02bEk)
- ### Unix command line tools - ### Unix command line tools
- suggested by Yegge, from an old Amazon recruiting post. I filled in the list below from good tools. - I filled in the list below from good tools.
- [ ] bash - [ ] bash
- [ ] cat - [ ] cat
- [ ] grep - [ ] grep
@ -1553,23 +1561,6 @@ You're never really done.
- [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
- [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s) - [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s)
- ### Networking
- **if you have networking experience or want to be a systems engineer, expect questions**
- otherwise, this is just good to know
- [ ] [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)
- [ ] Sockets:
- [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
- [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
- ### Computer Security - ### Computer Security
- [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- [ ] [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - [ ] [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
@ -1618,6 +1609,11 @@ You're never really done.
- [ ] [MessagePack](http://msgpack.org/index.html) - [ ] [MessagePack](http://msgpack.org/index.html)
- [ ] [Avro](https://avro.apache.org/) - [ ] [Avro](https://avro.apache.org/)
- ### A*
- [ ] [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
- [ ] [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
- [ ] [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
- ### Fast Fourier Transform - ### Fast Fourier Transform
- [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
- [ ] [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/) - [ ] [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
@ -1647,24 +1643,6 @@ You're never really done.
- ### Augmented Data Structures - ### Augmented Data Structures
- [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) - [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950)
- ### Tries
- 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.
- [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1)
- [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
- [ ] Short course videos:
- [ ] [Introduction To Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
- [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
- [ ] [Implementing A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
- [ ] [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/data-science/data-science-tutorials/using-tries/)
- [ ] [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)
- ### Balanced search trees - ### Balanced search trees
- Know least one type of balanced binary tree (and know how it's implemented): - Know least one type of balanced binary tree (and know how it's implemented):
- "Among balanced search trees, AVL and 2/3 trees are now passé, and red-black trees seem to be more popular. - "Among balanced search trees, AVL and 2/3 trees are now passé, and red-black trees seem to be more popular.
@ -1827,16 +1805,6 @@ You're never really done.
- [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
- Data School: http://www.dataschool.io/ - Data School: http://www.dataschool.io/
- ### Go
- [ ] Videos:
- [ ] [Why Learn Go?](https://www.youtube.com/watch?v=FTl0tl9BGdc)
- [ ] [Go Programming](https://www.youtube.com/watch?v=CF9S4QZuV30)
- [ ] [A Tour of Go](https://www.youtube.com/watch?v=ytEkHepK08c)
- [ ] Books:
- [ ] [An Introduction to Programming in Go (read free online)](https://www.golang-book.com/books/intro)
- [ ] [The Go Programming Language (Donovan & Kernighan)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440)
- [ ] [Bootcamp](https://www.golang-book.com/guides/bootcamp)
-- --
## Additional Detail on Some Subjects ## Additional Detail on Some Subjects

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long