Perguntas de Entrevista para Desenvolvedor Backend Júnior (Node.js): Guia Completo

Milad Bonakdar
Autor
Domine o desenvolvimento backend com Node.js com 35 perguntas essenciais para entrevistas, cobrindo fundamentos de JavaScript, programação assíncrona, Express.js, bancos de dados, APIs, segurança e muito mais. Preparação perfeita para entrevistas de desenvolvedor backend júnior.
Introdução
Este guia abrangente contém 35 perguntas de entrevista cuidadosamente selecionadas, abrangendo os fundamentos do desenvolvimento backend com Node.js. Estas são as perguntas que desenvolvedores backend júnior realmente encontram em entrevistas. Cada pergunta inclui uma resposta completa, avaliação de raridade e classificação de dificuldade com base na análise de centenas de entrevistas reais de grandes empresas de tecnologia e startups.
Esteja você se preparando para sua primeira função de backend ou fazendo a transição do desenvolvimento frontend, este guia cobre tudo, desde os fundamentos do JavaScript até o design de API, gerenciamento de banco de dados, práticas recomendadas de segurança e estratégias de implantação.
Fundamentos de JavaScript (8 Perguntas)
1. Explique a diferença entre var, let e const em JavaScript
Resposta:
var: Escopo de função, hoisted e inicializado comundefined, pode ser redeclarado no mesmo escopo, amplamente depreciado no código modernolet: Escopo de bloco, hoisted, mas permanece na Zona Morta Temporária (TDZ) até a declaração, não pode ser redeclarado no mesmo escopo, pode ser reatribuídoconst: Escopo de bloco, hoisted, mas na TDZ, deve ser inicializado na declaração, não pode ser reatribuído (mas o conteúdo do objeto/array pode ser mutado)
Exemplo:
Melhor prática: Use const por padrão, let quando precisar reatribuir, nunca use var no JavaScript moderno.
Raridade: Comum Dificuldade: Fácil
2. O que são closures e forneça um exemplo prático em Node.js?
Resposta: Um closure ocorre quando uma função interna tem acesso a variáveis do escopo da função externa (envolvente), mesmo depois que a função externa retorna. A função interna "fecha" essas variáveis.
Exemplo prático em Node.js:
Benefícios:
- Privacidade de dados (secretKey não pode ser acessado diretamente)
- Fábricas de função
- Implementação do padrão de módulo
- Manutenção do estado em operações assíncronas
Raridade: Comum Dificuldade: Média
3. Explique a palavra-chave this e como ela difere nas arrow functions
Resposta: this se refere ao contexto de execução. Seu valor depende de COMO a função é chamada.
Funções regulares:
Arrow functions:
Diferença chave: Arrow functions não têm seu próprio this - eles o herdam do escopo envolvente.
Raridade: Comum Dificuldade: Média
4. O que são Promises e como elas diferem dos callbacks?
Resposta: Uma Promise representa a eventual conclusão (ou falha) de uma operação assíncrona.
Padrão de callback (callback hell):
Padrão de Promise:
Benefícios:
- Evita o callback hell
- Melhor tratamento de erros com
.catch() - Operações encadeáveis
- Pode usar
Promise.all()para operações paralelas
Raridade: Comum Dificuldade: Fácil-Média
5. O que é async/await e como ele melhora a legibilidade do código?
Resposta: async/await é um açúcar sintático construído sobre Promises que faz com que o código assíncrono pareça e se comporte mais como código síncrono.
Exemplo:
Pontos chave:
- Função
asyncsempre retorna uma Promise awaitpausa a execução até que a Promise seja resolvida- Use
try/catchpara tratamento de erros - Torna as operações sequenciais mais claras
Raridade: Comum Dificuldade: Média
6. Explique o destructuring para objetos e arrays
Resposta: Destructuring extrai valores de arrays ou propriedades de objetos em variáveis distintas.
Destructuring de array:
Destructuring de objeto:
Parâmetros de função:
Raridade: Comum Dificuldade: Fácil-Média
7. O que é o spread operator e rest parameters?
Resposta:
Spread operator (...) - Expande iteráveis:
Rest parameters (...) - Coleta múltiplos elementos:
Diferença chave: Spread expande, rest coleta.
Raridade: Comum Dificuldade: Fácil-Média
8. Explique os métodos comuns de array: map, filter, reduce, forEach
Resposta:
map - Transforma cada elemento, retorna um novo array:
filter - Mantém os elementos que correspondem à condição:
reduce - Reduz a um único valor:
forEach - Itera sem retornar um novo array:
Raridade: Comum Dificuldade: Fácil
Fundamentos de Node.js (7 Perguntas)
9. O que é Node.js e como ele difere das linguagens tradicionais do lado do servidor?
Resposta: Node.js é um ambiente de tempo de execução JavaScript construído no motor V8 JavaScript do Chrome que permite que o JavaScript seja executado no lado do servidor.
Diferenças chave:
- Loop de eventos de thread único: Usa modelo de E/S não bloqueante vs. E/S bloqueante multi-thread
- Assíncrono por padrão: As operações não bloqueiam a thread principal
- JavaScript em todos os lugares: Mesma linguagem para frontend e backend
- Ecossistema NPM: Maior registro de pacotes do mundo
- Execução rápida: O motor V8 compila JavaScript para código de máquina nativo
Quando usar Node.js:
- Aplicações em tempo real (chat, jogos)
- Servidores de API
- Microsserviços
- Aplicações de streaming de dados
- Aplicações intensivas em E/S
Quando NÃO usar:
- Tarefas intensivas em CPU (processamento de imagem, codificação de vídeo)
- Aplicações que exigem cálculos complexos
Raridade: Comum Dificuldade: Fácil-Média
10. Explique o Event Loop em Node.js
Resposta: O Event Loop é o mecanismo que permite que o Node.js execute operações de E/S não bloqueantes, apesar de ser de thread único.
Como funciona:
- Call Stack: Executa código síncrono (LIFO)
- Node APIs: Manipula operações assíncronas (fs, http, timers)
- Callback Queue (Macrotasks): Contém callbacks das Node APIs
- Microtask Queue: Contém callbacks de Promise (maior prioridade)
- Event Loop: Move tarefas das filas para a call stack quando a stack está vazia
Ordem de execução:
Fases do Event Loop:
- Timers (setTimeout, setInterval)
- Pending callbacks
- Idle, prepare
- Poll (busca novos eventos de E/S)
- Check (callbacks de setImmediate)
- Close callbacks
Raridade: Comum Dificuldade: Difícil
11. Qual é a diferença entre código blocking e non-blocking?
Resposta:
Código blocking - Interrompe a execução até que a operação seja concluída:
Código non-blocking - Continua a execução, manipula o resultado via callback:
Por que non-blocking é importante:
- O servidor pode lidar com várias solicitações simultaneamente
- Melhor utilização de recursos
- Desempenho aprimorado para operações de E/S
- Escalabilidade
Raridade: Comum Dificuldade: Fácil-Média
12. O que são módulos Node.js e como funciona o sistema de módulos?
Resposta: Node.js usa o sistema de módulos CommonJS (embora os módulos ES também sejam suportados).
CommonJS (require/module.exports):
ES Modules (import/export):
Tipos de módulo:
- Core modules: Embutidos (fs, http, path)
- Local modules: Seus próprios arquivos
- Third-party modules: Instalados via npm
Module caching: Os módulos são armazenados em cache após o primeiro require, portanto, os requires subsequentes retornam a mesma instância.
Raridade: Comum Dificuldade: Fácil
13. Explique a diferença entre process.nextTick() e setImmediate()
Resposta:
process.nextTick() - Executa o callback na fase atual, antes de qualquer outra operação assíncrona:
setImmediate() - Executa o callback na próxima iteração do event loop:
Ordem de prioridade:
- Código síncrono
- Callbacks de
process.nextTick() - Callbacks de Promise (microtasks)
setTimeout(0)/setImmediate()(macrotasks)
Casos de uso:
nextTick: Garante que o callback seja executado antes de outras operações assíncronassetImmediate: Adia a execução para a próxima iteração do event loop
Raridade: Incomum Dificuldade: Média-Difícil
14. O que é o Objeto Global em Node.js?
Resposta: O objeto global em Node.js é semelhante ao objeto window nos navegadores, mas é chamado de global.
Propriedades globais:
Globais comuns:
process- Informações e controle do processoBuffer- Manipula dados bináriossetTimeout,setInterval,clearTimeout,clearIntervalsetImmediate,clearImmediateconsole- Saída do console
Nota: Em módulos ES, __dirname e __filename não estão disponíveis por padrão. Use import.meta.url em vez disso.
Raridade: Comum Dificuldade: Fácil
15. Como você lida com erros em aplicações Node.js?
Resposta: O tratamento de erros em Node.js pode ser gerenciado por meio de várias abordagens:
1. Try-catch para código síncrono:
2. Padrão de erro de callback:
3. Tratamento de erro de Promise:
4. Async/await com try-catch:
5. Tratadores de erro global:
6. Middleware de erro do Express:
Raridade: Comum Dificuldade: Média
Express.js & Web Frameworks (6 Perguntas)
16. O que é Express.js e quais são suas principais características?
Resposta: Express.js é um framework de aplicação web Node.js mínimo e flexível que fornece um conjunto robusto de recursos para construir aplicações web e móveis.
Principais características:
- Roteamento: Define endpoints e métodos HTTP
- Middleware: Funções que são executadas durante o ciclo de solicitação-resposta
- Template engines: Renderiza HTML dinâmico (EJS, Pug, Handlebars)
- Tratamento de erros: Middleware de tratamento de erros centralizado
- Arquivos estáticos: Serve arquivos estáticos
- JSON parsing: Parsing de corpo embutido para dados JSON e URL-encoded
Exemplo básico:
Por que Express:
- Mínimo e não opinativo
- Grande ecossistema
- Fácil de aprender
- Sistema de middleware flexível
Raridade: Comum Dificuldade: Fácil
17. O que é middleware em Express.js? Forneça exemplos.
Resposta: Funções de middleware são funções que têm acesso ao objeto de solicitação (req), objeto de resposta (res) e à função next no ciclo de solicitação-resposta da aplicação.
Tipos de middleware:
1. Middleware de nível de aplicação:
2. Middleware de nível de rota:
3. Middleware de tratamento de erros:
4. Middleware embutido:
5. Middleware de terceiros:
Exemplo de middleware de autenticação personalizado:
Raridade: Comum Dificuldade: Média
18. Explique o roteamento do Express e como organizar as rotas
Resposta: Roteamento se refere a como os endpoints (URIs) de uma aplicação respondem às solicitações do cliente.
Roteamento básico:
Parâmetros de rota:
Parâmetros de consulta:
Organizando rotas com Express Router:
Raridade: Comum Dificuldade: Fácil-Média
19. Como você lida com uploads de arquivos no Express?
Resposta: Uploads de arquivos podem ser tratados usando middleware como multer.
Upload de arquivo básico:
Múltiplos arquivos:
Configuração de armazenamento personalizado:
Raridade: Comum Dificuldade: Média
20. O que é CORS e como você lida com isso no Express?
Resposta: CORS (Cross-Origin Resource Sharing) é um recurso de segurança que permite ou restringe que páginas da web façam solicitações para um domínio diferente daquele que serve a página da web.
Problema: Os navegadores bloqueiam solicitações de http://localhost:3000 para http://localhost:4000 por padrão (origens diferentes).
Solução com middleware cors:
Headers CORS manuais:
Raridade: Comum Dificuldade: Fácil-Média
21. Como você estrutura uma grande aplicação Express.js?
Resposta: Organize o código em módulos e pastas lógicas para facilitar a manutenção.
Estrutura recomendada:
Exemplo de separação de preocupações:
Controller (manipula HTTP):
Service (lógica de negócios):
Rotas:
Configuração do App:
Raridade: Comum Dificuldade: Média
Conceitos de Banco de Dados (5 Perguntas)
22. Qual é a diferença entre bancos de dados SQL e NoSQL?
Resposta:
Bancos de dados SQL (Relacionais):
- Dados estruturados com tabelas, linhas, colunas
- O esquema deve ser definido antes do uso
- Conformidade com ACID (Atomicidade, Consistência, Isolamento, Durabilidade)
- Exemplos: PostgreSQL, MySQL, SQLite
- Melhor para: Consultas complexas, transações, dados estruturados
Bancos de dados NoSQL:
- Esquema flexível ou sem esquema
- Vários modelos de dados (documento, chave-valor, gráfico, coluna)
- Escalabilidade horizontal
- Exemplos: MongoDB, Redis, Cassandra
- Melhor para: Aplicações de grande escala, esquemas flexíveis, desenvolvimento rápido
Comparação:
Quando usar SQL:
- Consultas e relacionamentos complexos
- Conformidade com ACID necessária
- Dados estruturados
- Transações financeiras
Quando usar NoSQL:
- Desenvolvimento rápido
- Dados em grande escala
- Necessidades de esquema flexíveis
- Consultas simples
Raridade: Comum Dificuldade: Fácil-Média
23. Como você se conecta a um banco de dados em Node.js? (Exemplo MongoDB)
Resposta: Usando MongoDB com Mongoose como exemplo:
Conexão básica:
Com variáveis de ambiente:
Eventos de conexão:
Definindo um modelo:
Usando o modelo:


