WorksheetsQuiz avaliativo PWEB 2 - N1
Total questions: 10
Worksheet time: 5mins
Em um servidor Node.js que opera em um único thread principal, o desempenho é frequentemente limitado por operações de Entrada/Saída (I/O), como consultas a um banco de dados remoto ou acesso a disco. Nesses cenários, qual o impacto imediato no throughput (vazão) do servidor se a aplicação for forçada a usar operações síncronas e bloqueantes de I/O?
O servidor aproveita o paralelismo de múltiplos núcleos de CPU para acelerar a leitura de dados, aumentando o throughput.
O único thread de execução é obrigado a esperar a conclusão da I/O, travando o processamento de todas as outras requisições.
O Event Loop imediatamente delega a tarefa para o thread pool do Node.js, garantindo que o fluxo principal continue não-bloqueante.
O código é executado em sequência, mas o sistema operacional alterna o contexto rapidamente, minimizando o impacto da espera da I/O.
O JavaScript é conhecido por ser uma linguagem single-threaded. Contudo, ele consegue executar operações assíncronas, como requisições de rede (Fetch API), sem travar a interface do usuário (UI). Qual conceito ou componente do ambiente de runtime (navegador/Node.js) é essencial para viabilizar essa concorrência não-bloqueante?
A alocação de memória no Heap, que armazena objetos e variáveis globais.
A Call Stack, que executa o código em sequência, garantindo que as operações assíncronas sejam concluídas primeiro.
O Event Loop, que monitora a Call Stack e move tarefas das filas para a pilha quando ela está vazia.
O modelo de multi-threading nativo do JavaScript que, a partir do ES6, substituiu as Web APIs.
Considere o seguinte trecho de código JavaScript executado em um navegador ou Node.js que utiliza o modelo padrão do Event Loop: Qual será a ordem de exibição no console, considerando a prioridade entre macrotasks e microtasks?
1, 2, 3, 4
1, 4, 2, 3
1, 4, 3, 2
1, 3, 4, 2
As Promises foram introduzidas no ES6 (2015) como uma melhoria em relação aos callbacks, representando o resultado futuro de uma operação assíncrona. Quais são os três estados possíveis de uma Promise, e qual transição representa uma falha no resultado da operação?
Executing, Complete e Error; a transição de Executing para Error.
Pending, Fulfilled e Rejected; a transição de Pending para Rejected.
Active, Resolved e Canceled; a transição de Active para Canceled.
Resolved, Rejected e Finally; a transição para Finally.
Ao encadear Promises utilizando múltiplos métodos .then(), como em uma sequência de requisições que dependem do resultado da anterior, como o valor é passado de uma etapa para a próxima na cadeia?
O valor retornado no callback do primeiro .then() é automaticamente passado como argumento para a função callback do próximo .then().
O valor é armazenado em uma variável global oculta, que todos os .then() subsequentes podem acessar.
Apenas o resultado de uma Promise rejeitada é passado para o próximo .then() na cadeia de chamadas.
O encadeamento de Promises permite que a última função .then() acesse diretamente o resultado da primeira requisição.
No consumo de Promises, o método .catch() é fundamental para o tratamento de erros. Se houver uma cadeia de três Promises encadeadas por .then(), e a segunda Promise for rejeitada, qual parte do código capturará esse erro?
Somente o callback de falha definido dentro do .then() imediatamente seguinte à Promise rejeitada.
O primeiro método .catch() encontrado após o ponto da rejeição na cadeia, pois ele captura erros da Promise e de qualquer .then() anterior.
Apenas o .finally(), que sempre é executado independentemente do sucesso ou falha.
O erro será silenciosamente ignorado, pois o JavaScript só trata erros síncronos.
O Sistema de Módulos em JavaScript (ES Modules), introduzido no ES6 (2015), trouxe melhorias significativas na arquitetura de aplicações. Qual é uma das características fundamentais dos módulos ESM em relação ao escopo das variáveis e execução?
Módulos ESM vazam símbolos para o objeto global (window no navegador), facilitando a comunicação entre arquivos.
Módulos ESM são carregados dinamicamente em tempo de execução, permitindo o uso da sintaxe require().
Módulos ESM possuem escopo próprio para seu código e não vazam símbolos para o objeto global.
O this no topo de um módulo ESM aponta para module.exports, seguindo o padrão CommonJS (CJS).
O ecossistema JavaScript utiliza principalmente dois padrões de módulos: ES Modules (ESM) e CommonJS (CJS). Qual é a diferença fundamental no modelo de carregamento que permite ao ESM habilitar otimizações como o Tree Shaking?
O CJS utiliza carregamento estático, o que permite aos bundlers remover código não utilizado antes da execução
O ESM utiliza carregamento estático, onde as dependências são analisadas antes da execução, enquanto o CJS usa carregamento dinâmico (require())
O CJS é suportado nativamente pelo navegador, enquanto o ESM requer um bundler para funcionar
O ESM só permite Export nomeado, e o CJS só permite Export default
Operações Assíncronas no Event Loop (I/O) Quando uma função assíncrona, como readFile do Node.js ou fetch do navegador, é chamada, o que acontece com a tarefa de I/O enquanto o JavaScript continua executando o código síncrono na Call Stack?
A tarefa de I/O é executada imediatamente na Call Stack, bloqueando-a temporariamente.
A tarefa de I/O é delegada para um ambiente externo para ser executada em segundo plano.
A tarefa é movida para a fila de microtasks e aguarda a próxima iteração do Event Loop.
O JavaScript abandona a execução e espera passivamente pelo resultado da I/O.
A Palavra-Chave async A palavra‑chave async (introduzida no ES2017) é usada para simplificar a escrita de código assíncrono que utiliza Promises. Qual é a garantia fundamental que a declaração async confere a toda e qualquer função, mesmo que ela não contenha a palavra‑chave await em seu corpo?
A função async impede qualquer tipo de erro de tempo de execução.
A função async executa sempre de forma síncrona.
A função async sempre retorna uma Promise
A função async pode ser executada em um thread separado do thread principal do JavaScript.
