## Software Engineering
### Software Engineering: The Basics
Topics to review so you don't get weeded out.
[Five essential screening questions](https://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions):
* Coding - writing simple code with correct syntax (C, C++, Java).
* Object Oriented Design - basic concepts, class models, patterns.
* Scripting and Regular Expressions - know your Unix tooling.
* Data Structures - demonstrate basic knowledge of common data structures.
* Bits and Bytes - know about bits, bytes, and binary numbers.
Things you absolutely, positively **must** know:
* Algorithm complexity
* Sorting - know how to sort, know at least 2 O(n log n) sort methods (merge sort and quicksort)
* Hashtables - the most useful data structure known to humankind.
* Trees - this is basic stuff, BFS/DFS, so learn it.
* Graphs - twice as important as you think they are.
* Other Data Structures - fill up your brain with other data structures.
* Math - discrete math, combinatorics, probability.
* Systems - operating system level, concurrency, threads, processing, memory.
### Software Engineering: The Full Topics List
A much longer and fuller list of topics:
* Algorithm complexity
* Data structures
* Arrays
* Linked lists
* Stacks
* Queues
* Hash tables
* Trees
* Binary search trees
* Heap trees
* Priority queues
* Balanced search trees
* Tree traversal: preorder, inorder, postorder, BFS, DFS
* Graphs
* Directed
* Undirected
* Adjacency matrix
* Adjacency list
* BFS, DFS
* Built-In Data Structures
* Java Collections
* C++ Standard Library
* Sets
* Disjoint Sets
* Union Find
* Advanced Tree Structures
* Red-Black Trees
* Splay Trees
* AVL Trees
* k-D Trees
* Van Emde Boas Trees
* N-ary, K-ary, M-ary Trees
* Balanced Search Trees
* 2-3 Trees, 2-4 Trees
* Augmented Data Structures
* Algorithms
* NP, NP-Complete, Approximation Algorithms
* Searching
* Sequential search
* Binary search
* Sorting
* Selection
* Insertion
* Heapsort
* Quicksort
* Merge sort
* String algorithms
* String search methods
* String manipulation methos
* Recursion
* Dynamic programming
* Computational Geometry
* Convex Hull
* Object Oriented Programming
* Design patterns
* Bits and Bytes
* Mathematics
* Combinatorics
* Probability
* Linear Algebra
* FFT
* Bloom Filter
* HyperLogLog
* Systems Level Programming
* Processing and threads
* Caching
* Memory
* System routines
* Messaging Systems
* Serialization
* Queue Systems
* Scaling
* Parallel Programming
* Systems Deisng
* Scalability
* Data Handling
* Crypto and Security
* Information Theory
* Parity and Hamming Code
* Entropy
* Hash Attacks
* Unix
* Kernel Basics
* Command Line Tools
* Emacs/Vim
* Supplemental topics
* Unicode
* Garbage Collection
* Networking
* Compilers
* Compression
* Endianness