It all starts with the following question:
On a scale of 1-10 where 1 is equivalent to "I just picked a for-dummies book on this topic" and 10 is equivalent to you claiming that "You deserve to be in the standards committee driving the future of this topic", how do you rate yourself?
A bit of self-awareness and self-assessment from the bat which speaks a lot of your personality and allows me to start the conversation on know how you operate and how your skills translate to our current needs. It also helps me glean how you will fit into the team in a single question as wild numbers may reveal that there would be a need for interpersonal growth, communication growth, etc. If you really wish to find a formula on how to answer this question when it comes to you, pick a focus|language|framework|methodology watch this video, rephrase the answers based on what you are focusing on and divide by 5.
The list below is a brief view into the potential follow ups you will be asked depending on your answer. The topics are organized based on complexity for their specific group. I generally approach an increasing scale of complexity. Some questions may be considered to have a right or wrong answer, but in the way I prefer to approach it, there isn't such a thing. For me your answers are a view into what you have been exposed to and where you feel your skillset is at. How do you handle knowing something as, more importantly, how do you handle not knowing.
This list is also a good guide for those entering either the entertainment industry. Be it for game dev or vfx, as a software engineer. An ideal candidate would be at least aware of the topics associated with their level.
Concepts
- Software Tracked revision control
- Version revision control
- Distributed version control
- Centralized version control
- Replication revision control
Tools
- Git
- SVN
- Perforce
Merging
- The three parts of a three way merge
- Topics branches and good development practices
- Knowing when to stash/shelve work in progress
- Branching for every version vs. pipeline strategies
General concepts
- Algorithms definition, examples.
- Pseudocode definition, benefits for conceptualizing
- Strongly typed vs Weakly typed languages
- Differences between scripting and programming
- Efficiency (e.g. Big Oh notation)
- Data structures
- Iniheritance
- Polymorphism
- Garbage collection
- Managed vs Umanaged languages.
Garbage Collectors
- Pro/con to reference counting
- Mark/sweep
- Implications for deadline-based programs
Approaches
- Kanban
- Agile
- Scrum
- Waterfall
- Extreme Programming
- Spiral
- Validation and verification model
- Cost differentials between development approaches.
Debugging
- Breakpoints
- Call stack parsing
- Log based debugging
- A/B testing
- Hardware breakpoints
- Tracepoints
- Debugger implementation of breakpoints
- Exception based development, benefits and drawbacks
- Asserts, benefits and drawbacks
- Code with timeouts and debuggability
Debugging Tools & Technicques
- Profilers, hit counters, time accumulators.
- Obfuscated handle systems (vs. pointer)
- Automatic Reference Counting systems.
- Pointer-to-implementation/PIMPL benefits and costs
- Delegates, multicast delegates and events
- Retained mode vs. immediate mode graphical user interfaces
- Event-loop programming w/ all nonblocking I/O routines
- Type reflection/introspection for program automation
- Stages of program binding time (compile time, link time, run time)
- Object-relational-mapping (and pitfalls with polymorphism)
Determinism
- Definition and the desire to achieve it
- Typical pitfalls of determinism testing
- Floating point deviation
- Determinism validation for constrained development platforms
Concurrency
- The difference between concurrency and parallelism
- Asynchronous processing
- Threading
- Job polling
- Event driven concurrency
- Fibers and implications for stack, TLS risks
Numbers
- Unsigned vs. signed, twos compliment
- Pseudo-random number generation
- Random number predictability
- True random number generation techniques
ISA
- Endianness
- Pipelining
- Instrution latency
Atomics
- Increment, decrement, compare-exchange
- Spin-locks and latency trade-offs
Cache
- Typical cache sizes
- The memory hierarchy and relative costs
- Necessity/benefit of memory alignment
- "Ways" and cache eviction policies
Numbers
- Radix (2: binary, 10: decimal, 16: hexadecimal)
Algebra
- Polynomials
- Conic sections
- Matrices for representing systems of equations
- The determinant and what it tells you about a matrix
Trigonometry:
- All the trigonometric functions
- How each trig function relates to coordinate components on the unit circle
ℝ3 and affine transformations:
- Fundamental vector operations: addition, subtraction, dot product, cross product
- Vectors that are "normalized," "orthogonal," and "ortho-normalized"
- Basis vectors of a matrix
- The plane equation, and its related to the dot product
- Affine transform composition: scale, rotation, translation
- Affine transform concatenation: global/parent/object space
- Affine transform inversion
- Affine transform decomposition
Rotations
- Euler angles, axis-angle, quaternion, rotation matrices
- 3-by-3 Rotation matrices (matrices, normal and non-normal, orthogonal and non-orthogonal)
- How euler angles are short-hand for rotation matrices
- Euler angle static and rotating frame conventions
Pipeline
- Object, parent, global, camera, projection, viewport transforms
- Point un-projection into rays, rect un-projection into frustums
- Ray/frustum instersection vs. point, sphere, line, triangle
- Clip space and screen-space primitive clipping
Rendering
- Vertex buffers and common vertex attributes
- Backface culling and winding order
- Depth buffers, depth-test renderstate, depth prepass
- Alpha values and blending functions
- Sorting for rendering passes
- Command buffers and immediate/deferred contexts
- Examples of typical passes (as parts of a forward vs deferred frame)
- Raytracing, techniques and benefits / drawbacks
Shaders
- General graphics shader types and their args and results
- Fixed function GPU hardware and how they speed up passes
- How branches work, what they cost
- Async compute
Concepts
- File descriptors, HANDLEs
- Blocking vs. non-blocking I/O requests
- The fundamental sync primitives and wait functions
- Manual and automatic condition/event primitives
- Syscall overhead
- Memory protection and superuser instructions
- Exceptions and interrupt service routines
Environment
- Unix vs DOS
Threads
- Memory contention and the basic dangers of threads
- OS-implemented mutex objects and the thread/process scheduler
- Thread local storage
Sockets
- TCP vs. UDP
- Network order
- Latency with select-polling vs. blocking waits vs. async
Virtual Memory
- How virtual memory is related to physical memory, swap
- How CPU hardware makes virtual memory performant
Modules
- Shared objects vs. static libraries
- Styles of "dynamic linking" on windows
- Practicality of code unloading
- Jump tables
- Process loading and the dynamic loader
- Pages inherently shared vs. non-shared across processes
- Page protections, JIT
Functions
- Recursion, best practices
- Inlining and optimization
- Function arguments and CPU stack machine (push + jump)
- Stack memory allocation and deallocation
- C89 variable declaration rules
Strutures
- Alignment and padding
- Unions
- Brace initialization
Arrays
- Countof
Pointers
- Pointer arithmetic
restrict
and aliasing
Memory
alloca
vs.malloc
General concepts
- Rule of three / five / zero.
- lvalues and rvalues in c++
auto
keyword, benefits, drawbacks, maintainability
Objects
- Implicit
this
- Overloading and overload resolution
- Constructor and destructor (implications for
this
's virtuals, exceptions)
Virtuals
- vtable: when is it set, how is it found, and what does it contain
- vtable: what are the implications of multiple inheritance
- Pure virtual functions
Generics
- Function templates, class templates, concerns about code bloat
- Runtime type information (vs. reflection), type traits
- Template meta-programming, constexpr
General Concepts
- Destructors vs. Finalizers
- IDisposable
using
statementdynamic
- Boxing and Unboxing values.
Tuple<T,T>
vs ref/out params- Task vs Thread
- Pinning
General Concepts
- Scope
- Modules and packages
- Authoring executable python scripts in UNIX
- Memory management in python
- Generator expressions
- Pickling and unpickling
*args
vs**kwargs
Methodologies
- Sticky note sessions, benefits, drawbacks
- Pair meta-programming, benefits, drawbacks
- Code review benefits, drawbacks
- The 5 Why's
- Testing benefits, drawbacks
- Continuous Delivery
- Minimum viable product conceptualization & delivery