2016-06-06 17:52:25 -07:00
##########################################################################################
## How to read this
##########################################################################################
Everything below is an outline, and you should tackle the items in order from top to bottom.
2016-06-10 11:04:28 -07:00
I put an asterisk/star (*) at the beginning of a line when I'm done with it. When all sub-items are done,
2016-06-06 17:52:25 -07:00
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.
2016-06-10 11:04:28 -07:00
Sometimes I just put a * at top level if I know I've done all the subtasks, to cut down on * clutter.
2016-06-06 17:52:25 -07:00
##########################################################################################
## Interview Prep:
##########################################################################################
* - Videos:
* - https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be
* - https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be
2016-06-07 11:56:41 -07:00
* - https://www.youtube.com/watch?v=8npJLXkcmu8
2016-06-06 17:52:25 -07:00
2016-06-07 11:56:41 -07:00
* - Articles:
* - http://www.google.com/about/careers/lifeatgoogle/hiringprocess/
2016-06-06 21:15:38 -07:00
* - http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
- all the things he mentions that you need to know are listed below
* - (very dated) http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html
2016-06-07 11:56:41 -07:00
* - http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions
2016-06-06 17:52:25 -07:00
2016-06-07 18:59:09 -07:00
* - Additional (not suggested by Google but I added):
2016-06-06 17:52:25 -07:00
* - 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
2016-06-07 11:56:41 -07:00
* - http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture
* - http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/
2016-06-07 18:59:09 -07:00
* - Cracking The Coding Interview Set 1:
* - https://www.youtube.com/watch?v=rEJzOhC5ZtQ
* - https://www.youtube.com/watch?v=aClxtDcdpsQ
* - How to Get a Job at the Big 4:
* - https://www.youtube.com/watch?v=YJZCUhxNCv8
2016-06-06 17:52:25 -07:00
2016-06-05 19:46:49 -07:00
##########################################################################################
## Knowledge:
##########################################################################################
2016-06-10 11:04:28 -07:00
This short section were prerequisites/interesting info I wanted to learn before getting started on the daily plan.
2016-06-06 17:52:25 -07:00
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.
2016-06-09 10:42:05 -07:00
There are a few books involved, see the bottom.
Some videos are available only by enrolling in a Coursera or EdX class. It is free to do so.
2016-06-06 11:54:06 -07:00
2016-06-06 10:18:54 -07:00
* - 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
2016-06-05 19:46:49 -07:00
* - C
* - K&R C book (ANSI C)
2016-06-10 16:23:26 -07:00
* - Clang: https://www.youtube.com/watch?v=U3zCxnj2w8M
* - GDB:
- https://www.youtube.com/watch?v=USPvePv1uzE
- https://www.youtube.com/watch?v=y5JmQItfFck
- Valgrind: https://www.youtube.com/watch?v=fvTsFjDuag8
2016-06-05 19:46:49 -07:00
- 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
2016-06-07 18:59:09 -07:00
* - Google uses clang-format (there is a command line "style" argument: -style=google)
2016-06-05 19:46:49 -07:00
* - Efficiency with Algorithms, Performance with Data Structures: https://youtu.be/fHNmRkzxHWs
2016-06-07 18:59:09 -07:00
- C++ Core Guidelines: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
2016-06-06 17:52:25 -07:00
- review of C++ concepts: https://www.youtube.com/watch?v=Rub-JsjMhWY
2016-06-05 19:46:49 -07:00
2016-06-06 10:11:16 -07:00
* - compilers:
2016-06-05 19:46:49 -07:00
* - 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
2016-06-06 10:11:16 -07:00
----------------------------------------------------------------
2016-06-08 12:24:45 -07:00
The Daily Plan:
2016-06-06 10:18:54 -07:00
2016-06-10 11:04:28 -07:00
Each subject does not require a whole day to be able to understand it fully, and you can do multiple of these in a day.
2016-06-06 10:11:16 -07:00
Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
2016-06-06 17:52:25 -07:00
C - using structs and functions that take a struct * and something else as args.
2016-06-06 10:11:16 -07:00
C++ - without using built-in types
C++ - using built-in types, like STL's std::list for a linked list
2016-06-13 16:27:31 -07:00
Python - using built-in types (to keep practicing Python)
2016-06-10 11:04:28 -07:00
and write tests to ensure I'm doing it right, sometimes just using simple assert() statements
2016-06-07 18:59:09 -07:00
You may do Java or something else, this is just my thing.
2016-06-10 11:04:28 -07:00
2016-06-06 10:11:16 -07:00
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)
2016-06-06 10:18:54 -07:00
Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
2016-06-06 10:11:16 -07:00
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)
2016-06-13 16:27:31 -07:00
I may not have time to do all of these for every subject, but I'll try.
2016-06-07 18:59:09 -07:00
You don't need to memorize the guts of every algorithm.
Write code on a whiteboard, not a computer. Test with some sample inputs.
Then test it out on a computer to make sure it's not buggy from syntax.
2016-06-06 10:11:16 -07:00
----------------------------------------------------------------
2016-06-05 19:46:49 -07:00
2016-06-09 10:42:05 -07:00
* - Before you get started:
The myth of the Genius Programmer: https://www.youtube.com/watch?v=0SARbwvhupQ
Google engineers are smart, but many have an insecurity that they aren't smart enough.
* - Algorithmic complexity / Big O / Asymptotic analysis
2016-06-09 09:16:15 -07:00
- nothing to implement
2016-06-09 10:42:05 -07:00
- Harvard CS50 - Asymptotic Notation: https://www.youtube.com/watch?v=iOq5kSKqeR4
- Big O Notations (general quick tutorial) - https://www.youtube.com/watch?v=V6mKVRU1evU
2016-06-10 11:04:28 -07:00
- Big O Notation (and Omega and Theta) - best mathematical explanation:
2016-06-09 10:42:05 -07:00
- https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN
- Skiena:
- video: https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b
- slides: http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf
- A Gentle Introduction to Algorithm Complexity Analysis: http://discrete.gr/complexity/
- Orders of Growth: https://class.coursera.org/algorithmicthink1-004/lecture/59
- Asymptotics: https://class.coursera.org/algorithmicthink1-004/lecture/61
2016-06-10 11:04:28 -07:00
- UC Berkeley Big O: https://youtu.be/VIS4YDpuP98
- UC Berkeley Big Omega: https://youtu.be/ca3e7UVmeUc
- Amortized Analysis: https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN
2016-06-09 10:42:05 -07:00
- Illustrating "Big O": https://class.coursera.org/algorithmicthink1-004/lecture/63
2016-06-10 11:04:28 -07:00
- Cheat sheet: http://bigocheatsheet.com/
2016-06-13 16:27:31 -07:00
* - Arrays: (Implement an automatically resizing vector)
2016-06-06 17:52:25 -07:00
* - Description:
2016-06-09 09:16:15 -07:00
- Arrays: https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays
2016-06-10 16:23:26 -07:00
- Arrays: https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html
- Multi-dim: https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html
2016-06-09 09:16:15 -07:00
- Dynamic Arrays: https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays
2016-06-10 16:23:26 -07:00
- Jagged: https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html
- Resizing arrays:
- https://class.coursera.org/algs4partI-010/lecture/19
- https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html
2016-06-11 17:01:29 -07:00
* - Implement a vector (mutable array with automatic resizing):
2016-06-07 18:59:09 -07:00
* - Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
2016-06-10 16:23:26 -07:00
* - new raw data array with allocated memory
- can allocate int array under the hood, just not use its features
- start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128
2016-06-06 17:52:25 -07:00
* - size() - number of items
* - capacity() - number of items it can hold
* - is_empty()
2016-06-11 11:49:18 -07:00
* - at(index) - returns item at given index, blows up if index out of bounds
2016-06-11 17:01:29 -07:00
* - push(item)
* - insert(index, item) - inserts item at index, shifts that index's value and trailing elements to the right
2016-06-11 11:49:18 -07:00
* - prepend(item) - can use insert above at index 0
* - pop() - remove from end, return value
2016-06-11 17:01:29 -07:00
* - delete(index) - delete item at index, shifting all trailing elements left
* - remove(item) - looks for value and removes index holding it (even if in multiple places)
* - find(item) - looks for value and returns first index with that value, -1 if not found
2016-06-11 11:49:18 -07:00
* - resize(new_capacity) // private function
2016-06-09 09:16:15 -07:00
- when you reach capacity, resize to double the size
- when popping an item, if size is 1/4 of capacity, resize to half
2016-06-11 17:01:29 -07:00
* - Time
2016-06-06 11:54:06 -07:00
- O(1) to add/remove at end (amortized for allocations for more space), index, or update
- O(n) to insert/remove elsewhere
2016-06-11 17:01:29 -07:00
* - Space
2016-06-06 11:54:06 -07:00
- contiguous in memory, so proximity helps performance
2016-06-11 17:01:29 -07:00
- space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n)
2016-06-14 19:28:25 -07:00
* - Linked Lists
2016-06-13 16:27:31 -07:00
* - Description:
* - https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists
2016-06-06 11:54:06 -07:00
* - 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
2016-06-13 16:27:31 -07:00
* - C Code: https://www.youtube.com/watch?v=QN6FPiD0Gzo
2016-06-17 20:35:31 -07:00
- not the whole video, just portions about Node struct and memory allocation.
* - Linked List vs Arrays:
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays
2016-06-13 16:27:31 -07:00
* - why you should avoid linked lists:
- https://www.youtube.com/watch?v=YQs6IC-vgmo
2016-06-14 19:28:25 -07:00
* - Gotcha: you need pointer to pointer knowledge:
(for when you pass a pointer to a function that may change the address where that pointer points)
This page is just to get a grasp on ptr to ptr. I don't recommend this list traversal style. Readability and maintainability suffer due to cleverness.
- https://www.eskimo.com/~scs/cclass/int/sx8.html
2016-06-15 21:00:48 -07:00
* - implement (I did with tail pointer & without):
2016-06-13 16:27:31 -07:00
* - size() - returns number of data elements in list
* - empty() - bool returns true if empty
2016-06-15 21:00:48 -07:00
* - value_at(index) - returns the value of the nth item (starting at 0 for first)
2016-06-13 16:27:31 -07:00
* - push_front(value) - adds an item to the front of the list
2016-06-15 21:00:48 -07:00
* - pop_front() - remove front item and return its value
2016-06-13 16:27:31 -07:00
* - push_back(value) - adds an item at the end
2016-06-15 21:00:48 -07:00
* - pop_back() - removes end item and returns its value
* - front() - get value of front item
* - back() - get value of end item
* - insert(index, value) - insert value at index, so current item at that index is pointed to by new item at index
2016-06-13 22:27:08 -07:00
* - erase(index) - removes node at given index
2016-06-14 19:28:25 -07:00
* - value_n_from_end(n) - returns the value of the node at nth position from the end of the list
* - reverse() - reverses the list
2016-06-15 21:00:48 -07:00
* - remove_value(value) - removes the first item in the list with this value
2016-06-14 19:28:25 -07:00
* - Doubly-linked List
2016-06-06 10:11:16 -07:00
- Description: https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists
2016-06-13 22:27:08 -07:00
- No need to implement
2016-06-17 20:35:31 -07:00
* - Stacks
2016-06-05 19:46:49 -07:00
- https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks
2016-06-16 18:39:48 -07:00
- https://class.coursera.org/algs4partI-010/lecture/18
2016-06-17 20:35:31 -07:00
- https://class.coursera.org/algs4partI-010/lecture/19
- https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html
2016-06-10 16:23:26 -07:00
Queues
2016-06-05 19:46:49 -07:00
- see: https://class.coursera.org/algs4partI-010/lecture
2016-06-17 20:35:31 -07:00
- https://www.coursera.org/learn/data-structures/lecture/EShpq/queue
- Circular buffer/FIFO: https://en.wikipedia.org/wiki/Circular_buffer
2016-06-10 16:23:26 -07:00
Hash tables
2016-06-05 19:46:49 -07:00
- 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
2016-06-10 16:23:26 -07:00
Tries
2016-06-05 19:46:49 -07:00
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries
2016-06-17 20:35:31 -07:00
Disjoint Sets:
- https://www.coursera.org/learn/data-structures/lecture/JssSY/overview
- https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations
- https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees
- https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank
- https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression
- https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional
Heap (data structure):
- https://en.wikipedia.org/wiki/Heap_(data_structure)
- https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction
- https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations
- https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees
- https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark
- https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations
- https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees
- https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode
- see: https://class.coursera.org/algs4partI-010/lecture
- https://class.coursera.org/algs4partI-010/lecture/39
Priority Queue
- https://en.wikipedia.org/wiki/Priority_queue
2016-06-05 19:46:49 -07:00
Bit operations
2016-06-17 20:35:31 -07:00
- http://graphics.stanford.edu/~seander/bithacks.html
2016-06-05 19:46:49 -07:00
- count on bits
- https://youtu.be/Hzuzo9NJrlc
2016-06-10 11:04:28 -07:00
- max run of on/off bits
2016-06-05 19:46:49 -07:00
- bit shifting
2016-06-10 11:04:28 -07:00
* - 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
2016-06-10 16:23:26 -07:00
Binary search
2016-06-05 19:46:49 -07:00
Sorting
2016-06-10 16:23:26 -07:00
- stability in sorting algorithms:
- http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms
- http://www.geeksforgeeks.org/stability-in-sorting-algorithms/
- Which algorithms can be used on linked lists? Which on arrays? Which on both? Is Quicksort stable?
- Implement & know best case/worst case, average complexity of each:
2016-06-05 19:46:49 -07:00
- mergesort
- quicksort
2016-06-10 16:23:26 -07:00
- insertion sort
- selection sort
- no bubble sort - it's terrible at O(n^2)
2016-06-05 19:46:49 -07:00
Caches
- LRU cache
2016-06-17 20:35:31 -07:00
Binary trees:
- https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees
Binary Heap:
Min Heap / Max Heap
2016-06-05 19:46:49 -07:00
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
2016-06-17 20:35:31 -07:00
- Binary search trees: BSTs
2016-06-05 19:46:49 -07:00
- 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
2016-06-06 21:15:38 -07:00
- BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
2016-06-05 19:46:49 -07:00
- If you get a chance, try to study up on fancier algorithms:
2016-06-13 22:27:08 -07:00
- Dijkstra's algorithm
- https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
2016-06-05 19:46:49 -07:00
- A*
2016-06-13 22:27:08 -07:00
- https://en.wikipedia.org/wiki/A*_search_algorithm
2016-06-06 21:15:38 -07:00
- when asked a question, look for a graph-based solution first, then move on if none.
2016-06-05 19:46:49 -07:00
Other data structures:
- You should study up on as many other data structures and algorithms as possible
2016-06-13 22:27:08 -07:00
- 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.
2016-06-06 21:15:38 -07:00
- Know what NP-complete means.
2016-06-05 19:46:49 -07:00
Recursion
- when it is appropriate to use it
open-ended problems
- manipulate strings
- manipulate patterns
design patterns:
2016-06-10 16:23:26 -07:00
- description:
- https://www.lynda.com/Developer-Programming-Foundations-tutorials/Foundations-Programming-Design-Patterns/135365-2.html
2016-06-05 19:46:49 -07:00
- strategy
- singleton
- adapter
- prototype
- decorator
2016-06-06 09:13:56 -07:00
- visitor
- factory
2016-06-05 19:46:49 -07:00
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
2016-06-11 11:49:18 -07:00
Operating Systems:
- https://www.youtube.com/watch?v=-KWd_eQYLwY&index=2&list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c
2016-06-05 19:46:49 -07:00
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
2016-06-07 11:56:41 -07:00
Familiarize yourself with unix-based souped-up code editor: emacs & vi(m)
vi(m):
- https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr
- set of 4:
- https://www.youtube.com/watch?v=SI8TeVMX8pk
- https://www.youtube.com/watch?v=F3OO7ZIOaJE
- https://www.youtube.com/watch?v=ZYEccA_nMaI
- https://www.youtube.com/watch?v=1lYD5gwgZIA
emacs:
- https://www.youtube.com/watch?v=hbmV1bnQ-i0
- set of 3:
- https://www.youtube.com/watch?v=ujODL7MD04Q
- https://www.youtube.com/watch?v=XWpsRupJ4II
- https://www.youtube.com/watch?v=paSgzPso-yc
- https://www.youtube.com/watch?v=JWD1Fpdd4Pc
2016-06-05 19:46:49 -07:00
Testing
2016-06-06 17:52:25 -07:00
-------------------------------------------------------------------
2016-06-07 18:59:09 -07:00
Once you're closer to the interview:
- Cracking The Coding Interview Set 2:
- https://www.youtube.com/watch?v=4NIb9l3imAo
- https://www.youtube.com/watch?v=Eg5-tdAwclo
- https://www.youtube.com/watch?v=1fqxMuPmGak
-------------------------------------------------------------------
2016-06-06 17:52:25 -07:00
Extras that can't hurt:
2016-06-13 16:27:31 -07:00
Computer Security:
- MIT (23 videos): https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh
2016-06-05 19:46:49 -07:00
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/
2016-06-06 09:13:56 -07:00
Fast Fourier Transform
- http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/
2016-06-05 19:46:49 -07:00
Machine Learning:
2016-06-07 18:59:09 -07:00
- great course: https://www.coursera.org/learn/machine-learning
2016-06-05 19:46:49 -07:00
- http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/
- http://www.dataschool.io/
2016-06-10 11:04:28 -07:00
Parallel Programming:
- https://www.coursera.org/learn/parprog1/home/week/1
2016-06-07 18:59:09 -07:00
------------------------
2016-06-05 19:46:49 -07:00
2016-06-07 11:56:41 -07:00
Be thinking of for when the interview comes:
2016-06-05 19:46:49 -07:00
2016-06-07 11:56:41 -07:00
Think of about 20 interview questions you'll get, along the lines of the items below:
have 2-3 answers for each
Have a story, not just data, about something you accomplished
Why do you want this job?
What's a tough problem you've solved?
2016-06-07 18:59:09 -07:00
Biggest challenges faced?
Best/worst designs seen?
Ideas for improving an existing Google product.
2016-06-07 11:56:41 -07:00
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?
2016-06-07 18:59:09 -07:00
What did you most enjoy at [job x / project y]?
What was the biggest challenge you faced at [job x / project y]?
What was the hardest bug you faced at [job x / project y]?
What did you learn at [job x / project y]?
What would you have done better at [job x / project y]?
---------------------------
Have questions for the interviewer.
Some of mine (I already may know answer to but want their opinion or team perspective):
- How large is your team?
- What is your dev cycle look like? Do you do sprints/agile?
- How are decisions made in your team?
2016-06-07 22:52:18 -07:00
- How many meetings do you have per week?
- Do you feel your work environment helps you concentrate?
2016-06-07 18:59:09 -07:00
- What are you working on?
- What do you like about it?
- What is the work life like?
2016-06-05 19:46:49 -07:00
2016-06-08 19:09:15 -07:00
##########################################################################################
## Books:
##########################################################################################
Mentioned in Coaching:
The Algorithm Design Manual
2016-06-17 22:40:39 -07:00
- Book (can rent on kindle): http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
- Answers: http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)
2016-06-08 19:09:15 -07:00
Algorithms and Programming: Problems and Solutions:
http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474
2016-06-10 11:04:28 -07:00
Once you've understood everything in the daily plan:
read and do exercises from the books below. Then move to coding challenges (below)
2016-06-08 19:09:15 -07:00
Read first:
Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition:
http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html
Read second:
2016-06-08 20:45:35 -07:00
Cracking the Coding Interview, 6th Edition:
2016-06-08 19:09:15 -07:00
- 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
2016-06-08 20:45:35 -07:00
Introduction to Algorithms
2016-06-08 19:09:15 -07:00
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".
##########################################################################################
##########################################################################################
##
##
##
2016-06-08 19:10:54 -07:00
## Everything below is my recommendation, not Google's, and
## you may not have enough time to watch or read them all.
## That's ok. I may not either.
2016-06-08 19:09:15 -07:00
##
##
##
##########################################################################################
2016-06-05 19:46:49 -07:00
##########################################################################################
## Videos:
##########################################################################################
2016-06-08 20:45:35 -07:00
CSE373 - Analysis of Algorithms (25 videos):
2016-06-08 19:09:15 -07:00
- https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1
2016-06-05 19:46:49 -07:00
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
2016-06-08 20:45:35 -07:00
- http://dl.acm.org/ft_gateway.cfm?id=2767407&ftid=1607485&dwn=1&CFID=627637486&CFTOKEN=49290244
2016-06-05 19:46:49 -07:00
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
##########################################################################################
## Coding exercises/challenges:
##########################################################################################
2016-06-07 11:56:41 -07:00
- https://courses.csail.mit.edu/iap/interview/materials.php
2016-06-08 19:09:15 -07:00
LeetCode: https://leetcode.com/
TopCoder: https://www.topcoder.com/
2016-06-05 19:46:49 -07:00
2016-06-07 11:56:41 -07:00
More:
2016-06-05 19:46:49 -07:00
HackerRank: https://www.hackerrank.com/
Codility: https://codility.com/programmers/
2016-06-06 17:52:25 -07:00
Project Euler: https://projecteuler.net/index.php?section=problems
2016-06-05 19:46:49 -07:00
InterviewCake: https://www.interviewcake.com/
InterviewBit: https://www.interviewbit.com/invite/icjf
2016-06-08 20:45:35 -07:00
##########################################################################################
## Maybe:
##########################################################################################
http://www.gainlo.co/ - Mock interviewers from big companies
2016-06-05 19:46:49 -07:00
##########################################################################################
2016-06-06 17:52:25 -07:00
## Code References:
##########################################################################################
For review questions in C book:
https://github.com/lekkas/c-algorithms
2016-06-05 19:46:49 -07:00
##########################################################################################
2016-06-06 17:52:25 -07:00
## Once you've got the job (this is mainly for me):
##########################################################################################
2016-06-17 22:40:39 -07:00
Books:
Clean Code
Code Complete
2016-06-17 20:35:31 -07:00
* - C++ Seasoning:
- https://www.youtube.com/watch?v=qH6sSOr-yk8
2016-06-17 20:45:31 -07:00
* - Better Code: Data Structures:
- https://www.youtube.com/watch?v=sWgDk-o-6ZE
2016-06-06 17:52:25 -07:00
C++ Talks at CPPCon:
- https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh
2016-06-05 19:46:49 -07:00
2016-06-06 17:52:25 -07:00
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
2016-06-05 19:46:49 -07:00
##########################################################################################
## Done. ##
2016-06-06 17:52:25 -07:00
##########################################################################################