plan.txt 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1. ##########################################################################################
  2. ## How to read this
  3. ##########################################################################################
  4. Everything below is an outline, and you should tackle the items in order from top to bottom.
  5. I put an asterisk/star (*) at the beginning of a line when I'm done with it. When all sub-items are done,
  6. I put a * at the top level, meaning the entire block is done. Sorry you have to remove all my *
  7. to use this the same way. If you search/replace, there are a couple of places to look out for.
  8. Sometimes I just put a * at top level if I know I've done all the subtasks, to cut down on * clutter.
  9. ##########################################################################################
  10. ## Interview Prep:
  11. ##########################################################################################
  12. * - Videos:
  13. * - https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be
  14. * - https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be
  15. * - https://www.youtube.com/watch?v=8npJLXkcmu8
  16. * - Articles:
  17. * - http://www.google.com/about/careers/lifeatgoogle/hiringprocess/
  18. * - http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
  19. - all the things he mentions that you need to know are listed below
  20. * - (very dated) http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html
  21. * - http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions
  22. * - Additional (not suggested by Google but I added):
  23. * - https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4
  24. * - https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx
  25. * - https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1
  26. * - http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture
  27. * - http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/
  28. * - Cracking The Coding Interview Set 1:
  29. * - https://www.youtube.com/watch?v=rEJzOhC5ZtQ
  30. * - https://www.youtube.com/watch?v=aClxtDcdpsQ
  31. * - How to Get a Job at the Big 4:
  32. * - https://www.youtube.com/watch?v=YJZCUhxNCv8
  33. ##########################################################################################
  34. ## Knowledge:
  35. ##########################################################################################
  36. This short section were prerequisites/interesting info I wanted to learn before getting started on the daily plan.
  37. You need to know C, C++, or Java to do the coding part of the interview.
  38. They will sometimes make an exception and let you use Python or some other language, but the language
  39. must be mainstream and allow you write your code low-level enough to solve the problems.
  40. You'll see some C, C++ learning included below.
  41. There are a few books involved, see the bottom.
  42. Some videos are available only by enrolling in a Coursera or EdX class. It is free to do so.
  43. * - how computers process a program:
  44. * - https://www.youtube.com/watch?v=42KTvGYQYnA
  45. * - https://www.youtube.com/watch?v=Mv2XQgpbTNE
  46. * - Computer Arch Intro:
  47. (first video only - interesting but not required) https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq&index=1
  48. * - C
  49. * - K&R C book (ANSI C)
  50. * - Clang: https://www.youtube.com/watch?v=U3zCxnj2w8M
  51. * - GDB:
  52. - https://www.youtube.com/watch?v=USPvePv1uzE
  53. - https://www.youtube.com/watch?v=y5JmQItfFck
  54. - Valgrind: https://www.youtube.com/watch?v=fvTsFjDuag8
  55. - C++
  56. * - basics
  57. * - pointers
  58. * - functions
  59. * - references
  60. * - templates
  61. * - compilation
  62. * - scope & linkage
  63. * - namespaces
  64. * - OOP
  65. * - STL
  66. * - functors: http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html
  67. * - C++ at Google: https://www.youtube.com/watch?v=NOCElcMcFik
  68. * - Google C++ Style Guide: https://google.github.io/styleguide/cppguide.html
  69. * - Google uses clang-format (there is a command line "style" argument: -style=google)
  70. * - Efficiency with Algorithms, Performance with Data Structures: https://youtu.be/fHNmRkzxHWs
  71. - C++ Core Guidelines: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
  72. - review of C++ concepts: https://www.youtube.com/watch?v=Rub-JsjMhWY
  73. * - compilers:
  74. * - https://class.coursera.org/compilers-004/lecture/1
  75. * - https://class.coursera.org/compilers-004/lecture/2
  76. * - C++: https://www.youtube.com/watch?v=twodd1KFfGk
  77. * - Understanding Compiler Optimization (C++): https://www.youtube.com/watch?v=FnGCDLhaxKU
  78. ----------------------------------------------------------------
  79. The Daily Plan:
  80. 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.
  81. Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
  82. C - using structs and functions that take a struct * and something else as args.
  83. C++ - without using built-in types
  84. C++ - using built-in types, like STL's std::list for a linked list
  85. Python - without using built-in types (to keep practicing Python)
  86. and write tests to ensure I'm doing it right, sometimes just using simple assert() statements
  87. You may do Java or something else, this is just my thing.
  88. Why code in all of these?
  89. 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)
  90. Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
  91. 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)
  92. You don't need to memorize the guts of every algorithm.
  93. Write code on a whiteboard, not a computer. Test with some sample inputs.
  94. Then test it out on a computer to make sure it's not buggy from syntax.
  95. ----------------------------------------------------------------
  96. * - Before you get started:
  97. The myth of the Genius Programmer: https://www.youtube.com/watch?v=0SARbwvhupQ
  98. Google engineers are smart, but many have an insecurity that they aren't smart enough.
  99. * - Algorithmic complexity / Big O / Asymptotic analysis
  100. - nothing to implement
  101. - Harvard CS50 - Asymptotic Notation: https://www.youtube.com/watch?v=iOq5kSKqeR4
  102. - Big O Notations (general quick tutorial) - https://www.youtube.com/watch?v=V6mKVRU1evU
  103. - Big O Notation (and Omega and Theta) - best mathematical explanation:
  104. - https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN
  105. - Skiena:
  106. - video: https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b
  107. - slides: http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf
  108. - A Gentle Introduction to Algorithm Complexity Analysis: http://discrete.gr/complexity/
  109. - Orders of Growth: https://class.coursera.org/algorithmicthink1-004/lecture/59
  110. - Asymptotics: https://class.coursera.org/algorithmicthink1-004/lecture/61
  111. - UC Berkeley Big O: https://youtu.be/VIS4YDpuP98
  112. - UC Berkeley Big Omega: https://youtu.be/ca3e7UVmeUc
  113. - Amortized Analysis: https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN
  114. - Illustrating "Big O": https://class.coursera.org/algorithmicthink1-004/lecture/63
  115. - Cheat sheet: http://bigocheatsheet.com/
  116. Arrays
  117. * - Description:
  118. - Arrays: https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays
  119. - Arrays: https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html
  120. - Multi-dim: https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html
  121. - Dynamic Arrays: https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays
  122. - Jagged: https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html
  123. - Resizing arrays:
  124. - https://class.coursera.org/algs4partI-010/lecture/19
  125. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html
  126. - Implement a vector (mutable array with automatic resizing):
  127. * - Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
  128. * - new raw data array with allocated memory
  129. - can allocate int array under the hood, just not use its features
  130. - start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128
  131. * - size() - number of items
  132. * - capacity() - number of items it can hold
  133. * - is_empty()
  134. - at(index) - returns item at given index, blows up if index out of bounds
  135. - append(item) - or push(item) - check size of element 2^
  136. - insert(index, item)
  137. - prepend(item) - can use insert above at index 0
  138. - delete(index)
  139. - remove(item)
  140. - find(item)
  141. - resize(new_capacity) // private function
  142. - when you reach capacity, resize to double the size
  143. - when popping an item, if size is 1/4 of capacity, resize to half
  144. - Time
  145. - O(1) to add/remove at end (amortized for allocations for more space), index, or update
  146. - O(n) to insert/remove elsewhere
  147. - Space
  148. - contiguous in memory, so proximity helps performance
  149. - space needed = (array capacity, which is >= n) * size of item
  150. Linked lists
  151. - singly-linked
  152. * - Description: https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists
  153. * - Lynda.com:
  154. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Introduction-lists/149042/177115-4.html
  155. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-basic-list-implementations/149042/177116-4.html
  156. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-singly-doubly-linked-lists/149042/177117-4.html
  157. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/List-support-across-languages/149042/177118-4.html
  158. * - C Code: https://www.youtube.com/watch?v=QN6FPiD0Gzo
  159. - not the whole video, just portions about Node struct and memory allocation.
  160. * - why you should avoid linked lists:
  161. - https://www.youtube.com/watch?v=YQs6IC-vgmo
  162. - implement (with tail pointer), item is the data item in a node:
  163. - push_front
  164. - get_front
  165. - pop_front
  166. - push_back
  167. - get_back
  168. - pop_back
  169. - insert_before(node, item)
  170. - insert_after(node, item)
  171. - size()
  172. - is_empty()
  173. - find(item) - assume each item is unique
  174. - remove(item) - assume each item is unique
  175. - doubly-linked list
  176. - Description: https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists
  177. - reverse a singly-linked list
  178. Stacks
  179. - see: https://class.coursera.org/algs4partI-010/lecture
  180. - https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks
  181. Queues
  182. - see: https://class.coursera.org/algs4partI-010/lecture
  183. - https://www.coursera.org/learn/data-structures/lecture/EShpq/queues
  184. Heaps
  185. - https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees
  186. - min heap
  187. - max heap
  188. Priority Queue
  189. - https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction
  190. - see: https://class.coursera.org/algs4partI-010/lecture
  191. - https://class.coursera.org/algs4partI-010/lecture/39
  192. - https://en.wikipedia.org/wiki/Priority_queue
  193. Disjoint Sets:
  194. - https://www.coursera.org/learn/data-structures/lecture/JssSY/overview
  195. - https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees
  196. Hash tables
  197. - https://www.youtube.com/watch?v=C4Kc8xzcA68
  198. - https://class.coursera.org/algs4partI-010/lecture/52
  199. - https://www.coursera.org/learn/data-structures/home/week/3
  200. - see: https://class.coursera.org/algs4partI-010/lecture
  201. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables
  202. - test: implement with only arrays
  203. Tries
  204. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries
  205. Circular buffer/FIFO:
  206. - https://en.wikipedia.org/wiki/Circular_buffer
  207. Bit operations
  208. - count on bits
  209. - https://youtu.be/Hzuzo9NJrlc
  210. - max run of on/off bits
  211. - bit shifting
  212. * - Parity & Hamming Code:
  213. Parity:
  214. https://www.youtube.com/watch?v=DdMcAUlxh1M
  215. Hamming Code:
  216. https://www.youtube.com/watch?v=1A_NcXxdoCc
  217. https://www.youtube.com/watch?v=JAMLuxdHH8o
  218. Error Checking:
  219. https://www.youtube.com/watch?v=wbH2VxzmoZk
  220. Binary search
  221. Sorting
  222. - stability in sorting algorithms:
  223. - http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms
  224. - http://www.geeksforgeeks.org/stability-in-sorting-algorithms/
  225. - Which algorithms can be used on linked lists? Which on arrays? Which on both? Is Quicksort stable?
  226. - Implement & know best case/worst case, average complexity of each:
  227. - mergesort
  228. - quicksort
  229. - insertion sort
  230. - selection sort
  231. - no bubble sort - it's terrible at O(n^2)
  232. Caches
  233. - LRU cache
  234. Trees
  235. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees
  236. - see: https://class.coursera.org/algs4partI-010/lecture
  237. - basic tree construction
  238. - traversal
  239. - manipulation algorithms
  240. - binary search trees BSTs
  241. - https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction
  242. - applications:
  243. - https://class.coursera.org/algs4partI-010/lecture/57
  244. - n-ary trees
  245. - trie-trees
  246. - at least one type of balanced binary tree (and know how it's implemented):
  247. - red/black tree
  248. - https://class.coursera.org/algs4partI-010/lecture/50
  249. - splay trees
  250. - https://www.coursera.org/learn/data-structures/lecture/O9nZ6/splay-trees
  251. - AVL trees
  252. - https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees
  253. - https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation
  254. - https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge
  255. - 2-3 Search Trees
  256. - https://class.coursera.org/algs4partI-010/lecture/49
  257. - B-Trees:
  258. - https://class.coursera.org/algs4partI-010/lecture/51
  259. - BFS (breadth-first search)
  260. - DFS (depth-first search)
  261. - know the difference between
  262. - inorder
  263. - postorder
  264. - preorder
  265. Graphs:
  266. There are three basic ways to represent a graph in memory:
  267. - objects and pointers
  268. - matrix
  269. - adjacency list
  270. - familiarize yourself with each representation and its pros & cons
  271. - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
  272. - If you get a chance, try to study up on fancier algorithms:
  273. - Dijkstra
  274. - A*
  275. - when asked a question, look for a graph-based solution first, then move on if none.
  276. Other data structures:
  277. - You should study up on as many other data structures and algorithms as possible
  278. - 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.
  279. - Know what NP-complete means.
  280. Recursion
  281. - when it is appropriate to use it
  282. open-ended problems
  283. - manipulate strings
  284. - manipulate patterns
  285. design patterns:
  286. - description:
  287. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Foundations-Programming-Design-Patterns/135365-2.html
  288. - strategy
  289. - singleton
  290. - adapter
  291. - prototype
  292. - decorator
  293. - visitor
  294. - factory
  295. Combinatorics (n choose k)
  296. Probability
  297. Dynamic Programming
  298. Processes, Threads, Concurrency issues
  299. - difference: https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread
  300. - threads: https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M
  301. - stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4
  302. - locks
  303. - mutexes
  304. - semaphores
  305. - monitors
  306. - how they work
  307. - deadlock
  308. - livelock
  309. Process resource needs
  310. Thread resource needs
  311. Modern concurrency constructs with multicore processors
  312. Context switching
  313. - How context switching is initiated by the operating system and underlying hardware
  314. Scheduling
  315. Weighted random sampling
  316. Implement system routines
  317. Distill large data sets to single values
  318. Transform one data set to another
  319. Handling obscenely large amounts of data
  320. System design:
  321. - features sets
  322. - interfaces
  323. - class hierarchies
  324. - designing a system under certain constraints
  325. - simplicity and robustness
  326. - tradeoffs
  327. Performance analysis and optimization
  328. Familiarize yourself with unix-based souped-up code editor: emacs & vi(m)
  329. vi(m):
  330. - https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr
  331. - set of 4:
  332. - https://www.youtube.com/watch?v=SI8TeVMX8pk
  333. - https://www.youtube.com/watch?v=F3OO7ZIOaJE
  334. - https://www.youtube.com/watch?v=ZYEccA_nMaI
  335. - https://www.youtube.com/watch?v=1lYD5gwgZIA
  336. emacs:
  337. - https://www.youtube.com/watch?v=hbmV1bnQ-i0
  338. - set of 3:
  339. - https://www.youtube.com/watch?v=ujODL7MD04Q
  340. - https://www.youtube.com/watch?v=XWpsRupJ4II
  341. - https://www.youtube.com/watch?v=paSgzPso-yc
  342. - https://www.youtube.com/watch?v=JWD1Fpdd4Pc
  343. Testing
  344. -------------------------------------------------------------------
  345. Once you're closer to the interview:
  346. - Cracking The Coding Interview Set 2:
  347. - https://www.youtube.com/watch?v=4NIb9l3imAo
  348. - https://www.youtube.com/watch?v=Eg5-tdAwclo
  349. - https://www.youtube.com/watch?v=1fqxMuPmGak
  350. -------------------------------------------------------------------
  351. Extras that can't hurt:
  352. Information theory:
  353. - Markov processes:
  354. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation
  355. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation
  356. - https://www.khanacademy.org/computing/computer-science/informationtheory/moderninfotheory/v/symbol-rate-information-theory
  357. - includes Markov chain
  358. Bloom Filter
  359. - https://www.youtube.com/watch?v=-SuTGoFYjZs
  360. - http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/
  361. Fast Fourier Transform
  362. - http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/
  363. Machine Learning:
  364. - great course: https://www.coursera.org/learn/machine-learning
  365. - http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/
  366. - http://www.dataschool.io/
  367. Parallel Programming:
  368. - https://www.coursera.org/learn/parprog1/home/week/1
  369. ------------------------
  370. Be thinking of for when the interview comes:
  371. Think of about 20 interview questions you'll get, along the lines of the items below:
  372. have 2-3 answers for each
  373. Have a story, not just data, about something you accomplished
  374. Why do you want this job?
  375. What's a tough problem you've solved?
  376. Biggest challenges faced?
  377. Best/worst designs seen?
  378. Ideas for improving an existing Google product.
  379. How do you work best, as an individual and as part of a team?
  380. Which of your skills or experiences would be assets in the role and why?
  381. What did you most enjoy at [job x / project y]?
  382. What was the biggest challenge you faced at [job x / project y]?
  383. What was the hardest bug you faced at [job x / project y]?
  384. What did you learn at [job x / project y]?
  385. What would you have done better at [job x / project y]?
  386. ---------------------------
  387. Have questions for the interviewer.
  388. Some of mine (I already may know answer to but want their opinion or team perspective):
  389. - How large is your team?
  390. - What is your dev cycle look like? Do you do sprints/agile?
  391. - How are decisions made in your team?
  392. - How many meetings do you have per week?
  393. - Do you feel your work environment helps you concentrate?
  394. - What are you working on?
  395. - What do you like about it?
  396. - What is the work life like?
  397. ##########################################################################################
  398. ## Books:
  399. ##########################################################################################
  400. Mentioned in Coaching:
  401. The Algorithm Design Manual
  402. http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
  403. Algorithms and Programming: Problems and Solutions:
  404. http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474
  405. Once you've understood everything in the daily plan:
  406. read and do exercises from the books below. Then move to coding challenges (below)
  407. Read first:
  408. Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition:
  409. http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html
  410. Read second:
  411. Cracking the Coding Interview, 6th Edition:
  412. - http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/
  413. Additional (not suggested by Google but I added):
  414. * - C Programming Language, Vol 2
  415. * - C++ Primer Plus, 6th Edition
  416. Introduction to Algorithms
  417. Programming Pearls:
  418. - http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880
  419. If you see people reference "The Google Resume", it was replaced by "Cracking the Coding Interview".
  420. Clean Code
  421. Code Complete
  422. ##########################################################################################
  423. ##########################################################################################
  424. ##
  425. ##
  426. ##
  427. ## Everything below is my recommendation, not Google's, and
  428. ## you may not have enough time to watch or read them all.
  429. ## That's ok. I may not either.
  430. ##
  431. ##
  432. ##
  433. ##########################################################################################
  434. ##########################################################################################
  435. ## Videos:
  436. ##########################################################################################
  437. CSE373 - Analysis of Algorithms (25 videos):
  438. - https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1
  439. 6.042: Math for CS (25 videos):
  440. - https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B
  441. 6.006: Intro to Algorithms (47 videos):
  442. - https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False
  443. 6.033: Computer System Engineering (22 videos):
  444. - https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484
  445. 6.046: Design and Analysis of Algorithms (34 videos):
  446. - https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp
  447. 6.851: Advanced Data Structures (22 videos):
  448. - https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf
  449. Stanford: Programming Paradigms (17 videos)
  450. - https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False
  451. ##########################################################################################
  452. ## Articles:
  453. ##########################################################################################
  454. - https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/
  455. - http://highscalability.com/blog/2016/4/4/how-to-remove-duplicates-in-a-large-dataset-reducing-memory.html
  456. - http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html
  457. - http://highscalability.com/blog/2016/3/21/to-compress-or-not-to-compress-that-was-ubers-question.html
  458. - http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html
  459. - http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html
  460. - http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html
  461. - http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html
  462. - http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html
  463. - http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html
  464. - http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html
  465. - http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html
  466. - http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html
  467. - http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html
  468. - http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html
  469. - http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html
  470. ##########################################################################################
  471. ## Papers:
  472. ##########################################################################################
  473. Computing Weak Consistency in Polynomial Time
  474. - http://dl.acm.org/ft_gateway.cfm?id=2767407&ftid=1607485&dwn=1&CFID=627637486&CFTOKEN=49290244
  475. How Developers Search for Code: A Case Study
  476. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf
  477. Borg, Omega, and Kubernetes
  478. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf
  479. Continuous Pipelines at Google
  480. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf
  481. AddressSanitizer: A Fast Address Sanity Checker
  482. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
  483. ##########################################################################################
  484. ## Coding exercises/challenges:
  485. ##########################################################################################
  486. - https://courses.csail.mit.edu/iap/interview/materials.php
  487. LeetCode: https://leetcode.com/
  488. TopCoder: https://www.topcoder.com/
  489. More:
  490. HackerRank: https://www.hackerrank.com/
  491. Codility: https://codility.com/programmers/
  492. Project Euler: https://projecteuler.net/index.php?section=problems
  493. InterviewCake: https://www.interviewcake.com/
  494. InterviewBit: https://www.interviewbit.com/invite/icjf
  495. ##########################################################################################
  496. ## Maybe:
  497. ##########################################################################################
  498. http://www.gainlo.co/ - Mock interviewers from big companies
  499. ##########################################################################################
  500. ## Code References:
  501. ##########################################################################################
  502. For review questions in C book:
  503. https://github.com/lekkas/c-algorithms
  504. ##########################################################################################
  505. ## Once you've got the job (this is mainly for me):
  506. ##########################################################################################
  507. C++ Talks at CPPCon:
  508. - https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh
  509. Compilers:
  510. - https://class.coursera.org/compilers-004/lecture
  511. Computer and processor architecture:
  512. - https://class.coursera.org/comparch-003/lecture
  513. Long series of C++ videos:
  514. - https://www.youtube.com/playlist?list=PLfVsf4Bjg79Cu5MYkyJ-u4SyQmMhFeC1C
  515. ##########################################################################################
  516. ## Done. ##
  517. ##########################################################################################