Change detection: Default x OnPush
Pergunta
Como a change detection do Angular funciona por padrão, e o que muda ao marcar um componente como `OnPush`?
Resposta esperada
Por padrão, o Angular usa Zone.js pra interceptar operações assíncronas (eventos, timers, XHR) e, depois de cada uma, roda a change detection na árvore inteira de componentes, comparando bindings pra atualizar o DOM. `ChangeDetectionStrategy.OnPush` diz ao Angular pra checar aquele componente (e descendentes) só quando: uma `@Input` muda por referência, um evento parte do próprio componente, um Observable ligado por `async` pipe emite, ou você chama `markForCheck()` manualmente. Isso corta trabalho em árvores grandes, ao custo de exigir dados imutáveis (trocar a referência, não mutar) e disciplina. A direção nova do Angular (signals) torna a reatividade granular e reduz a dependência de Zone.js.
Por que perguntam isso
Pergunta pleno de Angular. Sinal de domínio: citar as condições exatas de re-check do OnPush e a exigência de imutabilidade; mencionar signals é bônus.