Node.js Developer interview questions
100 real questions with model answers and explanations for Senior Node.js Developer candidates.
See a Node.js Developer resume example →Practice with flashcards
Spaced repetition · Hunter Pass
Questions
I would keep one deployment but make each module a separately enforced ownership boundary in code and data access.
- Order, Inventory, and Billing would expose narrow TypeScript entry points, while package exports, project references, and dependency-cruiser or ESLint rules reject imports of internal files.
- Each module would own its PostgreSQL tables and repository; another module calls its public API instead of issuing 1 of the 7 direct writes or joining private tables in application code.
- CI would fail on any of the 18 forbidden dependency edges, run contract tests against public entry points, and publish a dependency graph so boundary drift is visible before merge.
- Cross-module work that must share one database transaction would run through an explicit application coordinator using module APIs, while noncritical side effects use typed in-process events with named owners.
Why interviewers ask this: The interviewer is testing whether the candidate can preserve modular ownership with enforceable Node.js and database boundaries without equating modularity with network services.
I would give Order and Inventory separate ownership and replace the shared transaction with an explicit stock-reservation workflow.
- Order owns the order state and total, while Inventory alone owns available quantity and a reservation with an order ID and a 10-minute expiry.
- Checkout creates a Pending order, sends ReserveStock with the order ID, and confirms only after Inventory returns a durable reservation, so no service writes another context's tables.
- A rejected or expired reservation cancels the Pending order, while duplicate reserve and release commands use the same order ID and a uniqueness constraint.
- If the business requires order creation and stock decrement to commit in 1 atomic step with no Pending state, I would keep that invariant in 1 context rather than introduce 2PC.
Why interviewers ask this: The interviewer is evaluating whether the candidate derives boundaries from data ownership and invariants instead of preserving a shared cross-domain transaction.
I would keep the decisions needed for the customer's confirmation synchronous and publish post-confirmation work to Kafka.
- The browser uses HTTP JSON, while internal pricing, inventory, and payment can use gRPC if generated Protobuf contracts already exist; changing protocols alone will not recover a bad latency budget.
- I would allocate about 50 ms to the edge and app, 80 ms to pricing, 120 ms to inventory, 180 ms to payment, and keep 70 ms for network variance and serialization.
- After the order commits, a transactional outbox publishes OrderConfirmed to Kafka within 1 second for fulfillment, email, and analytics, none of which should consume the 500 ms response budget.
- If payment cannot finish inside its 180 ms share, I would return a Pending result and complete it asynchronously rather than build a synchronous chain that routinely exceeds 500 ms.
Why interviewers ask this: The interviewer is testing whether the candidate maps communication style to user-visible workflow semantics and a quantified latency budget.
I would keep uniform edge controls in the gateway and enforce resource-level authorization in the service that owns the order.
- The gateway terminates TLS, validates JWT signatures from a cached JWKS, routes requests, caps bodies at 2 MB, applies per-client rate limits, and emits low-cardinality traffic metrics.
- At 100,000 RPS, gateway replicas must stay stateless and avoid a user or policy database lookup on every request; cached keys and local token checks keep the edge scalable.
- The gateway may require an orders:read scope, but the Order service checks that the caller owns order 8472 or has the tenant-specific support permission using current domain data.
- I would not put checkout orchestration, order-state transitions, or service-specific response mapping in the gateway, because 3 such features already create a coupled deployment bottleneck.
Why interviewers ask this: The interviewer is evaluating whether the candidate can separate scalable edge policy from authorization decisions that require authoritative domain state.
I would use Kubernetes for discovery and balance at the gRPC stream level rather than by TCP connection count.
- A Service plus EndpointSlices or xDS exposes the 40 ready pods, while clients maintain several HTTP/2 channels and use round robin across resolved endpoints instead of one DNS-pinned channel.
- An L7 gRPC proxy should choose an upstream by active requests or streams, not least TCP connections, because one connection can carry thousands of the 80,000 concurrent streams.
- Readiness removes a pod from new endpoint selection, but it cannot stop new streams on an existing channel; draining must also invoke grpc-js server.tryShutdown or send GOAWAY and reject new calls.
- I would allow 60 seconds for cooperative stream completion, then force shutdown, while a jittered maximum connection age gradually refreshes channel distribution without synchronizing all clients.
Why interviewers ask this: The interviewer is testing whether the candidate understands that Kubernetes discovery updates endpoints but does not redistribute already established long-lived connections.
I would use an orchestrated saga with durable state because 4 ordered steps and their compensations need one visible workflow record.
- The orchestrator persists checkout ID, current step, attempt count, and a 15-minute deadline, then sends each command through an outbox after its local transaction commits.
- On failure it compensates in reverse order: cancel shipment, void the payment authorization, release stock, and mark the order Cancelled.
- Every forward and compensation command uses a key such as checkout-482:reserve-stock, and each service atomically records that key with its local mutation before acknowledging.
- A timeout retries transient failures at most 3 times, then moves the saga to ManualReview if a compensation such as voiding payment cannot be confirmed.
Why interviewers ask this: The interviewer is evaluating whether the candidate treats a saga as a durable state machine with explicit, idempotent business compensations.
I would carry one stable operation identity through all 3 services and give each side effect its own deterministic child key.
- Checkout stores tenant ID, endpoint, idempotency key, a SHA-256 request fingerprint, state, and response under a unique constraint before starting work.
- It derives separate keys such as key-731:payment and key-731:shipment, so all 4 retries reach the same downstream operations without conflating 2 different effects.
- Each service claims its key and applies its business mutation in 1 local transaction; a concurrent duplicate returns the stored result or a 202 Pending response.
- I would retain keys for 7 days, longer than the HTTP retry and message replay windows, and reject the same key with a different fingerprint as a 409 conflict.
Why interviewers ask this: The interviewer is testing whether the candidate handles concurrent retries, payload mismatches, and distinct downstream effects across service boundaries.
I would expand the provider first, migrate the 12 consumers independently, and contract only after telemetry proves the old field is unused.
- In week 1 the provider accepts customerName or the new structured customer field, returns both representations, and normalizes them into 1 domain model at the API boundary.
- Consumer-driven contract tests run both shapes in CI, and every request records consumer ID and contract version so an unregistered caller cannot disappear from the migration count.
- I would move about 2 consumers per week without a synchronized release, publish a generated client for the new shape, and keep rollback compatible with the expanded provider.
- After all 12 consumers migrate and old-field usage remains at 0 for 14 days, I would stop returning it, then remove acceptance and adapter code in a later release.
Why interviewers ask this: The interviewer is evaluating whether the candidate can coordinate a breaking API change through independent deployments with evidence-based removal.
I would fit the entire resilience policy inside 600 ms instead of assigning each attempt an independent timeout.
- I would reserve 100 ms for application work, 120 ms for the database, 80 ms for response variance, and give the dependency at most 300 ms in total.
- With a measured dependency p99 near 90 ms, I would start with a 140 ms attempt timeout and allow 1 retry after up to 20 ms of jitter only for idempotent calls and transient errors.
- The propagated deadline cancels downstream work, and no retry starts unless at least 160 ms remains, so an expired caller cannot create useful-looking background load.
- I would start the breaker at 50% eligible failures over at least 20 calls, open it for 5 seconds, permit 2 half-open probes, and tune those numbers from traffic rather than guesswork.
Why interviewers ask this: The interviewer is testing whether the candidate composes timeouts, retries, and breaker behavior within one quantified end-to-end deadline.
I would isolate recommendation capacity from the core product path and omit recommendations before they can exhaust the 60 database connections.
- Core product reads keep the 60-connection PostgreSQL pool, while recommendations get a separate HTTP agent with 20 sockets, a concurrency limit of 40, and a bounded queue of 80 requests.
- The optional call gets an 80 ms timeout and no in-request retry; on failure the API returns the product with a recommendationStatus of unavailable or a Redis value no older than 5 minutes.
- Once the 80-slot optional queue is full, new recommendation work is skipped immediately, so 12,000 RPS cannot turn a slow dependency into unbounded promises and heap growth.
- I would graph core latency, skipped recommendations, queue depth, socket use, and stale-cache age separately, then verify under load that recommendation failure does not move product p95 above 250 ms.
Why interviewers ask this: The interviewer is evaluating whether the candidate can reserve concrete resource pools and define a safe, visible fallback for an optional dependency.
I would run 18 one-core process replicas, six on each of three 8-core hosts; at 24,000 RPS each normally handles about 1,333 RPS and rises to 2,000 RPS after one host fails.
- One JavaScript event loop uses one core for application code, so additional processes, not one larger process, expose the other cores.
- The 2,000 RPS target is 67% of the measured 3,000 RPS limit, leaving event-loop and traffic-burst headroom.
- Losing one host leaves 12 replicas and exactly 24,000 RPS of planned capacity, while two spare cores per host cover the OS and native work.
- I would externalize state and load-test the database, cache, connection pools, and network at 36,000 RPS because process capacity is not end-to-end capacity.
Why interviewers ask this: The interviewer is testing whether the candidate can turn a single-process benchmark into an N+1 capacity model without assuming that one event loop uses all eight cores.
I would normally run 24 one-process pods with a 1 vCPU request instead of nesting four cluster workers inside each of six pods.
- Kubernetes can schedule, health-check, restart, and drain each process independently rather than treating four failure and memory domains as one pod.
- Per-pod CPU, RSS, event-loop delay, and readiness then describe one Node.js process, which makes limits and autoscaling signals easier to interpret.
- A rolling update can replace a few of 24 processes at a time, while a six-pod cluster layout removes four processes whenever one pod is replaced.
- I would keep cluster for a standalone 4-core VM or a platform without process orchestration, and document any exception caused by unusually expensive sidecars or per-pod resources.
Why interviewers ask this: The interviewer is checking whether the candidate separates host-level core utilization from Kubernetes scheduling and lifecycle control.
I would use weighted least-connections for WebSocket upgrades and least-outstanding-requests or round robin for the short HTTP traffic.
- Least-connections steers each new upgrade toward the replica with fewer open sockets, keeping the expected 5,000 sockets per replica below the measured 6,000 limit.
- I would not let the 20,000 long-lived sockets dominate the HTTP decision, so the load balancer needs separate counters or backend pools for upgrades and ordinary requests.
- Weighted routing can reduce traffic to a smaller or warming replica, while consistent hashing is unnecessary unless an explicit locality requirement remains after state is externalized.
- Readiness must reject new upgrades before a replica drains, while existing sockets stay on their current replica until close or a bounded deployment deadline.
Why interviewers ask this: The interviewer is evaluating whether the algorithm matches two workloads with different connection lifetimes instead of applying one round-robin policy to both.
I would avoid sticky routing for HTTP, externalize session and messaging state, and accept affinity only for each WebSocket while that connection is open.
- An opaque session ID can reference Redis state with a 30-minute TTL, allowing any of the six replicas to authenticate the next HTTP request.
- A shared connection registry and partitioned pub-sub route messages to the replica holding a socket, with an expected average of 10,000 sockets per replica.
- Cookie or source-IP stickiness can hide in-memory state, but it creates load skew and loses continuity when a selected pod is replaced during the rollout.
- Clients should reconnect with jitter and a resume cursor so replacement moves a connection safely without requiring the old process memory to survive.
Why interviewers ask this: The interviewer is testing whether the candidate distinguishes the unavoidable lifetime of an open socket from durable session affinity.
I would reserve the remaining 25 ms as 10 ms for event-loop queueing, 10 ms for application work, and 5 ms of safety margin, while keeping any single synchronous chunk below 5 ms.
- At 400 RPS, 1.5 ms of synchronous work demands about 600 ms of one core per second, so the process starts near 60% event-loop utilization before callbacks and garbage collection.
- I would record monitorEventLoopDelay as a histogram and require its p99 to stay below the 10 ms queueing allocation under the real request mix.
- I would compare eventLoopUtilization snapshots over load windows and investigate sustained values above roughly 70%, rather than treating one cumulative value as a request metric.
- CPU profiles identify chunks exceeding 5 ms, which I would bound, split with scheduled yields, or move to a worker pool before retesting the 120 ms p99.
Why interviewers ask this: The interviewer is checking whether the candidate derives a measurable synchronous budget from the latency target and interprets event-loop delay and utilization together.
I would use six worker threads per pod, deploy at least two replicas, and transfer each 8 MiB ArrayBuffer rather than clone it.
- Six workers provide a theoretical 150 jobs per second, and a 70% operating target gives about 105 jobs per second while leaving CPU for the main event loop and native work.
- Two replicas provide about 210 jobs per second at that target, and a bounded input queue must reject or defer work when arrivals exceed it.
- Transferring the ArrayBuffer moves its backing store and detaches it from the sender, while cloning 200 inputs per second would copy about 1.6 GiB per second before result traffic.
- If the sender must retain the bytes, I would make that copy explicit or design a synchronized SharedArrayBuffer protocol, then benchmark computation, messaging, RSS, and p99 together.
Why interviewers ask this: The interviewer is evaluating whether pool size follows CPU arithmetic and whether the candidate includes data-movement cost and ownership semantics.
I would start with UV_THREADPOOL_SIZE=4, cap password derivation at three concurrent operations per replica, and benchmark before increasing the pool.
- The crypto load consumes about 2.4 core-seconds per second per replica, so a much larger pool cannot create CPU capacity on a 4 vCPU limit.
- Three concurrent 40 ms operations provide a theoretical 75 per second and leave one pool slot for filesystem, dns.lookup, zlib, or other shared libuv work.
- A size of 4 creates 48 libuv threads across 12 replicas, while setting 16 would create 192 threads and can add context switching and memory without raising useful throughput.
- I would compare sizes 4, 6, and 8 using crypto queue time, filesystem p99, CPU, and RSS, and isolate password work in separate replicas if the shared pool still violates either SLO.
Why interviewers ask this: The interviewer is testing whether the candidate accounts for the pool's shared users, CPU limits, and per-process multiplication across the fleet.
The microtask chain is starving timer and I/O phases because Node.js keeps draining microtasks before the event loop can advance.
- Promise.then and queueMicrotask schedule more microtasks, so replacing recursion with either API does not yield; recursive process.nextTick is even more aggressive because its queue runs before ordinary promise microtasks.
- I would process a measured chunk such as 500 items, save the cursor, and await setImmediate from node:timers/promises before the next chunk so timers and poll callbacks can run.
- If the 100,000 steps are CPU-heavy rather than short coordination work, I would send the batch to a bounded worker_threads pool instead of creating a longer sequence of event-loop turns.
- A load test would track monitorEventLoopDelay p99, eventLoopUtilization, timer lateness, throughput, and queue depth and keep the chunk size only if the 10 ms timer stays within its budget.
Why interviewers ask this: The interviewer is checking whether the candidate distinguishes microtask completion from yielding to the event loop and can bound both latency and total CPU work.
I would start with --max-old-space-size=1024, budget each replica at the full 2 GiB limit, schedule at most six such pods per 16 GiB node, and take heap snapshots only in an isolated diagnostic replica.
- RSS is the capacity number because it includes V8 heap, Buffers, native allocations, code, and thread stacks; the measured 1.6 GiB peak leaves only about 400 MiB below the pod limit.
- Six 2 GiB pod limits reserve 12 GiB and leave 4 GiB for the operating system, Kubernetes, daemons, and transient node pressure.
- A snapshot can stop the event loop and require substantial extra memory, so I would remove a replica from traffic and give the diagnostic pod at least 3 GiB rather than risk an OOM in a 2 GiB production pod.
- I would compare warmed post-GC snapshots by retained size and retaining path, then verify the fix with RSS slope, GC time, and a soak test instead of raising the heap limit alone.
Why interviewers ask this: The interviewer is evaluating whether the candidate separates heap from RSS and includes snapshot overhead and node headroom in capacity planning.
I would make the load balancer retire idle connections first, bound slow request ingestion separately, and enforce the 2-second handler budget with cancellation.
- I would set server.keepAliveTimeout near 55 seconds so the load balancer, which owns and reuses the client side of the upstream connection, closes it at 50 seconds before Node.js reaches its server-side idle timeout.
- I would start with headersTimeout at 10 seconds and requestTimeout at 20 seconds for the complete 2 MiB request, plus header-count and body-size limits so slow clients cannot occupy parsers indefinitely.
- The route would use an AbortController with a deadline below 2 seconds and pass its signal to fetch, database acquisition, and streamed work, because server socket timeouts do not cancel application promises automatically.
- I would align the client agent and proxy settings in a load test and monitor connection resets, 408 responses, active sockets, reuse rate, and p99 before changing the 55, 10, or 20 second values.
Why interviewers ask this: The interviewer is evaluating whether the candidate separates idle connection reuse, slow-client protection, and application cancellation instead of using one timeout for all three.
Locked questions
- 21
Kafka receives 50,000 events per second with seven-day retention, and 2% must become BullMQ jobs exactly 10 minutes later. How would you bridge the delayed subset without losing or duplicating the business effect?
retentionkafka - 22
A Kafka topic receives 50,000 records per second, and one partition can be processed at 2,000 records per second. How many partitions and consumers would you plan for while preserving customer order?
partitioningkafkaconcurrency - 23
A Node.js Kafka consumer applies 20,000 payment events per second to PostgreSQL. Explain the at-least-once crash window and how you would achieve effectively-once results.
postgreskafka - 24
8 Node.js consumers receive the same event concurrently. How would you make the consumer atomic and idempotent with a PostgreSQL unique constraint?
concurrencyidempotencypostgres - 25
Design a transactional outbox for a Node.js service doing 5,000 PostgreSQL writes per second while preserving event order per account.
transactionspostgresdesign - 26
Design retry topics, backoff, and a dead-letter queue for jobs that must either succeed or reach the DLQ within a 45-minute SLA.
designresiliencedata-structures - 27
A queue receives 10,000 jobs per second, mean processing time is 50 milliseconds, oldest-job age must stay below 180 seconds, and backlog is 600,000. How would you set concurrency and backpressure?
concurrencydata-structuresbackpressure - 28
A 24-partition Kafka topic handles 100,000 events per second, each partition tops out at 5,000, and one tenant produces 30,000. How would you change the partition key?
partitioningkafka - 29
Old consumers may run for 14 days while a producer adds currency and renames amountCents to amountMinor. How would you evolve the event with JSON Schema, Avro, or Protobuf?
schema - 30
A BullMQ system receives 200 jobs per second with a 1.5-second mean duration and runs billing every five minutes. How would you set Redis durability, retention, job IDs, and worker concurrency?
retentionredissystem-design - 31
A Node.js endpoint sustains 40,000 RPS, uses 85% of one CPU core, and has a p99 latency of 90 ms with no outage in progress; how would you use --cpu-prof or the inspector and a flame graph to produce optimization evidence?
optimizationlatencyendpoints - 32
A custom Transform receives 1 MiB chunks and expands each one into 8 MiB while its downstream writable drains at 20 MiB/s; how should _transform, push, and its callback cooperate to keep memory bounded?
memorycallbacks - 33
A Node.js service streams a 20 GiB object through decryption into a temporary file and must cancel within 2 seconds of a client disconnect; how would you use stream.pipeline to handle cancellation, errors, and cleanup?
resilienceci-cd - 34
An objectMode Transform has readableHighWaterMark and writableHighWaterMark both set to 16, and every object retains a 5 MiB Buffer; what memory exposure does that create across 8 pods?
memory - 35
One Readable produces 200 MiB/s and must fan out identical bytes to three destinations that sustain 200, 150, and 20 MiB/s; what bounded architecture would you choose for a 10-minute transfer?
architecture - 36
A PostgreSQL cluster allows 300 connections, a Node.js API runs 12 pods with a 25% rollout surge, and 60 connections must remain reserved; what per-pod pool maximum would you configure?
postgresapiconfig - 37
A route receives 600 concurrent requests, each holds one PostgreSQL client for 40 ms, the pool has 20 clients, and the response SLO is 250 ms; how would you bound acquisition wait and the pool queue?
concurrencydata-structurespostgres - 38
A checkout uses a 30-client pg pool, spends 20 ms on SQL, and calls a payment API with p95 latency of 800 ms while 100 requests run concurrently; why must a transaction pin one client, and should the remote call stay inside it?
sqltransactionsapi - 39
Four hundred Node.js clients connect through PgBouncer transaction pooling to 40 PostgreSQL connections, while the app uses a named prepared query 50,000 times per minute plus SET search_path and LISTEN; which behaviors are safe and what would you change?
transactionsqueriespostgres - 40
An AWS Lambda function has reserved concurrency of 1,000, each execution environment creates a pg pool with max 5, and RDS allows 500 connections with 100 reserved; how would you compare direct connections with RDS Proxy?
concurrencylambdaproxy - 41
An endpoint starts 20 fetch calls with Promise.all, and call 7 rejects after 80 ms while the others may run for 2 seconds. What happens, and how would you stop work that is no longer useful?
endpointspromises - 42
You read from 5 replicas, need any 3 valid responses for quorum, and separately hedge a read across 3 regions for the first valid response. Where do Promise.allSettled and Promise.any fit?
replicationpromises - 43
A Node.js job must process 100,000 records averaging 8 KiB each through a dependency that takes 200 ms and permits 250 requests per second. How would you bound promise concurrency and memory?
promisesconcurrencydependencies - 44
At 10,000 requests per second, an HTTP request publishes a Kafka message and schedules a 200 ms retry timer. How would you propagate AsyncLocalStorage context, and where can it be lost?
kafkaresiliencehttp - 45
A Fastify or NestJS endpoint accepts JSON up to 2 MiB with at most 100 line items. Why is TypeScript insufficient, and how would you enforce the runtime contract?
endpointstypescript - 46
A Node.js API serves 30,000 requests per second, and naive code emits 3 JSON logs per request. How would you design structured logging with correlation, redaction, and controlled cardinality?
correlationapidesign - 47
A service handles 20,000 HTTP requests per second, publishes to Kafka, queries PostgreSQL, and averages 8 spans per request. How would you instrument and sample its OpenTelemetry traces?
postgresquerieshttp - 48
A public API serves 100 million requests in 28 days with a 99.9% availability SLO and a 300 ms latency objective. Which RED metrics and histogram buckets would you expose?
distributionsapilatency - 49
How would you define a versioned cursor-pagination contract for a mutable 50-million-row dataset receiving 5,000 updates per second and returning at most 100 rows per page?
pagination - 50
A GraphQL Federation gateway serves 15,000 requests per second with a 250 ms p99 target; one query can request 500 products plus price and review fields, and mobile clients remain active for 12 months. How would you bound execution and evolve the schema?
queriesschemagraphql - 51
A Node.js image service has RSS growing by 180 MiB per hour, heapUsed returns to 420 MiB after GC, and pods hit a 2 GiB limit after 7 hours; how do you diagnose and contain it before tomorrow's peak?
- 52
At 14:00, checkout p99 jumps from 140 ms to 1.8 seconds and monitorEventLoopDelay reports 240 ms after a release that added synchronous gzip of 6 MiB responses; what do you do in the first 30 minutes?
monitoring - 53
A payment dependency starts returning 503 for 20% of calls, three retry layers turn 4,000 user requests per second into 22,000 attempts, and the incident must stabilize within 15 minutes; what is your response?
incidentsresiliencedependencies - 54
During a 12,000 RPS load test, an API's p99 moves from 190 ms to 920 ms while p50 stays at 75 ms and CPU reaches 88%; how would you find and fix the tail regression before Friday's release?
load-testingapi - 55
A service has a pg pool of 30, pool acquisition p99 reaches 2.4 seconds, 180 requests are waiting, and PostgreSQL CPU is only 45%; how do you restore the 300 ms API SLO within an hour?
postgresapislo - 56
After a deploy, 6 of 20 pods crash with unhandledRejection when an audit write times out, and Kubernetes restarts each pod within 20 seconds; how do you find the root cause and prevent dropped requests today?
kubernetesdeployment - 57
A Kafka export reads 90 MiB/s, S3 writes 25 MiB/s, an ignored write return grows the in-process queue to 6 GiB in 80 seconds, and the pod will OOM in 3 minutes; how do you bound it?
concurrencydata-structureskafka - 58
A Node.js engineer spent 90 minutes restarting pods during two incidents without checking event-loop or pool metrics, and they are primary on-call again in 3 weeks; how would you mentor them concretely?
mentoringincidentson-call - 59
After enabling a new mapper, GC time rises from 4% to 28%, minor collections occur 40 times per second, and throughput falls 35% although post-GC heap is flat; what do you investigate?
throughputdata-structures - 60
Heap snapshots show 70,000 objects retaining 512 MiB Buffers after parsing 2 KiB headers from uploaded files, and RSS grows 90 MiB per hour; what is the likely bug and fix?
snapshotdata-structures - 61
A worker_threads image pool receives 40 jobs per second with 32 MiB ArrayBuffers, RSS spikes by 1.3 GiB, and p99 misses 2 seconds after a refactor from transfer to clone; how do you respond?
refactoring - 62
A 4 vCPU pod runs 80 scrypt operations per second, filesystem p99 moves from 20 ms to 1.4 seconds, and UV thread-pool queue time exceeds 900 ms; what do you change before a 2-hour batch deadline?
concurrencydata-structuresbatch - 63
A downstream API slows to 3 seconds, active sockets rise from 200 to 12,000, pending requests reach 30,000, and the Node.js pod OOMs in 6 minutes; how do you fix the HTTP client?
httpzero-to-one - 64
After changing server keep-alive to 4 seconds while the load balancer reuses upstream connections for 60 seconds, ECONNRESET rises to 3.8% and p99 doubles; what is your incident fix?
incidentsload-balancing - 65
A report worker fails with EMFILE after 25 minutes, open file descriptors climb from 180 to 9,800, and 4,000 temporary files remain; how do you find and stop the leak?
descriptors - 66
A Kafka consumer processes a batch for 8 minutes, the group rebalances every 5 minutes, and 14% of records are handled twice before a 30-minute settlement deadline; what do you change?
kafkabatchconcurrency - 67
One malformed Kafka record crashes a Node.js consumer 46 times in 12 minutes, the partition makes no progress, and its oldest message is 18 minutes against a 30-minute SLA; what do you do?
partitioningkafka - 68
BullMQ reports 9,000 stalled jobs after workers were CPU-throttled for 45 seconds, and 320 invoice jobs ran twice; how do you stabilize billing before the next 10-minute cycle?
throttle - 69
During a 70-second Redis failover, BullMQ workers reconnect in a tight loop, CPU reaches 100%, and the queue grows by 120,000 jobs; what is your recovery plan?
recoveryredisdata-structures - 70
A cleanup release runs Redis KEYS tenant:* every minute on 40 million keys, command latency reaches 2.6 seconds, and API timeouts hit 8%; what do you do before the next run?
redisapilatency - 71
After a Redis Cluster reshard, 6% of requests fail with MOVED errors for 11 minutes because a custom client cached slots for 30 minutes; how do you repair the incident?
incidentsrediscaching - 72
A Redis hot key receives 85,000 GETs per second, one shard reaches 95% CPU, and checkout cache p99 rises from 4 ms to 180 ms; how do you relieve it within 20 minutes?
shardingrediscaching - 73
A Kubernetes liveness probe checks PostgreSQL, a 40-second database slowdown restarts all 60 Node.js pods, and reconnects exhaust the database for 12 minutes; what do you change immediately?
databasepostgreskubernetes - 74
A rollout sends SIGTERM to a queue worker with 25 active jobs, Kubernetes kills it after 30 seconds, and 7 jobs produce duplicate emails; how do you fix the lifecycle before today's second rollout?
kubernetesdata-structures - 75
A Node.js runtime upgrade passes unit tests but 3% of canary pods crash in sharp during image processing, and the security deadline is 48 hours; how do you proceed?
unitconcurrencyestimation - 76
A CommonJS service starts locally but 18 production pods enter CrashLoopBackOff with ERR_REQUIRE_ESM after a dependency release, and rollback must finish in 10 minutes; what do you do?
dependenciesrollbackmodules - 77
After a Node.js upgrade, CPU rises 22%, TLS handshakes fail on one legacy partner, and the fleet migration deadline is 5 days; how do you separate the causes?
estimationmigrationstls - 78
Two concurrent requests occasionally log the wrong tenant after a refactor, 0.4% of 50,000 RPS traces are misattributed, and an audit report is due tomorrow; how do you debug AsyncLocalStorage?
asyncconcurrencyrefactoring - 79
Enabling OpenTelemetry raises service RSS by 600 MiB and the collector drops 35% of spans at 20,000 RPS, with only 1 hour to protect the pods; what do you change?
observability - 80
A logging change emits 1.2 GiB per minute to container stdout, event-loop lag reaches 110 ms, and node disk pressure starts evicting pods; what is your first-hour fix?
containerslogging - 81
A code review adds JSON.stringify to serialize a 120 MiB object on an HTTP route with a 250 ms SLO; what evidence and change do you require before approval?
serializationslohttp - 82
A new user-supplied regular expression drives one Node.js core to 100% for 9 seconds on a 4 KiB input, and login availability drops below 99.9%; how do you respond?
regex - 83
Clients cancel 18% of search requests after 400 ms, but downstream fetches run for 12 seconds and active promises reach 45,000; how do you reclaim the work?
promises - 84
A scheduler creates 80,000 retry timers during a 5-minute outage, heap grows by 900 MiB, and recovery causes a traffic spike; what bounded replacement do you make?
resiliencedata-structures - 85
Warnings show 35 listeners on each shared EventEmitter, heap grows 60 MiB per hour, and every reconnect duplicates message handling; how do you prove and fix the leak?
data-structures - 86
DNS lookup p99 rises to 1.1 seconds only when 64 concurrent filesystem jobs run, while network DNS metrics stay below 20 ms; what Node.js-specific cause do you test?
dnsmonitoringconcurrency - 87
Disabling HTTP keep-alive increases TLS handshakes from 900 to 18,000 per second, CPU reaches 92%, and API p99 misses 300 ms; how do you recover?
httptlszero-to-one - 88
A deploy causes 30,000 WebSocket clients to reconnect within 20 seconds, file descriptors hit 95% of the limit, and authentication Redis p99 reaches 700 ms; what do you do?
rediswebsocketsauth - 89
An HTTP/2 client leaves 6,000 streams open after 499 cancellations, RSS rises 75 MiB per hour, and GOAWAY is never handled; how do you fix the lifecycle?
resiliencehttp - 90
A transaction route holds 24 of 25 pg clients for 50 seconds because an external fraud call sits between BEGIN and COMMIT, and checkout p99 reaches 8 seconds; what is your repair?
transactions - 91
After an ORM change, a list route runs 501 PostgreSQL queries for 500 orders, p99 moves from 220 ms to 2.7 seconds, and the release window closes in 45 minutes; what do you do?
ormpostgresqueries - 92
A PostgreSQL plan change makes one query p99 jump from 40 ms to 1.9 seconds at 9,000 RPS, while Node.js pool wait reaches 700 ms; how do you contain and verify the fix?
queriespostgres - 93
Kafka brokers become unavailable for 4 minutes, a Node.js producer buffers 1.8 million records and RSS reaches 1.6 GiB, with a 2 GiB pod limit; how do you prevent OOM and data loss?
kafka - 94
A Kafka topic has 48 partitions, 48 consumers, but one partition reaches 2.4 million records of lag and a 20-minute SLA while the others are current; what do you check and change?
partitioningkafka - 95
At the top of the hour, 300,000 Redis entries expire together, PostgreSQL CPU hits 98%, and API p99 rises from 120 ms to 4 seconds for 6 minutes; how do you stop the cache stampede?
postgresredisapi - 96
A pod is at 1.85 GiB of its 2 GiB limit, V8 reports allocation failure, and support asks for a heap snapshot within 10 minutes; what is the safe decision?
snapshotdata-structures - 97
A native compression addon segfaults 2 pods per hour only on ARM nodes, JavaScript logs end abruptly, and a migration deadline is 3 days away; how do you get a root cause?
estimationmigrationsjavascript - 98
One worker thread crashes every 7 minutes on malformed input, the parent immediately replaces it, queued jobs grow to 50,000, and CPU stays at 100%; how do you prevent the restart loop?
concurrencydata-structures - 99
Production errors show only minified dist frames after a TypeScript build, 700 failures occur in 20 minutes, and the owning team needs the faulty source line within 30 minutes; what do you do?
typescript - 100
A metrics change adds userId and raw URL labels, Prometheus series rise from 400,000 to 18 million in 25 minutes, and scrapes time out before the next on-call handoff; how do you recover observability?
observabilitymonitoringon-call