frontend
Next.js
Next.js em entrevista testa se você entende as estratégias de renderização (SSR, SSG, ISR) e escolhe a certa por rota, além da linha entre Server e Client Components no App Router: o que roda onde, o que pode virar bundle do cliente, e como o cache de fetch se comporta.
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 desatualizados por causa do cache de fetch
Numa app Next.js (App Router), uma página mostra dados antigos mesmo depois que o backend mudou. O que provavelmente está acontecendo com o cache e como você controla isso?
- Cenário: erro de hydration mismatch
O console mostra 'Hydration failed: server HTML didn't match the client'. O que causa isso no Next e como resolver?
Perguntas mais cobradas
ver todas →- Médio
SSR, SSG e ISR: quando usar cada uma
SSG = HTML no build (conteúdo estável). SSR = render por request (conteúdo por-usuário/volátil). ISR = estático + revalidação periódica.
- Médio
Server Components x Client Components no App Router
Server Component: só servidor, sem estado/efeito/eventos, zero JS no cliente. Client Component (`"use client"`): hidratado, pode interatividade. Empurre `"use client"` pras folhas.
- Difícil
Cenário: dados desatualizados por causa do cache de fetch
fetch do App Router cacheia por padrão. Use `cache: 'no-store'`, `next: { revalidate }` ou `revalidateTag/Path` após mutação.
- Médio
Metadata API e SEO no App Router
Exporte `metadata` ou `generateMetadata(params)` de page/layout; o Next mescla pela hierarquia e injeta no `<head>` do HTML do servidor. `opengraph-image.tsx` gera OG image por rota. Melhor que ajustar title num useEffect.
- Médio
Route Handlers x Server Actions
Route Handler: endpoint HTTP real (webhooks, API externa, streaming, controle de status/headers). Server Action: RPC tipado do app pro servidor pra mutações da própria UI, com revalidate e progressive enhancement.
- Difícil
Cenário: erro de hydration mismatch
O primeiro render do cliente difere do HTML do servidor. Causas: Date.now/random/locale, `window`/`localStorage` no render, HTML inválido, extensões. Resolva renderizando o valor variável pós-mount, `suppressHydrationWarning`, ou `dynamic({ ssr: false })`.