🎁 Cadastre-se agora e ganhe até 30 minutos grátis de uso de IA online. Sem cartão de crédito.

Perguntas e Respostas de Entrevista Node.js: Event Loop, Async, APIs e Escalonamento

September 3, 2026
Perguntas de entrevista Node.js com respostas e código sobre o event loop, padrões assíncronos, Express, streams, vazamentos de memória, segurança e escalonamento.
Perguntas e Respostas de Entrevista Node.js: Event Loop, Async, APIs e Escalonamento
node js interview questions
nodejs interview questions and answers
node event loop interview
express interview questions

Entrevistas de Node.js começam com o event loop e código assíncrono, depois avançam para APIs, tratamento de erros, streams, performance e segurança. O motivo mais comum de candidatos tropeçarem é descrever o event loop como mágica. Uma explicação clara do que roda onde, e do que bloqueia, é o que os entrevistadores escutam.

Abaixo estão 24 perguntas com respostas. Os exemplos de código são curtos para você digitá-los de memória.

Event loop e async

1. O que é Node.js?

Um runtime de JavaScript construído sobre o motor V8 do Chrome que roda fora do navegador. Ele usa um event loop single-threaded para JavaScript com I/O não bloqueante, o que o torna bom em lidar com muitas conexões que passam a maior parte do tempo esperando.

2. Como o event loop funciona?

O código JavaScript roda em uma única thread. Quando ele inicia uma operação de I/O, como ler um arquivo ou fazer uma requisição, o Node a entrega ao sistema ou a um pool de threads e continua. Quando a operação termina, seu callback é enfileirado, e o event loop o executa quando a call stack está vazia. O loop passa por fases: timers, callbacks pendentes, poll (I/O), check (setImmediate) e close callbacks.

3. Qual é a ordem de process.nextTick, Promises, setTimeout e setImmediate?

console.log('1 sync');
setTimeout(() => console.log('4 timeout'), 0);
setImmediate(() => console.log('5 immediate'));
Promise.resolve().then(() => console.log('3 promise'));
process.nextTick(() => console.log('2 nextTick'));

O código síncrono roda primeiro. Depois os callbacks de process.nextTick, depois as microtasks de promise, depois as fases do loop. setTimeout(0) versus setImmediate pode variar no módulo principal, mas dentro de um callback de I/O o setImmediate sempre roda primeiro. Esteja pronto para explicar em vez de apenas recitar.

4. O que significa "bloquear o event loop", e como você evita isso?

Uma tarefa síncrona longa, como um parse enorme de JSON, um loop grande ou fs.readFileSync em um handler de requisição, para todas as outras requisições até terminar. Evite isso usando APIs assíncronas, quebrando o trabalho em pedaços ou movendo trabalho pesado de CPU para worker threads ou outro processo.

5. Callbacks, promises e async/await: quais são as diferenças?

Callbacks são o estilo original e podem aninhar profundamente. Promises representam um valor futuro e encadeiam com then. async/await é sintaxe em cima de promises que lê como código síncrono e funciona com try/catch.

6. Como você executa tarefas assíncronas em paralelo?

const [user, orders] = await Promise.all([getUser(id), getOrders(id)]);

Promise.all rejeita se alguma falhar. Promise.allSettled espera todas e reporta cada resultado. Promise.race retorna a primeira a resolver. Não use await dentro de um loop quando as chamadas são independentes.

7. Qual é a diferença entre worker threads, processos filhos e cluster?

Worker threads rodam JavaScript em threads separadas em um processo e podem compartilhar memória, o que serve para trabalho pesado de CPU. Processos filhos iniciam programas separados. O módulo cluster cria várias cópias do app, uma por núcleo, compartilhando uma porta, para você usar todas as CPUs no atendimento de requisições.

Módulos e ferramentas

8. CommonJS versus ES modules?

CommonJS usa require e module.exports e carrega de forma síncrona. ES modules usam import e export, são o padrão em JavaScript e suportam top-level await. O Node suporta ambos, escolhidos pela extensão do arquivo ou pelo campo type no package.json.

9. O que tem no package.json, e qual é a diferença entre dependencies e devDependencies?

Ele guarda metadados, scripts e dependências. dependencies são necessárias em runtime, e devDependencies apenas para desenvolvimento e testes. Um arquivo de lock registra as versões exatas para que as instalações sejam reproduzíveis.

10. Como você lida com configuração de ambiente?

Use variáveis de ambiente, lidas através de process.env, com um módulo de configuração validado. Mantenha segredos fora do repositório e use um gerenciador de segredos em produção.

APIs e Express

11. O que é middleware no Express?

Uma função com acesso à requisição, à resposta e ao next. O middleware roda em ordem e pode modificar a requisição, encerrar a resposta ou passar o controle adiante. Usos típicos são logging, parsing de corpo, autenticação e tratamento de erros.

app.use((req, res, next) => {
  console.log(req.method, req.url);
  next();
});

12. Como você trata erros em uma aplicação Express?

Capture erros em handlers assíncronos e passe-os para next(err), depois use um middleware de tratamento de erros com quatro argumentos (err, req, res, next) para enviar uma resposta consistente. No Express 5, promises rejeitadas dos handlers são encaminhadas automaticamente. Para exceções não capturadas e rejeições não tratadas, registre e reinicie o processo em vez de continuar em um estado desconhecido.

13. Como você projetaria um endpoint de API REST para criar um pedido?

Valide a entrada, autentique o usuário, verifique permissões, crie o pedido dentro de uma transação de banco de dados, retorne 201 com o novo recurso e sua localização, trate duplicatas com uma chave de idempotência e retorne erros claros com os status codes adequados.

14. Como você autentica usuários?

Sessões com cookies, ou tokens como JWTs. Faça hash de senhas com um algoritmo lento como bcrypt ou argon2. Com JWTs, mantenha a expiração curta, use refresh tokens com cuidado e não armazene dados sensíveis no token.

Streams, arquivos e desempenho

15. O que são streams e por que usá-las?

Streams processam dados em pedaços em vez de carregar tudo na memória. Os tipos são readable, writable, duplex e transform. Use-as para arquivos grandes, uploads e downloads.

const fs = require('node:fs');
const { pipeline } = require('node:stream/promises');
const zlib = require('node:zlib');
await pipeline(fs.createReadStream('in.log'), zlib.createGzip(), fs.createWriteStream('in.log.gz'));

16. O que é backpressure?

Quando uma stream de escrita não consegue acompanhar uma de leitura, ela sinaliza à origem para desacelerar. pipeline e pipe cuidam disso para você. Se você escrever manualmente, verifique o valor de retorno de write() e aguarde o evento drain.

17. Como você encontra um vazamento de memória?

Acompanhe a memória ao longo do tempo, tire heap snapshots (Chrome DevTools ou --inspect) e compare-os para ver quais objetos crescem. As causas mais comuns são caches globais que nunca expiram, event listeners que não são removidos e closures que mantêm objetos grandes.

18. Como você escala uma aplicação Node.js?

Execute vários processos com o módulo cluster ou um gerenciador de processos, coloque-os atrás de um load balancer, mantenha a aplicação stateless movendo as sessões para o Redis ou um banco de dados, use cache e escale horizontalmente com contêineres. Mova o trabalho pesado de CPU para workers ou serviços separados.

19. Como você faz o profiling de um endpoint lento?

Meça primeiro com logs e timings, depois use --prof ou --cpu-prof, ou uma ferramenta de flame graph, para encontrar as funções mais quentes. Verifique as consultas ao banco de dados, já que a lentidão costuma estar mais lá do que no JavaScript.

Segurança e confiabilidade

20. Quais são os problemas de segurança comuns no Node.js?

Injeção (SQL, NoSQL, comando), cross-site scripting, autenticação fraca, dependências vulneráveis, segredos no código, ausência de rate limiting e desserialização insegura. Mitigue com validação de entrada, consultas parametrizadas, helmet, auditorias de dependências (npm audit) e o princípio do menor privilégio.

21. Como você faz um shutdown graceful?

Ao receber SIGTERM, pare de aceitar novas conexões, deixe as requisições em andamento terminarem, feche as conexões com o banco de dados e então encerre, com um timeout como fallback.

process.on('SIGTERM', () => {
  server.close(() => process.exit(0));
});

22. Como você testa código Node.js?

Testes unitários com um runner como o node:test embutido, Jest ou Vitest, mockando chamadas externas. Testes de integração contra um banco de dados de teste e testes em nível de HTTP com uma ferramenta como o Supertest. Mantenha os testes rápidos e independentes.

Design e cenários

23. Sua API está lenta sob carga. Como você investiga?

Verifique as métricas de latência e CPU. Se a CPU estiver alta em um núcleo, procure código bloqueante ou processamento pesado de JSON. Se a CPU estiver baixa e a latência alta, olhe para a espera no banco de dados ou em outros serviços. Depois adicione cache, índices, connection pooling ou batching, e teste novamente sob carga.

24. Como você criaria um endpoint de upload de arquivos para arquivos grandes?

Faça o streaming do upload direto para o armazenamento, como object storage com uma pre-signed URL, em vez de bufferizá-lo na memória. Defina limites de tamanho, valide o tipo, faça scan se necessário e processe depois em um job em background.

Como se preparar

Escreva uma pequena API com autenticação, um banco de dados e uma rota de upload, depois faça o profiling dela com uma ferramenta de carga e corrija um problema. Pratique desenhar o event loop e explicar a saída de um pequeno script como o acima. Prepare uma história real sobre como você depurou um problema de desempenho ou confiabilidade. Para rodadas de código, veja nosso guia do assistente de entrevista de programação, e para design, o guia de system design.

Diga suas respostas em voz alta e leia a transcrição para identificar pontos em que você usou um termo sem explicá-lo. Siga as regras da empresa sobre ferramentas de IA em qualquer entrevista ao vivo.

Pratique respostas de entrevista Node.js com YesToTheOffer

Faça uma entrevista técnica simulada, explique o event loop em voz alta e revise sua transcrição depois. 30 minutos grátis, sem assinatura.

iOS & Android — Em breve
Ver preços