Perguntas de entrevista para desenvolvedor full stack sênior

Milad Bonakdar
Autor
Prepare-se para entrevistas full stack sênior com perguntas sobre React, Node.js, arquitetura, bancos de dados, segurança, DevOps e decisões em produção.
Introdução
Entrevistas para full stack sênior avaliam mais do que sintaxe. Você precisa explicar performance frontend, design de APIs, modelagem de dados, confiabilidade, segurança, escolhas de deploy e os trade-offs por trás de sistemas que realmente colocou em produção.
Use estas perguntas para praticar respostas objetivas e conectá-las a projetos reais: o que você escolheu, por que fazia sentido para as restrições, o que quebrou e o que melhoraria hoje.
Como usar este guia
- Comece por React, Node.js, autenticação e design de sistemas, porque esses temas aparecem bastante em entrevistas sênior.
- Transforme cada resposta em uma história curta da sua experiência: contexto, decisão, trade-off e resultado.
- Não memorize apenas listas de ferramentas. Em cargos sênior, contam julgamento técnico, método de debug e responsabilidade por produção.
Desenvolvimento Frontend (6 Perguntas)
1. Explique o Virtual DOM do React e o algoritmo de Reconciliation.
Resposta: O Virtual DOM é uma representação JavaScript leve do DOM real. O React o usa para otimizar as atualizações.
- Processo: Quando o estado muda, o React cria uma nova árvore Virtual DOM e a compara com a anterior (diffing).
- Reconciliation: O algoritmo do React identifica o conjunto mínimo de alterações necessárias e atualiza apenas essas partes do DOM real.
- Otimização Chave: Usar props
keyajuda o React a identificar quais itens foram alterados, adicionados ou removidos em listas, tornando a reconciliation mais eficiente. - Arquitetura Fiber: O React moderno usa Fiber, que permite dividir o trabalho de renderização em partes e priorizar as atualizações.
Raridade: Muito Comum Dificuldade: Média
2. O que são React Hooks e por que foram introduzidos?
Resposta: Hooks são funções que permitem usar o estado e outros recursos do React em componentes funcionais.
- Motivação: Antes dos Hooks, a lógica stateful exigia componentes de classe. Os Hooks permitem reutilizar a lógica stateful sem alterar a hierarquia dos componentes.
- Hooks Comuns:
useState: Gerencia o estado localuseEffect: Lida com efeitos colaterais (busca de dados, assinaturas)useContext: Acessa valores de contextouseMemo/useCallback: Otimização de desempenho
- Hooks Customizados: Você pode criar hooks customizados para extrair e reutilizar a lógica do componente.
Raridade: Muito Comum Dificuldade: Fácil
3. Como você otimiza o desempenho de uma aplicação React?
Resposta: Múltiplas estratégias podem melhorar o desempenho do React:
- Code Splitting: Use
React.lazy()eSuspensepara carregar componentes sob demanda. - Memoization: Use
React.memo()para componentes,useMemo()para cálculos caros,useCallback()para referências de função. - Virtual Lists: Para listas longas, use bibliotecas como
react-windowoureact-virtualized. - Evite Funções Inline: Em métodos de renderização, pois eles criam novas referências em cada renderização.
- Profiler: Use o React DevTools Profiler para identificar gargalos.
- Gerenciamento de Estado: Mantenha o estado o mais local possível, use o contexto com sabedoria.
Raridade: Comum Dificuldade: Média
4. Explique a diferença entre Server-Side Rendering (SSR) e Client-Side Rendering (CSR).
Resposta:
- CSR: O JavaScript é executado no navegador para renderizar a página. O HTML inicial é mínimo. Navegação subsequente rápida, mas carregamento inicial mais lento e SEO ruim.
- SSR: O servidor gera HTML completo para cada solicitação. Melhor SEO e pintura inicial mais rápida, mas navegação subsequente mais lenta e maior carga do servidor.
- Abordagens Híbridas:
- Static Site Generation (SSG): Pré-renderiza páginas no momento da construção (Next.js, Gatsby).
- Incremental Static Regeneration (ISR): Atualiza páginas estáticas após a implantação sem reconstrução completa.
Raridade: Comum Dificuldade: Média
5. Qual é a diferença entre localStorage, sessionStorage e Cookies?
Resposta:
- localStorage: Persiste os dados sem expiração. Limite de ~5-10MB. Não é enviado para o servidor automaticamente.
- sessionStorage: Semelhante ao localStorage, mas é limpo quando a aba/navegador é fechado.
- Cookies: Pequenos dados (~4KB) enviados com cada requisição HTTP. Pode definir expiração. Usado para tokens de autenticação.
- Segurança: Os cookies podem ser
HttpOnly(não acessíveis via JS) eSecure(somente HTTPS). Use para dados confidenciais.
Raridade: Comum Dificuldade: Fácil
6. Como funciona o CSS-in-JS e quais são suas desvantagens?
Resposta: As bibliotecas CSS-in-JS (styled-components, Emotion) permitem escrever CSS diretamente em JavaScript.
- Benefícios:
- Estilos com escopo (sem poluição do namespace global)
- Estilização dinâmica baseada em props
- Prefixo de fornecedor automático
- Eliminação de código morto
- Desvantagens:
- Sobrecarga de tempo de execução (estilos gerados em tempo de execução)
- Tamanho do pacote maior
- Curva de aprendizado
- Alternativas: CSS Modules, Tailwind CSS, CSS tradicional com metodologia BEM.
Raridade: Média Dificuldade: Média
Desenvolvimento Backend (6 Perguntas)
7. Explique o Event Loop no Node.js.
Resposta: O Node.js é single-threaded, mas lida com a concorrência por meio do event loop.
- Fases:
- Timers: Executa callbacks de
setTimeoutesetInterval - Pending callbacks: Callbacks de I/O adiados para a próxima iteração
- Poll: Recupera novos eventos de I/O, executa callbacks de I/O
- Check: Callbacks de
setImmediate - Close callbacks: Eventos de fechamento de socket
- Timers: Executa callbacks de
- Non-blocking I/O: Quando as operações de I/O são iniciadas, o Node.js as delega ao kernel do sistema e continua executando outro código.
Raridade: Muito Comum Dificuldade: Difícil
8. O que é Middleware no Express.js?
Resposta: As funções de middleware têm acesso à solicitação, resposta e à próxima função de middleware no ciclo de solicitação-resposta da aplicação.
- Tipos:
- Application-level:
app.use() - Router-level:
router.use() - Error-handling: Tem 4 parâmetros
(err, req, res, next) - Built-in:
express.json(),express.static() - Third-party:
cors,helmet,morgan
- Application-level:
- A ordem importa: O middleware é executado na ordem em que é definido.
Raridade: Muito Comum Dificuldade: Fácil
9. Como você lida com a autenticação em uma API REST?
Resposta: Existem várias abordagens:
- JWT (Stateless):
- O servidor gera um token assinado contendo informações do usuário
- O cliente armazena o token (localStorage/cookie) e envia com cada solicitação
- O servidor verifica a assinatura
- Prós: Escalável, sem armazenamento de sessão no lado do servidor
- Contras: Difícil de revogar, payload maior
- Session-based (Stateful):
- O servidor cria uma sessão, armazena no DB/Redis
- O cliente recebe o ID da sessão no cookie
- Prós: Fácil de revogar
- Contras: Requer armazenamento no lado do servidor
- OAuth 2.0: Para autenticação de terceiros
- Melhor Prática: Use refresh tokens para acesso de longa duração, access tokens de curta duração.
Raridade: Muito Comum Dificuldade: Média
10. Explique as Transações de Banco de Dados e as propriedades ACID.
Resposta: Uma transação é uma sequência de operações realizadas como uma única unidade lógica de trabalho.
- ACID:
- Atomicity: Todas as operações são bem-sucedidas ou todas falham (tudo ou nada)
- Consistency: O banco de dados passa de um estado válido para outro
- Isolation: Transações simultâneas não interferem umas nas outras
- Durability: As transações confirmadas persistem mesmo após uma falha do sistema
- Isolation Levels: Read Uncommitted, Read Committed, Repeatable Read, Serializable (trade-off entre consistência e desempenho).
Raridade: Comum Dificuldade: Média
11. Qual é a diferença entre bancos de dados SQL e NoSQL?
Resposta:
- SQL (Relacional):
- Esquema estruturado, tabelas com linhas/colunas
- Compatível com ACID
- Escalonamento vertical (servidor maior)
- Exemplos: PostgreSQL, MySQL
- Caso de uso: Consultas complexas, transações, dados estruturados
- NoSQL:
- Esquema flexível, documento/chave-valor/gráfico/família de colunas
- BASE (Eventually consistent)
- Escalonamento horizontal (mais servidores)
- Exemplos: MongoDB, Redis, Cassandra
- Caso de uso: Desenvolvimento rápido, escala massiva, dados não estruturados
Raridade: Comum Dificuldade: Fácil
12. Como você evita ataques de SQL Injection?
Resposta: Ocorre SQL Injection quando a entrada do usuário é concatenada diretamente em consultas SQL.
- Prevenção:
- Parameterized Queries/Prepared Statements: Use espaços reservados para entrada do usuário
- ORMs: Bibliotecas como Sequelize, TypeORM manipulam o escaping automaticamente
- Input Validation: Lista de permissões de caracteres permitidos
- Least Privilege: O usuário do banco de dados deve ter permissões mínimas
- Stored Procedures: Pode fornecer uma camada adicional
Raridade: Muito Comum Dificuldade: Fácil
Design de Sistemas e Arquitetura (6 Perguntas)
13. Como você projetaria um sistema de notificação escalável?
Resposta: Um sistema de notificação precisa lidar com vários canais (e-mail, SMS, push) em escala.
- Componentes:
- API Service: Recebe solicitações de notificação
- Message Queue: RabbitMQ/Kafka para processamento assíncrono
- Workers: Serviços separados para cada canal
- Database: Armazena histórico de notificações, preferências do usuário
- Rate Limiting: Evitar spam
- Considerações:
- Lógica de repetição para falhas
- Filas de prioridade para notificações urgentes
- Gerenciamento de templates
- Preferências do usuário (opt-out)
Raridade: Comum Dificuldade: Difícil
14. Explique a arquitetura de Microsserviços e seus desafios.
Resposta: Microsserviços decompõem uma aplicação em serviços pequenos e independentes.
- Benefícios:
- Implantação e escalonamento independentes
- Diversidade de tecnologia
- Isolamento de falhas
- Autonomia da equipe
- Desafios:
- Distributed Transactions: Difícil de manter a consistência entre os serviços
- Network Latency: Sobrecarga de comunicação entre serviços
- Monitoring: Necessidade de distributed tracing (Jaeger, Zipkin)
- Data Management: Cada serviço possui seu banco de dados
- Testing: O teste de integração é complexo
- Patterns: API Gateway, Service Mesh, Circuit Breaker, Saga pattern para transações.
Raridade: Muito Comum Dificuldade: Difícil
15. O que é Caching e quais são as estratégias de caching comuns?
Resposta: O caching armazena dados acessados com frequência no armazenamento rápido para reduzir a latência.
- Layers:
- Browser cache
- CDN (CloudFlare, Akamai)
- Application cache (Redis, Memcached)
- Database query cache
- Strategies:
- Cache-Aside: O aplicativo verifica o cache primeiro, carrega do DB em caso de falta
- Write-Through: Grava no cache e no DB simultaneamente
- Write-Behind: Grava no cache, gravação assíncrona no DB
- Read-Through: Cache carrega dados do DB automaticamente
- Eviction Policies: LRU (Least Recently Used), LFU (Least Frequently Used), TTL (Time To Live).
Raridade: Muito Comum Dificuldade: Média
16. Como você garante o versionamento da API?
Resposta: O versionamento da API permite compatibilidade com versões anteriores ao fazer alterações.
- Strategies:
- URI Versioning:
/api/v1/users,/api/v2/users - Header Versioning:
Accept: application/vnd.api.v1+json - Query Parameter:
/api/users?version=1
- URI Versioning:
- Best Practices:
- Deprecation warnings
- Manter pelo menos 2 versões
- Guias de migração claros
- Semantic versioning
- GraphQL Alternative: Schema evolution without versioning (deprecated fields).
Raridade: Comum Dificuldade: Média
17. Explique o Teorema CAP.
Resposta: Em sistemas distribuídos, você só pode garantir 2 de 3:
- Consistency: Todos os nós veem os mesmos dados ao mesmo tempo
- Availability: Cada solicitação recebe uma resposta (sucesso/falha)
- Partition Tolerance: O sistema continua operando apesar das falhas de rede
- Reality: As partições de rede acontecerão, então você deve escolher entre CP (Consistência) ou AP (Disponibilidade).
- Examples:
- CP: MongoDB, HBase (sacrificar a disponibilidade durante a partição)
- AP: Cassandra, DynamoDB (consistência eventual)
Raridade: Comum Dificuldade: Difícil
18. O que é Load Balancing e quais algoritmos são usados?
Resposta: O balanceamento de carga distribui o tráfego entre vários servidores.
- Algorithms:
- Round Robin: Distribuição sequencial
- Least Connections: Enviar para o servidor com menos conexões ativas
- IP Hash: Hash do IP do cliente para determinar o servidor (persistência da sessão)
- Weighted Round Robin: Servidores com maior capacidade recebem mais solicitações
- Types:
- Layer 4 (Transport): Com base em IP/Porta, mais rápido
- Layer 7 (Application): Com base no conteúdo (URL, cabeçalhos), mais inteligente
- Tools: Nginx, HAProxy, AWS ELB, Google Cloud Load Balancer.
Raridade: Comum Dificuldade: Média
DevOps e Nuvem (4 Perguntas)
19. Explique o Docker e os benefícios da conteinerização.
Resposta: O Docker empacota aplicações com suas dependências em contêineres.
- Benefícios:
- Consistency: Mesmo ambiente em dev/staging/prod
- Isolation: Cada contêiner é isolado
- Lightweight: Compartilhar o kernel do SO host (vs VMs)
- Fast startup: Segundos vs minutos para VMs
- Portability: Execute em qualquer lugar onde o Docker esteja instalado
- Componentes:
- Image: Template somente leitura
- Container: Instância em execução de uma imagem
- Dockerfile: Instruções para construir uma imagem
- Registry: Docker Hub, private registries
Raridade: Muito Comum Dificuldade: Fácil
20. O que é CI/CD e por que é importante?
Resposta:
- Continuous Integration: Os desenvolvedores mesclam o código com frequência, os testes automatizados são executados em cada commit
- Continuous Deployment: Implanta automaticamente na produção após passar nos testes
- Benefícios:
- Feedback mais rápido
- Problemas de integração reduzidos
- Código de maior qualidade
- Tempo de lançamento no mercado mais rápido
- Tools: Jenkins, GitLab CI, GitHub Actions, CircleCI
- Pipeline Stages: Build → Test → Deploy
- Best Practices: Automated testing, feature flags, rollback mechanisms.
Raridade: Muito Comum Dificuldade: Fácil
21. Como você monitora e depura aplicações de produção?
Resposta: O monitoramento abrangente é fundamental para os sistemas de produção.
- Logging:
- Structured logging (formato JSON)
- Centralized logging (ELK Stack, Splunk)
- Log levels (ERROR, WARN, INFO, DEBUG)
- Metrics:
- Application metrics (response time, throughput)
- Infrastructure metrics (CPU, memory, disk)
- Tools: Prometheus, Grafana, DataDog
- Tracing:
- Distributed tracing para microsserviços
- Tools: Jaeger, Zipkin, AWS X-Ray
- Alerting: PagerDuty, Opsgenie para problemas críticos
- Error Tracking: Sentry, Rollbar para monitoramento de exceção.
Raridade: Comum Dificuldade: Média
22. O que é Infrastructure as Code (IaC)?
Resposta: O IaC gerencia a infraestrutura por meio de código, em vez de processos manuais.
- Benefícios:
- Version control para infraestrutura
- Ambientes reproduzíveis
- Provisionamento mais rápido
- Erro humano reduzido
- Tools:
- Terraform: Cloud-agnostic, declarative
- CloudFormation: AWS-specific
- Ansible: Configuration management
- Pulumi: Use programming languages
- Best Practices:
- Store in version control
- Modular, reusable components
- Separate environments (dev/staging/prod)
- Automated testing of infrastructure.
Raridade: Média Dificuldade: Média
Testes e Melhores Práticas (3 Perguntas)
23. Explique a Pirâmide de Testes.
Resposta: A pirâmide de testes representa a distribuição ideal de diferentes tipos de testes.
- Unit Tests: Teste funções/componentes individuais isoladamente. Rápido, muitos deles.
- Integration Tests: Teste como os componentes funcionam juntos. Velocidade média, número moderado.
- E2E Tests: Teste fluxos de usuário inteiros. Lento, caro, poucos deles.
- Rationale: Mais testes de unidade porque são rápidos e detectam bugs precocemente. Menos testes E2E porque são lentos e frágeis.
Raridade: Comum Dificuldade: Fácil
24. O que são os princípios SOLID?
Resposta: SOLID é um acrônimo para cinco princípios de design:
- S - Single Responsibility: Uma classe deve ter um motivo para mudar
- O - Open/Closed: Aberto para extensão, fechado para modificação
- L - Liskov Substitution: Os subtipos devem ser substituíveis por seus tipos base
- I - Interface Segregation: Muitas interfaces específicas são melhores do que uma geral
- D - Dependency Inversion: Dependa de abstrações, não de concretizações
- Benefícios: Código mais fácil de manter, testar e flexível.
Raridade: Comum Dificuldade: Média
25. Como você lida com erros em JavaScript assíncrono?
Resposta: Existem vários padrões para tratamento de erros assíncronos:
- Promises:
- Async/Await:
- Global Error Handlers:
window.addEventListener('unhandledrejection', ...)para rejeições de promessas não tratadas- Express error middleware para backend
- Best Practice: Sempre trate os erros, use o tratamento de erros centralizado, registre os erros corretamente.
Raridade: Muito Comum Dificuldade: Fácil


