Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

The Interview Follow-up Tree

Overview

Most study material teaches the first answer: what a hash table is, what a B+tree looks like, what happens when a TCP connection opens. Interviews rarely end there — each answer is a doorway to a harder follow-up, and the gap between candidates is measured in rungs, not topics. This collection models the escalation pattern explicitly: forty follow-up chains that show how a textbook question deepens into mechanism, edge cases, trade-offs, and design judgment, plus transferable techniques for handling variations you have never seen.

What a Follow-up Ladder Is

A follow-up ladder is the sequence of increasingly demanding questions an interviewer hangs off a single opening topic. Where a question bank asks many shallow questions, a ladder asks one question and drills down until it finds the boundary of your understanding. The rungs follow a predictable arc:

  1. Definition — the rehearsed first answer: what it is, the textbook summary, the standard complexity claim.
  2. Mechanism — how it actually works internally: data layout, control flow, the reason the standard complexity holds.
  3. Edge cases and failure — where the mechanism breaks: worst cases, degenerate inputs, adversarial inputs, what happens when an implicit assumption is violated.
  4. Trade-offs — the design space around the mechanism: alternatives, their costs, the workloads where each wins, the guarantees each abandons.
  5. Design judgment — using everything above to make and defend a decision under constraints, including saying “it depends” and then explaining precisely on what.

Each chain page in this collection walks that arc for one concept. A candidate who can answer rungs 1–2 knows the topic. Rungs 3–4 signal seniority because they require having been wrong somewhere, or having reasoned carefully enough to be wrong nowhere cheaply. Rung 5 is what staff-level interviews probe: not “do you know it” but “would you bet production on your choice, and can you say why.”

The ladders are also diagnostic for self-study. If your answer chain stops at rung 2, you have memorized without understanding; if it never reaches a crisp definition at rung 1, you understand without being able to communicate. Both are interview failures with different fixes.

How Interviewers Escalate

Interviewers escalate along three axes, and knowing them lets you predict the next question instead of being surprised by it:

AxisDirectionHash-table example
GeneralitySpecific instance → general principle“What is a hash table?” → “What property must a hash function have for O(1) to be true?”
AdversarialityBenign inputs → worst cases → active adversaries“How do collisions happen?” → “Who chooses the keys in your system, and what if they are chosen to hurt you?”
ConsequenceTheory → production impact“What is the worst case?” → “What does that worst case cost you at a load balancer in front of a fleet?”

The purpose of each follow-up is not to trick you. It is to find the boundary of your model of the system. A good interviewer keeps going until they hit a wrong answer, a shrug, or an honest “here is what I do not know, and here is how I would find out.” That last response reads as seniority, not weakness — what reads as weakness is bluffing, because the interviewer can usually see through it with one more question.

Escalation also has a rhythm worth internalizing: mechanism questions (“how does that work?”), justification questions (“why that and not the alternative?”), stress questions (“what breaks when…?”), and judgment questions (“which would you choose here and why?”). When you hear one of these, you know what shape of answer is expected — an explanation, a comparison, a failure analysis, or a defended decision.

Reasoning About Unfamiliar Variations

You cannot memorize variations: for any topic there are dozens, and interviewers invent new ones. What transfers is a small set of reasoning moves. Every chain page ends with a variation-specific template, but the general moves are these:

  1. Reduce the variation to the invariant it threatens. “Why not a 2-way handshake?” is really “which guarantee does the third message establish, and what fails without it?” Find the invariant — ordered delivery, mutual exclusion, index ordering, translation correctness — and the variation becomes a question about one mechanism instead of a whole protocol.
  2. Ask who controls the inputs. Average-case claims live or die on input distribution. If a caller, a client, or an attacker controls the keys, the traffic pattern, or the query shape, re-derive the worst case before repeating the happy-path complexity.
  3. Identify the cost model being assumed. O(1) assumes uniform hashing; a B+tree answer assumes a disk or page-based cost model; a lock-free claim assumes a hardware progress guarantee. When the variation changes the cost model (RAM → disk, single machine → network, one core → many), expect the standard answer to change.
  4. State the trade-off you would measure. When two designs both survive the constraints, the senior move is not picking a winner but naming the metric that separates them — p99 latency vs throughput, write amplification vs read amplification, memory vs correctness margin — and saying which side your workload weights.

Verbally, this looks like: “I have not seen that exact variant, but the standard answer relies on assumption X. If your variant removes X, then A breaks and I would reach for B; the thing I would measure is C.” That sentence structure, applied honestly, handles most unfamiliar follow-ups at least as well as a memorized answer would — and it produces credit even when the final answer is wrong, because the reasoning was inspectable.

The Forty Chains

FileOpening questionEscalation arcCore concepts tested
Hash Tables“What is a hash table?”Collisions → load factor & resizing → amortized analysis → adversarial O(n) & hash flooding → consistent hashing → design-your-ownCollision strategies, amortized vs worst case, keyed hashing, distributed lookup
TCP Lifecycle“What happens when a TCP connection opens?”Why 3-way not 2-way → TIME_WAIT → congestion control escalations → keepalive vs heartbeats → “why not 4-way?”Handshake invariants, state machine, flow vs congestion control, liveness
Database Indexes“What is a database index?”B+tree layout → why not BST/hash → clustered vs secondary → composite column order → write amplification → LSM vs B+treeStorage hierarchy, read/write trade-offs, workload-driven schema decisions
Virtual Memory“What is virtual memory?”Page tables & multi-level paging → TLB → page-fault walk → minor/major faults → thrashing → NUMA & huge pagesAddress translation, locality, the disk cliff, hardware-software co-design
Mutex to Lock-Free“What is a mutex?”Futex implementation → spinlock vs mutex → invariants → priority inversion → deadlock conditions → CAS & ABABlocking vs spinning, scheduling interaction, progress guarantees
Rate Limiter Design“Design a rate limiter”Requirements → algorithm zoo → distributed counters & races → fail-open vs fail-closed → scale follow-ups → “now make it X”Design interviews as ladders, atomicity, failure posture, quota economics
Quicksort Partitioning“How does quicksort work?”Partition schemes → worst-case inputs → duplicate handling → introsort guards → tail calls → parallelizationPartition invariants, adversarial analysis, hybrid algorithms
Dynamic Programming“What is dynamic programming?”Overlapping subproblems → memoization vs tabulation → state design → space optimization → greedy vs DPState design, recognition heuristics, complexity framing
URL to Page“What happens when you type a URL?”DNS → TCP/TLS → HTTP & caching → CDN → server side → rendering → “make it faster / secure”End-to-end layering, per-hop caching, failure surfaces
Garbage Collection“How does garbage collection work?”Reachability → mark-sweep/compact → generational hypothesis → concurrent collectors → why GC’d programs still leakTracing, pause sources, retention analysis
Process Lifecycle“What happens when you run ./a.out?”fork/exec & loader → memory layout → context switches → zombies/orphans → signals → cgroups/containersKernel-user boundary, process model, isolation escalation
ACID Transactions“What does ACID mean?”Real mechanism per letter → isolation levels → 2PL vs MVCC → WAL durability → 2PC → “what if you only need CA?”Transaction machinery, durability engineering, distributed escalation
URL Shortener“Design a URL shortener”Requirements & estimates → ID generation → redirect semantics → read-path caching → analytics → abuse → “now make it X”Design-interview laddering, ID schemes, read-heavy scaling
Redis Caching“Add a cache to make reads faster”Cache-aside race → TTL & eviction → stampede & locks → invalidation → hot keys & sharding → consistency → “when is Redis wrong?”Caching mechanics, failure modes, consistency boundaries
DNS Resolution“How does DNS resolution work?”Recursive vs iterative → root/TLD/authoritative walk → TTL trade-offs & negative caching → failover lag & NS changes → anycast & DNS as a global cacheCache-hierarchy reasoning, staleness-vs-load, TTL as blast-radius timer
TLS Handshake“What happens during a TLS handshake?”TCP recap → 1.2 vs 1.3 flights → certificate chain validation → resumption & 0-RTT replay → SNI/ECH & OCSP stapling → latency mathTrust anchors, RTT economics, replay boundaries
Message Queues“Why do we need a message queue?”Decoupling & buffering → partitions & offsets → groups, rebalancing & delivery semantics → compaction, lag SLOs → when queues are wrongLog architecture, ordering boundaries, exactly-once claims
Kubernetes Pod Lifecycle“What happens when a pod is created?”Control plane vs kubelet → probes & failure modes → graceful termination & PID 1 → scheduling, Pending & preemptionActor model, probe design, shutdown contracts, capacity policy
Connection Pooling“Why do we pool connections?”Setup cost & reuse → Little’s Law sizing → saturation, queueing & leaks → pool-per-process fan-out → when pooling hurtsQueueing math, saturation signatures, admission control
Consensus: Raft“How does Raft work?”Elections & terms → log replication & commit → safety properties → what Raft does not give → single-leader design pointElection restriction, log matching, the price of consensus
Regex Engines“How does regex matching actually work?”NFA vs DFA → catastrophic backtracking → possessive/atomic & RE2 → Unicode pitfalls → when regex is wrongEngine families, adversarial inputs, tool selection
Load Balancing“What is the difference between an L4 and an L7 load balancer?”Scheduling algorithms → health checks & failover → session affinity → consistent hashing & anycast → layered-judgment designRequest-vs-work fairness, detection gaps, state placement, global tiering
Replication Lag“How does primary–replica replication work?”Sync/async trade → lag measurement → session guarantees → failover & conflicts → topology judgmentLoss windows, lag metrics, read-your-writes, promotion scripts
HTTP Protocol Evolution“A page needs 50 resources — what does HTTP/1.1 do?”Pipelining failure → HTTP/2 multiplexing & HPACK → transport HOL & QUIC → 0-RTT economics → when each winsLayer-by-layer HOL, framing, handshake RTT math, rollout judgment
API Gateway“What does an API gateway do?”Edge auth & trust boundaries → rate-limit placement → routing & versioning → bottleneck/SPOF & mesh judgmentPolicy placement, compatibility windows, config blast radius
Virtual Threads vs Async“How does a server handle 10,000 concurrent connections?”Platform-thread cost model → event-loop inversion → virtual threads & pinning → migration traps & model choiceThread economics, continuations, admission control
Zero-Downtime Migrations“Add a column to a 2-billion-row live table”Expand–contract → backfill mechanics → dual-write vs CDC cutover → rollback & deploy orderingCode/schema compatibility windows, idempotent backfills, reversibility
SLOs and Error Budgets“What is the difference between an SLI, an SLO, and an SLA?”SLI design & vantage → budget as decision currency → burn-rate alerting → what not to alert on & governanceMeasurement contracts, budget arithmetic, multi-window paging
JWT Authentication“What is a JWT?”Signed vs encrypted → the stateless myth & expiry/refresh → revocation, JWKS rotation, algorithm confusionSignature vs encryption, state relocation, token lifetimes, verifier hardening
HTTP Caching“What happens when the browser requests a resource it already has?”Freshness model & Age arithmetic → validation & ETags → shared caches, Vary, stale-serving, invalidationFreshness vs validation, cache keys, staleness budgets
Kubernetes Scheduling“How does the scheduler decide where a pod runs?”Filter-score-bind pipeline → requests, limits & QoS → priority, preemption & topology spreadTwo-phase placement, resource accounting, eviction policy
Distributed Tracing“A request crosses 12 services — where did the time go?”Spans & context propagation → sampling economics → cardinality, cost & the observability contractCausal trees, propagation across async hops, head vs tail sampling, PII
Search Autocomplete“Design autocomplete for a search box”Trie mechanics & memory → ranking & precomputed top-k → sharding, fuzzy matching & the abuse surfacePrefix structures, materialized ranking, serving-path latency, content safety
LSM Trees & Compaction“Why do write-heavy databases use LSM trees?”Write path (WAL → memtable → SSTable) → compaction strategies → the amplification triangle & tuningSequential-write architecture, tombstones, write stalls, R/S/W trade-offs
Consistent Hashing“Why does adding a cache node cause a miss storm?”Mod-N problem → ring & virtual nodes → hot keys & bounded loads → rendezvous/jump alternativesMinimal disruption, metadata cost, keyspace vs load balance

Each chain deliberately overlaps in concept with other pages in the knowledge base but differs in angle — the links in each file make the division of labor explicit, so you can read the chain for escalation and jump out for depth.

How to Use This Collection

The drill that works: open a chain file, read only the opening question, and answer it aloud. Then read the first follow-up without reading its answer, answer aloud, and only then compare. If your spoken answer survived four rungs, find a peer and have them play interviewer with the “unfamiliar variations” section — deviations from script are exactly the part a solo drill cannot reproduce. A full chain takes fifteen to twenty-five minutes and is a better use of a commute than another pass over notes you already agree with.

A second use is calibration before a specific company loop: infrastructure teams escalate harder on TCP and virtual memory, application-platform teams on hash tables and rate limiting, database teams on indexes. The chains tell you not just the content but the depth contract — how far a strong candidate is expected to go before the interviewer moves on.

Coverage Ledger

Status of the collection as of this revision. Sources marked with URLs were verified reachable; others are cited by title and author because no link was confirmed.

FileStatusSources usedGaps
index.mddoneHouse style (CONTRIBUTING.md); internal cross-references verified via lsNone blocking; sibling-project links resolve once those collections land
hash-tables.mddoneCrosby & Wallach (USENIX Security 2003); SipHash (Aumasson & Bernstein, 131002.net/siphash/); OpenJDK JEP 180; Rust std HashMap docs; Karger et al. 1997; Amazon Dynamo paper (allthingsdistributed.com)No worked implementation code (deliberate — repo DSA chapters own that); probing math cited, not derived
tcp-lifecycle.mddoneRFC 9293 (datatracker); RFC 1122; RFC 6928; RFC 9438 (CUBIC); BBR paper (Cardwell et al., 2016); Linux ip-sysctl kernel docsSimultaneous close (CLOSING state) mentioned, not diagrammed; QUIC lifecycle covered only by pointer
database-indexes.mddonePostgreSQL docs (btree.html, indexes-multicolumn.html); O’Neil et al. 1996 (LSM-Tree); internal pages: dbms/indexing-strategy.md, dbms/internals/lsm-trees.mdVendor-specific behaviors (InnoDB change buffering, Postgres HOT updates) sketched, not exhaustive
virtual-memory.mddoneLinux kernel docs (transhuge.html); Lameter, “NUMA (Non-Uniform Memory Access): An Overview” (ACM Queue 2013); Drepper, “What Every Programmer Should Know About Memory”; internal os/memory pages5-level paging (la57) noted in passing; no coverage of virtualization nested paging (EPT/NPT)
mutex-to-lock-free.mddoneDrepper, “Futexes Are Tricky” (akkadia.org); futex(2) man page (man7.org); Coffman et al., “System Deadlocks” (1971); Herlihy & Shavit, The Art of Multiprocessor Programming; Mars Pathfinder accounts (Mike Jones; Glenn Reeves, JPL)Memory-ordering semantics summarized; formal relacy/model-checking territory out of scope
rate-limiter-design.mddoneRedis command docs (redis.io/commands/incr/, /commands/eval/); Cloudflare, “How we built rate limiting capable of scaling to millions of domains” (2017); internal interview/system-design/rate-limiter.mdNo real production postmortem woven in (reserved for failure-casebook); quota-billing edge cases thin
dns-resolution.mddoneRFC 1034/1035 and RFC 2308 (rfc-editor.org, verified via curl); internal: networks/dns/{resolution,caching,record-types,security,dnssec,doh}.md, networks/advanced/encrypted-dns.md, networks/cdn/anycast-and-geo-routing.md, cloud/aws/route53.md; failure-casebook/facebook-bgp-2021.mdProvider GeoDNS/steering policies named, not surveyed; resolver TTL-clamping described qualitatively, no per-resolver audit
tls-handshake.mddoneRFC 8446/5246/6066/6960 (rfc-editor.org, verified via curl); internal: networks/security/tls-deep-dive.md, networks/protocols/{tls-ech,quic-connection-migration}.md, networks/tcp/three-way.md, networks/http/https.md; misconceptions/https-means-secure.md; failure-casebook/heartbleed-2014.mdKey-schedule and cipher-suite math summarized, not derived; ECH deployment status stated as maturing without version pin
message-queues.mddoneKafka design documentation (kafka.apache.org, verified via curl); internal: distributed/messaging/{kafka,queues,rabbitmq,messaging-streaming}.md, messaging-internals/{kafka-log-internals,kafka-consumer-rebalancing,exactly-once-semantics,backpressure-and-flow-control}.md; connection-atlas/{event-sourcing-wal,backpressure}.md; why-not-handbook/push-vs-pull.mdPulsar/NATS internals pointered, not walked; quota and ACL administration out of scope
kubernetes-pod-lifecycle.mddoneKubernetes docs: pod-lifecycle and probes pages (kubernetes.io, verified via curl); internal: cloud/kubernetes/{pods,kubelet,scheduling,deployments,debugging}.md, linux/process-exit-signal/containers/{pid1-signals,kubernetes}.md, os/modern/oom-killer.md, cloud/spot-preemptible.mdCRI/containerd shim internals and native sidecars noted in passing; multi-cluster scheduling out of scope
connection-pooling.mddoneLittle 1961 (cited by title); PostgreSQL docs (runtime-config-connection.html, verified via curl); internal: queueing-theory/fundamentals.md, concurrency/thread-pools.md, os/threads/pools.md, dbms/caching/buffer-pool.md, cloud/advanced/serverless.md, cloud/aws/lambda.mdNo invented benchmarks: vendor pool defaults (HikariCP, Go sql.DB, pgx) named without numbers; PgBouncer semantics summarized at doc-name level
consensus-raft.mddoneOngaro & Ousterhout 2014 (cited by title); raft.github.io (verified via curl); internal: distributed/consensus/{raft,multi-raft,raft-membership-changes,paxos}.md, distributed/systems/{etcd-internals,zookeeper-internals,tidb-architecture}.md, distributed/replication/{primary-backup,quorum,multi-primary}.mdReadIndex/lease-read proofs named, not derived; pre-vote and check-quorum extensions summarized; joint-consensus vs single-step variants sketched
regex-engines.mddoneRE2 (github.com/google/re2, verified via curl); Rust regex docs (docs.rs/regex, verified via curl); Cox essays and UTS #18 (cited by title); failure-casebook/cloudflare-regex-2019.mdPOSIX leftmost-longest semantics sketched; derivative-based engines and formal DFA minimization out of scope
load-balancing.mddoneInternal: networks/load-balancing/{l4-vs-l7,algorithms,reverse-proxy}.md, networks/advanced/l4-load-balancing-internals.md, networks/cdn/anycast-and-geo-routing.md, distributed/partitioning/consistent-hashing.md, distributed/advanced/rendezvous-hashing.md, connection-atlas/load-balancing-partitioning.mdMaglev named, paper cited by title only; GSLB vendor products not surveyed
replication-lag.mddonePostgreSQL docs (logical-replication.html, verified via curl); internal: distributed/replication/{primary-backup,quorum,multi-primary}.md, distributed/advanced/{anti-entropy,hinted-handoff,leases}.md, distributed/fundamentals/{cap,fencing-tokens}.md; why-not-handbook/replication-modes.mdMySQL semi-sync and PostgreSQL synchronous_commit semantics summarized at doc-name level; CRDT merge math pointed, not derived
http-protocol.mddoneRFC 9113, 9114, 7541, 9000 (rfc-editor.org, verified via curl); internal: networks/http/{http1,http2,http3,hpack,qpack,quic,quic-internals}.md, networks/protocols/quic-connection-migration.mdQPACK dynamics sketched in one Q&A; extensible priorities (RFC 9218) out of scope
api-gateway.mddoneKubernetes docs: ingress page (kubernetes.io, verified via curl); internal: distributed/microservices/{api-gateways,discovery,circuit-breakers}.md, networks/load-balancing/reverse-proxy.md, sre/canary-releases.md, connection-atlas/auth-identity-session.mdNamed products (Envoy, Kong, cloud gateways) described generically, not versioned; token-exchange details pointed to the atlas map
virtual-threads-vs-async.mddoneJEP 444 (openjdk.org, verified via curl); internal: languages/java/{virtual-threads,reactive-programming,jvm-jit}.md, concurrency/{thread-pools,coroutines,async-await}.md, networks/sockets/io-multiplexing.mdJDK 24 monitor-pinning JEP named without number; goroutine scheduler internals out of scope (Java-centric ladder)
zero-downtime-migrations.mddonePostgreSQL docs (logical-replication.html, verified via curl); internal: dbms/advanced/schema-migrations.md, sre/{canary-releases,feature-flags}.md, connection-atlas/event-sourcing-wal.md, assumptions-hunt/serialization-compatibility.mdgh-ost/pt-osc trigger internals summarized at tool-name level; no vendor benchmark numbers invented
slos-and-error-budgets.mddoneGoogle SRE book + workbook (sre.google, verified via curl); internal: sre/{slo-sli-sla,slo-error-budget,canary-releases,feature-flags,on-call,incident-management,postmortem-culture,capacity-planning,bulkheads}.md, connection-atlas/observability-pipeline.md, misconceptions/averages-summarize-latency.mdBurn-rate constants (14.4×, 6×) stated as workbook convention, not derived; SLA contract-law dimension out of scope
proxy-architecture.mddoneMDN X-Forwarded-For; nginx proxy module docs; RFC 7239 (Forwarded header) (all verified)Per-product proxy behaviors (Envoy, HAProxy) described generically, not versioned
background-jobs.mddoneCelery task docs; Kubernetes CronJob docs (verified)Scheduler-internals per engine (Sidekiq, Temporal) described generically
graceful-degradation.mddoneGoogle SRE book: Handling Overload (verified)Product-specific shedding orders presented as worked examples, not industry data
websockets.mddoneRFC 6455 (WebSocket protocol) (verified)Vendor fan-out services (Pusher, Ably) described generically
circuit-breakers.mddoneMicrosoft Azure Architecture Center: Circuit Breaker pattern (verified)Library-specific defaults (Resilience4j, Polly) described generically, not versioned
jwt-authentication.mddoneRFC 7519/7515/7517/8725 (rfc-editor.org, verified via curl); internal: security/{jwt-internals,authentication,oauth2-internals}.md, misconceptions/jwt-is-encrypted.md, assumptions-hunt/{security-crypto,clocks-and-time}.md, connection-atlas/auth-identity-session.md, followup-tree/{api-gateway,tls-handshake}.mdJWE encryption profiles and nested JWTs sketched, not walked; OIDC flow variants pointed to oauth2-internals.md
http-caching.mddoneRFC 9111 (rfc-editor.org, verified via curl); internal: networks/http/http1.md, followup-tree/{redis-caching,http-protocol,url-to-page}.md, why-not-handbook/caching-distributed.md, assumptions-hunt/caching.md, misconceptions/cache-always-improves.md, connection-atlas/dns-cdn-routing.mdCDN purge APIs described generically, not per-vendor; browser-specific heuristic quirks not surveyed
kubernetes-scheduling.mddoneKubernetes docs: kube-scheduler and pod-priority-preemption pages (kubernetes.io, verified via curl); internal: cloud/kubernetes/{scheduling,pods}.md, followup-tree/kubernetes-pod-lifecycle.md, assumptions-hunt/containers-and-resources.md, connection-atlas/{containers-cgroups-namespaces,scheduling-queueing}.mdScheduler-framework plugin authoring and multi-cluster placement out of scope; descheduler named, not walked
distributed-tracing.mddoneDapper paper (research.google), W3C Trace Context (w3.org), OpenTelemetry traces docs (opentelemetry.io — all verified via curl); internal: distributed/microservices/observability.md, sre/exemplars.md, connection-atlas/observability-pipeline.md, assumptions-hunt/logging-and-pii.md, misconceptions/dashboards-mean-observability.md, followup-tree/{message-queues,slos-and-error-budgets,api-gateway}.mdTail-sampling processor internals and vendor backend storage engines described generically; eBPF-based tracing noted, not walked
search-autocomplete.mddoneRedis sorted-sets docs (redis.io), Elasticsearch suggester docs (elastic.co — both verified via curl); internal: interview/system-design/{typeahead,search}.md, connection-atlas/search-inverted-index.md, followup-tree/{hash-tables,rate-limiter-design}.md, why-not-handbook/binary-search-vs-hashing.md, assumptions-hunt/input-constraints.mdFST construction math cited, not derived; multilingual tokenization and semantic (embedding) suggestions out of scope
lsm-trees-compaction.mddoneRocksDB wiki (Leveled Compaction, Tuning Guide, github.com) and ScyllaDB compaction docs (docs.scylladb.com) verified via curl; O’Neil et al. 1996 cited by title; internal: dbms/internals/{lsm-trees,compaction,lsm-btree-hybrid-engines}.md, followup-tree/{database-indexes,redis-caching}.md, connection-atlas/db-indexes-data-structures.mdUniversal/FIFO knob-level configuration summarized; crash-recovery edge cases pointed to WAL internals; one Mermaid write-path diagram
consistent-hashing.mddoneJump consistent hash paper (arxiv 1406.2294) and bounded-load hashing paper (arxiv 1608.01350), both verified via curl; Karger et al. 1997 and Maglev cited by title (Dynamo paper link 403 this session); internal: distributed/partitioning/consistent-hashing.md, distributed/advanced/{rendezvous-hashing,jump-consistent-hashing}.md, followup-tree/{load-balancing,hash-tables,message-queues}.md, connection-atlas/load-balancing-partitioning.mdMaglev lookup-table construction sketched; weight-aware variants (multi-probe) named, not derived
Proxy Architecture“What does a reverse proxy do for my service?”Reverse vs forward proxying → TLS termination → forwarded-header trust → buffering & timeouts → proxy as bottleneckHeader hygiene, connection multiplexing, failure amplification
Background Jobs“Where does this slow work go?”Queues vs cron vs schedulers → idempotency → poison pills → visibility timeouts → backfill vs live trafficAt-least-once consequences, job isolation, retry economics
Graceful Degradation“What happens when a dependency slows down?”Shedding order → bulkheads → degraded modes → static fallbacks → recovery behaviorLoad shedding vs collapse, feature priorities, user-visible degradation
WebSockets“How do I push data to the browser?”Upgrade handshake → statefulness vs stateless infra → fan-out → reconnect storms → scaling patternsConnection state, sticky sessions vs pub/sub, fleet-wide connection math
Circuit Breakers“How do we stop retry storms?”Breaker states → thresholds → half-open probing → fallbacks → breaker vs retry interactionFailure detection latency, per-dependency isolation, cascading failure prevention

Interview Questions

Q: What separates a senior answer from a junior one inside a follow-up chain? A: A junior answer states the fact; a senior answer states the fact, the assumption that makes it true, and the failure mode when the assumption is removed. “Hash lookup is O(1) on average, assuming uniform hashing — an adversary who can force collisions turns it into O(n), which is why real languages seed their hash functions” is a senior sentence because each clause predicts a follow-up.

Q: You are asked a question you have never seen. What do you actually say? A: Name the boundary, then transfer: “I have not seen that variant, but the standard answer depends on assumption X. If your variant removes X, then A breaks, and I would look at B; I would measure C to decide.” Interviewers score the reasoning, not recognition. Silence or bluffing scores zero on both.

Q: Why do interviewers escalate on one topic instead of moving to new topics? A: Because one question answered at five rungs distinguishes memorization from understanding, while five topics at one rung cannot. Depth is also cheaper to grade: the interviewer already holds the context, so each follow-up costs seconds and yields a sharper signal about the boundary of the candidate’s model.

Q: How should you practice follow-up chains alone? A: Speak every rung aloud before reading the answer, and keep a written list of the rungs where you stalled. The list is the syllabus. Solo drilling cannot reproduce adversarial variation, so pair it with a peer playing interviewer from the variation sections — the value is in the questions you did not anticipate, not the ones you did.

Key Takeaways

  • A follow-up ladder has five rungs — definition, mechanism, edge cases, trade-offs, design judgment — and interviewers use it to find the boundary of your model, not to trick you.
  • Escalation moves along three axes: generality, adversariality, and consequence. Predicting the axis of the next question is itself a skill worth practicing.
  • Unfamiliar variations are handled by reducing them to threatened invariants, identifying who controls the inputs, questioning the cost model, and naming the trade-off you would measure.
  • Reaching your boundary is expected; the senior response is to name it and reason from adjacent knowledge rather than bluff.
  • Depth on six load-bearing concepts beats breadth across sixty shallow ones, because the six are where interviewers know how to dig.

Cross-References

  • Hash Tables — escalation chain from “what is a hash table” to adversarial hashing and consistent hashing.
  • TCP Lifecycle — escalation chain from connection setup to TIME_WAIT, congestion control, and liveness.
  • Database Indexes — escalation chain from index definition to write amplification and the B+tree/LSM decision.
  • Virtual Memory — escalation chain from address translation to thrashing, NUMA, and huge pages.
  • Mutex to Lock-Free — escalation chain from mutex implementation to CAS, ABA, and progress guarantees.
  • Rate Limiter Design — escalation chain for the canonical system-design opener, including distributed counters and failure posture.
  • Assumptions Hunt — sibling project that interrogates the hidden assumptions these chains expose (complexity claims, input constraints).
  • Misconceptions — sibling project documenting the false beliefs each ladder tends to surface (O(1) lookups, “indexes always faster”).
  • Why-Not Handbook — sibling project with mechanism-deep comparisons (binary search vs hashing, concurrency primitives).
  • Connection Atlas — sibling project mapping cross-topic connections (DB indexes ↔ data structures, virtual memory ↔ caching).
  • Failure Casebook — sibling project with named production incidents that illustrate the failure rungs of these chains.
  • Interview Overview — the repo’s existing interview hub: question banks and strategy this project complements rather than repeats.
  • Rate Limiter (System Design) — the full worked design; the follow-up chain in this project assumes and links to it.
  • References — curated external sources per topic.