Pular para o conteúdo principal

Questão de Arquitetura de Software — Software — VUNESP 2023

Arquitetura de SoftwareSoftware
Código
vu079929
Banca
VUNESP
Órgão
TRF - 3ª REGIÃO
Ano
2023
Nível
Superior
Cargo
Analista Judiciário / Área: Apoio Especializado - Especialidade: Informática
O seguinte código JavaScriptconsole.log("1");setTimeout(() => {console.log("2");}, 1);process.nextTick(() => {console.log("3");});quando executado no Node.js produz a saída:
  1. A213
  2. B312
  3. C321
  4. D123
  5. E132
Revelar gabarito e comentário

GabaritoE — 1 3 2

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

JavaScript assíncrono no Node.js: Event Loop

Gabarito: letra E. A ordem de saída é 1, 3, 2. O console.log("1") é síncrono e executa imediatamente. O process.nextTick() agenda uma microtask que é executada antes de qualquer timer, mesmo com delay mínimo. O setTimeout() com 1ms é agendado como uma macrotask (timer), executada após o fim da fase de microtasks do ciclo atual. Portanto, a saída é: 1 (síncrono) → 3 (nextTick) → 2 (setTimeout).

A banca testa o conhecimento da hierarquia do Event Loop no Node.js: as callbacks de process.nextTick() são processadas imediatamente após a operação síncrona atual, antes de qualquer timer ou I/O. Já o setTimeout() é enfileirado em uma fila de macrotasks e só é executado após a fila de microtasks (que inclui nextTick e Promise) esvaziar.

  1. 1Código síncrono (console.log)
  2. 2Microtasks (process.nextTick)
  3. 3Macrotasks (setTimeout)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Apresenta a ordem 2, 1, 3. Coloca o setTimeout (2) na primeira posição, o que não ocorre porque o timer só é executado depois do nextTick (3). Além disso, o síncrono 1 é o primeiro.

Alternativa B — ❌ Incorreta

Apresenta a ordem 3, 1, 2. Embora coloque o nextTick (3) antes do timer (2), erra ao colocar o síncrono 1 depois do 3. O console.log("1") é imediato e ocorre antes de qualquer callback assíncrona.

Alternativa C — ❌ Incorreta

Apresenta a ordem 3, 2, 1. Além de colocar o 1 por último, inverte a ordem entre nextTick e setTimeout (deveria ser 3 antes de 2, mas o 1 é o primeiro).

Alternativa D — ❌ Incorreta

Apresenta a ordem 1, 2, 3. Coloca o setTimeout (2) antes do nextTick (3), o que contraria a prioridade das microtasks sobre os timers.

Alternativa E — ✅ Correta ⟵ GABARITO

Apresenta a ordem 1, 3, 2, que corresponde exatamente ao funcionamento do Event Loop: execução síncrona (1), microtask de nextTick (3), e depois macrotask do setTimeout (2).

PEGA ESSA DICA!

Lembre-se da hierarquia: síncrono > microtasks (nextTick, Promise) > macrotasks (timers, I/O). O nextTick tem prioridade máxima após o código síncrono. Para provas, grave: "nextTick antes de setTimeout".

Gabarito: letra E

Link permanente: /questoes/vu079929