BACKEND30 perguntas • ~12 min
Quiz de Fundamentos de Node.js
Teste seus conhecimentos sobre o event loop, assincronia e arquitetura do Node.js.
Quiz de Fundamentos de Node.js
Teste seus conhecimentos sobre o event loop, assincronia e arquitetura do Node.js.
1. O Node.js é descrito como 'single-threaded'. O que isso significa principalmente no contexto de execução do JavaScript?
- Ele só consegue processar uma requisição HTTP por vez
- O código JavaScript é executado em uma única pilha de chamadas em uma thread
- Ele usa apenas um núcleo de CPU para todas as operações
- Não é possível executar múltiplos processos Node.js na mesma máquina
2. O que o `require('fs')` faz em um módulo Node.js?
- Busca o pacote 'fs' do registro npm em tempo de execução
- Carrega e armazena em cache o módulo nativo de sistema de arquivos, retornando seu objeto exports
- Cria uma nova instância de sistema de arquivos exclusiva para o módulo atual
- Registra um ouvinte de eventos de sistema de arquivos no objeto process
3. Qual campo no `package.json` especifica o arquivo de ponto de entrada que o Node.js carrega quando seu pacote é importado com `require()`?
- start
- index
- main
- entry
4. Qual é a principal diferença entre `fs.readFileSync()` e `fs.readFile()` no Node.js?
- O `readFileSync` lê arquivos maiores; o `readFile` é limitado a 1 MB
- O `readFileSync` bloqueia o event loop até que o arquivo seja lido; o `readFile` é não bloqueante e usa um callback
- O `readFile` está depreciado; o `readFileSync` é a API moderna
- Eles são idênticos: o sufixo 'Sync' é puramente estético
5. No Node.js, o que é um callback?
- Um tipo de erro nativo para falhas assíncronas
- Uma função passada como argumento para outra função, invocada quando uma operação assíncrona termina
- Um wrapper síncrono em torno de uma Promise
- Um método especial na classe EventEmitter
6. Como você lê uma variável de ambiente chamada `PORT` em um processo Node.js?
- `env.get('PORT')`
- `process.env.PORT`
- `os.env('PORT')`
- `global.PORT`
7. Qual módulo nativo do Node.js você usaria para unir dois segmentos de caminho de forma segura e multiplataforma?
- `fs`
- `url`
- `path`
- `os`
8. O que o comando `npm run build` executa?
- Baixa e instala todos os pacotes listados em `dependencies`
- Executa o script `build` definido sob a chave `scripts` no `package.json`
- Compila todos os arquivos `.ts` para `.js` usando o compilador nativo do Node
- Cria um bundle de produção e faz upload para o npm
9. Em um rastreamento de pilha (stack trace) do Node.js, o que a linha `at Object.<anonymous> (app.js:42:15)` indica?
- Um objeto anônimo foi exportado de `app.js`
- O erro originou-se na linha 42, coluna 15 de `app.js`
- O arquivo `app.js` possui 42 exportações
- O uso de memória do processo no momento do erro
10. Qual dos itens a seguir está disponível no ambiente JavaScript de um navegador, mas NÃO no Node.js por padrão?
- `setTimeout`
- `Promise`
- `window`
- `Array.prototype.map`
11. Qual é a ordem correta de execução para o código a seguir? ```js setTimeout(() => console.log('A'), 0); setImmediate(() => console.log('B')); process.nextTick(() => console.log('C')); console.log('D'); ```
- D → A → B → C
- D → C → A → B
- D → C → B → A
- A → B → C → D
12. Em qual fase do event loop do Node.js o `setImmediate()` é disparado?
- Fase de timers
- Fase de poll
- Fase de check
- Fase de close callbacks
13. Qual das alternativas a seguir possui a maior prioridade de execução no agendamento assíncrono do Node.js?
- `setTimeout(fn, 0)`
- `setImmediate(fn)`
- `process.nextTick(fn)`
- Callbacks de `.then()` de uma `Promise` resolvida
14. Que tipo de stream do Node.js você usaria para ler e escrever dados E transformar esses dados em trânsito (por exemplo, um compressor gzip)?
- Stream Readable
- Stream Writable
- Stream Duplex
- Stream Transform
15. Qual é o objetivo principal do módulo `cluster` no Node.js?
- Distribuir pacotes npm entre várias máquinas
- Criar múltiplos processos worker que compartilham a mesma porta de servidor, aproveitando múltiplos núcleos de CPU
- Criar processos filhos que executam scripts independentes sem estado compartilhado
- Criar pools de threads para tarefas síncronas intensivas de CPU
16. Como o `worker_threads` se diferencia de `child_process` no Node.js?
- `worker_threads` compartilham memória via `SharedArrayBuffer`; `child_process` gera processos do sistema operacional totalmente isolados
- `child_process` é mais rápido para tarefas de CPU porque utiliza threads nativas
- `worker_threads` não conseguem se comunicar com a thread principal
- Eles são intercambiáveis: os nomes são apenas apelidos
17. Na organização da heap da V8, para que serve o 'New Space' (Geração Jovem)?
- Armazenar código de máquina compilado para funções compiladas via JIT
- Objetos de vida curta que devem ser coletados rapidamente
- Objetos grandes com mais de 1 MB que não cabem em páginas comuns
- A pilha de chamadas e frames de variáveis locais
18. Quando um módulo Node.js é importado via `require()` uma segunda vez, o que acontece?
- O arquivo do módulo é lido novamente do disco e reexecutado
- Um erro é disparado para evitar inicialização duplicada
- O objeto `exports` em cache da primeira carga é retornado imediatamente
- Uma nova instância isolada do módulo é criada
19. Qual método do `EventEmitter` registra um listener que dispara apenas uma vez e se remove automaticamente em seguida?
- `emitter.on(event, listener)`
- `emitter.once(event, listener)`
- `emitter.addOnceListener(event, listener)`
- `emitter.emit(event, { once: true })`
20. Qual é o papel da libuv no Node.js?
- É a engine JavaScript que compila e executa código JS
- Fornece o event loop de E/S assíncrona multiplataforma, o pool de threads e a camada de abstração do sistema operacional
- Gerencia downloads de pacotes npm e cache
- Implementa o protocolo HTTP/2 para o módulo `http2` do Node
21. Qual algoritmo de coleta de lixo (garbage collection) a V8 utiliza para a Geração Jovem (New Space)?
- Mark-Sweep
- Mark-Compact
- Scavenge (cópia semi-space de Cheney)
- Contagem de referências
22. Por que um ciclo completo de GC Mark-Compact pode causar picos de latência observáveis em um servidor Node.js?
- Ele dobra temporariamente o uso de memória ao copiar toda a heap
- Ele executa pausas Stop-The-World enquanto compacta o Old Space, bloqueando o event loop
- Ele recompila todas as funções otimizadas por JIT para liberar memória do cache de código
- Ele esvazia o pool de threads da libuv e reinicia todas as operações de E/S pendentes
23. Você executa `node --prof app.js` e depois `node --prof-process isolate-*.log`. Que tipo de saída isso produz?
- Um snapshot de heap em formato JSON compatível com o Chrome DevTools
- Um perfil estatístico de CPU legível por humanos mostrando funções críticas e suas porcentagens de chamada
- Uma linha do tempo de todas as pausas de GC com suas durações em milissegundos
- Um diagrama em cascata de rede de todas as requisições HTTP feitas durante a execução
24. Qual dos seguintes padrões é a causa mais comum de vazamentos de memória em servidores Node.js de longa duração?
- Usar `const` em vez de `let` para variáveis no nível do módulo
- Acumular listeners em um EventEmitter sem nunca chamar `removeListener`
- Chamar `JSON.parse` em strings grandes repetidamente
- Usar `async/await` em vez de callbacks puros
25. O que a flag do Node.js `--max-old-space-size=4096` controla?
- O número máximo de arquivos que podem ser abertos simultaneamente
- O tamanho do pool de threads da libuv em megabytes
- O limite superior da heap Old Space da V8 em megabytes antes que um erro de falta de memória seja lançado
- O tamanho máximo permitido para uma carga útil JSON analisada com `JSON.parse`
26. Um loop síncrono intensivo de CPU com duração de 2 segundos é inserido acidentalmente em um handler de requisição HTTP. Qual é a descrição mais precisa do impacto?
- Apenas essa requisição específica sofre atraso; as demais requisições continuam normalmente
- A fase de poll do event loop fica bloqueada por 2 segundos, paralisando TODAS as outras requisições recebidas e temporizadores
- O Node descarrega automaticamente o loop para o pool de threads da libuv a fim de evitar o bloqueio
- O processo master do cluster detecta o travamento e reinicia o worker
27. O que é contrapressão (back-pressure) em streams do Node.js e qual o papel do `highWaterMark`?
- Contrapressão é um limite de taxa HTTP; `highWaterMark` define o teto de requisições por segundo
- Contrapressão é o sinal de que o buffer de uma stream gravável está cheio; `highWaterMark` define o limite de tamanho do buffer no qual `write()` retorna `false`
- Contrapressão é uma pausa de GC da V8; `highWaterMark` dispara o GC antecipado quando a heap ultrapassa essa fração
- Contrapressão não é utilizada em streams do Node.js; é relevante apenas para sockets TCP
28. Qual é a principal vantagem da N-API (agora Node-API) sobre as interfaces anteriores de addons nativos?
- Permite escrever addons nativos em Python em vez de C/C++
- Fornece uma interface estável em termos de ABI, evitando que addons nativos precisem ser recompilados a cada nova versão do Node.js
- Concede aos addons nativos acesso direto ao coletor de lixo da V8 para gerenciar sua própria memória
- Paraleliza automaticamente a execução de addons nativos entre todos os núcleos de CPU
29. Como as classes ocultas da V8 ('hidden classes', também chamadas de 'shapes' ou 'maps') melhoram o desempenho de objetos JavaScript?
- Elas compactam as chaves dos objetos usando um dicionário para reduzir a memória por objeto
- Elas permitem que a V8 gere código de máquina otimizado rastreando o layout das propriedades dos objetos e reutilizando-o em instâncias com a mesma estrutura
- Elas escondem campos de classe privados do coletor de lixo para evitar coletas prematuras
- Elas pré-alocam uma página fixa de heap para cada função construtora
30. Ao utilizar o PM2 para obter reinicializações sem tempo de inatividade (`pm2 reload`), qual mecanismo o PM2 emprega?
- Ele pausa o balanceador de carga, reinicia todos os workers simultaneamente e depois retoma o tráfego
- Ele cria um novo worker, aguarda que ele sinalize prontidão, roteia o tráfego para ele e finaliza suavemente o worker antigo: um por vez
- Ele aplica patches no processo em execução na memória sem iniciar um novo
- Ele utiliza o recurso de live-patching do kernel do SO para trocar páginas de código atomicamente
Sobre este quiz
Este quiz interativo foi desenvolvido para oferecer uma experiência dinâmica, rápida e envolvente. Cada pergunta traz alternativas em ordem aleatória, e seu resultado é calculado imediatamente no final. Você pode refazer o teste quantas vezes desejar e compartilhar o resultado com seus amigos!
Destaques do quiz:
- ✓100% gratuito e sem necessidade de cadastro
- ✓Perguntas objetivas com feedback instantâneo
- ✓Gere card personalizado e compartilhe seus resultados
Perguntas frequentes
Ao responder cada pergunta, o sistema calcula automaticamente suas preferências e escolhas para definir seu resultado final de forma precisa e instantânea.