123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 |
- ##########################################################################################
- ## How to read this
- ##########################################################################################
- Everything below is an outline, and you should tackle the items in order from top to bottom.
- I put an asterisk * at the beginning of a line when I'm done with it. When all sub-items are done,
- I put a * at the top level, meaning the entire block is done. Sorry you have to remove all my *
- to use this the same way. If you search/replace, there are a couple of places to look out for.
- ##########################################################################################
- ## Interview Prep:
- ##########################################################################################
- * - Videos:
- * - https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be
- * - https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be
- Articles:
- - http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html
- - http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
- - http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions
- - http://www.google.com/about/careers/lifeatgoogle/hiringprocess/
- Additional (not suggested by Google but I added):
- - https://courses.csail.mit.edu/iap/interview/materials.php
- - http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/
- - https://www.youtube.com/watch?v=rEJzOhC5ZtQ&feature=youtu.be
- - https://www.youtube.com/watch?v=aClxtDcdpsQ&feature=youtu.be
- - https://www.youtube.com/watch?v=2cf9xo1S134&feature=youtu.be
- - https://www.youtube.com/watch?v=YJZCUhxNCv8
- * - https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4
- * - https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx
- * - https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1
- ##########################################################################################
- ## Knowledge:
- ##########################################################################################
- You need to know C, C++, or Java to do the coding part of the interview.
- They will sometimes make an exception and let you use Python or some other language, but the language
- must be mainstream and allow you write your code low-level enough to solve the problems.
- You'll see some C, C++ learning included below.
- There are a few books involved, see the bottom
- * - how computers process a program:
- * - https://www.youtube.com/watch?v=42KTvGYQYnA
- * - https://www.youtube.com/watch?v=Mv2XQgpbTNE
- * - Computer Arch Intro:
- (first video only - interesting but not required) https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq&index=1
- * - Parity & Hamming Code:
- Parity:
- https://www.youtube.com/watch?v=DdMcAUlxh1M
- Hamming Code:
- https://www.youtube.com/watch?v=1A_NcXxdoCc
- https://www.youtube.com/watch?v=JAMLuxdHH8o
- Error Checking:
- https://www.youtube.com/watch?v=wbH2VxzmoZk
- * - C
- * - K&R C book (ANSI C)
- - C++
- * - basics
- * - pointers
- * - functions
- * - references
- * - templates
- * - compilation
- * - scope & linkage
- * - namespaces
- * - OOP
- * - STL
- * - functors: http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html
- * - C++ at Google: https://www.youtube.com/watch?v=NOCElcMcFik
- * - Google C++ Style Guide: https://google.github.io/styleguide/cppguide.html
- - Google uses clang-format (Google setting)
- - C++ Core Guidelines: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
- * - Efficiency with Algorithms, Performance with Data Structures: https://youtu.be/fHNmRkzxHWs
- - review of C++ concepts: https://www.youtube.com/watch?v=Rub-JsjMhWY
- * - compilers:
- * - https://class.coursera.org/compilers-004/lecture/1
- * - https://class.coursera.org/compilers-004/lecture/2
- * - C++: https://www.youtube.com/watch?v=twodd1KFfGk
- * - Understanding Compiler Optimization (C++): https://www.youtube.com/watch?v=FnGCDLhaxKU
- ----------------------------------------------------------------
- The Gauntlet:
- 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++ - without using built-in types
- C++ - using built-in types, like STL's std::list for a linked list
- Python - without using built-in types
- and write tests to ensure I'm doing it right, keep it simple with just assert() statements
- Each subject does not require a whole day to be able to understand it fully.
- Why code in all of these?
- Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
- Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
- Make use of built-in types so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)
- ----------------------------------------------------------------
- arrays
- No need to spend a whole day on this.
- * - Description:
- - https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays
- - https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays
- - Implement:
- - Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
- * - new raw data array with allocated memory (can allocate int array under the hood, just not use its features)
- * - size() - number of items
- * - capacity() - number of items it can hold
- * - is_empty()
- - at(index) - returns item at given index
- - cannot append or move if full - will not tackle allocating and copying to new memory
- - append(item)
- - insert(index, item)
- - prepend(item) - can use insert above at index 0
- - delete(index)
- - remove(item)
- - find(item)
- - Time
- - O(1) to add/remove at end (amortized for allocations for more space), index, or update
- - O(n) to insert/remove elsewhere
- - Space
- - contiguous in memory, so proximity helps performance
- - space needed = size of object * number of items to store
- linked lists
- - singly-linked
- * - Description: https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists
- * - Lynda.com:
- - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Introduction-lists/149042/177115-4.html
- - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-basic-list-implementations/149042/177116-4.html
- - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-singly-doubly-linked-lists/149042/177117-4.html
- - https://www.lynda.com/Developer-Programming-Foundations-tutorials/List-support-across-languages/149042/177118-4.html
- * - C Code: https://www.youtube.com/watch?v=QN6FPiD0Gzo
- - not the whole video, just portions about Node struct and memory allocation.
- * - why you should avoid linked lists:
- - https://www.youtube.com/watch?v=YQs6IC-vgmo
- - implement (with tail pointer), item is the data item in a node:
- - push_front
- - get_front
- - pop_front
- - push_back
- - get_back
- - pop_back
- - insert_before(node, item)
- - insert_after(node, item)
- - size()
- - is_empty()
- - find(item) - assume each item is unique
- - remove(item) - assume each item is unique
- - doubly-linked list
- - Description: https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists
- - reverse a singly-linked list
- stacks
- - see: https://class.coursera.org/algs4partI-010/lecture
- - https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks
- queues
- - see: https://class.coursera.org/algs4partI-010/lecture
- - https://www.coursera.org/learn/data-structures/lecture/EShpq/queues
- Vectors
- - Vector calculus ?
- heaps
- - https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees
- - min heap
- - max heap
- Priority Queue
- - https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction
- - see: https://class.coursera.org/algs4partI-010/lecture
- - https://class.coursera.org/algs4partI-010/lecture/39
- - https://en.wikipedia.org/wiki/Priority_queue
- Disjoint Sets:
- - https://www.coursera.org/learn/data-structures/lecture/JssSY/overview
- - https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees
- hashtables
- - https://www.youtube.com/watch?v=C4Kc8xzcA68
- - https://class.coursera.org/algs4partI-010/lecture/52
- - https://www.coursera.org/learn/data-structures/home/week/3
- - see: https://class.coursera.org/algs4partI-010/lecture
- - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables
- - test: implement with only arrays
- tries
- - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries
- Circular buffer/FIFO:
- - https://en.wikipedia.org/wiki/Circular_buffer
- Bit operations
- - count on bits
- - https://youtu.be/Hzuzo9NJrlc
- - max run of off bits
- - bit shifting
- binary search
- Sorting
- - no bubble sort - it's terrible
- - at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort)
- - Which algorithms can be used on lists? Which on arrays? Which on both? Is Quicksort stable?
- - algos:
- - mergesort
- - quicksort
- Caches
- - LRU cache
- Trees
- - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees
- - see: https://class.coursera.org/algs4partI-010/lecture
- - basic tree construction
- - traversal
- - manipulation algorithms
- - binary search trees BSTs
- - https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction
- - applications:
- - https://class.coursera.org/algs4partI-010/lecture/57
- - n-ary trees
- - trie-trees
- - at least one type of balanced binary tree (and know how it's implemented):
- - red/black tree
- - https://class.coursera.org/algs4partI-010/lecture/50
- - splay trees
- - https://www.coursera.org/learn/data-structures/lecture/O9nZ6/splay-trees
- - AVL trees
- - https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees
- - https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation
- - https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge
- - 2-3 Search Trees
- - https://class.coursera.org/algs4partI-010/lecture/49
- - B-Trees:
- - https://class.coursera.org/algs4partI-010/lecture/51
- - BFS (breadth-first search)
- - DFS (depth-first search)
- - know the difference between
- - inorder
- - postorder
- - preorder
- Graphs:
- There are three basic ways to represent a graph in memory:
- - objects and pointers
- - matrix
- - adjacency list
- - familiarize yourself with each representation and its pros & cons
- - now their computational complexity, their tradeoffs, and how to implement them in real code
- - If you get a chance, try to study up on fancier algorithms:
- - Dijkstra
- - A*
- Other data structures:
- - You should study up on as many other data structures and algorithms as possible
- - You should especially know about the most famous classes of NP-complete problems, such as traveling salesman and the knapsack problem, and be able to recognize them when an interviewer asks you them in disguise.
- - Find out what NP-complete means.
- Recursion
- - when it is appropriate to use it
- Algorithmic complexity
- open-ended problems
- - manipulate strings
- - manipulate patterns
- design patterns:
- - strategy
- - singleton
- - adapter
- - prototype
- - decorator
- - visitor
- - factory
- Combinatorics (n choose k)
- Probability
- Dynamic Programming
- Processes, Threads, Concurrency issues
- - difference: https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread
- - threads: https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M
- - stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4
- - locks
- - mutexes
- - semaphores
- - monitors
- - how they work
- - deadlock
- - livelock
- Process resource needs
- Thread resource needs
- Modern concurrency constructs with multicore processors
- Context switching
- - How context switching is initiated by the operating system and underlying hardware
- Scheduling
- Weighted random sampling
- Implement system routines
- Distill large data sets to single values
- Transform one data set to another
- Handling obscenely large amounts of data
- System design:
- - features sets
- - interfaces
- - class hierarchies
- - designing a system under certain constraints
- - simplicity and robustness
- - tradeoffs
- Performance analysis and optimization
- Testing
- -------------------------------------------------------------------
- Extras that can't hurt:
- Information theory:
- - Markov processes:
- - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation
- - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation
- - https://www.khanacademy.org/computing/computer-science/informationtheory/moderninfotheory/v/symbol-rate-information-theory
- - includes Markov chain
- Bloom Filter
- - https://www.youtube.com/watch?v=-SuTGoFYjZs
- - http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/
- Fast Fourier Transform
- - http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/
- C (for basis of C)
- C++ (for interview answers)
- Machine Learning:
- - http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/
- - review videos
- - intro in Goodreader on iPad
- - http://www.dataschool.io/
- ---
- Be thinking of:
- Biggest challenges faced
- Best/worst designs seen
- Ideas for improving existing products
- ##########################################################################################
- ## Videos:
- ##########################################################################################
- 6.042: Math for CS (25 videos):
- - https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B
- 6.006: Intro to Algorithms (47 videos):
- - https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False
- 6.033: Computer System Engineering (22 videos):
- - https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484
- 6.046: Design and Analysis of Algorithms (34 videos):
- - https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp
- 6.851: Advanced Data Structures (22 videos):
- - https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf
- Stanford: Programming Paradigms (17 videos)
- - https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False
- ##########################################################################################
- ## Articles:
- ##########################################################################################
- - https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/
- - http://highscalability.com/blog/2016/4/4/how-to-remove-duplicates-in-a-large-dataset-reducing-memory.html
- - http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html
- - http://highscalability.com/blog/2016/3/21/to-compress-or-not-to-compress-that-was-ubers-question.html
- - http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html
- - http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html
- - http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html
- - http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html
- - http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html
- - http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html
- - http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html
- - http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html
- - http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html
- - http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html
- - http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html
- - http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html
- ##########################################################################################
- ## Papers:
- ##########################################################################################
- Computing Weak Consistency in Polynomial Time
- - http://delivery.acm.org/10.1145/2770000/2767407/p395-golab.pdf?ip=104.200.154.80&id=2767407&acc=OA&key=4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E5945DC2EABF3343C&CFID=769944592&CFTOKEN=71654301&__acm__=1460506755_42d28e3f230cc8e733e2e9ed1ebe3605
- How Developers Search for Code: A Case Study
- - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf
- Borg, Omega, and Kubernetes
- - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf
- Continuous Pipelines at Google
- - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf
- AddressSanitizer: A Fast Address Sanity Checker
- - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
- ##########################################################################################
- ## Books:
- ##########################################################################################
- Mentioned in Coaching:
- The Algorithm Design Manual
- http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
- Algorithms and Programming: Problems and Solutions:
- http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474
- Read first:
- Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition:
- http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html
- Read second:
- Cracking the Coding Interview, Fourth Edition:
- - http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/
- Additional (not suggested by Google but I added):
- * - C Programming Language, Vol 2
- * - C++ Primer Plus, 6th Edition
- Programming Pearls:
- - http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880
- If you see people reference "The Google Resume", it was replaced by "Cracking the Coding Interview".
- Clean Code
- Code Complete
- Introduction to Algorithms
- ##########################################################################################
- ## Coding exercises/challenges:
- ##########################################################################################
- Recommended: LeetCode: https://leetcode.com/
- HackerRank: https://www.hackerrank.com/
- Codility: https://codility.com/programmers/
- Project Euler: https://projecteuler.net/index.php?section=problems
- InterviewCake: https://www.interviewcake.com/
- InterviewBit: https://www.interviewbit.com/invite/icjf
- ##########################################################################################
- ## Code References:
- ##########################################################################################
- For review questions in C book:
- https://github.com/lekkas/c-algorithms
- ##########################################################################################
- ## Once you've got the job (this is mainly for me):
- ##########################################################################################
- C++ Talks at CPPCon:
- - https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh
- Compilers:
- - https://class.coursera.org/compilers-004/lecture
- Computer and processor architecture:
- - https://class.coursera.org/comparch-003/lecture
- Long series of C++ videos:
- - https://www.youtube.com/playlist?list=PLfVsf4Bjg79Cu5MYkyJ-u4SyQmMhFeC1C
- ##########################################################################################
- ## Done. ##
- ##########################################################################################
|