I am not asserting that all these topics must be known by all candidates for all jobs; but rather, if there is an area that a given job is likely to focus on, this structural approach might help candidates delve into an area of study deeper and expand their current context.
Interview Preparation Study List
- Programming Abstractions
- Problem Solving Skills
- Defining and understanding the problem, including constraints and acceptance criteria
- Validating your assumptions
- Proposing possible solutions (along with criteria to evaluate them)
- Capturing data/testing your assumptions
- Selecting an approach, eliminating approaches that won’t work, are too risky, or take too long
- Committing to an approach, validating that it is the right path along the way
- Software Design
- Clean Code
- https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
- Data Structures & Abstractions
- Arrays/vectors/strings, stacks, queues, linked lists, hash tables, trees
- Recursion
- Searching and sorting
- Algorithmic analysis (e.g. “Big-O” notation)
- Computer Organization & Computer Systems
- Machine architecture (registers, I/O, basic assembly language)
- Memory models (pointers, memory allocation, data representation)
- Compilation (stack frames, semantic analysis, code generation)
- Basic concurrency (threading, synchronization)
- System processes (context switching, inter-process communication)
- Storage and file management (file systems, virtual memory)
- Caching (including memoization, memory/filesystem caches)
- Networking (sockets, TCP/IP, routing)
- Fallacies of Network Computing
- https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
- Distributed systems
- Consensus Systems/Concentric Hash Rings
- Brewer’s CAP Theorem
- Database systems
- Graph vs. Relational Strategies (SQL, NoSQL)
- ACID (and how a database achieves this; i.e. row/table based locking)
- Schemas/Schema Design
- How databases can achieve high performance (indexes, normalization/denormalization)
- Data Modeling
- Computing Theory
- Logic
- Functions
- State Machines
- Regular Expressions
- Complexity Analysis
- Little’s Law
- Serial/Parallel computing
- Hashing
- Data analysis
- Machine learning principles
- Probability
- Conditional probability
- Probability distributions
- Bayes' Theorem
- Law of Large Numbers/Central Limit Theorem
- Algorithms
- Algorithmic complexity & efficiency
- Time/space efficiency
- Computational strategy (divide/conquer, greedy, hashing, randomized algorithms, graph, search algorithms)
- Domain Knowledge (broad spectrum)
- Project/Program Management (Agile, Lean, Scrum, Kanban, Conway’s Law, Parkinson’s Law, Mythical Man Month)
- Software Deployment & Delivery (SDLC, Code branching/flow, Source code management, Deployment Strategies)
- Operational resiliency/scalability (Datacenter, Cloud, Loadbalancers, Read replicas, CQRS)
- Software Architecture (Domain Driven Design, UML Context & Sequence Diagrams, Class Diagrams)
- Full stack development (Databases, Web Servers, Caches, Edge-Caching, Browser Caching, client code/performance, JS/CSS frameworks)
- Computer Images/Graphics (bit depth, compression strategies, PNG vs. JPG, etc., Vector vs. Bitmap)
- Semantic Content (SGML->HTML, Metadata, Taxonomies, Ontologies)
- Big Data, Machine Learning, Recommendation Systems, Rules Engines, Heuristics