Skip to content

Instantly share code, notes, and snippets.

@ImLp
Last active February 13, 2023 18:59
Show Gist options
  • Save ImLp/c00b270d74602cae1858187e4e63d700 to your computer and use it in GitHub Desktop.
Save ImLp/c00b270d74602cae1858187e4e63d700 to your computer and use it in GitHub Desktop.
A brief overview of how I approach interviews.

Interview scope.

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.

Revision Control

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

Development

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

Computer Architecture

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

Math

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

Graphics

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

Operating Systems

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

C Programming Language

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

C++ Programming Language

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

C# Programming Language

General Concepts

  • Destructors vs. Finalizers
  • IDisposable
  • using statement
  • dynamic
  • Boxing and Unboxing values.
  • Tuple<T,T> vs ref/out params
  • Task vs Thread
  • Pinning

Python Programming Language

General Concepts

  • Scope
  • Modules and packages
  • Authoring executable python scripts in UNIX
  • Memory management in python
  • Generator expressions
  • Pickling and unpickling
  • *args vs **kwargs

Collaboration concepts

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment