A/B Test Sample Size and the Peeking Problem: Interview Guide
Size an A/B test from baseline, MDE, alpha and power, turn it into days, and see by simulation why stopping at the first p below 0.05 fails.
Size an A/B test from baseline, MDE, alpha and power, turn it into days, and see by simulation why stopping at the first p below 0.05 fails.
Solve the classic 1% disease test question three ways, see why rare events wreck precision, and avoid the base rate traps interviewers set.
What the central limit theorem really promises, shown by simulation on skewed revenue data, and where it quietly breaks in A/B tests.
What 95% confidence really means, how to build t, Wilson and bootstrap intervals in Python, and why the textbook proportion interval fails.
The OLS assumptions interviewers expect, which violations bias coefficients and which only break standard errors, with Python checks for each.
What a p-value actually measures, how to run a two-proportion test by hand in Python, and the misreadings that sink data science candidates.
Why a variant can win in every segment yet lose overall, how to standardise for mix, and how to tell confounders from causes in product data.
Pick the right test from the data type and design: two-proportion z-tests, Welch and paired t-tests, and chi-square, each run in Python.
How SGD, momentum, Adam and AdamW update weights, why AdamW decouples weight decay, and how warmup and cosine decay keep training stable.
How backpropagation applies the chain rule layer by layer, worked by hand on a tiny network with softmax cross-entropy and a gradient check.
How batch norm and layer norm compute their statistics, why model.eval() matters, why small batches hurt, and why transformers use LayerNorm.
How a conv layer slides a kernel, the output size and parameter formulas, pooling, and how receptive field grows, with runnable Python.
How to spot overfitting in loss curves, why inverted dropout scales by 1/(1-p), and how weight decay, augmentation and early stopping help.
How RNNs, LSTMs and GRUs process sequences, why gradients vanish through time, how gates fix it, and how to count each model's parameters.
Compute softmax(QK^T/sqrt(d_k))V by hand, see why the scaling matters, then add causal masks, multiple heads and a KV cache memory budget.
Why gradients vanish or explode in deep networks, measured layer by layer, and how He and Xavier init, residuals and clipping fix it.
When a Go channel send blocks, what buffering changes, who closes a channel, and how select, nil channels and timeouts fit together.
How context cancellation propagates through a Go call tree, why cancel must always be called, and how to stop goroutines on a deadline.
How fmt.Errorf with %w builds an error chain in Go, when to use errors.Is versus errors.As, and how to design sentinel and typed errors.
How goroutines differ from OS threads, how the GMP scheduler maps them onto CPUs, and what GOMAXPROCS, preemption and syscalls change.
What counts as a data race in Go, how sync.Mutex and WaitGroup fix it, and how go test -race finds the race before production does.
Why a nil pointer returned as an error makes err != nil true in Go, how interface values store type and value, and how to avoid it.
How a Go slice header works, when append reallocates, why two slices can overwrite each other, and how to copy safely with Clone.
How to bound concurrency in Go with a worker pool or errgroup, why early returns leak goroutines, and how to find leaks with pprof.
How Kafka consumer groups share partitions, what triggers a rebalance, and how cooperative assignment and static membership cut downtime.
How Kafka transactions make consume-transform-produce exactly-once, how zombie fencing and read_committed work, and where the guarantee ends.
How the Kafka idempotent producer stops duplicates from retries, what it cannot dedupe, and how batch.size, linger.ms and compression work.
How Kafka consumers commit offsets, why commit order decides at-most-once or at-least-once, and how to get exactly-once effects.
How Kafka partitions and offsets work, why ordering is only per partition, and how keys keep each entity's events in sequence.
Why one bad Kafka record can block a whole partition, and how to handle it with error classification, bounded retries and a dead letter topic.
How Kafka replicates partitions, what the ISR and high watermark mean, and how acks=all with min.insync.replicas prevents data loss.
How Kafka deletes old segments by time or size, how log compaction keeps the latest value per key, and how tombstones delete keys.
What embeddings are, how cosine similarity and approximate nearest neighbour indexes work, and when to add keyword search and reranking.
Build an eval suite for an LLM app: golden datasets, code-based checks, LLM-as-judge calibration, retrieval metrics and regression gates in CI.
Fine-tuning changes how a model behaves; RAG changes what it knows at request time. A decision guide with data prep, costs and failure cases.
How LLM tool use works: schemas, the call-execute-return loop, validation, error results, step limits and when an agent beats a workflow.
Direct and indirect prompt injection, why prompts alone cannot stop it, and layered defenses: tool policy, confirmation and output filtering.
A step-by-step RAG design for interviews: ingestion, structure-aware chunking, hybrid retrieval, grounded prompts with citations and evaluation.
Why LLMs hallucinate and the layered fixes that work: grounding, permission to abstain, citations, structured output and automatic claim checks.
How LLMs turn text into tokens, why the context window is a shared budget, and what temperature, top-k and top-p actually do to the next token.
What bias and variance really measure, how to read validation and learning curves, and which fix to reach for when a model underfits or overfits.
How k-fold cross-validation works, which splitter suits grouped or time data, and how leakage turns pure noise into an 85% accurate model.
How gradient descent updates weights, how batch, stochastic and mini-batch differ, and why learning rate and feature scaling decide convergence.
How to train and evaluate a classifier with rare positives: PR-AUC over accuracy, class weights vs thresholds, and resampling without leakage.
How logistic regression turns a linear score into a probability, why it uses log loss, how to read odds ratios and what separation breaks.
How to spot overfitting, why L1 zeroes weights while L2 only shrinks them, and how scaling, early stopping and dropout fit into regularization.
Precision, recall and F1 from the confusion matrix, how the threshold trades one for the other, and how to pick one that meets a target.
Why a random forest averages away variance while gradient boosting chips away bias, with runnable code, early stopping and when to choose each.
When to score models in a nightly batch job and when behind a low-latency API, with tail-latency budgets, fallbacks and the hybrid pattern.
How CI, CD and continuous training fit together for ML, which tests gate a pipeline, retraining triggers, and Google's MLOps maturity levels.
How data drift, concept drift and prediction drift differ, how PSI and the KS test measure them, and why p-value alerts drown your team in noise.
Treat prompts as versioned releases: register and alias them in MLflow, trace every call, and block regressions with an evaluation gate in CI.
Log params, metrics and models with MLflow 3, compare runs with search_runs, and promote or roll back models by moving registry aliases.
What it takes to rebuild a model months later: code commit, data snapshot and hash, config, seeds, environment and the registered artifact.
How shadow mode, canary releases and A/B tests de-risk a new model, what each can measure, sticky user bucketing, and rolling back safely.
Why models that ace offline tests fail live: duplicated feature code, refitted scalers, future-leaking joins, and how feature stores stop them.
How the App Router differs from the Pages Router in Next.js 15, how data fetching maps across, and how to migrate one route at a time.
Request memoization, the Data Cache, the Full Route Cache and the Router Cache in Next.js 15, and how to debug a page that shows stale data.
Why React reports that server HTML did not match the client in Next.js 15, how to find the cause, and fixes for dates, browser APIs and nesting.
What Next.js 15 middleware can do, how matchers decide where it runs, and why real authorisation still belongs next to your data.
How Server Actions turn a function into a POST endpoint in Next.js 15, how to build forms with useActionState, and how to secure every action.
How Server and Client Components render in the Next.js 15 App Router, where to put use client, and how to keep secrets out of the bundle.
When Next.js 15 renders a page at build time, per request or with background regeneration, and how to prove which one a route uses.
How loading.tsx and Suspense stream a Next.js 15 page, where error.tsx catches failures, and why a slow layout or late notFound breaks the plan.
Cache-aside, write-through and write-behind with Redis, a safe invalidation order, and working code that stops a cache stampede.
Strings, hashes, lists, sets, sorted sets, streams, HyperLogLog and bitmaps: what each Redis type costs and which interview use case it fits.
Build a correct Redis lock with SET NX PX and a token-checked release, add fencing tokens, and explain the Redlock algorithm and its critique.
How Redis expires keys lazily and actively, what each maxmemory-policy evicts, and how approximated LRU and LFU choose a victim.
How RDB snapshots and the append-only file work, how much data each appendfsync setting can lose, and how to enable AOF without losing data.
Fixed window, sliding log and token bucket rate limiters in Redis, why they must be atomic, and tested Lua scripts for each one.
How Redis replicates asynchronously, how Sentinel fails over, and how Cluster shards keys into 16,384 hash slots with MOVED and ASK redirects.
Why one Redis thread handles huge request rates, what io-threads and background threads change, and which commands block every client.
Load template regions on demand with @defer, choose a trigger, and use placeholders without delaying critical content.
Catch uncaught errors with a custom ErrorHandler, distinguish client from HTTP errors, and surface safe messages to users.
Attach behavior to elements with attribute directives, bind to the host with the host property, and compose directives with hostDirectives.
Understand why pure pipes run only when inputs change, what makes a pipe impure, and how to avoid the performance cost.
Load data reactively with the resource API, track loading and error state as signals, and cancel stale requests automatically.
Model forms as signals, bind fields in the template, and reason about validation and derived state in a signal-driven form.
Server-render Angular apps, hydrate without mismatches, and avoid the DOM and timing assumptions that break rendering.
Compare template-driven and reactive forms, choose the right one for a screen, and avoid mixing two sources of truth.
Run Angular without zone.js, drive updates with signals, and understand which async sources still schedule change detection.
Control CloudFront TTLs, invalidate or version content, and use an origin shield to protect the origin.
Read by key with Query, avoid full-table Scans, and add indexes to serve the access patterns you actually have.
Compare ECS and EKS for running containers on AWS, and choose by control, portability and team capability.
Match events and run schedules with EventBridge, route to targets, and handle delivery failures.
Assume roles with STS, separate trust from permission policies, and use temporary credentials instead of long-lived keys.
Reduce cold-start latency with smaller packages, provisioned concurrency and initialization outside the handler.
Use Multi-AZ for failover availability and read replicas for read scaling, and stop confusing the two.
Move objects to cheaper storage classes and expire them automatically with S3 lifecycle rules.
Store secrets centrally, rotate credentials automatically with a two-user pattern, and fetch them at runtime.
Show how you identified the next level's expectations, gathered evidence, and sought feedback instead of waiting for promotion.
Answer questions about working across teams by aligning on outcomes, defining interfaces and using a clear escalation path.
Show how you understand a stakeholder's goal, present data and options, and agree on a decision process instead of arguing.
Show how you built credibility, framed ideas in others' interests, and used a small pilot to win support without a mandate.
Make trade-offs explicit, protect the milestone, and renegotiate scope instead of silently absorbing it.
Show how you learned a new system quickly, landed a small early win, and built relationships instead of changing everything at once.
Show how you default to written communication, provide context asynchronously, and keep distributed work moving across timezones.
Negotiate from a researched range, discuss total compensation, and keep the conversation collaborative without ultimatums.
Make the case for paying down technical debt by tying it to incidents and velocity, and proposing small, incremental work.
Use build args for build-time configuration, keep secrets out of them, and understand how they interact with the cache.
Speed up image builds with BuildKit cache mounts, multi-stage builds and dependency-first layer ordering.
Start only the services you need with Compose profiles, and keep the default set small for focused local development.
Ship images without a shell or package manager, copy only the runtime, and accept the debugging trade-off.
Scan images for known CVEs in CI, set a policy that blocks the build, and rebuild when base images are patched.
Why the first process in a container must reap children and forward signals, and how to avoid zombies and ignored shutdowns.
Authenticate to private registries with credential helpers, pull secrets in Kubernetes, and scoped tokens.
Choose between no, on-failure, always and unless-stopped, and combine a policy with health checks to avoid crash loops.
Store ephemeral, sensitive data in memory with tmpfs mounts, and set size limits so memory use stays bounded.
Set, test and clear bits, exploit XOR properties, and count set bits with the Brian Kernighan trick.
What a detached HEAD is, when it happens, and how to keep commits made in that state.
Automate checks with client and server hooks, share them through a framework, and enforce the same rules in CI where they cannot be bypassed.
Track large binaries with Git LFS, keep pointer files in the repository, and plan for LFS storage and access.
Fetch less history and content with shallow and partial clones, and understand what you give up.
Understand remote-tracking refs, the difference between fetch and pull, and how tracking branches stay in sync.
Sign commits and tags, verify signatures, and enforce them to prove who authored a change.
Embed another repository with submodules or subtrees, and choose based on how often it changes and who owns it.
Mark releases with annotated tags, push them explicitly, and treat a tag as immutable.
Check out several branches at once in separate directories with git worktree, sharing one object database.
Reserve space for media with aspect-ratio, combine it with object-fit, and avoid the layout shift the old padding hack caused.
Style a parent based on its children with :has(), handle form states, and use it without hurting performance.
Control the cascade order with @layer, keep specificity low, and understand how unlayered styles fit in.
Support light and dark themes with prefers-color-scheme and custom properties, and avoid the flash of the wrong theme.
Use flexbox for one-dimensional flows and grid for two-dimensional layouts, and know when each is the simpler tool.
Understand the default display types, how they affect sizing and flow, and why some properties are ignored on inline elements.
Style for print with @media print, hide navigation, and control page breaks so documents read well on paper.
Truncate text with an ellipsis, clamp multiple lines, and fix the flexbox case where truncation refuses to happen.
Animate transform and opacity for smooth motion, use transitions and keyframes, and respect reduced-motion preferences.
Use ? extends T for producers and ? super T for consumers, and understand why List<String> is not a List<Object>.
Know which array methods change the original in place and which return a new array, and pick the right one to avoid shared-state bugs.
Parse and format dates without timezone surprises: zero-based months, date-only versus date-time parsing, and why UTC storage avoids drift.
Why 0.1 + 0.2 is not 0.3, where safe integer range ends, and when BigInt is the right tool for large identifiers and money.
Destructure objects with renamed bindings and defaults, and learn why only undefined triggers a default while null keeps its value.
Short-circuit safely with optional chaining and choose ?? over || when 0, empty strings and false are valid values.
Race a promise against a timer to enforce a deadline, and clean up the timer plus the losing work instead of leaving it running.
Why a global or sticky RegExp can alternate between matching and failing, and how lastIndex and the g/y flags interact with test and exec.
Use spread and rest correctly, and avoid the shallow-copy trap where nested objects are still shared between the original and the copy.
Create unique property keys, customize object behavior with well-known symbols, and understand why symbols vanish from JSON and Object.keys.
Understand why ConfigMap changes reach volumes but not environment variables, and how to roll a Deployment deliberately.
Share scratch space between containers in a pod with emptyDir, choose the backing medium, and bound its size.
Route traffic with GatewayClass, Gateway and HTTPRoute, and understand how the Gateway API improves on Ingress.
Scale replicas from metrics with the HPA, set sensible targets, and stabilize against flapping.
Run setup and dependency waits in init containers before the app starts, and keep startup logic out of the app itself.
Enforce pod hardening with the Pod Security Admission levels, and migrate workloads off the removed PodSecurityPolicy.
Spread replicas across zones and nodes with topology spread constraints, and balance availability against scheduling failure.
Cap a namespace's total resources with a quota and set per-container defaults with a LimitRange.
Choose ClusterIP, NodePort, LoadBalancer or a headless Service, and know what each exposes.
Protect a service's domain model from a foreign or legacy model with a translation layer at the boundary.
Evolve service APIs without breaking consumers using additive changes, explicit versioning and consumer-driven contracts.
Use a per-client BFF to aggregate services and shape responses, without letting it become a shared god service.
Coordinate exclusive access across instances with leases and fencing, and prefer partitioning or idempotency when you can.
Store events as the source of truth, rebuild state by replay, and manage versioning with snapshots.
Separate liveness from readiness, keep deep dependency checks off the restart path, and avoid the restart loop.
Register event schemas centrally, enforce compatibility on publish, and version them so consumers are never surprised.
Move cross-cutting networking concerns into a co-located proxy, configure them centrally, and watch for hidden retries.
Replace a monolith incrementally by routing slices to new services, avoiding a big-bang rewrite.
Batch inserts and updates with bulkWrite, choose ordered or unordered, and handle partial failures correctly.
Use capped collections for fixed-size, insertion-ordered logs, and know why documents cannot grow.
React to inserts and updates with change streams, persist resume tokens, and handle invalidate and failover correctly.
Use collations for case- and accent-insensitive matching, and make the index collation match the query collation.
Store files larger than the 16 MB document limit with GridFS, streaming uploads and downloads and cleaning up orphaned chunks.
Diagnose a poor index choice, force one with hint, and remove the hint once the planner is fixed.
Return only the fields you need, exclude _id when unused, and build a covering index that answers a query without fetching documents.
Create a weighted text index, query with $text and textScore, and understand the limits of MongoDB's built-in search.
Store metrics and events in time-series collections, set the meta field and granularity, and query with time bounds.
Understand positive and negative caching, why changes are not instant, and how TTL trades propagation speed against query load.
Read and choose DNS records: A and AAAA for addresses, CNAME for aliases, and MX and TXT for mail and verification.
Choose between 301, 302, 307 and 308, know which preserve the request method, and avoid caching and loop mistakes.
How HTTP/3 runs over QUIC on UDP, why it removes transport head-of-line blocking, and when it helps in practice.
Read CIDR notation, compute usable host ranges, and design non-overlapping subnets for a VPC.
Choose between a transport-layer and an application-layer load balancer, and understand what each can and cannot route on.
Why the MTU limits packet size, how path MTU discovery avoids fragmentation, and why tunnels cause black-hole connections.
How the receive window stops a fast sender from overrunning a slow receiver, and how it differs from congestion control.
How TLS negotiates keys and certificates, what TLS 1.3 improves, and the certificate mistakes that break HTTPS.
Choose where to cache, set TTLs, avoid caching errors, and protect a cold cache with single-flight loading.
Use cluster to run several workers on all cores, restart crashed workers, and understand shared-port and shared-state limits.
Store passwords as salted hashes with a slow key-derivation function, and compare candidates in constant time.
Choose between ESM and CommonJS, import CJS defaults from ESM, and reach ESM from CJS with dynamic import.
Set defensive HTTP headers centrally: content type protection, a content security policy, referrer policy and HSTS over HTTPS.
Retry only transient failures, space attempts with exponential backoff plus jitter, and cap attempts and total time.
Emit JSON logs with levels and correlation ids, keep them machine-readable, and never log secrets or personal data.
Build and parse URLs with the WHATWG URL API instead of string concatenation, and validate the host before fetching.
Compress HTTP responses with gzip or brotli streams, negotiate the encoding, and avoid compressing data that is already compressed.
Improve performance with spatial and temporal locality, avoid pointer chasing, and understand false sharing between threads.
How copy-on-write lets fork share pages until a write, why RSS can be misleading, and the implications for memory and latency.
How select, poll and epoll report I/O readiness, and the difference between level- and edge-triggered notifications.
Compare blocking, non-blocking, multiplexed and asynchronous I/O, and why the choice drives server scalability.
How write-ahead journaling keeps a filesystem consistent after a crash, and why durability needs an explicit fsync.
Compare stack and heap allocation, how the allocator manages the heap, and the fragmentation and lifetime bugs that follow.
Use SIGTERM for graceful shutdown, respect the limits of signal handlers, and know which signals cannot be caught.
How swapping extends memory, when it becomes thrashing, and how overcommit and the OOM killer respond to exhaustion.
Bound concurrency with a fixed pool and a queue, size it for the workload, and avoid the unbounded backlog.
Run coroutines concurrently with asyncio.gather, enforce timeouts, and handle partial failures and cancellation correctly.
Announce dynamic updates to assistive technology with polite and assertive live regions, and avoid the mistakes that silence them.
Stop a single context value from re-rendering every consumer by splitting state and dispatch and memoizing the provider value.
Split bundles with lazy and Suspense, work with default exports, and place boundaries so a chunk loads only when needed.
Render outside the parent DOM with createPortal while events keep bubbling through the React tree, and manage focus and z-index.
Split server and client components, mark interactive leaves with use client, and keep props serializable across the boundary.
Understand why StrictMode runs effects twice in development, how it surfaces missing cleanup, and why disabling it is the wrong fix.
Manage form submission, pending state and server errors with useActionState instead of hand-rolled loading flags.
Show the expected result immediately with useOptimistic, then reconcile with the server and roll back cleanly on failure.
Expose a minimal imperative API from a component with forwardRef and useImperativeHandle instead of leaking the DOM node.
Enforce access with ACLs, use scripted conditions carefully, and test as the actual user to verify.
Understand what the platform caches, when a change takes effect, and how to flush caches consistently across nodes.
Define fields in the dictionary, use per-table overrides, and enable audit on the fields that need a history.
Use the client form API for presentation, keep validation on the server, and avoid heavy client scripts.
Send notifications through events and business rules, gate them with conditions, and prevent the notification storm that floods users.
Collect input with a catalog form and create the right record, and know the limits when the target span multiple tables.
Expose data through Scripted REST or the Table API, version the contract, and avoid leaking internal tables.
Run recurring server-side work with scheduled jobs, avoid overlap and long runs, and log enough to debug failures.
Move configuration with update sets, resolve collisions in order, and avoid the manual edits that break promotion.
Run methods asynchronously with @Async, configure a bounded executor, and handle exceptions and the proxy boundary.
Cache method results with @Cacheable, choose keys and TTLs, and evict on writes without the self-invocation trap.
Define outbound HTTP as an annotated interface with @HttpExchange, create the proxy, and configure timeouts and errors.
Return consistent RFC 7807 error responses, map exceptions centrally, and avoid leaking internals to clients.
Page results with Pageable, always sort stably, and avoid the deep-offset slowdown on large tables.
Run recurring work with @Scheduled, coordinate across instances, and avoid overlap and long-running jobs.
Test against real databases and services in containers, manage their lifecycle, and isolate state between tests.
Propagate trace context with Micrometer Tracing, correlate spans across services, and sample without overwhelming storage.
Apply different validation rules for create and update with groups, and sequence checks with group order.
Use simple and searched CASE for conditional values, ordering and aggregation, and avoid the NULL that a missing ELSE produces.
Group by time with date_trunc, write range predicates with >= and < instead of BETWEEN, and handle timezones explicitly.
Prevent deadlocks with a consistent lock order and short transactions, and retry the ones you cannot prevent.
Keep derived values consistent with generated columns, choose STORED or virtual, and index a stored derived value.
Filter rows with WHERE before grouping and groups with HAVING after, and understand why the placement changes cost and correctness.
Store and query semi-structured data with jsonb, extract fields with -> and ->>, and index the queries you actually run.
Walk parent-child data with WITH RECURSIVE, guard against infinite loops, and understand the anchor and recursive terms.
Join a table to itself to compare rows, walk a hierarchy, or find duplicates, and avoid the accidental cross product.
Combine result sets with UNION, UNION ALL, INTERSECT and EXCEPT, and know when deduplication changes cost or meaning.
Protect a service from overload by bounding queues, signaling producers to slow down, and shedding low-priority work.
Use a Bloom filter to skip lookups with a tiny memory footprint, and understand its false-positive-only guarantee.
Make retried requests safe with idempotency keys, store the result per key, and return the original response on a repeat.
Elect a single leader with leases or consensus, use fencing tokens to reject stale leaders, and avoid split brain.
Ingest events, respect preferences, deduplicate and deliver across channels with retries and provider failover.
Track online status with heartbeats and TTLs, derive presence instead of storing it, and avoid fanning out to every client.
Evolve stored and message schemas with additive changes, expand-contract migrations, and reader tolerance across services.
Ingest metrics with bounded cardinality, roll up raw samples, and set retention tiers so storage stays predictable.
Generate short codes from ids, keep the read path fast and cached, and handle collisions and analytics.
Inject a clock instead of calling the system time, freeze it in tests, and remove the sleeps that make tests flaky.
Read line and branch coverage as a signal, not a goal, and avoid the tests that chase the number without checking behavior.
Reserve end-to-end tests for critical user journeys, use stable selectors, and avoid duplicating coverage the lower tests already have.
Test failures and edge inputs deliberately, assert the error type and message, and stop the happy path from hiding bugs.
Separate fast isolated unit tests from integration tests that use real dependencies, and find the balance that catches real bugs.
Run tests in parallel without interfering by removing shared state, isolating resources, and randomizing order.
Write a failing test first, make it pass minimally, then refactor under green, and understand why the order matters.
Keep snapshots small and intentional, review every diff, and stop large snapshots from becoming rubber-stamped assertions.
Build valid test objects with defaults and override only what a test cares about, to keep tests readable and robust.
Share behavior with abstract classes, enforce required members, and decide when an interface or composition is the better contract.
Write .d.ts files for JavaScript packages, declare modules, and expose types with the package.json types field.
Compare enums with unions of string literals: runtime cost, serialization, exhaustiveness and which one fits application code.
Give type parameters defaults to make them optional, and order them so inference still works without explicit arguments.
Model keyed collections with index signatures, type the value side, and avoid the loose any that hides real type errors.
Rename mapped-type keys with an as clause, filter keys by mapping to never, and build getter and prefixed types generically.
Turn on strict checks, know which flags strict bundles, and layer the non-strict extras such as noUncheckedIndexedAccess.
Compose string types with template literals, interpolate unions to generate combinations, and understand how they stay type-level only.
Use polymorphic this return types for builders, keep chaining correct through subclasses, and constrain this parameters.
Fix Angular NG8002 Can't bind to 'ngModel' since it isn't a known property of 'input': import FormsModule, then fix formControl and inputs.
Fix 'blocked by CORS policy' errors when Angular ng serve calls a backend: proxy.conf.json, angular.json wiring and production CORS setup.
Fix Angular NG0100 ExpressionChangedAfterItHasBeenCheckedError: why the dev-mode check fires, and data-flow fixes that beat setTimeout.
Fix Angular NG8001 'app-x' is not a known element: standalone imports, selector typos, NgModule exports, schemas and TestBed setup.
Fix Angular NullInjectorError: No provider for X! (NG0201): read the injector path, add provideHttpClient(), providedIn root or a token.
Why a Docker container exits immediately: check the exit code, read docker logs, open a shell and fix a command that only starts a background job.
Fix 'exec format error' in Docker: confirm the CPU architecture mismatch with uname and docker inspect, then rebuild with the right --platform or buildx target.
Fix Docker 'no space left on device' during build or pull: measure with docker system df, prune in a safe order, and cap logs and build cache.
Fix 'permission denied while trying to connect to the Docker daemon socket': docker group, re-login, rootless mode, contexts and a dead daemon.
Fix Docker 'port is already allocated' and 'address already in use': find the container or process on the port, then remap or bind to 127.0.0.1.
Fix 'Your branch and origin/main have diverged' and fatal: Need to specify how to reconcile divergent branches: merge, rebase or ff-only.
Fix Git's error: failed to push some refs and ! [rejected] main -> main (fetch first): fetch, rebase or merge, and force-with-lease safely.
Fix git@github.com: Permission denied (publickey) and Could not read from remote repository: test SSH, load keys, set IdentityFile, or use HTTPS.
Fix Git's fatal: refusing to merge unrelated histories: why it happens, when --allow-unrelated-histories is right, and safer alternatives.
How to undo the last commit in Git: git reset --soft, --mixed or --hard, commit --amend, git revert for pushed commits, and reflog recovery.
ClassNotFoundException vs NoClassDefFoundError in Java: what each error means, why classes go missing at runtime and how to fix the classpath.
Fix java.util.ConcurrentModificationException when removing items in a loop: use removeIf or Iterator.remove, and see when concurrent lists help.
Fix java.lang.NullPointerException by reading the helpful message, finding the null in the top stack frame and validating inputs early.
Fix java.lang.OutOfMemoryError: Java heap space by checking -Xmx, capturing a heap dump and finding what retains memory in Eclipse MAT.
Fix UnsupportedClassVersionError (class file version 65.0 vs 61.0) by matching the runtime JDK to your build or compiling with javac --release.
Why Arrays.asList and List.of throw UnsupportedOperationException on add or remove, and how to choose a mutable copy or an immutable list.
Sort arrays in place with a correct comparator, understand default string ordering and sort stability, and avoid the numeric and string traps.
Consume async generators with for await, propagate errors and pace a producer to a slow consumer without buffering the whole stream.
Fix 'blocked by CORS policy' fetch errors: which headers the server must send, preflights, credentials, dev proxies and why no-cors fails.
Fix TypeError: Cannot read properties of undefined by finding which value is missing, reading the stack trace and repairing the data flow.
Fix SyntaxError: Cannot use import statement outside a module in Node and browsers: type module, .mjs, require of ESM and __dirname in ESM.
Extend Error to carry a stable name and instanceof, preserve the underlying cause, and avoid the string-throwing mistakes interviewers look for.
Fix TypeError: x is not a function in JavaScript: wrong imports, shadowed names, lost this, a missing semicolon or .map on a non-array.
Fix RangeError: Maximum call stack size exceeded: missing base cases, self-calling setters, circular data, huge spreads and deep recursion.
Validate object writes with Proxy set and get traps, forward with Reflect and avoid the invariants that make a proxy lie about its target.
Fix ReferenceError: x is not defined: typos, block scope, the TDZ, window or require missing in Node, and scripts that load in the wrong order.
Deep-clone Dates, Maps, Sets and cyclic graphs with structuredClone, and move ArrayBuffers between contexts instead of copying them.
Fix SyntaxError: Unexpected token '<' in JSON from fetch: the server sent HTML. Check res.ok and content-type, then read the body as text.
Fix Uncaught (in promise) errors and Node crashes from unhandled rejections: missing await, async forEach, fire-and-forget and rethrown errors.
Fix Kubernetes CrashLoopBackOff: read the exit code, check kubectl logs --previous, fix command, config and probes, and understand backoff timing.
Fix CreateContainerConfigError: read the kubectl describe event, repair missing ConfigMap or Secret names and keys, and use optional refs sparingly.
Fix Kubernetes ImagePullBackOff and ErrImagePull: read the pull error, then fix tag typos, imagePullSecrets, CPU architecture or Docker Hub rate limits.
Fix Kubernetes OOMKilled (exit code 137): read lastState.terminated.reason, tell node eviction from the container limit, and size memory limits from data.
Fix a Kubernetes Pod stuck in Pending: read the '0/3 nodes are available' event, then fix requests, affinity, taints, PVCs or quotas.
Fix Node.js 'Error: Cannot find module' and ERR_MODULE_NOT_FOUND: missing installs, wrong paths, case on Linux, ESM extensions and exports.
Fix Node.js 'listen EADDRINUSE: address already in use :::3000': find the process holding the port, close servers on restart, use PORT and port 0.
Fix Node.js 'Error: connect ECONNREFUSED 127.0.0.1:5432': check the service, localhost vs ::1 since Node 17, Docker networking and startup retries.
Fix Node.js 'Reached heap limit Allocation failed - JavaScript heap out of memory': tell leaks from big data, take heap snapshots, stream.
Fix 'npm error code EACCES permission denied' on global installs without sudo: change the npm prefix, use nvm or fnm, prefer npx, fix Docker.
Fix npm 'code ERESOLVE unable to resolve dependency tree': read the peer conflict report, upgrade the right package, use overrides with care.
Fix pip's error: externally-managed-environment (PEP 668) on Homebrew, Debian and Ubuntu: use a venv or pipx, not --break-system-packages.
Fix Python IndentationError: expected an indented block, unindent does not match any outer indentation level, and TabError from mixed tabs.
Fix Python KeyError: 'x': d[key] vs .get, in checks, setdefault and defaultdict, JSON payload validation, pandas columns and odd key reprs.
Fix ModuleNotFoundError: No module named 'x': installs into the wrong interpreter, inactive venvs, pip vs import names and python -m.
Fix TypeError: 'NoneType' object is not subscriptable: missing returns, list.sort(), failed re.match, dict.get and Optional type checks.
Fix UnboundLocalError: cannot access local variable (once 'referenced before assignment'): why assignment makes a name local, global, nonlocal.
Fix the React warning 'Cannot update a component while rendering a different component': a child sets parent state during render.
Fix 'Invalid hook call' in React: hooks in class components, callbacks or plain functions, duplicate React copies and mismatched react-dom.
Fix 'Maximum update depth exceeded' in React: effects with no or unstable dependencies, setState in componentDidUpdate and ref callbacks.
Fix 'Objects are not valid as a React child' in React: rendering objects, Dates, Errors or props, plus async components on the client.
Why React state isn't updated immediately after setState: render snapshots, batching, functional updaters, mutation and when to use useEffect.
Fix 'Too many re-renders' in React: a state setter runs during render, often onClick={setX(1)} or state synced in the component body.
Why is an @Autowired or @Value field null in Spring Boot? Objects built with new, static fields and constructor timing, and how to fix them.
Fix 'the dependencies of some of the beans in the application context form a cycle' in Spring Boot 3 by redesigning beans, not flags.
Fix 'blocked by CORS policy' for a Spring Boot 3 API: global CORS config, Spring Security preflight handling, credentials and exposed headers.
Fix 'Failed to configure a DataSource: url attribute is not specified' in Spring Boot 3 by setting the URL, adding the driver or a profile.
Fix 'Could not write JSON: Infinite recursion (StackOverflowError)' for bidirectional JPA entities in Spring Boot 3 with DTOs or annotations.
Fix 'required a bean of type that could not be found' and 'No qualifying bean' in Spring Boot 3: scanning, conditions, qualifiers, tests.
Fix 'Web server failed to start. Port 8080 was already in use' in Spring Boot: find the process on the port, stop it or change server.port.
Seeing the Whitelabel Error Page with status 404 in Spring Boot 3? Check the mapping, component scan, @RestController and context path.
Fix PostgreSQL 'duplicate key value violates unique constraint': resync sequences after imports, use ON CONFLICT and remove check-then-insert races.
Fix PostgreSQL 'column must appear in the GROUP BY clause or be used in an aggregate function' by choosing the grain, aggregates or DISTINCT ON.
Fix PostgreSQL 'operator does not exist: integer = text': read the operand types, cast the constant or parameter, and fix the column type at the source.
Fix PostgreSQL 'relation does not exist': check the search_path, qualify the schema, confirm migrations ran here, and fix quoted, case-sensitive identifiers.
Fix PostgreSQL 'FATAL: sorry, too many clients already': count connections per app instance, find leaks and idle transactions, and pool safely.
Fix TS2345 'Argument of type string is not assignable to parameter of type never' from empty arrays, function unions and exhaustive checks.
Fix TS2307 'Cannot find module or its corresponding type declarations' and TS7016 by tracing module resolution, @types, paths and exports.
Infer narrow literal and readonly types at call sites with const type parameters, and know the inference it does not change.
Merge interfaces and namespaces, augment existing modules and globals safely, and avoid the conflicts that type aliases cannot resolve.
Fix TS7053 'Element implicitly has an any type because expression of type string can't be used to index type' with keyof, Record and guards.
Why object literals reject extra properties while variables are accepted, and how to control the freshness check deliberately.
Model multiple call shapes with overload signatures, order them correctly, and know when a union return type is the clearer choice.
Fix TS2532 'Object is possibly undefined' and TS18048 by finding where undefined enters the type, then narrowing or failing early.
Fix TS2339 'Property does not exist on type' for unions, empty objects, DOM elements and window globals without casting to any.
Fix TS2322 'Type X is not assignable to type Y' by reading the elaboration chain from the bottom and correcting the value, not casting.
Narrow unknown values with user-defined type guards and assertion functions, and understand the trust they place in your runtime checks.
Use Angular HTTP testing to verify request URLs, methods, response mapping and failures without arbitrary delays.
Combine identical in-flight requests with a Map and promises. Trace cleanup, failures and cancellation ownership.
Trace synchronous EventEmitter delivery, promise-based waiting and cleanup. Prevent missed events by registering listeners first.
Use asyncio.Queue and a fixed worker pool to bound pending work. Trace backpressure, shutdown and failure ownership.
Build a search interface with urgent input and deferred results. Explain stale feedback, memo boundaries and network limits.
Claim queued jobs with row locks and SKIP LOCKED. Explain transaction boundaries, leases, retries and duplicate effects.
A username-availability check traced step by step: PENDING status, cancelled checks, debouncing, errors that hang the form, and safe submit.
Test an Angular component through its DOM, inputs, outputs and HTTP calls, so refactors pass and real bugs fail. Five tests, run and broken.
Why projected content is created by the parent even inside a closed @if, how select slots match, and when ng-template makes projection lazy.
A star-rating ControlValueAccessor, built and then broken: what writeValue, onChange, onTouched and setDisabledState each must do.
Where a service is provided decides who shares it: providedIn root, component providers, viewProviders and route providers, with instance ids.
Handle Angular HttpClient failures without stopping a search stream. Learn where catchError belongs, when retries are safe and how to test recovery.
Functional interceptors in Angular 19 and 20: why headers.set() silently does nothing, how clone() works, chain order, retries, and token leaks.
Where inject() works and where it throws NG0203: constructors, field initializers and guards versus ngOnInit, timers and code after await.
How one innocent import moved a lazy feature into the initial bundle (233 kB to 407 kB), and how to draw boundaries that keep lazy routes lazy.
Why an OnPush child ignores user.role = 'admin' but updates for a new object, what else marks it dirty, and how signal inputs change the picture.
Who owns the edit state in an Angular reactive form: loading server data with patchValue, splitting subforms, avoiding echo loops and lost edits.
Build an Angular password-confirmation validator, show accessible errors and test matching, mismatching, empty and reset states in reactive forms.
Route guards decide what the Angular router shows, not what a user may do. Why the admin chunk is still public and where the real check belongs.
Going from /products/1 to /products/2 reuses the component, so snapshot reads go stale. Read params with paramMap, toSignal or input binding.
What a ResolveFn really does to navigation: the delay, reruns on param change, RedirectCommand for 404s, and why EMPTY or an error cancels it.
switchMap, mergeMap, concatMap or exhaustMap? One timeline of four requests shows what each operator does, and which fits search, save and login.
Why a cart total belongs in computed() and not a second signal, how Angular tracks dependencies lazily, and when linkedSignal fits.
What effect() is actually for in Angular: pushing signal state to localStorage, the DOM or a chart library, with cleanup, untracked and timing.
Why push() on a signal's array leaves the screen stale, what Object.is equality means for update(), and how to edit nested lists without bugs.
How a standalone component's imports array works, the NG8001, NG8002 and NG8004 errors it prevents, and the directive that fails silently.
Which Angular subscriptions leak and which end on their own, measured with a live Subject, plus takeUntilDestroyed, toSignal and the async pipe.
When viewChild() and @ViewChild actually hold a value: constructor, ngOnInit, ngAfterViewInit and @if blocks, measured in compiled Angular 20.
Why API Gateway errors and your Lambda errors look different to clients, and how to give every failure one status, shape and request ID.
How EC2 Auto Scaling reacts to load, why scaling on the wrong metric backfires, and how to cap a fleet at what its databases and APIs can take.
How CloudWatch statistics, periods and M-of-N alarms decide when you get paged, what missing data does, and which signals deserve a page.
Seeing where AWS money goes with tags and Cost Explorer, why budgets alert but don't stop spend, and how to fence experiments with SCPs.
How to design DynamoDB partition and sort keys from your queries: listing access patterns first, composite sort keys, GSIs and hot partitions.
How DynamoDB condition expressions stop lost updates: create-only puts, version checks, atomic counters with guards, and transactions.
How IAM decides allow or deny: explicit denies, SCPs, permissions boundaries, resource policies, and how to debug an AccessDenied error.
What happens inside a Lambda execution environment from init to shutdown, what survives between calls, and how timeouts and concurrency add up.
Who retries a failed Lambda invocation (the caller, the async queue or the event source) and how to write handlers that survive running twice.
How a NAT gateway gives private subnets outbound internet access, why you want one per Availability Zone, and where its data charges come from.
Why RDS runs out of connections long before it runs out of CPU, how to size pools from query rate and latency, and when RDS Proxy actually helps.
What an IAM role is, how AssumeRole hands out short-lived keys, how EC2, Lambda and ECS get them automatically, and why that beats access keys.
What S3 guarantees after a write, why concurrent writers still overwrite each other, and how bucket policies and presigned URLs grant access.
How S3 versioning keeps old copies and delete markers, how to restore an overwritten or deleted file, and what versioning can't protect against.
Security groups are stateful and sit on interfaces; network ACLs are stateless, ordered and sit on subnets. What that means for reply traffic.
What AWS secures and what you secure, how the line moves across EC2, RDS, Lambda and S3, and who owns the fix when something goes wrong.
How SNS fans one event out to many subscribers, why each subscription succeeds or fails alone, and when to put an SQS queue behind each one.
Why SQS delivers messages more than once, how the visibility timeout and receipt handles work, and how to process slow jobs without duplicates.
How VPC route tables pick a target by longest prefix, what makes a subnet public or private, and how to debug an instance that can't connect.
Reasoning about AWS design trade-offs: which failures you plan for, how availability multiplies across dependencies, and what DR tiers cost.
Show how you handled unclear requirements: naming what's unknown, ranking assumptions by the cost of being wrong, and finding who decides.
Explain a career change so it sounds deliberate: a bridge from your old work, recent evidence in the new field and an honest view of the gaps.
Tell a technical disagreement story with no villain: agree on criteria, test both options, reach a decision, and commit to it even if you lost.
Tell a customer-impact story built on evidence: what users actually hit, the change you made, and results you can show without inventing numbers.
Tell an unrealistic-deadline story well: break down the estimate, bring options on scope and date, let the date's owner choose, then track it.
Answer integrity questions with judgment: raise the concern early, offer an honest alternative, escalate in proportion and keep confidences.
Answer 'tell me about a time you failed' with a real mistake, what you did to recover, and a change in your habits that someone could observe.
Show how you handled critical feedback: hearing it out, asking for examples, deciding what was accurate, changing something and checking back.
Tell an incident story that shows how you communicated: clear roles, updates that separate facts from guesses, and not saying fixed too early.
Show leadership without a title: spotting work nobody owned, making responsibilities visible, coordinating people and crediting the team.
Show mentoring that builds independence: teaching a method instead of fixing the bug, adapting to the person, and evidence that they learned it.
Review a mock behavioral interview the way a scorer would: record it, rate each answer on a rubric, fix the patterns and rehearse follow-ups.
Explain how you chose between competing work: criteria like impact and cost of delay, a real trade-off, and telling people what moved and why.
Explain a project you owned without overclaiming: the decisions that were yours, the work others did, and what you looked after once it shipped.
Show which quality you protected and which you deferred under a deadline, how you wrote the shortcut down, and the plan to come back to it.
Make 'Do you have any questions?' count: ask what would change your decision, request examples over opinions and follow up on the answers.
Answer 'tell me about yourself' in about ninety seconds: your current focus, one piece of work matched to the job ad, and why this role.
Explain a technical trade-off to non-engineers in an interview story: consequences instead of jargon, honest ranges, and who decides.
Turn a real project into a two-minute STAR answer: how long each part runs, a weak and a strong telling of one story, and the follow-ups.
Pick a real weakness that won't sink you, show what you changed and the evidence it's working, and handle 'What would your manager say?'
How one tag serves amd64 and arm64, why native modules break across CPUs, and how to build multi-platform images by emulating or cross-compiling.
Bind mounts map a host path into a container: great for live code, risky for ownership, portability and security. See where each one bites.
Plain depends_on only orders container starts. Use healthchecks, service_healthy and service_completed_successfully to wait for a ready database.
How ENTRYPOINT and CMD combine into one argv, what docker run arguments replace, and why appending sh to some images never gives you a shell.
How a HEALTHCHECK moves from starting to unhealthy, why plain Docker never restarts an unhealthy container, and what a good probe checks.
What the build context is, why COPY . . can ship your .env and .git, and how to write .dockerignore patterns that match nested folders.
An image is a read-only template; a container is that template plus a writable layer and a process. See what survives stop, start and rm.
An image is frozen the day it's built. Keep bases patched with scheduled rebuilds, --pull, digest pins with automated bumps and EOL tracking.
Tags are movable pointers and digests are not. Learn why latest breaks rollbacks, how to tag releases, and when to pin images by sha256.
Why one edited source file can rerun npm install: how BuildKit's layer cache keys each step, and how to order a Dockerfile so rebuilds stay fast.
docker logs only shows stdout and stderr. Fix empty logs, Python buffering and unrotated json-file growth, then pick a logging driver.
Compile in one stage, ship only the output in the next: how a 400 MB build image became a 313 kB runtime, and what a scratch image gives up.
Why containers can't resolve each other on the default bridge, how the 127.0.0.11 resolver works, and why nginx keeps a stale upstream IP.
Switching a container to a nonroot USER breaks writes until ownership is right. Fix EACCES with chown, numeric UIDs and pre-created volume paths.
EXPOSE documents a port; -p opens one on the host. Bind addresses, -P, the 127.0.0.1 trap inside containers and the ufw bypass on Linux.
Run a container with --read-only, find the paths it still needs to write, and give each one a sized tmpfs or volume without reopening the rest.
Memory limits end in a silent OOM kill and CPU limits in throttling. Size a container so the runtime inside it agrees with the cgroup outside.
Build args and ENV values stay readable in docker history and image config. Pass build-time credentials with BuildKit secret mounts instead.
Why docker stop sometimes takes the full timeout and ends in exit 137, and how PID 1, exec form and a SIGTERM handler fix shutdown.
Named and anonymous volumes outlive containers in different ways. Trace which commands keep data, which delete it, and how to back it up.
Backtracking as choose, explore, unchoose, and the proof each prune needs: sorted breaks, duplicate skips and the negative-number trap.
Read Big-O as a growth rate: count steps as n doubles, name separate inputs n and m, and spot the hidden O(n) inside one-line operations.
Binary search a numeric answer instead of an array: monotonic feasibility checks, tight bounds and min-max versus max-min variants.
Write binary search from an invariant: half-open [lo, hi), lower_bound traced step by step, and the loop and overflow bugs it prevents.
Define the DP state as one sentence before any table: House Robber from 4.3 million calls to 32, coin loop order and an LCS walkthrough.
Why directed cycle detection needs three DFS states, how to return the actual cycle, and an iterative version that avoids RecursionError.
Use hash maps to count and look up in O(1): Two Sum's lookup order, anagram keys, the JavaScript constructor trap and consecutive runs.
Keep the k largest items with a size-k min-heap: a traced stream, timings against sorting, heapq tie-breaking and K Closest Points.
Floyd's tortoise and hare in O(1) space: why fast meets slow, the null check order, finding the cycle's entry and the duplicate-number twist.
Reverse a linked list by tracking who keeps each node reachable: a traced JavaScript loop, the lost-tail bug, sublists and palindrome checks.
Find the next warmer day, next greater element or widest rectangle in O(n) with a monotonic stack, traced on Daily Temperatures.
Answer range-sum queries in O(1) after an O(n) pass: the prefix[0] = 0 convention, counting subarrays that sum to k, 2D grids and products.
Why BFS finds shortest paths when every edge costs the same: a maze solved with parent pointers, mark-on-enqueue and multi-source BFS.
Solve contiguous subarray and substring problems in O(n): state what makes a window valid, then expand right and shrink left to keep it so.
Count the memory an algorithm adds: input vs output vs auxiliary, recursion depth as space, hidden slice copies, all measured with tracemalloc.
Use a stack wherever the last thing opened must close first: bracket checks with error positions, RPN division and decoding nested strings.
Order build steps or courses so dependencies run first: Kahn's algorithm traced, cycle reporting, isolated nodes and the minimum-semesters twist.
Pick preorder, inorder or postorder by asking which way information flows: bounds passed down, heights returned up, sorted order from BSTs.
Two pointers work when each move rules out answers you can prove are worse: sorted pair sums, Container With Most Water, 3Sum and palindromes.
Track merging groups with union-find: parent pointers, union by size and path compression measured, cycle detection and Number of Islands.
Find the commit that broke a test with git bisect run, why unbuildable commits need exit 125, and how flaky checks blame the wrong commit.
GitFlow, GitHub Flow and trunk-based development compared by what matters: how long code waits before it meets everyone else's changes.
Rebuilding for each environment means production runs bytes nobody tested. Promote one artifact by digest and inject config at deploy time.
A canary is only as good as its pass/fail rule. Pick metrics, compare against a live baseline and wait for enough traffic before you promote.
Backport a fix to a release branch with git cherry-pick -x, handle the conflict when it depends on an earlier commit, and spot duplicate patches.
A green required check can hide a failed test. How pipes, skipped jobs and path filters fool branch protection, and how one gate job fixes it.
An atomic commit does one thing and still builds. Split mixed edits with git add -p, fold follow-up fixes in with --fixup, and revert precisely.
Resolve a Git merge conflict by working out what each side meant. Read the base with zdiff3, avoid the keep-both trap and test the combined rule.
Feature flags let you merge unfinished work and roll out slowly. Bucket users deterministically, give each flag an owner and expire it in CI.
A tracked file stays tracked after you add it to .gitignore. Untrack it with git rm --cached and warn teammates, whose pull deletes it.
Two pull requests can each pass CI and still break main together. A merge queue tests each one on top of everything queued ahead of it.
Merge joins histories; rebase rewrites your commits onto a new base. When to use each, and how a background fetch defeats --force-with-lease.
A CI cache should make builds faster, never different. Key it on every input, cache ~/.npm rather than node_modules, and use restore-keys warily.
Undo a bad reset --hard, restore a deleted branch or a dropped stash with git reflog and git fsck, and learn which lost work Git can't recover.
Derive release versions from annotated Git tags, stamp them into every artifact, and fix the shallow-clone CI failure that breaks git describe.
Reset moves a branch back; revert adds a commit that undoes one. Which is safe when, and the merge-revert trap that drops work on re-merge.
Rolling back code is easy; rolling back data isn't. Why a column rename breaks the last release, and how expand and contract keeps rollback safe.
Fork pull requests run code you didn't write. How GitHub Actions withholds secrets, and how pull_request_target and script injection leak them.
git stash is fine for five minutes and risky for five days: what it skips, why pop can leave a mess, and when a branch or worktree is better.
Git keeps three copies of each file: working tree, index and HEAD. Why a staged file can still show as modified, and what a commit really stores.
How th, scope, caption and headers/id tell a screen reader which headers describe a cell, with a two-level pricing table worked through.
Links go somewhere and buttons do something. What each element gives you for free, and what breaks when a div or an a tag fakes the other.
Build a card that switches layout based on the space it's given, not the viewport: container-type, named containers, cqi units and the gotchas.
Why width: 300px can render 342px wide, how border-box changes the arithmetic, and the global reset most projects start with, with numbers.
How CSS variables inherit, when var() resolves, why bad values fail silently, and how to scope theme tokens so components can override them.
Why a flex item holding a long URL or code block won't shrink, what min-width: auto computes, and when min-width: 0 or minmax(0, 1fr) fixes it.
Why outline: none strands keyboard users, how :focus-visible decides when to show a ring, and focus styles that hold up on any background.
How label, for/id, aria-labelledby and aria-describedby give each field a name and a hint, and why placeholder text can't stand in for a label.
How fr shares free space, what minmax() and auto mean for a track, and the math behind repeat(auto-fill, minmax(220px, 1fr)) at real widths.
How screen reader users jump between headings, why levels should follow structure rather than font size, and how to fix skipped levels.
Writing alt text by asking what the image does on the page: informative, functional, decorative or complex, with real before-and-after examples.
When loading="lazy" helps and when it delays your LCP image, how fetchpriority and preload change the queue, and why width and height matter.
Swap left and right for inline-start and inline-end so one stylesheet serves English, Arabic and vertical text, with a card converted.
What top: 0 is measured from for each position value, how ancestors become containing blocks, and why transform breaks position: fixed.
A product filter built as a plain GET form first, then enhanced with fetch and pushState without breaking shared links or the back button.
What prefers-reduced-motion signals, which animations to remove or replace, and how to keep state changes clear when the motion is gone.
How browsers pick a file from srcset using sizes and pixel density, when to use picture, and the math for a phone, a tablet and a laptop.
When to use px, rem, em, %, ch, vw and dvh, how clamp() builds fluid type that still zooms, and why 100vh breaks on phones, with real numbers.
How header, nav, main, aside, footer and labelled sections become landmarks that screen reader users jump between, with a div-soup page rebuilt.
Why z-index: 9999 can still sit under a z-index: 10 header, which properties create stacking contexts, and how to debug and fix layering bugs.
How ArrayList grows its backing array by 1.5x, why add is amortized O(1), and when ensureCapacity or a different list actually helps.
Why TreeSet and TreeMap drop elements when a Comparator disagrees with equals, and how to write comparators that obey the full contract.
How exceptions travel through CompletableFuture chains, when to use exceptionally, handle or whenComplete, and why causes arrive wrapped.
Why check-then-act on ConcurrentHashMap still races, and how merge, compute and putIfAbsent make compound updates atomic per key.
The equals and hashCode contract explained: why equal objects need equal hash codes, how HashMap uses both, and how to write a correct pair.
Checked vs unchecked exceptions in Java, where to catch, when to wrap with a cause, and how to avoid swallowing failures at the wrong layer.
How shutdown, shutdownNow and awaitTermination differ in ExecutorService, and the safe pattern for stopping thread pools without losing work.
How Java memory leaks happen despite garbage collection: GC roots, reachability, retained size, and finding the reference chain in a heap dump.
How HashMap works internally: hash spreading, bucket index, collisions, load factor resizing and the Java 8 switch from chains to trees.
How to make a class immutable in Java: final fields, no setters, defensive copies of mutable inputs and outputs, and safe publication.
When to use Instant, LocalDateTime, ZonedDateTime and OffsetDateTime, and how daylight saving gaps and overlaps break naive date code.
When to return Optional in Java, why get and isPresent checks miss the point, and why Optional fields, parameters and collections are a smell.
What Java records generate, why they are only shallowly immutable, how compact constructors copy and validate, and where records do not fit.
Why Java stream intermediate operations do nothing until a terminal operation runs, how elements flow one by one, and where laziness bites.
Why reusing a Java stream throws IllegalStateException, how to share data with a Supplier or a collection, and what toList returns.
Java String equals vs ==: why == compares references, how the string pool and compile-time constants make it seem to work, and safe comparisons.
What synchronized guarantees in Java: mutual exclusion, visibility and reentrancy, plus how to guard multi-field invariants with one lock.
Why one Java thread may never see another's write, what volatile guarantees, and how happens-before rules make publication safe.
How try-with-resources closes resources in reverse order, keeps the primary exception with suppressed close failures, and beats finally.
When Java 21 virtual threads help, why they do not speed up CPU-bound work, and how pinning, pooling and resource limits trip teams up.
Learn AbortController step by step: cancel fetch, prevent stale search results, combine cancellation with timeouts and handle errors correctly.
Why a spread or slice copy of a JavaScript array still shares its nested objects, and how to pick shallow, structured or targeted copies.
How Array.prototype.reduce works, why the initial value matters for empty arrays, and when mutating the accumulator is safe or quadratic.
Why await inside forEach does not wait, how for...of runs tasks in sequence, and how to run async work in parallel with a concurrency limit.
How === and == really compare JavaScript values: type coercion rules, why two equal-looking objects are not equal, and how to compare contents.
One click listener on a parent can serve rows added later. How closest(), contains() and composedPath() keep delegation from misfiring.
What Object.freeze really locks, why it is shallow, how strict mode changes failures, and how to deep freeze config without surprises.
How break, return and throw end a generator early, why finally blocks run on cleanup, and how to avoid leaking handles in iterators.
How Symbol.iterator, next() and done power for...of and spread, how to make a class iterable, and why iterators are usually single-use.
Map vs plain object for lookups: key types, insertion order, size, prototype keys like __proto__, JSON support and performance trade-offs.
A forgotten listener kept 200 models and 76 MB alive in Node. How to prove a leak with GC and heap snapshots, then break the retaining path.
Why ES module imports see later changes to exported variables, why CommonJS copies values, and how live bindings affect circular imports.
Why || replaces 0, empty strings and false with defaults while ?? only replaces null and undefined, plus ??=, precedence and parameter defaults.
How Promise.all, allSettled, race and any settle, what each does on rejection or empty input, and how to pick the right one for real requests.
How promise finally() passes results and errors through, when a finally callback overrides the outcome, and how try/finally compares.
How Object.defineProperty and property descriptors control writes, enumeration and deletion, how getters and setters fit in, and their traps.
Which JavaScript APIs list inherited, non-enumerable and symbol keys, and why integer-like keys always come first in object property order.
How __proto__ and constructor.prototype keys in JSON poison every object through unsafe merges, and the defences that close the hole.
Why new Set removes duplicate primitives but not duplicate objects, how SameValueZero treats NaN and -0, and how to dedupe objects by key.
Why WeakMap keys do not keep objects alive, why WeakMaps cannot be iterated, and how to attach caches and private data without leaking memory.
Pick the metric your autoscaler follows: CPU versus queue backlog, the HPA replica formula, and capping replicas at what the database can take.
ConfigMap or Secret? Why base64 isn't encryption, what actually protects a Secret, and how env vars and mounted files behave on update.
What happens when a CronJob run outlasts its schedule: Allow, Forbid and Replace, startingDeadlineSeconds, and why the job must be idempotent.
How a Deployment rolls out a new image: ReplicaSets, maxSurge and maxUnavailable arithmetic, readiness gating, progress deadlines and rollback.
Why an Ingress does nothing without a controller, how ingressClassName picks one, how host and path rules match, and how to read 404 versus 503.
How Kubernetes Jobs retry failed Pods: backoffLimit, restartPolicy, deadlines, podFailurePolicy for exit codes, and making each run safe to repeat.
What a namespace scopes (names, RBAC, quotas, policies) and what it leaves open: network traffic, nodes, cluster-scoped objects and DNS.
How NetworkPolicy selects Pods, why ingress and egress are separate, the AND/OR selector trap, and why default-deny egress breaks DNS.
When to use nodeSelector, node affinity, pod anti-affinity or taints and tolerations, and why a toleration alone never pins a Pod to a node.
How PVCs bind to PersistentVolumes, why WaitForFirstConsumer matters, what access modes really mean, and how reclaim policy loses data.
How PodDisruptionBudgets gate evictions during drains and upgrades, minAvailable vs maxUnavailable maths, and budgets that block drains.
What the containers in a Pod share, how phases differ from container states, and why Pods get replaced with new names and IPs.
What each Kubernetes probe does when it fails, why liveness must not check your database, and how to size a startupProbe for a slow boot.
Build a least-privilege Role for a CI deployer, verify it with kubectl auth can-i, and spot grants like pods/exec that quietly escalate.
How CPU and memory requests drive scheduling, what limits enforce (throttling vs OOMKill), how QoS classes form, and how to choose numbers.
Harden a Pod with runAsNonRoot, dropped capabilities, seccomp and a read-only root filesystem, and decode the errors each setting can produce.
How a Service selector becomes EndpointSlices, why a Service with no endpoints refuses connections, and how to debug label and port mismatches.
What a StatefulSet guarantees: ordinal names, per-Pod DNS via a headless Service, a claim per replica, ordered rollouts, and what it doesn't.
The exact order of a Pod shutdown, why endpoint removal races SIGTERM and causes 502s, and how preStop, grace periods and app code fix it.
A repeatable order for debugging Kubernetes: Pod status, events, previous logs, endpoints, then the node, with the command and clue at each step.
What an API gateway should own (TLS, token checks, routing, rate limits) and why refund rules and workflows belong in the services behind it.
How a slow recommendations call starves checkout through a shared pool, and how to size separate bulkheads with Little's law and fast rejection.
Closed, open and half-open states traced through a runnable breaker, plus sizing, which errors to count and what callers do when it's open.
Treat config changes like deploys: validate before applying, roll out by stable user buckets or by instance, and keep a fast rollback.
Why at-least-once delivery hands a consumer the same event twice, and how a processed-message table in one transaction stops a double credit.
Which API and event changes are safe, why a rename breaks even tolerant readers, and how expand-and-contract lets a producer ship alone.
Why read-only access to another service's tables still couples you to its schema, and how APIs, events and local copies replace sharing.
Why per-hop timeouts keep services working after the client has left, and how passing a remaining-time budget down the chain stops it.
How trace and span ids travel in the W3C traceparent header, why a queue hop often splits a trace in two, and how sampling shapes what you see.
Why one order's events arrive out of sequence without a partition key, what a key does and doesn't guarantee, and how versions catch the rest.
How an Idempotency-Key header lets a client retry a payment POST safely: claim the key, fingerprint the body, replay the stored response.
Extracting one capability at a time from a monolith: cut the seam in-process, move the data owner, compare in a parallel run, then switch.
Why saving an order and then publishing its event can lose messages, and how an outbox row in the same transaction trades loss for duplicates.
Building query views from events, why a user can't see the order they just placed, and how position tokens and idempotent projectors help.
Fault-injection experiments with a hypothesis, steady-state metrics and abort conditions, and why injected latency finds bugs errors miss.
How three layers of retries turn one failing request into 64 database calls, and how a 10% retry budget caps extra load during outages.
Running an order saga across inventory and payments, ordering steps around the pivot, and what compensations can't undo: emails, fees, reads.
Drawing service boundaries around business capabilities, not entities or layers, with change history as evidence and signs a split is wrong.
How callers find instances whose addresses keep changing (registries, TTLs, caches, DNS) and why a crashed instance still gets traffic.
When a service should call another and wait, when it should publish an event instead, and what availability math and an email outage show.
Why $match before $group can change your answer, what the MongoDB optimizer reorders for you, and how to order stages for speed safely.
What the 12 bytes of an ObjectId contain, why its timestamp is not a reliable clock, and when to choose your own _id in MongoDB.
How field order in a MongoDB compound index decides which queries it serves, with the equality, sort, range rule worked through step by step.
Why one MongoDB update is all-or-nothing for a document, how conditional updates stop lost writes, and where single-document atomicity ends.
How to decide whether related MongoDB data goes inside one document or in its own collection, based on access patterns, growth and ownership.
How to read MongoDB explain output: the plan stages, keys and documents examined versus returned, and what each pattern tells you to fix.
What $lookup really does per input document, why an index on the foreign field matters, and when to reshape data instead of joining.
Why { field: null } in MongoDB also matches documents without the field, and how $exists and $type let you tell missing and null apart.
How MongoDB indexes every array element, why $elemMatch matters for arrays of subdocuments, and the parallel-array limit on compound indexes.
Why skip-based paging in MongoDB gets slower and drops rows, and how a range cursor on a unique sort key gives stable, fast pages.
How MongoDB partial indexes shrink an index to the documents you query, when the planner can use them, and how they give conditional uniqueness.
What local, majority, linearizable and snapshot read concerns promise in MongoDB, and how sessions give read-your-own-writes on secondaries.
How a MongoDB replica set notices a dead primary, elects a new one in seconds, and what your app sees: errors, retries and rolled-back writes.
How to add $jsonSchema validation to a MongoDB collection, roll it out safely with moderate and warn modes, and still allow flexible fields.
How to choose a MongoDB shard key with enough cardinality, even writes and targeted reads, and what to do when the first choice turns out wrong.
When a MongoDB multi-document transaction is the right tool, what it costs, how to retry it correctly, and when a better model removes the need.
How MongoDB's TTL monitor deletes expired documents, why they can linger past their deadline, and how to filter, tune and size expiry safely.
Why a MongoDB unique index beats a find-then-insert check, how missing fields and case break it, and how to handle E11000 errors cleanly.
How $unwind turns one MongoDB document into one per array element, why that inflates sums and counts, and how to avoid double counting.
What w: 1, w: "majority" and j: true actually promise in MongoDB, what a wtimeout error means, and how to pick a write concern per operation.
Measure what keep-alive saves, size a client connection pool with Little's law, and retry safely when a pooled socket was closed under you.
CORS decides whether a page may read a cross-origin response, not whether it is sent. A browser test shows a blocked POST still saved.
Follow one DNS lookup from your laptop to the authoritative server with dig, and see why two users can get different answers after a move.
Use ETags for cheap 304 revalidation and to stop lost updates with If-Match, shown with curl against a small server that two editors share.
Who may store a response, how long it stays fresh and when it must be revalidated, shown with a toy CDN that leaks one user's page to another.
How Domain, Path, Secure, SameSite and expiry decide which requests carry a cookie, with curl's cookie jar showing each rule in action.
Safe and idempotent HTTP methods explained by sending POST, PUT, PATCH and DELETE twice to a real server, then making POST retries safe.
Read HTTP status codes as instructions: retry, fix the request, re-authenticate or check first, with a client decision function and its output.
HTTP/2 removes HTTP-level head-of-line blocking, but TCP's remains. See both in Node and curl, then compare what HTTP/3 over QUIC changes.
Why a gigabit connection doesn't make chatty APIs fast: count round trips, compare them with transfer time, and fix whichever term dominates.
Find the first failing step in a request (DNS, TCP, TLS, HTTP or the app) with curl timings, dig, nc and openssl, using six real failures.
What makes a browser send an OPTIONS preflight, how the server's answer gates the real request, and five preflights traced in a real browser.
Behind a reverse proxy your app sees the wrong scheme and client IP. Learn to read X-Forwarded-* safely, with a spoofing test you can run.
Why three socket writes can arrive as one read and one write as seventeen, and how to frame messages with delimiters or length prefixes.
How Server-Sent Events stream updates over plain HTTP, how EventSource resumes with Last-Event-ID after a drop, and what proxies do to streams.
What SYN, SYN-ACK and ACK agree on, why the kernel finishes the handshake before your app runs, and how refused differs from timed out.
Connect, first-byte, idle and total timeouts catch different failures. See each one fire against a stalling server, then budget retries sensibly.
Why encryption without a hostname check protects nothing, what a client verifies in a certificate, and the right fix for each TLS error.
What UDP gives up compared with TCP, shown with real Node experiments, and the sequencing, pacing and retry work your application takes on.
The WebSocket lifecycle from the 101 handshake to heartbeats, close codes and resuming after a drop, plus which server owns each connection.
Use AsyncLocalStorage to keep a request ID in every log line, see why a module-level variable mixes requests, and find where context gets lost.
Why a 170 ms synchronous loop in one Node.js request delays every other request, how to measure loop delay, and when to chunk or use workers.
Read a JSON request body in Node.js with a byte limit that also catches chunked uploads, then validate its shape and return 413, 415, 400 or 422.
Why decoding each chunk with toString() corrupts non-ASCII text, how StringDecoder fixes it, and when Node.js bytes must never become strings.
How a filename becomes shell injection with exec, why execFile and spawn with argument arrays avoid it, and the -- trick for argument injection.
Size a Node.js database pool from the database's capacity, see why a pool of 100 only moves the queue, and find the leak that hangs it.
Where async errors escape try/catch in Node.js, why a floating promise kills the process, and how to wrap causes and catch at one boundary.
Why path.join doesn't stop ../ traversal, how a startsWith check and a symlink both leak files, and a Node.js containment check that holds up.
What happens to an in-flight request when Node.js gets SIGTERM, how server.close drains it, and the container details that break shutdown.
Separate liveness from readiness in Node.js, bound dependency checks with timeouts and caching, and avoid probes that restart healthy pods.
Node's HTTP server and fetch timeout defaults, why headersTimeout fired after 30 seconds instead of 1, and how to set deadlines on both sides.
How Node.js decides whether a file is ESM or CommonJS, why ESM imports need file extensions, and what require(esm) changes in Node 22 and later.
Define a Node.js package's public API with the exports field: subpaths, import and require conditions, blocked deep imports and dual builds.
Measure Node.js latency without fooling yourself: monotonic clocks, percentiles over averages, coordinated omission, and event loop delay and ELU.
Why .pipe() leaks the source when a destination fails, what pipeline() destroys for you, and what a client sees when an export breaks halfway.
process.env holds only strings, so Boolean('false') is true and PORT=8080abc parses. Validate config once at startup and fail with every error.
What write() returning false means, how ignoring it buffered 193 MB for one slow client, and why awaiting drain alone hangs on a disconnect.
Why an unawaited assert.rejects passes, how one unclosed server hung a test file, and node:test patterns that keep each test's state its own.
setTimeout promises a minimum delay, not a time. Measured drift, skipped interval ticks, and how to build a countdown that stays correct.
On Node 22 a worker cut main-thread lag from 455 ms to 1 ms, yet a new worker per tiny task was 550x slower. Build a bounded pool instead.
Why a condition variable wait sits in a while loop under the lock, with Python runs of a stolen wakeup, a lost notify and a notify() deadlock.
What a context switch saves and loses, voluntary vs involuntary switches, a 3.5 µs pipe ping-pong on an M1, and the real cost of 512 threads.
FIFO, SJF, STCF and round robin simulated with real numbers, the turnaround vs response trade-off, and what an M1's efficiency cores add.
Reproduce a two-account deadlock in Python, map it to the four Coffman conditions, and fix it with lock ordering, timeouts or a different design.
What a file descriptor points to, which limits apply, and a real EMFILE reproduced in a throwaway process, plus how to find the leak with lsof.
What write, fsync and F_FULLFSYNC really promise, measured on an M1 (2 µs, 25 µs, 3.8 ms), plus atomic file replacement and group commit.
From a NIC interrupt to the thread that reads the data: top halves, deferred work, and a polling vs blocking test showing the CPU-latency trade.
Pipes, Unix sockets, TCP loopback and shared memory compared on a 64 MiB transfer, plus the synchronization and trust costs each one carries.
A mutex has an owner, a semaphore counts permits. Real Python and pthread runs show why that matters for releasing, over-release and debugging.
Random 4 KiB reads took 189 µs cold and 1.6 µs warm on an M1. How the page cache works, how to benchmark around it, and when to bypass it.
Minor, major and invalid page faults, with real counts: 4,096 faults for 64 MiB on an M1, and a cold mmap read 34 times slower than warm.
How a medium-priority task blocks an urgent one via a lock it never touches, simulated tick by tick, plus priority inheritance and Pathfinder.
What a process owns, what its threads share, and what that costs: macOS runs of thread vs fork vs spawn, and a segfault that kills a process.
Unbounded, blocking and dropping queues measured in Python: how a bound turns overload into a policy, how to size it, and how to shut it down.
Lost updates and check-then-act races, run in Node and Python: why a racy counter can pass tests, and how atomics, locks and O_EXCL fix it.
Stack and heap as lifetime decisions: real addresses, stack overflows at 7,600 vs 400 frames on macOS, and a dangling pointer clang flags.
A reader-preference lock starved a writer for 1.9 s in Python. Where starvation comes from, what fairness costs, and how schedulers bound it.
How the CPU stops your code doing privileged work, what a system call costs, and why clock_gettime skips the kernel, with real M1 measurements.
Why two processes can hold different values at the same address, how page tables translate it, and why a 32 GiB mapping can cost almost nothing.
Why throughput collapses when active memory exceeds RAM: in an LRU test, one frame fewer took faults from 2% to 100%. How to spot and fix it.
Why time.sleep or a sync HTTP call inside a coroutine freezes every task, how to spot it with debug mode, and when to_thread is enough.
Who owns an asyncio task: why fire-and-forget loses errors, how TaskGroup cancels siblings, and why swallowing CancelledError hangs shutdown.
Why lambdas created in a loop all return the last value, what a closure cell really stores, and the three clean ways to capture a value.
How list, dict and set comprehensions scope their variables, why one fails in a class body, and when a plain loop is the better choice.
What the with statement guarantees, how __exit__ can swallow exceptions, the missing try/finally in @contextmanager, and ExitStack.
Assignment, shallow copy and deepcopy compared on a nested config dict, plus the [[0]*3]*3 grid bug and what deepcopy costs in practice.
Why a list default fails in a dataclass, what frozen=True does and doesn't protect, and how eq and hash decide if instances can be keys.
A decorator replaces your function, so it owes callers the same return value, exceptions and metadata. functools.wraps and async cases.
How raise ... from e, implicit chaining and from None shape a traceback, what __cause__ and __context__ hold, and when add_note is better.
A generator runs nothing until the first next(): why validation fires late, how lazy pipelines pull one item at a time, and why they empty.
What makes a Python object usable as a dict key or set member, why defining __eq__ removes __hash__, and how a mutated key gets lost.
is checks for the same object and == asks the object whether values match. Small-int caching, interning, None checks and sentinels.
An import runs the module's top-level code once and caches it. Config read too early, circular imports, __main__ guards and importtime.
Iterables versus iterators: why map, zip, files and csv readers empty after one pass, how zip and in eat items, and how to design for it.
Why def f(x, items=[]) keeps growing between calls, where Python stores that list, the None-sentinel fix, and why tags or [] is subtly wrong.
Joining a user-supplied name onto a base Path can escape it via .., absolute paths or symlinks. Contain it with resolve() and is_relative_to.
How Python's stable sort keeps ties in order, multi-key sorts with tuples or two passes, reverse=True versus [::-1], and None in keys.
Why a test passes alone and fails in the suite: leaked module state, environment and files. Fix it with fixtures, scopes and cleanups.
Measured on Python 3.14: threads speed up I/O waits but not pure-Python CPU work, processes do, and the GIL still allows lost updates.
What python -m venv creates on disk, why activation only edits PATH, why python -m pip beats pip, and how lock files make installs repeatable.
Build an accessible React modal: native dialog with showModal, focus on open, Escape to close, focus restoration and testing with keyboard only.
How useCallback dependencies decide which state a callback sees, why an empty array freezes stale values, and when useCallback is worth it.
Which components re-render when a React context value changes, why an inline value object re-renders every consumer, and how to scope providers.
Compare controlled and uncontrolled React inputs with examples, reset behavior, checkbox handling and fixes for the uncontrolled-to-controlled warning.
Designing React custom hooks: they share logic not state, the use prefix rule, stable return values, and documenting what callers must pass.
Stop syncing state with useEffect: compute filtered lists, totals and validity during render in React, and use useMemo only for real cost.
When React runs useEffect cleanup, why Strict Mode mounts twice, and how to clean up listeners, timers, sockets and fetches without leaks.
How the useEffect dependency array really works: Object.is comparison, why objects re-run effects, and fixing deps without lint suppression.
What React error boundaries catch and miss, where to place them so one failing widget does not blank the page, and how to reset after errors.
How useSyncExternalStore subscribes React to an external store without tearing, why getSnapshot must be cached, and how server snapshots work.
Fix out-of-order React fetch results with cleanup and AbortController. Includes loading states, error handling and a practical interview explanation.
What causes React hydration mismatch errors: dates, random ids, window checks and bad HTML nesting, plus fixes with useId, effects and Suspense.
useLayoutEffect vs useEffect: measure DOM size before paint to position tooltips without flicker, and know its cost and server rendering caveats.
Why React list keys matter: how index keys attach state to the wrong row after deletes or reordering, and how to pick a stable, unique key.
Why React.memo still re-renders: inline objects, arrow functions and children break shallow comparison, and how to keep props stable.
When to choose useReducer over useState: model status as one field, reject impossible transitions in the reducer, and test it in plain Node.
useRef vs useState in React: refs change without re-rendering, state drives the UI. Learn which values belong where, with timer and DOM examples.
Reset a React form when the selected record changes by giving it a key: how keys control state identity and why useEffect resets go wrong.
Why setCount(count + 1) twice adds only one in React: how each render captures a state snapshot and how the update queue resolves it.
Where to place React Suspense boundaries: what suspends, how fallbacks reveal, avoiding spinner waterfalls, and how transitions keep old content.
useTransition explained: keep typing responsive by marking heavy renders as non-urgent, why input state stays urgent, and useDeferredValue.
Why React updater functions like setItems(prev => ...) must be pure, why Strict Mode calls them twice, and how mutation causes duplicates.
How ServiceNow decides record access: table ACLs before field ACLs, the most specific match wins, and why server scripts skip the check.
Model ServiceNow approvals so each decision is tied to the version reviewed: approval rules, rejection paths, timeouts and re-approval.
Design ATF tests that prove behaviour as real roles, know what rollback leaves behind, and keep suite results as release evidence.
When ServiceNow business rules run: before rules shape the record, after rules touch others, async rules move slow work off the save.
Client scripts and UI policies guide users on the form; ACLs, data policies and business rules enforce rules on every path into the data.
Keep one server as one CI: identification rules decide what's new, reconciliation rules decide which source owns each attribute.
Pick the right Flow Designer trigger and run option, avoid duplicate flows on one table, and build flows that a team can own and debug.
Count and summarise ServiceNow records in the database with GlideAggregate instead of looping over every row, and avoid its string-typed results.
Call server logic from a ServiceNow form with GlideAjax: a small JSON contract, validated parameters, and callbacks that ignore stale replies.
Write GlideRecord queries that fetch only what you need: catch invalid fields, stop encoded-query injection, avoid N+1 lookups and use setLimit.
Load external data into ServiceNow without duplicates: staging tables, coalesce on a stable key, reference choice actions and safe re-runs.
Incident restores service, problem finds the cause, change governs the fix: one outage traced through all three ServiceNow records.
Make ServiceNow outbound calls safe to retry: treat timeouts as unknown, send an idempotency key, back off, and keep calls out of the save.
A ServiceNow reference field stores a sys_id and shows a display value. Treating the name as the identity causes most reference bugs.
Narrow ServiceNow business rule conditions to the transition you mean: operations, filters, changes() and changesTo(), and rules on task tables.
How ServiceNow application scopes protect tables and scripts, how cross-scope privileges work, and how to expose a small API to other apps.
Design ServiceNow script includes with explicit inputs and plain results, so business rules, flows and GlideAjax can share one implementation.
Child tables in ServiceNow inherit fields, rules and access from their parents. See what extending task gives you and what it costs.
How ServiceNow UI policies decide visible, mandatory and read-only: evaluation order, Reverse if false, and why overlapping policies fight.
Know what a ServiceNow update set carries and what it leaves behind: configuration versus data, preview problems and environment values.
Which Spring Boot Actuator endpoints to expose, how exposure differs from authorization, and how to lock down env, heapdump and health details.
How Spring Boot auto-configuration works: AutoConfiguration.imports, @ConditionalOnMissingBean, the conditions report, and safe overrides.
Spring bean scopes explained: why singletons must be stateless, injecting prototype or request beans into singletons, and scoped proxies.
Bind Spring Boot settings to typed @ConfigurationProperties records, validate them at startup, and know when @Value is still the right tool.
Why Spring recommends constructor injection over @Autowired fields: final dependencies, plain unit tests, fail-fast startup and visible cycles.
When Spring Security CSRF protection is needed: cookie sessions vs bearer tokens, SameSite, CookieCsrfTokenRepository and SPA setups in Boot 3.
Map Spring Boot exceptions to stable HTTP errors with @RestControllerAdvice and ProblemDetail, without leaking stack traces or internals.
Set connect and read timeouts on Spring RestClient and WebClient, size them from a latency budget, and stop slow calls exhausting threads.
Why Hibernate throws LazyInitializationException in Spring Boot, how open-in-view hides it, and how fetch joins, entity graphs and DTOs fix it.
Detect and fix JPA N+1 selects in Spring Boot with fetch joins, @EntityGraph, batch fetching and DTO queries, then prove it with a test.
Why unbounded Micrometer tags like user IDs or raw URLs blow up Prometheus, how Spring Boot templates URIs, and how to cap tag cardinality.
How JPA @Version prevents lost updates in Spring Boot, what ObjectOptimisticLockingFailureException means, and when to retry or return 409.
Use Spring Boot profiles for environment differences without hiding behaviour: profile files, @Profile beans, groups, and config precedence.
What @DataJpaTest loads, why its rollback and embedded database can hide bugs, and how to test Spring Data repositories with Testcontainers.
Validate Spring Boot request bodies and parameters with @Valid and Jakarta constraints, return clear 400 errors, and avoid silent gaps.
Why Spring @Transactional commits on checked exceptions, how rollbackFor and noRollbackFor work, and why swallowed exceptions commit.
How Spring Security 6 SecurityFilterChain beans work: lambda DSL, securityMatcher, @Order, rule ordering and why the first matching chain wins.
How Spring Boot liveness and readiness probes work on Kubernetes, what belongs in each health group, and how to warm up and shut down gracefully.
Why long @Transactional methods exhaust the Hikari pool and hold locks, and how to keep remote calls, files and email outside the transaction.
Why @Transactional is ignored on self-invocation and private methods in Spring Boot, how the proxy works, and four ways to fix it.
Why joining two one-to-many tables before SUM inflates totals, and how to aggregate each child table at its own grain before you combine them.
How column order in a PostgreSQL multicolumn B-tree decides which filters and sorts it serves, with real EXPLAIN plans from a million-row table.
Why check-then-insert in application code double-books under concurrency, and how UNIQUE, CHECK and exclusion constraints enforce the rule.
COUNT(*) counts rows, COUNT(column) counts non-NULL values. See how that fixes LEFT JOIN counts and where COUNT(DISTINCT) misleads.
What a PostgreSQL CTE is for, when it's inlined or materialized since version 12, and how writable CTEs move rows in one statement.
Use EXISTS when you're asking whether a related row exists: no duplicate rows, NULL-safe NOT EXISTS, and semi or anti joins in PostgreSQL plans.
Read PostgreSQL EXPLAIN ANALYZE output: estimated versus actual rows, loops, buffers, and why ANALYZE really runs your DELETE, with real plans.
Predict how many rows a SQL join returns: duplicate lookup keys multiply rows, inner joins drop unmatched ones, and both can hide in one count.
Why OFFSET pages get slow and drift, and how keyset pagination with a unique tiebreaker and a row comparison stays fast at any depth.
A WHERE test on the right table quietly turns a LEFT JOIN into an inner join. See why, where the filter belongs, and how to spot it in a plan.
How PostgreSQL UPDATE writes a new row version, why dead tuples pile up, what VACUUM reclaims, and how one idle transaction stops cleanup.
Normalize so each fact has one home, then denormalize on purpose with snapshots, trigger-kept counters and materialized views.
NULL makes comparisons unknown, not false. See how that drops rows from WHERE, empties NOT IN and slips past CHECK constraints.
Index only the rows a hot query reads, such as pending jobs or active subscriptions, and learn when PostgreSQL can and can't use a partial index.
Why bind parameters stop SQL injection, what they can't parameterize (table names, ORDER BY, LIKE wildcards), and how prepared plans behave.
row_number, rank and dense_rank differ only when values tie. Pick the right one for top-N per group, second-highest and leaderboard queries.
Watch two PostgreSQL sessions lose an update, then fix it with an atomic UPDATE or FOR UPDATE, and see what NOWAIT and SKIP LOCKED do.
Run Read Committed, Repeatable Read and Serializable side by side in PostgreSQL, from changing reads to write skew only Serializable stops.
How INSERT ... ON CONFLICT behaves in PostgreSQL: conflict targets, EXCLUDED, version guards for stale writes, batch duplicates and MERGE.
Window functions compute totals, running sums, LAG and moving averages next to each row. Learn PARTITION BY, frames, and the default-frame trap.
How an export API uses 202 Accepted, an operation resource and an idempotency key so a client that lost a response can recover safely.
Cache-aside read and write paths, why you update the database before deleting the key, and the race that still leaves stale data until TTL.
Why a hot key expiring under 5,000 requests a second sends 1,500 queries to the database, and how locks, early refresh and jitter stop it.
A worked back-of-envelope estimate for a photo app: peak requests per second, storage per year, egress bandwidth and how wrong it might be.
Which responses a CDN may share, how Cache-Control and the cache key decide it, and why a stray utm_source parameter can halve your hit ratio.
Read-your-writes, monotonic reads and linearizability tied to real product decisions, with a replica-lag simulation of what users see.
Classify each dependency as required or optional, set timeouts that bound bad days, and design fallbacks that never show users false data.
Run a design review by tracing one timed-out order through every hop, then turn what breaks into a failure table and a short list of fixes.
Fan-out on write versus read for a 20-million-user feed, with simulated insert rates, a 13.7M-follower post and where a hybrid threshold goes.
Snowflake IDs, UUIDv4 and UUIDv7 compared with runnable code: collision odds, 4,096 IDs per millisecond, and why clock skew breaks ordering.
Round robin, least outstanding and power of two choices simulated with uneven request costs, plus health checks and long-lived connections.
RPO and RTO with real arithmetic: how many writes async replication loses at failover, a minute-by-minute recovery budget, and fencing.
Design metrics, traces and logs from the questions on-call engineers ask: SLO burn-rate math, label cardinality and tracing across a queue.
Choosing a partition key, why hash mod N moves 91% of keys when you add a node, how consistent hashing fixes it, and how to split a hot key.
A minute-by-minute export queue during a month-end burst: backlog growth, drain time, age of oldest message and how poison messages eat workers.
Fixed window, sliding window and token bucket limiters run on the same burst, plus who to limit, enforcing across gateways and 429 responses.
Leader-follower replication in numbers: commit latency for sync and quorum acks, how a batch job builds 150 s of lag, and failover loss.
How to spend the first minutes of a design interview: questions that pin down scope, scale and correctness, and how answers reshape the design.
Keep a search index in sync with its source database: change capture, external versions for late events, deletes and reindexing by alias.
Design file uploads as a state machine: pre-signed URLs, multipart for flaky networks, quarantine and scanning, and why uploaded isn't ready.
A hand-built modal passed axe with zero violations, then failed four keyboard and dialog checks in Playwright; a native dialog passed all five.
Split each test into arrange, act and assert so a failure names one broken behavior, shown on an order-cancellation service with node:test.
Replace sleeps with deferred promises so an async test decides which response lands first, catching stale-result races on every run.
A refactor breaks a test that spies on private helpers while a real bug slips past it; asserting results and stored state catches both cases.
Test just below, at and just above every limit: a cart cap with a < that should be <=, plus a 50.00 threshold that floats quietly miss.
Consumer-driven contracts in practice: a shipping service records what it needs from orders, and a renamed field fails before deploy.
SQLite accepted 'abc' as a price and a 16-character SKU that PostgreSQL rejects; test on the engine production uses, here via PGlite.
Group inputs that behave alike, test one value per group, then check the code agrees: Python's int() also accepts '1_0', '+5' and ' 7 '.
Test debounces, cooldowns and retry backoff with node:test mock timers, and avoid the Date.now and promise traps that make fake clocks lie.
A shared SQLite fixture makes tests pass alone and fail together; fix it with fresh state per test, commit-proof rollbacks and addCleanup.
Diagnose flaky tests with evidence: measure the failure rate, compare a test alone and in the suite, and replace sleeps that fail 23 runs in 100.
When to reach for a stub, a mock or a fake, shown on a password-reset service, plus a contract test that caught a fake more lenient than SQLite.
Stryker plants small bugs in code to see if tests notice: a shipping rule with 100% line coverage scored 72.73% until boundary tests went in.
Ramp load on a service with a 4-connection pool: throughput levels off near 190 req/s, and a fixed 300 req/s arrival rate ends in 85% timeouts.
Property tests generate hundreds of inputs and shrink failures to tiny examples: fast-check finds JavaScript's default sort and a CSV bug fast.
Write a regression test that fails for the original bug, select tests from the diff, and see when an import graph misses the one that breaks.
Test what each user must not do: a table-driven access matrix for an invoice API catches a missing ownership check that happy paths miss.
Unit, integration and end-to-end tests differ in what runs for real; four green pricing tests missed a coupon bug that one API-level test caught.
A green run with a skipped Stripe test and coverage that drops from 72.88% to 55.17% once test files are excluded: how to report what really ran.
Screenshot tests with Playwright: freeze the clock and viewport, and see why a 2% tolerance that hides a timestamp lets a wrong price through.
Why UserId and OrderId can both be strings yet must not be swapped, and how a branded type plus one parsing function makes TypeScript catch it.
How to write tests that fail when a library's types regress: @ts-expect-error for rejected calls, an exact Equal helper, and running tsc in CI.
How T extends U ? X : Y picks a type, why it splits unions apart member by member, and how wrapping both sides in brackets turns that off.
Replace isLoading, error and data flags with one status union so impossible UI states stop compiling and each branch sees only its own fields.
Why strict mode types catch variables as unknown, how to narrow them without casting, and when a Result union beats throwing an error.
Why a Dog handler can't stand in for an Animal handler, how strictFunctionTypes checks callbacks, and the method-syntax loophole it leaves.
Use extends to state what a generic needs, keyof to link one parameter to another, and see why 'a different subtype' errors appear.
How infer pulls element, return and parameter types out of other types, why readonly arrays don't match T[], and how to parse route strings.
Why indexing an object with a plain string fails (TS7053), how keyof typeof and T[K] fix it, and why Object.keys still returns string[].
Why let and object properties widen "GET" to string, how as const keeps literals and readonly tuples, and what it does not do at runtime.
How { [K in keyof T]: T[K] } rebuilds a type, how ?, readonly, -? and -readonly change it, and why Partial stops one level down.
What import type removes from emitted JavaScript, why verbatimModuleSyntax makes you write it, and the crash you get when you don't.
Use never to make TypeScript list every switch you forgot to update when a union grows, and choose between assertNever, satisfies and Record.
A missing key and a key set to undefined behave differently in spreads, JSON and the in operator; exactOptionalPropertyTypes makes types match.
What readonly arrays, ReadonlyMap and ReadonlySet block, why readonly is a view rather than a frozen copy, and how to share state safely.
How satisfies checks an object against a type while keeping its exact keys and values, and how it differs from an annotation and from as.
How strictNullChecks narrows through returns, closures and filter calls, where it keeps a narrowing it shouldn't, and what to do about Map.get.
TypeScript compares shapes, not names, so extra properties are usually fine; learn when the excess property check fires and when it doesn't.
When a fixed-length array beats an object, why a returned [value, setter] pair needs a type or as const, and the push hole in tuples.
Why res.json() and JSON.parse return any, how typing the result as unknown forces a real check, and how to write a type guard that holds up.
A structured walkthrough of the autocomplete design round: requirements, architecture, race-free fetching, caching, rendering, the ARIA combobox and metrics.
What lexical scope and closures really are, why the var + setTimeout loop prints 3 3 3, three ways to fix it, and where closures earn their keep in real code.
Ten generics questions, from constraints and keyof to infer, distributive conditional types and variance, each with a short answer and code you can reproduce.
How the call stack, task queue and microtask queue fit together, where rendering happens, how async/await schedules work, and output puzzles with answers.
Stale closures, missing cleanup, fetch races, Strict Mode's double run, infinite loops and effects you don't need, plus how useLayoutEffect differs in timing.
How JavaScript decides what this means: default, implicit, explicit and new binding, which one wins, why arrow functions ignore them, and the classic bugs.
How Angular decides when to update the DOM: the tree walk, what Zone.js did, what marks an OnPush component dirty, and how signals allow zoneless apps.
What the engine sets up before your code runs, why var reads undefined while let throws, how the temporal dead zone works, and why const isn't immutable.
Declaration merging, extends vs intersections, what only type aliases can express, and the few differences that change behavior, with a clear rule of thumb.
Render vs commit, the diffing rules React relies on, why index keys break inputs, how a key resets state, and what Fiber and batching change about updates.
How the prototype chain resolves properties, what __proto__ and prototype mean, what new and class do under the hood, and how to wire inheritance by hand.
The four RxJS flattening operators differ in one thing: what happens when a new value arrives while the previous inner observable is still running.
Build debounce and throttle the way interviewers expect: timelines, this and args, cancel(), leading and trailing edges, and how to test them.
Rebuild Partial, Pick, Omit, Exclude, ReturnType, Awaited and friends with mapped and conditional types, plus modifiers, key remapping and template literals.
Why components re-render, what memo really compares, how referential equality decides it all, when memoization is wasted, and where React Compiler fits.
How Angular finds a dependency: element and environment injectors, providedIn root, provider recipes, InjectionToken, resolution modifiers and singletons.
What libuv does on each turn of the loop, where nextTick, promises, setImmediate and timers really run, and how to keep CPU-heavy work from blocking it.
How the browser decides which CSS rule wins (origin, @layer, specificity, order), how inheritance and box-sizing work, and why z-index can seem broken.
Implement Promise.all with native semantics, then allSettled, race, any and a concurrency-limited pool, plus the edge cases interviewers probe.
48 must-know facts & snippets
From unknown to infer, on one page
Partial → Awaited, all of them
Rendering to Server Components, on one page
Every hook, one example each
Signals to guards, standalone-first
The 30 operators you'll actually use
Semantics to grid, cascade to stacking
App Router, RSC, caching and actions
Event loop to streams, checked on Node 22
OOP to virtual threads, on one page
Beans to JWT and @Transactional, one page
Core Python to asyncio, on one page
DDD to sagas, retries and tracing
Joins to MVCC, every query run on Postgres 16
BSON to sharding, with the defaults that matter
Goroutines to generics, slices to context
Dockerfile to Compose, layers to PID 1
Pods to Helm, plus a troubleshooting table
Data types to Cluster slots, Redis 7.4/8
EC2 to IAM to DR, the services that come up
Staging area to canary deploys, on one page
Partitions to transactions, KRaft era
GlideRecord to update sets, on one page
Big-O to DP, with Python templates
Rendering to caching, plus five mini-designs
Bayes to CUPED, p-values to regression
Bias-variance to boosting, metrics to leakage
Backprop to KV cache, Adam to LoRA
Tokens to agents, RAG to guardrails
Pipelines to PSI, registry to rollback