Glossary
Every term used anywhere in this program, defined in one or two lines, with a pointer to where it is taught properly. Alphabetical within sections.
If a term appears in a guide and is not here, that is a bug — log it in
STATE.md.
Table of Contents
- Coding and Data Structures
- Python Runtime
- Distributed Systems
- Inference and GPU
- Process and Interviewing
Coding and Data Structures
Taught in tracks/coding/WARMUP.md
Amortized complexity — the average cost per operation over a long sequence, where an occasional expensive operation is paid for by many cheap ones. Lazy deletion plus a periodic rebuild is amortized O(1). §5.3
Arithmetic intensity — see Inference. Also the general idea: FLOPs per byte moved.
Backpressure — making a producer feel a consumer's slowness, so the signal propagates upstream to someone who can act. A bounded queue is the mechanism. §10.1
Bloom filter — a bit array plus k hashes. "Definitely absent" is exact; "possibly present"
can be wrong. m = -n·ln(p)/(ln 2)² bits, k = (m/n)·ln 2 hashes. ~1.25 bytes/item at 1%.
No false negatives, ever. §9.2
Carry buffer — the unconsumed tail of a chunk, prepended to the next one, so a token split across a boundary comes out whole. §6.1
Checkpoint (in a delta log) — a remembered position in the log, not a copy of state. Three integers. §2.2
Compaction — dropping versions no live reader can reach. Reachability from a pin set, exactly like a garbage collector's root set. §1.6
Consistent hashing — see Distributed.
Cuckoo filter — a Bloom-like filter that supports deletion, with better cache locality, at the cost of an insert path that can fail. §9.2
Delta log — recording what each operation changed rather than the resulting state. Deltas compose; snapshots do not. The representation that survives undo/redo/checkpoint requirements. §2.1
Eval breaker — see Python.
Fixed-delay vs fixed-rate — fixed-delay re-arms after a run finishes (never overlaps, schedule drifts). Fixed-rate fires on the original grid (can overlap; needs a catch-up policy). §5.4
Full / equal / decorrelated jitter — uniform(0, min(cap, base·2ⁿ)) · temp/2 + uniform(0, temp/2) · uniform(base, prev·3). AWS's simulation found full minimized both total work and
completion time. §5.5
Head-of-line blocking — one slow item at the front stalling everything behind it, even when capacity is free. §4.1 (static batching), §10.2
Idempotency key — a stable identifier generated by the producer, unchanged across retries, that lets a consumer discard duplicates. Generate it at send time and dedupe silently does nothing. §9.1
Intrusive list — a linked list whose nodes are the payload objects, so a hash map can point directly at a node and unlinking is O(1). Requires double links. §3.1
Invariant-first — writing the assertion that pins the tricky property before implementing. The drill that stops you finding edge cases only when something breaks. §0.3
Lazy deletion — marking an element removed and skipping it when it surfaces, instead of finding and removing it. O(1) delete, with a rebuild threshold to bound the tombstone waste. §5.3
Leaky bucket — a queue drained at a constant rate; output is perfectly smooth, requests wait. Contrast token bucket, whose output is bursty and which rejects rather than queues. §4.5
Little's law — see Distributed.
LRU / LFU / TinyLFU — evict least-recently-used · least-frequently-used · admission control using a compact frequency sketch, which resists the scan-pollution that defeats LRU. §3.7
Lookahead window — a bounded forward search that makes a streaming diff O(1) amortized instead of needing the whole input. The price is that a skip longer than the window is misreported. §2.4
MVCC — Multi-Version Concurrency Control. Keep multiple versions per key; readers never block writers because writes only append. §1.7
Myers diff — the O(ND) shortest-edit-script algorithm git diff uses. Needs the whole
input, which is why it cannot be used online. §2.4
Negative caching — caching the absence of a key for a short TTL. A DoS mitigation, not a performance optimization. §3.5
Postings list — for a term, the set of documents containing it. Intersect the smallest first. Text-index gate 1
Predecessor query — "the largest key ≤ X". Also called floor or as of. The tell that you need an ordered structure. §1.1
Sampled expiry — checking a small random sample for expiry on each write, instead of a full sweep. Redis's design. Lazy alone leaks; sampled bounds it in O(1) amortized. §3.3
Segment (index) — an immutable slice of an index. Writes accumulate in a mutable buffer; flush seals it; merge reclaims tombstoned space. Lucene's design. Text-index gate 4
Sentinel node — a permanent, dataless head/tail node that makes every real node have non-None neighbours, removing every linked-list edge case. §3.2
Single-flight — on a miss, exactly one caller runs the loader and the rest wait for that result. Prevents a cache stampede. §3.5
Sliding window counter — two fixed-window counts interpolated by how far into the current window you are. O(1), no boundary burst, ~1% error on real traffic. §4.3
Sliding window log — every request's timestamp, trimmed to the window. Exactly correct, O(limit) memory per key. The correctness baseline. §4.2
Stampede (cache / dogpile / thundering herd) — N concurrent misses on one key hitting the backing store simultaneously, at the moment the cache was supposed to protect it. §3.5
Three-colour DFS — WHITE unvisited / GREY on the current stack / BLACK done. Reaching GREY is a back edge, i.e. a cycle. Two states conflate "on my path" with "finished". §7.2
Time-to-first-passing-gate — the metric that predicts a gated coding round, because an unopened gate scores zero. §2.5 of the Track A README
Token bucket — tokens accrue at rate and cap at capacity; a request spends one. Separates
sustained throughput from burst tolerance — the thing no window can express. §4.4
Tombstone — a marker recording that something was deleted, rather than removing it. Required whenever history or immutability matters. §1.4
Torn write — a partial record at the tail of a log after a crash. The expected post-crash state, not an error. §8.2
Walking skeleton — an end-to-end path working with the simplest possible everything, early. The take-home's hour-8 milestone. Track E §1.1
Write-ahead log (WAL) — append the intent durably before mutating the main structure, so
recovery replays. [len][payload][CRC]. §8.1
Write skew — see Distributed.
Python Runtime
Taught in tracks/python-internals/WARMUP.md · QUIZBANK.md
aclosing — contextlib.aclosing, which guarantees an async generator's finally runs at
scope exit. Without it, cleanup waits for loop.shutdown_asyncgens(), which under load is a
connection leak. §3.6
Arena / pool / block — CPython's allocator hierarchy: 256 KB arenas → 4 KB pools (one size class each) → fixed blocks. An arena returns to the OS only when every pool in it is empty, which is why freeing does not lower RSS. §5.1
BaseException vs Exception — CancelledError, KeyboardInterrupt and SystemExit derive
from BaseException, so except Exception deliberately misses them. §3.3
Bound method — what a function's __get__ returns: the function partially applied to the
instance. self is the descriptor protocol, not magic. §6.2
Buffer protocol — the C-level interface for sharing memory without copying. What memoryview,
socket.recv_into, struct.unpack_from and numpy use. §5.4
Cooperative cancellation — CancelledError is delivered at a suspension point, so a task with
no await cannot be cancelled. §3.3
Coroutine / Task / Future — inert object from async def · a coroutine wrapped so the loop
steps it concurrently · a placeholder for a later result (Task subclasses Future). §3.2
Cycle collector — generational mark-and-sweep over container objects, needed because refcounting cannot free mutual references. §1.4
Data vs non-data descriptor — defines __set__/__delete__ (outranks the instance dict) vs
only __get__ (the instance dict outranks it). Explains why @property can't be shadowed and a
method can. §6.2
Eval breaker — the flag that hands the GIL to another thread. Since CPython 3.10 it is checked only at specific instructions (backward jumps, calls), which is why the textbook lost-update demo often loses nothing. §4.3
ExceptionGroup / except* — how TaskGroup reports multiple simultaneous child failures.
3.11+. §3.4
Free-threaded build — CPython without the GIL. PEP 703 designed it, PEP 779 defined "supported", Phase II in 3.14: officially supported, not default. §4.4
Generational hypothesis — most objects die young, so collect the youngest generation most often. §1.4
GeneratorExit — thrown at a suspended yield by close(), which is how a generator's
finally runs. Catching it and yielding again is a RuntimeError. §2.4
GIL — a mutex letting one thread execute CPython bytecode at a time. Protects interpreter internals, not your invariants. §4.1
Key-sharing dictionary (PEP 412) — instances of a class share the key layout, which already
narrowed the __slots__ saving. Hence: measure. §5.2
Managed dict — since 3.11 the instance __dict__ is created lazily, so a class that
could have one costs nothing until something is stored in it. §5.2
memoryview — a zero-copy view over a buffer. Slicing it allocates nothing; slicing bytes
copies. A live view pins the underlying bytearray. §5.4
MRO / C3 linearization — the method resolution order, computed so a class precedes its bases, declaration order is preserved, and the result is monotonic. §6.4
Orphaned task — a task left running after gather propagated a sibling's exception. A
resource leak, not a style difference. §3.4
Priming (a generator) — advancing to the first yield with next() so send() has an
expression to deliver into. §2.4
pymalloc — CPython's small-object allocator, used for allocations ≤512 bytes. §5.1
Refcounting — freeing an object the instant its count hits zero. Prompt and deterministic; cannot collect cycles. §1.3
Resurrection — a __del__ storing self somewhere and reviving an object mid-finalization.
One of several reasons to prefer weakref.finalize. §1.5
__slots__ — replaces the per-instance __dict__ with fixed offsets. Removes weakref support
too unless you add '__weakref__'. A subclass omitting it regains a __dict__. §5.2
Structured concurrency — no task outlives its scope. TaskGroup's guarantee, and why it is a
bug fix rather than a style preference. §3.4
Suspended frame — what a generator object holds: locals, instruction pointer, evaluation stack. Why a generator is a state machine. §2.3
tee — itertools.tee, which buffers everything one branch has read that the other has not.
Draining one branch materializes the whole stream. §2.6
tracemalloc — attributes real allocations to source lines. The right tool, since
sys.getsizeof measures only an object's own footprint. §5.3
weakref.finalize — cleanup tied to an object's lifetime that does not keep it alive.
Beats __del__: defined ordering, exceptions not swallowed, no resurrection. §1.5
yield from — delegates iteration, forwards send/throw/close, and makes the
sub-generator's return value the value of the expression (PEP 380). §2.5
Distributed Systems
Taught in tracks/systems-design/WARMUP.md
Admission control — deciding at the edge what not to serve, cheaply, before it consumes a resource. §10.3
AIMD — additive increase, multiplicative decrease. TCP's congestion law, applied to application concurrency limits: +1 when healthy, ×0.8 on failure. Track A §10.4
Anti-entropy — a background process reconciling divergent replicas, usually with a Merkle tree so the comparison is O(log n) in the difference. §5.4
At-most-once / at-least-once / exactly-once — no retries (can lose) · retry until acked (can duplicate) · impossible for delivery; achievable for processing via an idempotent consumer. §9.1
Back edge — an edge to a node on the current DFS stack, i.e. a cycle. Coding §7.2
Blast radius — how much of the system a failure can affect. Bulkheads and cells shrink it by construction. §10.4
Bulkhead — separate resource pools per dependency, so exhaustion in one cannot starve others. Costs pooling efficiency (M/M/c). §10.4
CAP — when a partition occurs, choose consistency or availability. Only during a partition, and "available" means every non-failing node responds. See PACELC. §7.5
Cellular architecture — partitioning the whole stack into independent cells each serving a slice of users, so blast radius is 1/N. §10.4
Circuit breaker — closed → open (fail immediately) → half-open (a small number of probes). Threshold must be a rate over a minimum volume. §10.2
Clock skew — the difference between two machines' wall clocks. NTP holds a few ms on a good LAN — statistical, not a bound, and a node cannot know its own skew. §3.2
Commit-wait — Spanner deliberately waiting out the TrueTime uncertainty window before releasing locks, which is how timestamps become globally meaningful. §3.6
Consistent hashing — mapping keys and nodes onto a ring so adding or removing a node moves only K/N keys instead of ~80%. §8.2
CRDT — a data type whose merge is commutative, associative and idempotent, so replicas converge with no coordination. Convergence is not correctness: a CRDT counter for inventory can go negative. Ch. 11
Deadline propagation — passing the remaining time budget downstream so any hop with insufficient time fails immediately instead of starting work it cannot finish. §10.3
Dead-letter queue (DLQ) — where a message goes after N failures. Needs four things: the reason, a replay path, poison detection, and an alert on arrival rate. §9.4
Dual write — writing to two systems that fail independently (db.save then queue.publish).
No ordering is safe. Fix with the outbox. §9.2
Fail-stop vs fail-slow — the node stops (easy) vs it keeps answering, slowly or wrongly (harder, and the common case). Detect fail-slow with latency percentiles vs peers. §2.2
Fencing token — a monotonically increasing number issued with each lease, checked by the resource, that makes a zombie's stale write rejected without anyone detecting the zombie. The highest-value item in the track. §4.3
FLP impossibility — in a fully asynchronous system with one faulty process, no deterministic algorithm guarantees consensus. Practical systems buy liveness with timeouts and keep safety unconditional. §6.1
Gray failure — see fail-slow.
Happens-before (→) — Lamport's causal ordering. If neither a→b nor b→a, the events are concurrent, which is a real relationship, not an unknown. §3.3
HLC (hybrid logical clock) — a physical component tracking wall clock plus a logical counter. Close to real time, respects causality, O(1) size. Cannot detect concurrency. §3.5
Idempotent — an operation whose repetition has no additional effect. What makes at-least-once tolerable. §9.1
Lamport timestamp — one counter per node, max(local, received)+1 on receive. Gives a total
order consistent with causality; cannot detect concurrency. §3.3
Lease — a lock with a timeout, so a dead holder does not block forever. Renew at lease/3. §4.1
Linearizability — the system behaves as if there were one copy and each operation took effect atomically at some instant between invocation and response. A recency guarantee about single objects. §7.1
Little's law — L = λW. Concurrency = arrival rate × time in system. Needs almost no
assumptions, which is why it applies everywhere. §1.1
Load shedding — rejecting work to protect the rest. Shed by priority, and shed the oldest queued item. §10.3
Log matching — Raft's invariant: two logs with the same index+term are identical up to that point. What makes recovery simple. §6.3
Merkle tree — a hash tree over a key range; equal roots mean identical data, so comparison costs one hash in the common case. §5.4
Outbox pattern — insert the event into an outbox table in the same transaction as the
state change; a relay publishes it with FOR UPDATE SKIP LOCKED. Solves the dual write. §9.3
PACELC — if Partition then A or C, Else Latency or Consistency. The more useful framing, because it names the tradeoff you make every day. §7.5
Quorum — W + R > N forces the read set and write set to overlap. §5.2
Raft term — a logical clock; at most one leader per term; seeing a higher term makes you step down. §6.2
Read repair — writing the newest value back to stale replicas discovered during a read. Cheap, but never repairs cold data. §5.4
Retry budget — capping retries at a fraction of base traffic, so amplification is bounded no matter how bad things get. The primary fix, before circuit breakers and before jitter. §10.1
Retry storm — retries multiplying offered load onto a dependency that is already failing. ~2.85× at a 95% failure rate with 3 attempts. §10.1
Serializability — the outcome equals some serial order of the transactions. An isolation guarantee about transactions, saying nothing about real time. §7.2
Sloppy quorum — accepting writes at any W reachable nodes during a partition, which breaks the overlap guarantee. Dynamo does this deliberately. §5.3
Snapshot isolation — every transaction reads a consistent snapshot; commits validate. Permits write skew. §7.4 and Coding §1.7
Split brain — two nodes both believing they hold authority. Prevented by fencing, not by detection. §4.2
SSI (serializable snapshot isolation) — tracks read-write dependencies and aborts dangerous
structures. Postgres's SERIALIZABLE. §7.3
Strict serializability — serializable and respecting real time. The most expensive guarantee; Spanner. §7.3
Timer wheel — O(1) insert and O(1) tick scheduling, used by the Linux kernel and Kafka's purgatory. The 100× answer for a polling scheduler. d01 §9
TrueTime — Spanner's clock API returning an interval guaranteed to contain the true time, narrowed by GPS and atomic clocks. §3.6
Two Generals — the impossibility argument behind exactly-once delivery. §9.1
Vector clock — one counter per node, compared element-wise. Detects concurrency, at O(nodes) size and with subtle pruning. §3.4
Virtual node — many ring positions per physical node. Evens load and, more importantly, spreads a failed node's range across many successors instead of dumping it on one. §8.3
Write skew — two transactions read overlapping data, write disjoint keys, both commit, and jointly violate an invariant neither violated alone. The anomaly snapshot isolation permits. §7.3
Zombie (lease holder) — a process that paused past its lease, woke, and writes as if no time passed. Undetectable — fencing is the answer. §4.2
Inference and GPU
Taught in tracks/ml-infra/WARMUP.md
Activations — transient per-forward-pass memory. Reserve a few GB per GPU; a real number comes from profiling. §3.4
Arithmetic intensity — FLOPs per byte moved. Below machine balance (P/B) you are memory-bound; above it, compute-bound. §2.1
Chunked prefill — splitting a long prefill across scheduler steps so decode never stalls for a whole prefill. Trades a little prefill throughput for much better TTFT/TPOT tails. Sarathi-Serve. §4.4
Continuous / in-flight batching — scheduling at iteration granularity, so a finished sequence's slot refills on the next forward pass. Orca. The single biggest throughput lever. §4.2
Decode — generating tokens one at a time, each depending on the last. Memory-bandwidth-bound. Determines TPOT. §1.3
Disaggregated prefill/decode — running the two phases on different machines with different hardware, transferring the KV cache. DistServe. §5.5
Expert parallelism (EP) — placing MoE experts on different GPUs. Needs an all-to-all per MoE layer; expert load imbalance is the hot-partition problem again. §5.4
GQA / MQA — Grouped- / Multi-Query Attention: several query heads share one KV head. 8× smaller KV cache for Llama-70B. The architectural decision that makes long context affordable. §3.3
KV cache — cached K and V per token per layer, so generating token n is O(1) new work instead of O(n). The object in LLM serving, and the binding capacity constraint. §1.2
Machine balance — peak dense FLOP/s ÷ bandwidth. ~295 FLOP/byte on an H100 (989.5 TFLOP/s ÷ 3.35 TB/s). The datasheet's 1,979 TFLOP/s is the with-2:4-sparsity figure and does not apply to dense LLM weights. §2.1
Model parallelism — see TP / PP / EP. §5.4
PagedAttention — KV cache in fixed-size non-contiguous blocks with a per-sequence block table. Virtual-memory paging applied to the cache; removes internal and external fragmentation and enables copy-on-write prefix sharing. vLLM. §4.3
Pipeline parallelism (PP) — splitting layers across GPUs. Tolerates slower interconnect, works across nodes, introduces bubbles, does not improve single-request latency. §5.4
Prefill — processing the prompt, all tokens in parallel. Compute-bound. Determines TTFT. §1.3
Prefix caching — reusing KV blocks for shared prompt prefixes. Turns a 20-turn conversation's O(n²) prefill into O(n). Must be tenant-scoped or it is a cross-tenant leak. §5.1
Quantization — fewer bits per weight (or per KV entry). Helps decode twice: fewer bytes to read and more room for batch. Degradation is workload-specific — evaluate, don't assume. §5.3
RadixAttention — SGLang's radix-tree organization of the prefix cache, so partial matches are found efficiently. §5.1
Roofline — the model that says performance is bounded by min(compute, bandwidth × intensity). Williams et al., 2009. Ch. 2
Speculative decoding — a draft model proposes k tokens, the target verifies all k in one pass, and the output distribution is provably identical. Wins at low batch; loses at high batch because there is no spare compute. §5.2
Tensor parallelism (TP) — splitting each layer's matrices across GPUs. All-reduce every layer → needs NVLink → within a node. Improves latency. §5.4
TTFT / TPOT — time to first token (set by prefill and queueing) / time per output token (set by decode). They trade against each other, which is the whole scheduling problem. §1.3
Process and Interviewing
Anti-narrowing clause — the rule that one candidate account must not narrow preparation into a blind spot: ~25% off-report material, a six-component onsite, company-agnostic core. source-report.md
Confident-wrong — an answer you were sure of and got wrong. Scored separately because it is a landmine, not a study item: you will assert it and be corrected. RUBRIC.md
Decision log — a running decisions.md written while building: decision, alternatives with
numeric reasons, assumptions, would-revisit-if, and not-tested.
Track E §2
DTAO — Decision, Tradeoff, Alignment, Outcome. Replaces STAR, which buries the decision. Track F
Epistemic ladder — confirmed (primary/verifiable) · reported (candidate accounts, prep vendors) · inference (mine, labelled). Only the first is safe to assert. findings.md
Gate — one stage of a progressive coding problem. Gate N+1 stays closed until gate N passes. Track A
Hire-bar scale — no hire / hire (senior) / strong hire (senior) / hire (staff) / strong hire (staff). Every mock is scored on this, calibrated to Staff. mocks/
L0–L3 — the per-track level from the diagnostic: foundations missing · correct but slow · interview-passable at senior · staff-altitude. Drives hour allocation. RUBRIC.md
Leech — a review item that has reset to the 1-day interval three or more times. A comprehension problem, not a memory one — stop drilling and re-learn the mechanism. review/
Progressive format — the reported onsite coding round: ~4 gates, each gated on the previous working, reported pass bar 2 (assume 3). findings.md
Spaced repetition — resurfacing at 1, 3, 7, 21 days. Wrong at any interval resets to 1. review/
Time-to-first-passing-gate — the metric that predicts a gated round, because an unopened gate scores zero. Track A
References
CHEATSHEET.md— the same material, dense, organized for the morning of a roundREADME.md— the program entry pointresearch/findings.md— what is confirmed vs reported vs inferred