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
2016-06-21 12:53:09 -07:00
* - how floating point numbers are stored:
* - simple 8-bit: http://math.stackexchange.com/questions/301435/fractions-in-binary
* - 32 bit: https://www.youtube.com/watch?v=ji3SfClm8TU
* - 64 bit: https://www.youtube.com/watch?v=50ZYcZebIec
2016-06-06 10:18:54 -07:00
* - 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-23 21:08:29 -07:00
* - C++
2016-06-05 19:46:49 -07:00
* - 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-23 14:00:09 -07:00
* - review of C++ concepts: https://www.youtube.com/watch?v=Rub-JsjMhWY
2016-06-05 19:46:49 -07:00
2016-06-23 21:08:29 -07:00
- Python
I've already read quite a bit. This is just for review.
- https://www.youtube.com/watch?v=N4mEzFDjqtA
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-23 14:00:09 -07:00
-----------------------------------------------------
Trees
-----------------------------------------------------
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-23 14:00:09 -07:00
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-23 14:00:09 -07:00
2016-06-17 20:35:31 -07:00
* - Stacks
2016-06-19 18:05:27 -07:00
* - https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks
* - https://class.coursera.org/algs4partI-010/lecture/18
* - 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
* - Will not implement. Implementing with array is trivial.
2016-06-23 14:00:09 -07:00
2016-06-19 21:36:34 -07:00
* - Queues
2016-06-20 21:49:46 -07:00
* - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html
2016-06-19 18:05:27 -07:00
* - https://class.coursera.org/algs4partI-010/lecture/20
* - https://www.coursera.org/learn/data-structures/lecture/EShpq/queue
* - Circular buffer/FIFO: https://en.wikipedia.org/wiki/Circular_buffer
2016-06-19 21:36:34 -07:00
* - https://class.coursera.org/algs4partI-010/lecture/23
2016-06-20 21:49:46 -07:00
* - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html
2016-06-19 21:36:34 -07:00
* - Implement using linked-list, with tail pointer:
2016-06-18 19:47:49 -07:00
- enqueue(value) - adds value at position at tail
- dequeue() - returns value and removes least recently added element (front)
- empty()
2016-06-19 21:36:34 -07:00
* - Implement using fixed-sized array:
2016-06-18 19:47:49 -07:00
- enqueue(value) - adds item at end of available storage
- dequeue() - returns value and removes least recently added element
- empty()
2016-06-19 18:05:27 -07:00
- full()
* - Cost:
2016-06-18 19:47:49 -07:00
- a bad implementation using linked list where you enqueue at head and dequeue at tail would be O(n)
because you'd need the next to last element, causing a full traversal each dequeue
2016-06-21 22:26:55 -07:00
enqueue: O(1) (amortized, linked list and array [probing])
2016-06-18 19:47:49 -07:00
dequeue: O(1) (linked list and array)
empty: O(1) (linked list and array)
2016-06-23 14:00:09 -07:00
2016-06-23 11:55:07 -07:00
* - Hash tables
2016-06-20 21:49:46 -07:00
* - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html
* - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html
* - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html
2016-06-21 21:20:28 -07:00
* - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html
* - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables
2016-06-20 21:49:46 -07:00
* - https://www.youtube.com/watch?v=C4Kc8xzcA68
* - https://class.coursera.org/algs4partI-010/lecture/52
* - https://class.coursera.org/algs4partI-010/lecture/53
* - https://class.coursera.org/algs4partI-010/lecture/55
* - https://class.coursera.org/algs4partI-010/lecture/56
* - https://www.coursera.org/learn/data-structures/home/week/3
2016-06-21 21:20:28 -07:00
* - https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem
* - distributed hash tables:
- https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox
- https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables
* - MIT:
https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8
https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb
https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb
2016-06-23 11:55:07 -07:00
* - implement with array using linear probing
- hash(k, m) - m is size of hash table
- add(key, value) - if key already exists, update value
2016-06-21 21:20:28 -07:00
- exists(key)
- get(key)
- remove(key)
2016-06-17 20:35:31 -07:00
2016-06-23 14:00:09 -07:00
-----------------------------------------------------
More Knowledge
-----------------------------------------------------
2016-06-23 21:08:29 -07:00
* - Binary search:
* - https://www.youtube.com/watch?v=D5SrAga1pno
* - https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search
* - detail: https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/
* - Implement:
- binary search (on sorted array of integers)
- binary search using recursion
2016-06-23 14:00:09 -07:00
2016-06-24 22:50:06 -07:00
* - Bit operations
* - Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
* - words: https://en.wikipedia.org/wiki/Word_(computer_architecture)
* - Good intro:
https://www.youtube.com/watch?v=7jkIUgLC29I
* - https://www.youtube.com/watch?v=d0AwjSpNXR0
* - https://en.wikipedia.org/wiki/Bit_manipulation
* - https://en.wikipedia.org/wiki/Bitwise_operation
* - https://graphics.stanford.edu/~seander/bithacks.html
* - http://bits.stephan-brumme.com/
* - http://bits.stephan-brumme.com/interactive.html
* - 2s and 1s complement
- https://www.youtube.com/watch?v=lKTsv6iVxV4
- https://en.wikipedia.org/wiki/Ones%27_complement
- https://en.wikipedia.org/wiki/Two%27s_complement
* - count set bits
2016-06-23 14:00:09 -07:00
- https://youtu.be/Hzuzo9NJrlc
- https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan
- http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer
2016-06-24 22:50:06 -07:00
* - round to next power of 2:
2016-06-23 14:00:09 -07:00
- http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html
2016-06-24 22:50:06 -07:00
* - swap values:
2016-06-23 14:00:09 -07:00
- http://bits.stephan-brumme.com/swap.html
2016-06-24 22:50:06 -07:00
* - absolute value:
2016-06-23 14:00:09 -07:00
- http://bits.stephan-brumme.com/absInteger.html
2016-06-10 11:04:28 -07:00
* - Parity & Hamming Code:
2016-06-25 17:19:49 -07:00
* - Parity:
- https://www.youtube.com/watch?v=DdMcAUlxh1M
* - Hamming Code:
- Error detection: https://www.youtube.com/watch?v=1A_NcXxdoCc
- Error correction: https://www.youtube.com/watch?v=JAMLuxdHH8o
* - Error Checking:
- https://www.youtube.com/watch?v=wbH2VxzmoZk
2016-06-23 14:00:09 -07:00
-----------------------------------------------------
Trees
-----------------------------------------------------
Notes:
2016-06-25 17:19:49 -07:00
- Series: https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees
- Series: https://www.coursera.org/learn/data-structures/lecture/95qda/trees
2016-06-05 19:46:49 -07:00
- basic tree construction
- traversal
- manipulation algorithms
- BFS (breadth-first search)
- DFS (depth-first search)
2016-06-25 17:19:49 -07:00
- know the difference between these:
- inorder (DFS: left, self, right)
- postorder (DFS: left, right, self)
- preorder (DFS: self, left, right)
- level order (BFS, using queue)
2016-06-23 14:00:09 -07:00
- Binary search trees: BSTs
2016-06-25 22:04:02 -07:00
* - Series: https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees
* - Series: https://class.coursera.org/algs4partI-010/lecture/43
2016-06-25 17:19:49 -07:00
- starts with symbol table and goes through BST applications
2016-06-25 22:04:02 -07:00
* - https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction
- C/C++:
- https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28
- https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29
- https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P
- https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31
- https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32
- https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P
- https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P
- https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P
- https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36
- https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P
Know 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
- B-Trees:
- fun fact: B could stand for Boeing, Balanced, or Bayer (co-inventor)
- https://en.wikipedia.org/wiki/B-tree
- https://class.coursera.org/algs4partI-010/lecture/51
- 2-3 (type of B-tree) Search Trees
- https://class.coursera.org/algs4partI-010/lecture/49
2016-06-23 14:00:09 -07:00
- N-ary trees
- https://en.wikipedia.org/wiki/K-ary_tree
- Tries
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie
- 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
- Binary Heap:
Min Heap / Max Heap
- 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
- Priority Queue
- https://en.wikipedia.org/wiki/Priority_queue
-----------------------------------------------------
Graphs
-----------------------------------------------------
Notes:
2016-06-05 19:46:49 -07:00
There are three basic ways to represent a graph in memory:
- objects and pointers
- matrix
- adjacency list
2016-06-23 14:00:09 -07:00
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
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-23 14:00:09 -07:00
When asked a question, look for a graph-based solution first, then move on if none.
2016-06-23 21:08:29 -07:00
Compute Strongly Connected Components
- https://www.coursera.org/learn/algorithms-on-graphs/home/week/5
2016-06-23 14:00:09 -07:00
Implement:
Dijkstra's algorithm
A*
You'll get more graph practice in Skiena's book (see Books section below) and the interview books
-----------------------------------------------------
Sorting
-----------------------------------------------------
Notes:
- Implement & know best case/worst case, average complexity of each:
- no bubble sort - it's terrible - O(n^2)
- 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:
Mergesort
Quicksort
Insertion Sort
Selection Sort
2016-06-25 17:19:49 -07:00
For Curiosity:
Radix Sort: https://www.youtube.com/watch?v=xhr26ia4k38
2016-06-23 14:00:09 -07:00
-----------------------------------------------------
More Knowledge
-----------------------------------------------------
Caches
- LRU cache
NP and NP Complete
- 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-23 14:00:09 -07:00
2016-06-05 19:46:49 -07:00
Recursion
- when it is appropriate to use it
2016-06-23 14:00:09 -07:00
2016-06-05 19:46:49 -07:00
open-ended problems
- manipulate strings
- manipulate patterns
2016-06-23 14:00:09 -07:00
Combinatorics (n choose k)
Probability
2016-06-24 22:50:06 -07:00
- https://www.youtube.com/watch?v=sZkAAk9Wwa4
- https://www.youtube.com/watch?v=dNaJg-mLobQ
2016-06-23 14:00:09 -07:00
Dynamic Programming
2016-06-21 22:26:55 -07:00
Scheduling
2016-06-23 14:00:09 -07:00
2016-06-21 22:26:55 -07:00
Weighted random sampling
2016-06-23 14:00:09 -07:00
2016-06-21 22:26:55 -07:00
Implement system routines
2016-06-23 14:00:09 -07:00
2016-06-21 22:26:55 -07:00
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-23 21:08:29 -07:00
- Patterns: https://www.youtube.com/playlist?list=PLF206E906175C7E07
- UML: https://www.youtube.com/playlist?list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc
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-23 14:00:09 -07:00
2016-06-23 21:08:29 -07:00
2016-06-21 21:20:28 -07:00
Operating Systems (25 videos):
2016-06-11 11:49:18 -07:00
- https://www.youtube.com/watch?v=-KWd_eQYLwY&index=2&list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c
2016-06-21 21:20:28 -07:00
Covers:
2016-06-21 21:43:49 -07:00
Processes, Threads, Concurrency issues
2016-06-21 22:26:55 -07:00
- difference between processes and threads
- processes
2016-06-21 21:48:49 -07:00
- threads
2016-06-21 21:43:49 -07:00
- locks
- mutexes
- semaphores
- monitors
- how they work
- deadlock
- livelock
CPU activity, interrupts, context switching
2016-06-21 21:20:28 -07:00
Modern concurrency constructs with multicore processors
2016-06-21 21:43:49 -07:00
Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o)
Thread resource needs (shares above with other threads in same process but each has its own pc, stack counter, registers and stack)
Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy.
2016-06-21 21:20:28 -07:00
Context switching
- How context switching is initiated by the operating system and underlying hardware
2016-06-21 21:48:49 -07:00
- threads in C++:
https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M
- stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4
2016-06-23 14:00:09 -07:00
Data handling:
- see scalability options below
Distill large data sets to single values
Transform one data set to another
Handling obscenely large amounts of data
2016-06-05 19:46:49 -07:00
System design:
- features sets
- interfaces
- class hierarchies
- designing a system under certain constraints
- simplicity and robustness
- tradeoffs
2016-06-23 14:00:09 -07:00
- performance analysis and optimization
Familiarize yourself with a unix-based code editor: emacs & vi(m)
2016-06-07 11:56:41 -07:00
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-23 14:00:09 -07:00
String search algorithm:
Knuth-Morris-Pratt (KMP):
- https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm
- https://www.youtube.com/watch?v=2ogqPWJSftE
Boyer– Moore string search algorithm
- https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm
- https://www.youtube.com/watch?v=xYBM0_dChRE
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?
2016-06-23 14:00:09 -07:00
- What is your dev cycle look like? Do you do waterfall/sprints/agile?
- Are rushes to deadlines common? Or is there flexibility?
2016-06-07 18:59:09 -07:00
- 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:
2016-06-23 14:00:09 -07:00
The Algorithm Design Manual (Skiena)
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-23 14:00:09 -07:00
- https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844
2016-06-08 20:45:35 -07:00
2016-06-08 19:09:15 -07:00
Programming Pearls:
- http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880
2016-06-23 14:00:09 -07:00
If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview".
2016-06-08 19:09:15 -07:00
##########################################################################################
##########################################################################################
##
##
##
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-21 21:20:28 -07:00
MIT 6.042: Math for CS (25 videos):
2016-06-05 19:46:49 -07:00
- https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B
2016-06-21 21:20:28 -07:00
MIT 6.006: Intro to Algorithms (47 videos):
2016-06-05 19:46:49 -07:00
- https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False
2016-06-21 21:20:28 -07:00
MIT 6.033: Computer System Engineering (22 videos):
2016-06-05 19:46:49 -07:00
- https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484
2016-06-21 21:20:28 -07:00
MIT 6.046: Design and Analysis of Algorithms (34 videos):
2016-06-05 19:46:49 -07:00
- https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp
2016-06-21 21:20:28 -07:00
MIT 6.858 Computer Systems Security, Fall 2014 ():
- https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh
MIT 6.851: Advanced Data Structures (22 videos):
- https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1
2016-06-05 19:46:49 -07:00
Stanford: Programming Paradigms (17 videos)
- https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False
2016-06-21 21:20:28 -07:00
MIT 6.050J Information and Entropy, Spring 2008 ()
- https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7
Introduction to Cryptography:
- https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be
##########################################################################################
## Google:
##########################################################################################
- How Search Works:
https://www.google.com/insidesearch/howsearchworks/thestory/
https://www.youtube.com/watch?v=BNHR6IQJGZs
https://www.google.com/insidesearch/howsearchworks/
2016-06-05 19:46:49 -07:00
##########################################################################################
## 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-21 22:26:55 -07:00
MIT CMS.611J Creating Video Games, Fall 2014
- https://www.youtube.com/watch?v=pfDfriSjFbY&list=PLUl4u3cNGP61V4W6yRm1Am5zI94m33dXk
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
##########################################################################################