Questão de Arquitetura de Software — Software — VUNESP 2023
- 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
- A213
- B312
- C321
- D123
- E132
GabaritoE — 1 3 2
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.
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.
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.
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).
Apresenta a ordem 1, 2, 3. Coloca o setTimeout (2) antes do nextTick (3), o que contraria a prioridade das microtasks sobre os timers.
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).
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