Pergunta de entrevista para Desenvolvedor Java

Maven ou Gradle para um serviço novo, e como você mantém os builds reprodutíveis?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Os dois são defensáveis: o Maven dá um build declarativo e altamente convencional que qualquer um lê fácil, enquanto o Gradle oferece builds incrementais e um build cache que compensam em projetos multi módulo grandes. Para reprodutibilidade, fixe versões exatas de dependência, use um bill of materials para bibliotecas relacionadas, evite ranges de versão e snapshots em releases, e rode o build num container com toolchain fixa para que a versão do JDK não seja a que a máquina tiver.

Por que os entrevistadores perguntam isso

O entrevistador está menos interessado na sua preferência do que em saber se você tem opinião sobre higiene de build: gestão de dependências, reprodutibilidade e tempos de build. Citar fixação de versão, um bill of materials e escaneamento de dependências mostra que você trata o build como infraestrutura de produção. Builds longos e resolução instável de dependências são custos reais de time, e essa pergunta descobre se você os percebe.

Como estruturar sua resposta

  • Dê uma comparação curta e uma escolha padrão com um motivo.
  • Cubra gestão de versões de dependência e um bill of materials.
  • Explique como você torna os builds reprodutíveis entre máquinas.
  • Cite velocidade de build e checagens de cadeia de suprimentos.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Para um serviço único eu normalmente pego Maven, porque o build acaba sendo algo que qualquer um lê sem aprender uma linguagem específica do projeto, e o parent do Spring Boot resolve a maior parte. Para um repositório multi módulo grande onde o tempo de build é um imposto diário eu prefiro Gradle, já que builds incrementais e o build cache mudam de verdade o ciclo de feedback. Sobre reprodutibilidade, as regras são as mesmas nos dois casos: versões exatas, sem ranges, sem dependências snapshot em nada que seja lançado, e um bill of materials para grupos de bibliotecas, para que eu atualize uma família junta em vez de misturar versões e receber um erro estranho em runtime. Eu fixo o JDK com uma toolchain para o build não depender do que está instalado no notebook de alguém, e o CI builda num container. Eu também quero a árvore de dependências checada no CI, tanto por vulnerabilidades quanto por upgrades transitivos acidentais, já que o incidente clássico é um bump de versão menor chegando por uma dependência transitiva e mudando um comportamento que ninguém escolheu.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Como você resolve um conflito entre duas versões transitivas de uma biblioteca?
  • Como você reduziria um build de dez minutos?
  • Qual é a sua política para atualizar dependências com vulnerabilidades conhecidas?

Mais perguntas para Desenvolvedor Java

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot