Skip to content

Instantly share code, notes, and snippets.

@jeffque
Forked from Met4tron/questions.md
Last active July 8, 2024 19:00
Show Gist options
  • Save jeffque/7d8d4ed12ae196342f53c59df7d8d2d1 to your computer and use it in GitHub Desktop.
Save jeffque/7d8d4ed12ae196342f53c59df7d8d2d1 to your computer and use it in GitHub Desktop.
Java na visão de quem está reaprendendo

Persistence

  • JPA ou Hibernate?
  • Existe um mundo onde JDBC puro é mais utilizado?
    • Eu uso bastante JDBC puro. Normalmente se usa quando se precisa falar diretamente com o banco, não HQL ou coisa equivalente. Existem tretas com spring-jdbc que o jdbc puro trata bem. Não cheguei a usar algo mais específico do spring para stream de dados e coisas mais pesadas.
  • Existe algum Query Builder no mundo Java?
    • Muitos. Como exemplo, jOOQ.
  • Quais as formas de gerenciar migrations usando Java?
    • Flyway, inclusive usado de modo wrapped em outras stacks, como uma ferramenta do node
  • Existe alguma forma semelhante ao Prisma/Atlas, através de uma DSL de Schema (Database as Code)?
    • Não conheço prisma/atlas =/
      Mas existem anotações de entidades JPA para criar o schema, é isso? algo bem semelhante a como funciona Rails e Django
  • Quando usar @Transactional e quando não usar?
    • Quando você precisar ter segurança que o seu caso de uso é atômico. Mas usar sempre vai causar problemas no banco de dados, porque afinal ele vai travar o banco para toda e qualquer operação. Isso é mais detalhado do que uma simples resposta pode fornecer, mas normalmente tem dois casos em que usar @Transactional é importante:
      1. quando você vai fazer leituras seguidas de escritas, para evitar condição de corrida
      2. quando você precisa salvar uma pancada de coisas simultaneamente

Frameworks

  • Além do Springboot, há alguma outra alternativa que seja utilizada pelo mercado?
    • Javalite vai ter uma pegada mais parecida com rails, tem o quarkus também. O mundo J2EE (que agora se denomina Jakarta EE) também existe.
      Você também vai ter frameworks para gerar front baseaso em Java, como o GWT
  • Quais as diferenças fundamentais entre os Springboot e os demais frameworks?
    • Fundamentos distintos? Só o javalite na minha opinião é diferente o suficiente, o resto é bem dizer feito em cima das mesmas abstrações e conceitos
  • Quais projetos do universo Spring (Data, Batch e afins) voce utilizada no dia a dia? Caso não utilize, pq?
    • Eu mal utilizo spring boot. O meu mais costumaz específico mesmo (além da injeção e da questão dos end-points) é spring-jdbc

Mercado

  • Quais as versões mais utilizadas no Mercado?
    • Não faço ideia na real, mas se quiser estudar pula logo pra última versão. Ela vai facilitar muita coisa. Depois é só estudar como que faria o uso daquela funcionalidade nas versões anteriores
  • Quais os conhecimentos fundamentais necessários, para um mid/sr?
    • Fundamentos é bem dizer o mesmo do jr. Você vai acumular mais responsabilidades com o escalar dos cargos, então acaba que fica mais em como atender as questões de negócio e da equipe.
      Uma coisa muito importante para cargos mais sênior+ é saber quando fazer um compromise
  • Migração de outra lang para Java, é um bom caminho?

Conveções de Código

  • Package by layer ou Package by Feature?
    • Eu sou a favor de você preferir deixar as coisas o mais colocalizadas o possível, mas muita coisa de geração de código (como, por exemplo, injetar dependências) depende de navegar por pacotes java.
      Então você pode usar uma estrutura marcando a feature através do seu pacote e, dentro dela, separar por layers.
      Na prática? O que sua equipe já estiver usando e for feliz
  • Maven ou Gradle? Pq?
    • Maven é mais comum as empresas usarem, até onde vai minha percepção.
      Gradle fornece vantagens em relação a configurar o build e em tempo de build, mas o maven daemon que vem surgindo por aí promete resolver essa questão de tempo de build.
      De toda sorte, Gradle usa o esquema de coordenadas GAV do Maven, e se sustenta em cima da infra do próprio maven
  • Quando é necessário usar Lombok? IDE já gera todo o código com dois cliques, pq ainda usar Lombok?
    • IMHO? Não usar Lombok. Traumas o suficiente com bugs que são bem difíceis de ler e entender o porquê.
  • Pensando no Springboot, qual a forma ideal para injeção de dependencias?
    • Não entendi isso, mas a priori injeção de construtor.
  • Como nomear adequadamente um projeto, usando meu user do github? com.github.${username}?
    • Tanto faz o nome do pacote. Usar o com.github como parte do seu reverse-FQDN pode ajudar na distribuição de sua dependência se usar o Jitpack, por exemplo
  • Como lidar com multiplos environments (dev, prod, stg) dentro de uma aplicação Java? Existe algum .env?
    • Normalmente você vai ter o application.properties, que vai ter como efeito o que as outras langs sob o .env
      Você pode escrever como yaml também. De toda sorte, você pode e deve utilizar variáveis de ambiente, mesmo em outras stacks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment