Entrevistas – Desenvolvedor Java – Java SE #3

A linguagem Java provavelmente será a mais falada por um desenvolvedor Java, mas Java não é apenas uma linguagem de programação, é uma plataforma composta por especificações. Neste post irei descrever as minhas respostas e contar as minhas motivações em relação as perguntas do tema “Java SE” mencionado no post #0 da série.

As características que eu vejo mais em ação nos projetos em que participei são da base da linguagem, como estruturas de dados e exceptions. Essas ferramentas da linguagem estão contempladas na antiga OCA Java SE, que atualmente não existe mais como certificação e está inserida na primeira etapa para a OCP Java SE a partir do Java 11.

Dependendo do contexto do projeto/produto pode ser necessário ter alguém mais especializado em Java e ai avançar nas perguntas para entender conhecimento em generics, threads, depois entrar em Java EE e talvez em Jakarta EE.

Nos últimos casos em que tenho atuado, o uso do Spring Framework é mais comum do que Java EE e por isso não costumo fazer perguntas relacionadas às especificações.

Motivação

Verificar o nível de conhecimento relacionado a base da linguagem Java.

Perguntas

  • Para que servem os métodos equals hashCode? Qual é o contrato entre eles?

Resposta: O equals é utilizado para comparar o estado de objetos para definir equivalência, que por padrão compara se dois objetos são a mesma instância. A implementação deve ser reflexiva, simétrica, transitiva e consistente.
O hashCode é como um número identificador do objeto, beneficiado principalmente pelo uso de tabelas de espalhamento e por isso pode ter impacto direto em performance dependendo de sua implementação quando tem utilização de HashSets, HashMaps e outras estruturas de dados que utilizem hash tables.
O contrato está especificado no método hashCode e diz que: durante a mesma execução de um programa, o inteiro retornado deve ser sempre o mesmo; se dois objetos forem equivalentes, de acordo com o método equals, os seus respectivos códigos hash também devem ser iguais; e não é obrigatório dois objetos distintos pelo equals terem seus hashCode diferentes, mas poderá existir uma perda de performance ao se utilizar hash tables caso sejam iguais.

  • Quais características diferenciam um Set de uma List?

Resposta: Ambos são coleções, mas os conjuntos tem a característica de não aceitar objetos duplicados e não possuem obrigação de manter os elementos na mesma ordem em que são inseridos, enquanto as listas permitem duplicidade e devem ser ordenadas, oferecendo a possibilidade de acesso à elementos por índice.

  • Quando utilizar checked e unchecked Exceptions?

Resposta: As exceções verificadas em tempo de compilação, ou checked exceptions, se aplicam a cenários em que a própria aplicação não tem o controle da execução de algum fluxo e não pode corrigir o mesmo fluxo caso ocorra uma falha em tempo de execução. O melhor exemplo que tenho disso é leitura e escrita de arquivos, usando Java IO, ou seja, se houver um problema durante a execução fora da aplicação, não tem como a aplicação se recuperar e corrigir esse problema, mas ela pode dar outro tratamento para o fluxo de exceção. Esse tipo de cenário pode ocorrer em uma chamada de uma API externa também, por exemplo.
Em Java, as exceções não verificadas em tempo de compilação, conhecidas como unchecked ou runtime exceptions, se aplicam a todos os demais cenários que não sejam erros (ex: falta de memória para rodar a aplicação). Por exemplo, problemas em regras de negócio da aplicação e tratamentos de exceção para o usuário final.

  • Como garantir a ordem de execução entre diferentes threads?

Resposta: Essa ai é pegadinha rsrs, a menos que tenha uma intervenção na JVM para fazer isso acontecer, por padrão, não é possível determinar a ordem de execução entre diferentes threads até aonde eu conheço. O que é possível, por exemplo, é garantir que duas ou mais threads não irão passar pelo mesmo processo simultaneamente, usando blocos synchronized.

Essas são algumas perguntas de Java que podem nos pegar despreparados em uma entrevista, as vezes sabemos como funciona na prática e usamos no dia a dia, mas falta a teoria, ou então, esquecemos conceitos que não utilizamos diretamente no dia a dia e podem ser importantes em outros cenários. Já aconteceu comigo e tenho certeza que vai acontecer novamente se eu entrar em uma entrevista, por isso é sempre legal fazer uma reciclagem de tempos em tempos, aprender, desaprender e reaprender fazem parte do dia a dia.

Para saber mais

Gostou? Foi útil? Concorda ou discorda de algum ponto? Comenta ai e vamos aprender mais juntos.

Espero que te ajude 😉

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s