Node.js interviews focus on how Node handles concurrency, asynchronous code and I/O, along with practical questions about building and running services. Here are common questions with concise answers.
Core Concepts
What is Node.js?
Node.js is a JavaScript runtime built on Chrome’s V8 engine that runs JavaScript outside the browser. It uses an event-driven, non-blocking I/O model, which makes it efficient for network services that handle many concurrent connections.
Explain the event loop.
Node runs your JavaScript on a single main thread. Slow operations like file and network I/O are handed off to the system or a thread pool (libuv). When they finish, their callbacks are queued, and the event loop picks them up and runs them on the main thread. This lets one process handle many requests without blocking.
What is the difference between process.nextTick, promises and setImmediate?
process.nextTick callbacks run immediately after the current operation, before other queued work. Promise callbacks (microtasks) run next. setImmediate runs in the check phase of the event loop, after I/O callbacks. Overusing nextTick can starve the event loop.
Why shouldn’t you block the event loop?
CPU-heavy synchronous work, such as a large loop or synchronous crypto, stops Node from handling other requests until it finishes. Move heavy work to worker threads or a separate service, or break it into smaller chunks.
Asynchronous Programming
Callbacks, promises or async/await?
They’re all ways to handle asynchronous results. Callbacks were the original pattern but nest badly. Promises chain more cleanly. Async/await is syntax on top of promises that reads like synchronous code, and it’s the usual choice today.
How do you run async tasks in parallel?
Use Promise.all when every task must succeed, or Promise.allSettled when you want every result regardless of failures. For many tasks, limit concurrency so you don’t overwhelm a database or API.
Modules, Streams and Errors
CommonJS vs ES modules?
CommonJS uses require and module.exports and loads synchronously. ES modules use import and export, are the JavaScript standard, and support static analysis. Node supports both; new projects increasingly use ES modules.
What are streams and why use them?
Streams process data in chunks instead of loading it all into memory. They’re ideal for large files or network data. Readable, writable, duplex and transform streams can be piped together, and pipeline handles errors and cleanup.
How do you handle errors in Node?
Use try/catch with async/await, handle rejected promises, and listen for error events on streams and emitters. In Express-style apps, use error-handling middleware. Log unexpected errors and let the process restart cleanly under a process manager rather than continuing in an unknown state.
Performance and Production
How do you scale a Node.js application?
Run multiple processes to use all CPU cores (the cluster module, a process manager, or containers), put them behind a load balancer, keep services stateless, and use caching. Profile before optimising.
How do you find a memory leak?
Watch memory over time, take heap snapshots and compare them to see which objects grow. Common causes are global caches without limits, event listeners that are never removed, and closures holding large objects.
How to Prepare
- Be able to explain the event loop with a simple example.
- Build a small REST API with validation, error handling and tests.
- Review general software engineer interview questions and system design.
Get Help in the Interview Itself
Preparation gets you most of the way. For the interview itself, ApplyQuick Interview Copilot listens to each question and suggests a structured answer based on your resume and the job description, on Zoom, Microsoft Teams, Google Meet or a phone call. You can also rehearse first with an AI mock interview. Every plan starts with a 7-day free trial.



