frontend
Angular
Angular em entrevista testa o modelo do framework: como a change detection funciona (Zone.js vs OnPush vs signals), por que RxJS está em todo lugar e como evitar memory leak de subscription, o sistema de injeção de dependência hierárquico, e o trade-off de adotar um framework que já decide quase tudo por você.
Simulador de Angular
Tópicos por senioridade
Desafios práticos
Cenários reais pra resolver em voz alta, como numa entrevista de verdade — não é múltipla escolha.
- Cenário: dados duplicados com múltiplos `async` pipe
Você usa `obs$ | async` três vezes no template pra ler campos do mesmo objeto, e nota três requisições HTTP. Por quê, e como resolver?
Perguntas mais cobradas
ver todas →- Médio
Change detection: Default x OnPush
Default: Zone.js dispara CD na árvore toda após qualquer async. OnPush: só checa quando @Input muda por referência, evento próprio, async pipe ou markForCheck — exige imutabilidade.
- Médio
Memory leak de subscription no RxJS
Subscription de Observable longevo segura o componente destruído vivo. Evite com async pipe, takeUntilDestroyed/takeUntil(destroy$), ou unsubscribe no ngOnDestroy.
- Difícil
Injeção de dependência hierárquica no Angular
Injectors hierárquicos espelham a árvore de componentes; o Angular sobe até achar o provider. `providedIn: 'root'` = singleton na app toda e tree-shakeável.
- Médio
Signals no Angular: o que muda em relação a Zone.js
Signal = valor reativo (`s()` lê, `s.set()` escreve); `computed`/`effect` reagem. O framework sabe qual parte do template depende de qual signal → re-render granular, sem Zone.js (rumo ao zoneless).
- Fácil
Standalone components x NgModules
Componente que declara os próprios `imports` sem NgModule. Resolve o grafo de módulos opaco (importar módulo inteiro pra um componente): dependências explícitas e locais, melhor tree-shaking, lazy load de componente.
- Médio
Cenário: dados duplicados com múltiplos `async` pipe
Cada `| async` é uma subscription nova; num Observable frio (HttpClient) isso refaz a requisição. Use `*ngIf="obs$ | async as x"` (assina 1x), ou `shareReplay(1)` pra multicast.