plan.txt 27 KB

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