plan.txt 24 KB

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