2016-06-06 10:18:54 -07:00

412 lines
17 KiB
Plaintext

##########################################################################################
## Knowledge:
##########################################################################################
* - how computers process a program:
* - https://www.youtube.com/watch?v=42KTvGYQYnA
* - https://www.youtube.com/watch?v=Mv2XQgpbTNE
* - Computer Arch Intro:
(first video only - interesting but not required) https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq&index=1
* - Parity & Hamming Code:
Parity:
https://www.youtube.com/watch?v=DdMcAUlxh1M
Hamming Code:
https://www.youtube.com/watch?v=1A_NcXxdoCc
https://www.youtube.com/watch?v=JAMLuxdHH8o
Error Checking:
https://www.youtube.com/watch?v=wbH2VxzmoZk
* - C
* - K&R C book (ANSI C)
- C++
* - basics
* - pointers
* - functions
* - references
* - templates
* - compilation
* - scope & linkage
* - namespaces
* - OOP
* - STL
* - functors: http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html
* - C++ at Google: https://www.youtube.com/watch?v=NOCElcMcFik
* - Google C++ Style Guide: https://google.github.io/styleguide/cppguide.html
- Google uses clang-format (Google setting)
- C++ Core Guidelines: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
* - Efficiency with Algorithms, Performance with Data Structures: https://youtu.be/fHNmRkzxHWs
- review: https://www.youtube.com/watch?v=Rub-JsjMhWY
* - compilers:
* - https://class.coursera.org/compilers-004/lecture/1
* - https://class.coursera.org/compilers-004/lecture/2
* - C++: https://www.youtube.com/watch?v=twodd1KFfGk
* - Understanding Compiler Optimization (C++): https://www.youtube.com/watch?v=FnGCDLhaxKU
----------------------------------------------------------------
The Gauntlet:
Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
C
C++ - without using built-in types
C++ - using built-in types, like STL's std::list for a linked list
Python - without using built-in types
and write tests to ensure I'm doing it right
Why code in all of these?
Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
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)
----------------------------------------------------------------
linked lists
- singly-linked
* - Description: https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists
* - C Code (can jump to 6 minutes in): https://www.youtube.com/watch?v=KjtPAW5jyo8
- Java Code: https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/uwobd/core-java-code-for-a-linked-list
- doubly-linked
- Description: https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists
- reverse a singly-linked list
- why you should avoid linked lists:
- https://www.youtube.com/watch?v=YQs6IC-vgmo
stacks
- see: https://class.coursera.org/algs4partI-010/lecture
- https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks
queues
- see: https://class.coursera.org/algs4partI-010/lecture
- https://www.coursera.org/learn/data-structures/lecture/EShpq/queues
arrays
- https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays
- https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays
- Time
- O(1) to add/remove at end (amortized for allocations for more space), index, or update
- O(n) to insert/remove elsewhere
- Space
- contiguous in memory, so proximity helps performance
- space needed = size of object * number of items to store
Vectors
- Vector calculus ?
heaps
- https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees
- min heap
- max heap
Priority Queue
- https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction
- see: https://class.coursera.org/algs4partI-010/lecture
- https://class.coursera.org/algs4partI-010/lecture/39
- https://en.wikipedia.org/wiki/Priority_queue
Disjoint Sets:
- https://www.coursera.org/learn/data-structures/lecture/JssSY/overview
- https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees
hashtables
- https://www.youtube.com/watch?v=C4Kc8xzcA68
- https://class.coursera.org/algs4partI-010/lecture/52
- https://www.coursera.org/learn/data-structures/home/week/3
- see: https://class.coursera.org/algs4partI-010/lecture
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables
- test: implement with only arrays
tries
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries
Circular buffer/FIFO:
- https://en.wikipedia.org/wiki/Circular_buffer
Bit operations
- count on bits
- https://youtu.be/Hzuzo9NJrlc
- max run of off bits
- bit shifting
binary search
Sorting
- no bubble sort - it's terrible
- at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort)
- Which algorithms can be used on lists? Which on arrays? Which on both? Is Quicksort stable?
- algos:
- mergesort
- quicksort
Caches
- LRU cache
Trees
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees
- see: https://class.coursera.org/algs4partI-010/lecture
- basic tree construction
- traversal
- manipulation algorithms
- binary search trees BSTs
- https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction
- applications:
- https://class.coursera.org/algs4partI-010/lecture/57
- n-ary trees
- trie-trees
- at least one type of balanced binary tree (and know how it's implemented):
- red/black tree
- https://class.coursera.org/algs4partI-010/lecture/50
- splay trees
- https://www.coursera.org/learn/data-structures/lecture/O9nZ6/splay-trees
- AVL trees
- https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees
- https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation
- https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge
- 2-3 Search Trees
- https://class.coursera.org/algs4partI-010/lecture/49
- B-Trees:
- https://class.coursera.org/algs4partI-010/lecture/51
- BFS (breadth-first search)
- DFS (depth-first search)
- know the difference between
- inorder
- postorder
- preorder
Graphs:
There are three basic ways to represent a graph in memory:
- objects and pointers
- matrix
- adjacency list
- familiarize yourself with each representation and its pros & cons
- now their computational complexity, their tradeoffs, and how to implement them in real code
- If you get a chance, try to study up on fancier algorithms:
- Dijkstra
- A*
Other data structures:
- You should study up on as many other data structures and algorithms as possible
- 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.
- Find out what NP-complete means.
Recursion
- when it is appropriate to use it
Algorithmic complexity
open-ended problems
- manipulate strings
- manipulate patterns
design patterns:
- strategy
- singleton
- adapter
- prototype
- decorator
- visitor
- factory
Combinatorics (n choose k)
Probability
Dynamic Programming
Processes, Threads, Concurrency issues
- difference: https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread
- threads: https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M
- stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4
- locks
- mutexes
- semaphores
- monitors
- how they work
- deadlock
- livelock
Process resource needs
Thread resource needs
Modern concurrency constructs with multicore processors
Context switching
- How context switching is initiated by the operating system and underlying hardware
Scheduling
Weighted random sampling
Implement system routines
Distill large data sets to single values
Transform one data set to another
Handling obscenely large amounts of data
System design:
- features sets
- interfaces
- class hierarchies
- designing a system under certain constraints
- simplicity and robustness
- tradeoffs
Performance analysis and optimization
Testing
Information theory:
- Markov processes:
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation
- https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation
- https://www.khanacademy.org/computing/computer-science/informationtheory/moderninfotheory/v/symbol-rate-information-theory
- includes Markov chain
Bloom Filter
- https://www.youtube.com/watch?v=-SuTGoFYjZs
- http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/
Fast Fourier Transform
- http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/
C (for basis of C)
C++ (for interview answers)
Machine Learning:
- http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/
- review videos
- intro in Goodreader on iPad
- http://www.dataschool.io/
---
When you have time:
C++ Talks at CPPCon:
- https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh
Compilers:
- https://class.coursera.org/compilers-004/lecture
Computer and processor architecture:
- https://class.coursera.org/comparch-003/lecture
Long series of C++ videos:
- https://www.youtube.com/playlist?list=PLfVsf4Bjg79Cu5MYkyJ-u4SyQmMhFeC1C
---
Biggest challenges faced
Best/worst designs seen
Ideas for improving existing products
- my search idea (optimal result exhaustion and refresh)
##########################################################################################
## Videos:
##########################################################################################
6.042: Math for CS (25 videos):
- https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B
6.006: Intro to Algorithms (47 videos):
- https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False
6.033: Computer System Engineering (22 videos):
- https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484
6.046: Design and Analysis of Algorithms (34 videos):
- https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp
6.851: Advanced Data Structures (22 videos):
- https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf
Stanford: Programming Paradigms (17 videos)
- https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False
##########################################################################################
## Articles:
##########################################################################################
- https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/
- http://highscalability.com/blog/2016/4/4/how-to-remove-duplicates-in-a-large-dataset-reducing-memory.html
- http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html
- http://highscalability.com/blog/2016/3/21/to-compress-or-not-to-compress-that-was-ubers-question.html
- http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html
- http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html
- http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html
- http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html
- http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html
- http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html
- http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html
- http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html
- http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html
- http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html
- http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html
- http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html
##########################################################################################
## Papers:
##########################################################################################
Computing Weak Consistency in Polynomial Time
- 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
How Developers Search for Code: A Case Study
- http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf
Borg, Omega, and Kubernetes
- http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf
Continuous Pipelines at Google
- http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf
AddressSanitizer: A Fast Address Sanity Checker
- http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
##########################################################################################
## Interview Prep:
##########################################################################################
Videos:
- https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be
- https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be
Articles:
- http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html
- http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
- http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions
- http://www.google.com/about/careers/lifeatgoogle/hiringprocess/
Additional:
- https://courses.csail.mit.edu/iap/interview/materials.php
- http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/
- https://www.youtube.com/watch?v=rEJzOhC5ZtQ&feature=youtu.be
- https://www.youtube.com/watch?v=aClxtDcdpsQ&feature=youtu.be
- https://www.youtube.com/watch?v=2cf9xo1S134&feature=youtu.be
##########################################################################################
## Books:
##########################################################################################
%%%%% Mentioned in Coaching %%%%%%%%%%%%%%%
The Algorithm Design Manual
http://sist.sysu.edu.cn/~isslxm/DSA/textbook/Skiena.-.TheAlgorithmDesignManual.pdf
Algorithms and Programming: Problems and Solutions:
http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474
Read first:
Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition:
http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html
Read second:
Cracking the Coding Interview, Fourth Edition:
http://www.amazon.com/Cracking-Coding-Interview-Fourth-Edition/dp/145157827X
%%%%% Additional %%%%%%%%%%%%%%%
Programming Pearls:
- http://www.wou.edu/~jcm/Spring-P-2015/Programming%20Pearls%20(2nd%20Ed)%20Bentley.pdf
The Google Resume:
- https://www.uop.edu.jo/download/research/members/495_1887_llll.pdf
* - C Programming Language, Vol 2
* - C++ Primer Plus
Clean Code
Code Complete
Introduction to Algorithms
##########################################################################################
## Coding exercises/challenges:
##########################################################################################
Recommended: LeetCode: https://leetcode.com/
HackerRank: https://www.hackerrank.com/
Codility: https://codility.com/programmers/
Proect Euler: https://projecteuler.net/index.php?section=problems
InterviewCake: https://www.interviewcake.com/
InterviewBit: https://www.interviewbit.com/invite/icjf
##########################################################################################
## Code:
##########################################################################################
https://github.com/lekkas/c-algorithms
##########################################################################################
## Done. ##
##########################################################################################