plan.txt 25 KB

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