Perguntas para Entrevista de Desenvolvedor Backend (Java): Guia Completo

Milad Bonakdar
Autor
Domine o desenvolvimento backend Java com perguntas essenciais para entrevistas, cobrindo Spring Boot, Microsserviços, JPA e design de sistemas. Preparação perfeita para entrevistas de desenvolvedor Java.
Introdução
Java continua sendo uma potência no mundo de backend empresarial, especialmente com o moderno ecossistema Spring Boot. Sua robustez, escalabilidade e vasto ecossistema o tornam uma das principais escolhas para a construção de microsserviços e aplicações nativas da nuvem.
Este guia aborda as principais perguntas de entrevistas para Desenvolvedores Backend especializados em Java e Spring Boot. Exploraremos os principais conceitos do framework, arquitetura de microsserviços, interações com bancos de dados usando JPA/Hibernate e as melhores práticas para ajudá-lo a se preparar para sua próxima entrevista.
Conceitos Essenciais do Spring Boot
1. O que é Spring Boot e como ele difere do tradicional Spring Framework?
Resposta:
- Spring Framework: Um framework abrangente para o desenvolvimento Java empresarial. Requer uma configuração manual significativa (baseada em XML ou Java) para ser configurado.
- Spring Boot: Uma extensão do Spring Framework que simplifica a configuração e o desenvolvimento de novas aplicações Spring.
- Auto-Configuração: Configura automaticamente os beans com base nas dependências do classpath.
- Servidores Embutidos: Inclui Tomcat, Jetty ou Undertow, para que você não precise implantar arquivos WAR.
- Starters: Dependências selecionadas para simplificar a configuração da build.
- Defaults Opinativos: Abordagem de "convenção sobre configuração".
Raridade: Comum Dificuldade: Fácil
2. Explique a anotação @SpringBootApplication.
Resposta: É uma anotação de conveniência que combina três outras anotações:
@Configuration: Marca a classe como uma fonte de definições de bean.@EnableAutoConfiguration: Diz ao Spring Boot para começar a adicionar beans com base nas configurações do classpath, outros beans e várias configurações de propriedades.@ComponentScan: Diz ao Spring para procurar outros componentes, configurações e serviços no pacote atual e nos subpacotes.
Raridade: Comum Dificuldade: Fácil
3. O que é Injeção de Dependência (DI) e Inversão de Controle (IoC)?
Resposta:
- IoC: Um princípio onde o controle da criação e gerenciamento de objetos é transferido do programador para um contêiner (Spring IoC Container).
- DI: Um padrão de design usado para implementar IoC. Em vez de um objeto criar suas dependências, elas são "injetadas" nele (via Construtor, Setter ou Campo).
- Benefício: Desacoplamento, testes mais fáceis (mocking de dependências) e melhor capacidade de manutenção.
Raridade: Muito Comum Dificuldade: Média
4. O que são Spring Boot Starters? Dê exemplos.
Resposta: Starters são um conjunto de descritores de dependência convenientes que você pode incluir em sua aplicação. Eles contêm todas as dependências que você precisa para colocar um projeto em funcionamento rapidamente com um conjunto consistente e suportado de dependências transitivas gerenciadas.
- Exemplos:
spring-boot-starter-web: Para construir aplicações web (inclui Tomcat e Spring MVC).spring-boot-starter-data-jpa: Para usar Spring Data JPA com Hibernate.spring-boot-starter-test: Para testes (inclui JUnit, Mockito).spring-boot-starter-security: Para Spring Security.
Raridade: Comum Dificuldade: Fácil
5. O que é Spring Actuator?
Resposta: Spring Boot Actuator fornece recursos prontos para produção para ajudá-lo a monitorar e gerenciar sua aplicação.
- Endpoints: Expõe endpoints como
/health(status do aplicativo),/metrics(uso de memória, CPU),/info(informações do aplicativo),/env(propriedades do ambiente). - Uso: Crítico para equipes de operações verificarem a saúde dos microsserviços em produção.
Raridade: Comum Dificuldade: Média
Microsserviços e Arquitetura
6. Quais são os benefícios dos Microsserviços em relação à Arquitetura Monolítica?
Resposta:
- Escalabilidade: Os serviços individuais podem ser escalados independentemente com base na demanda.
- Agnóstico de Tecnologia: Diferentes serviços podem usar diferentes tecnologias (Java, Go, Python) mais adequadas para a tarefa.
- Isolamento de Falhas: Uma falha em um serviço não necessariamente derruba todo o sistema.
- Implantação Independente: As equipes podem implantar serviços independentemente, permitindo ciclos de lançamento mais rápidos (CI/CD).
Raridade: Comum Dificuldade: Média
7. O que é um API Gateway? Por que usá-lo?
Resposta: Um API Gateway é um servidor que atua como um único ponto de entrada no sistema. Ele recebe todas as chamadas de API dos clientes e as encaminha para o microsserviço apropriado.
- Funções: Roteamento de solicitações, composição e tradução de protocolo.
- Preocupações transversais: Autenticação, terminação SSL, Limitação de Taxa, Caching, Logging.
- Exemplos: Spring Cloud Gateway, Netflix Zuul, Kong.
Raridade: Muito Comum Dificuldade: Média
8. Explique o Service Discovery (Eureka).
Resposta: Em um ambiente de microsserviços, as instâncias de serviço têm endereços IP dinâmicos. Service Discovery é um mecanismo para os serviços se encontrarem.
- Eureka Server: Atua como um registro de serviço.
- Eureka Client: Os microsserviços se registram no Eureka Server na inicialização e enviam heartbeats.
- Discovery: Quando o Serviço A precisa chamar o Serviço B, ele pede ao Eureka o endereço do Serviço B.
Raridade: Comum Dificuldade: Média
9. O que é o padrão Circuit Breaker?
Resposta: O padrão Circuit Breaker impede que uma aplicação tente repetidamente executar uma operação que provavelmente falhará (por exemplo, chamar um serviço inativo).
- Estados:
- Fechado (Closed): As solicitações fluem normalmente.
- Aberto (Open): As solicitações são bloqueadas imediatamente (fail fast) para permitir que o serviço com falha se recupere.
- Semi-Aberto (Half-Open): Um número limitado de solicitações é permitido para testar se o serviço se recuperou.
- Ferramentas: Resilience4j (recomendado), Hystrix (obsoleto).
Raridade: Muito Comum Dificuldade: Difícil
Banco de Dados e JPA
10. O que são JPA e Hibernate?
Resposta:
- JPA (Java Persistence API): Uma especificação para acessar, persistir e gerenciar dados entre objetos Java e um banco de dados relacional. É apenas uma interface.
- Hibernate: A implementação mais popular da especificação JPA. É uma ferramenta ORM (Object-Relational Mapping).
Raridade: Comum Dificuldade: Fácil
11. Explique o problema N+1 Select no Hibernate.
Resposta: O problema N+1 acontece quando o framework de acesso a dados executa N instruções SQL adicionais para buscar os mesmos dados que poderiam ter sido recuperados ao executar a consulta SQL primária.
- Cenário: Buscar uma lista de
Authors (1 consulta). Iterar e acessarauthor.getBooks()(N consultas, uma para cada autor). - Solução: Use Join Fetch em JPQL (
SELECT a FROM Author a JOIN FETCH a.books) ou Entity Graphs para carregar entidades relacionadas eager em uma única consulta.
Raridade: Muito Comum Dificuldade: Média
12. Qual é a diferença entre @Entity, @Table e @Column?
Resposta:
@Entity: Especifica que a classe é uma entidade e é mapeada para uma tabela de banco de dados.@Table: Opcional. Especifica o nome da tabela de banco de dados a ser usada para o mapeamento. Se omitido, o nome da classe é usado.@Column: Opcional. Especifica os detalhes da coluna à qual um campo ou propriedade será mapeado. Se omitido, o nome do campo é usado.
Raridade: Comum Dificuldade: Fácil
Segurança e Testes
13. Como você protege uma aplicação Spring Boot?
Resposta: Usando Spring Security.
- Autenticação: Verificar quem é o usuário (por exemplo, Basic Auth, Form Login, OAuth2/OIDC).
- Autorização: Verificar o que o usuário tem permissão para fazer (por exemplo, controle de acesso baseado em função usando
@PreAuthorize). - JWT: Para microsserviços stateless, JSON Web Tokens são comumente usados para passar a identidade entre os serviços.
Raridade: Comum Dificuldade: Média
14. Qual é a diferença entre @Mock e @InjectMocks no Mockito?
Resposta:
@Mock: Cria um objeto mock da classe/interface. Ele não tem nenhum comportamento real; você define seu comportamento usandowhen(...).thenReturn(...).@InjectMocks: Cria uma instância da classe e injeta os mocks que são criados com as anotações@Mock(ou@Spy) nesta instância. Usado para a classe em teste.
Raridade: Comum Dificuldade: Média
15. Como você lida com transações no Spring Boot?
Resposta:
Usando a anotação @Transactional.
- Mecanismo: Spring cria um proxy em torno da classe/método. Ele inicia uma transação antes da execução do método e a confirma após o método retornar. Se uma
RuntimeExceptionfor lançada, ele reverte a transação. - Propagation: Você pode configurar como a transação se relaciona com as transações existentes (por exemplo,
REQUIRED,REQUIRES_NEW).
Raridade: Comum Dificuldade: Média
Tópicos Avançados
16. O que é Spring Cloud Config?
Resposta: Spring Cloud Config fornece suporte do lado do servidor e do lado do cliente para configuração externalizada em um sistema distribuído.
- Config Server: Local central para gerenciar propriedades externas para aplicações em todos os ambientes. Ele pode ser apoiado por Git, SVN ou Vault.
- Benefício: Você pode alterar a configuração sem reimplantar a aplicação (usando
@RefreshScope).
Raridade: Incomum Dificuldade: Média
17. Explique a diferença entre os escopos Singleton e Prototype no Spring Beans.
Resposta:
- Singleton (Padrão): Apenas uma instância do bean é criada por contêiner Spring IoC. Ele é armazenado em cache e reutilizado.
- Prototype: Uma nova instância é criada cada vez que o bean é solicitado.
- Outros: Request, Session (escopos web-aware).
Raridade: Comum Dificuldade: Fácil
18. Qual é a diferença entre exceções Checked e Unchecked em Java?
Resposta:
- Checked Exceptions: Herdam de
Exception(mas não deRuntimeException). O compilador força você a tratá-las (try-catch) ou declará-las (throws). Exemplo:IOException,SQLException. Representam condições recuperáveis. - Unchecked Exceptions: Herdam de
RuntimeException. O compilador não força você a tratá-las. Exemplo:NullPointerException,IllegalArgumentException. Representam erros de programação. O@Transactionaldo Spring reverte apenas em exceções não verificadas por padrão.
Raridade: Comum Dificuldade: Fácil
19. Como funciona o Garbage Collection em Java?
Resposta: Garbage Collection (GC) é o processo de recuperação automática de memória ocupada por objetos que não são mais alcançáveis.
- Hipótese Geracional: A maioria dos objetos morre jovem.
- Estrutura da Heap: Geração Jovem (Eden, espaços Survivor) e Geração Antiga.
- Minor GC: Limpa a Geração Jovem. Rápido.
- Major/Full GC: Limpa a Geração Antiga. Mais lento, pode causar pausas "Stop-the-world".
- Algoritmos: G1GC (padrão no Java moderno), ZGC, Shenandoah (baixa latência).
Raridade: Comum Dificuldade: Difícil
20. O que são Java Streams?
Resposta: Introduzido no Java 8, Streams fornecem uma abordagem funcional para processar coleções de objetos.
- Recursos: Declarativo, Pipelining, Iteração Interna.
- Operações:
- Intermediárias:
filter,map,sorted(lazy). - Terminais:
collect,forEach,reduce(acionam o processamento).
- Intermediárias:
- Parallel Streams: Pode processar dados em paralelo usando várias threads (
.parallelStream()).
Raridade: Comum Dificuldade: Média


