Perguntas de Entrevistas para Desenvolvedor Java Júnior.
Tags: java, spring, webdev, beginners
Published: 2022-03-03 16:46:31


## **Perguntas de Entrevistas para Desenvolvedor Java Júnior.**

*Bom pensando em ajudar alguns colegas fiz esse compilado onde trago um pouco da minha experiência adquirida ao longo de algumas entrevistas para vagas do tipo desenvolvedor júnior **JAVA** que participei, bora la…*

Essas entrevistas aconteceram por volta de julho/2021, a dezembro desse mesmo ano, pude perceber um certo padrão nas perguntas feitas pelas equipes técnicas, não vou falar aqui muito da parte de recursos humanos RH, mas ainda assim vou deixar algumas dicas, **por ex:** sobre quando te perguntam, fale sobre você, fale sobre como você entrou nesse mundo da tecnologia, essas coisas, mas o foco aqui será às perguntas técnicas mesmo, aquela que os Tech leads, Gerentes de projetos e etc fazem.

***Bom, mas se liga, essas foram minhas experiências, pode ser que as suas sejam um pouco diferentes, mas tenho certeza que esse artigo irá te dar bons conhecimentos, let’s go.***😁

![Entrevista](https://cdn-images-1.medium.com/max/2000/1*9w4XrFLqHiNf07a3tvQVCA.jpeg)

**Fale sobre sua história na tecnologia(T.I)**😕

Bom essa pergunta é clássica de Recursos Humanos(RH), aconteceu em quase todos os processos seletivos que participei, até mesmo nos internacionais, primeira coisa que precisamos entender, todos nós temos uma história e temos que ser verdadeiros ao contar sobre nossa própria história, seja ela triste ou mesmo que você pense que não tenha graça, é importante saber que do outro lado existe uma pessoa que muitas vezes já ouviu várias histórias não adianta tentar imitar a história de outro alguém ou mesmo querer adotar a técnica de se fazer de sofrido(a), muitas vezes os profissionais de RH já sabem decifrar esses padrões e não vão dar pontos positivos para quem adota esse caminho, pelo contrário, como diz o ditado, “o tiro pode sair pela culatra”(risos), além disso, precisamos ser fiéis a nossas marcas, nossas histórias, não importa qual seja! Já existem muitas cópias nesse mundo de T.I, **sejamos autênticos.**

**Precisamos saber contar a nossa história.**

Outro dia vi uma entrevista do **Luciano Santos** autor do livro (**Seja Egoísta com Sua Carreira** na tv. Ele dizia mais ou menos assim, “todos temos uma história precisamos apenas saber contar a nossa história, e isso pode ser treinado”, achei essa declaração fascinante, pois me lembrei que eu a cada processo seletivo sabia contar melhor minha história, contava melhor cada momento, acontecimento importante, foi ficando cada vez mais coerente, fato é que às vezes não sabemos contar os fatos temporalmente de forma correta e isso causa confusão para quem ouve, mas treinando conseguimos ter uma visão do que estamos falando com base na época que aquilo aconteceu, qual eram os seus sentimentos naquele momento, etc. Treine a forma de contar sua história!

***Aproveite e pense, quais acontecimentos você quer escrever nos próximos capítulos da sua história?***

![](https://cdn-images-1.medium.com/max/2000/1*Ee7AltNTIHCUfLZ82Zf1vg.jpeg)

**Bom, mas vamos às perguntas técnicas.**

A primeira é bem simples, vem da cartilha primária do Java: **Qual a diferença entre a comparação com == e o equals?** Legal que muitas vezes sabemos usar, usamos até inconsciente muito bem, mas explicar para alguém que sabemos que está nos avaliando é difícil em?

Parece que o entrevistador está com um revólver apontado para você e dizendo: ou responde certo, ou já era… **rsrsr** 😂

**Mas essa é simples**

**Um exemplo com Strings**

Resumindo **equals** valida o “valor” o que há na variável independente se for instâncias iguais ou diferentes de String, já o **==**compara o valor de duas referências a objetos para verificar se elas se referem à mesma instância String

**Bom ponto para nós… Mas pegando esse exemplo com as Strings acima, sabe explicar o porquê disso tudo?**😕

**Em uma das entrevistas um entrevistador me questionou sobre isso,** bom como já sabemos, String em Java é uma classe, diferente de outras linguagens que String é do tipo primitivo, com isso entendemos que os objetos (String) criados seguem o mesmo padrão de armazenamento na memória, mesmo sendo variáveis Strings de outras classes. O tal do [heap](https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html)… **as variáveis do tipo String referenciam essas áreas da memória no **heap** onde ficam os objetos, e nesse exemplo as referências do local de armazenamento serão iguais, [*vale aprofundar nesse ](https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html)* assunto, mas por hora basta sabermos disso, se ligou? Não? Então morde o dedo. risos

***Uma pergunta simples, mas que já gera um papo bom em?***😏

**Fale sobre as camadas do padrão MVC, o que cada letra quer dizer.**

Bom simples falar sobre essas siglas, Model (modelo) View (visão) e Controller (Controle) que facilita a troca de informações entre a interface do usuário aos dados no banco e tal tal tal, já sabemos de tudo isso, mas aí começam a profundar as perguntas para testar seu nível de profundidade em cada assunto.

**Por ex:*** onde se inicia todo esse processo no padrão MVC?* **Claro sabemos que:** começa com o usuário na camada View, enviando uma requisição, aí o controlador(Controller) recebe essa informação e envia para o Model que fica responsável tratar esses dados, validar as regras de negócio e transmitir uma resposta, o controlador novamente envia a camada de visão que mostra ao usuário a resposta(response), mas vem cá, **será que podemos adicionar mais uma camada nesse padrão MVC?** Essa também foi uma pergunta que vi sendo feita a mim em várias das entrevistas, sabemos que adicionar mais camadas pode trazer mais complexidade a aplicação, mas sim podemos, afinal hoje temos muito a utilização de no mínimo mais uma camada **por ex:** a camada **service**, que ajuda justamente na organização separando regras de negócio.

Essas foram perguntas que recebi dos entrevistadores referente a esse assunto. Só mais uma coisa, **como podemos utilizar o padrão MVC com Spring?** Bom responde ai o entrevistador tá esperando. risos

**Quais os módulos do Spring você conhece?**

Outra perguntinha bastante feita, no geral eu sempre procurei conhecer bastante sobre os módulos do Spring, afinal essa é uma de suas principais características, ser modular, então os módulos que eu entendo serem principais para quem tá numa entrevista júnior são, o Spring WEB, Spring Data JPA ***nossa uma mão na roda, ***Spring Boot,*** ***Spring Security e Spring Batch, esse último não muito, mas os outros considero essenciais.

**Para não estender muito vou deixar apenas o tópico de outras perguntas muito comuns..**

* Fale sobre o Spring Boot, o que ele traz de benefícios para um projeto?

* Quais as vantagens de usar o Spring Data?

* O que você entende sobre **REST?**

* Pensando em uma API Rest com Spring em qual camada você colocaria regras de negócio? (**Model**, **CController, Repository**, **Service**).

* Descrever sobre polimorfismo e herança.

* O que o Inner Join faz em se tratando de SQL.

* Fale sobre o que entende de CI/CD?

* Essa é meio que obrigação, **o que você sabe sobre uso do GIT? (commit,** **clonar, merge**) enfim isso não tem para onde correr é obrigatório saber em qualquer nível de técnico.

**Perguntas de algumas entrevistas Internacionais**

Para ser sincero foram apenas 2, pois o meu nível de inglês é bem básico então somente 2 empresas me aceitaram no processo seletivo, uma para Portugal e outra para atuar remoto mesmo aqui no Brasil com possibilidade de intercâmbio em uma de suas sedes na Europa.

Nessas entrevistas internacionais fui questionado sobre coisas mais profundas no que tange estrutura de dados e etc, lembro que a empresa Portuguesa me disse que não sabia muito bem sobre essa diferença de nível que temos aqui no Brasil, Júnior, Pleno e Sênior, isso já me deixou meio em **alerta, ***pensei eles vão perguntar coisas profundas,* muitos risos(de nervoso), isso me deixou animado, mesmo sabendo que eu poderia sair da entrevista com a sensação de ter tomado um soco no estômago rsrsr.

Esses processos internacionais tiveram também algumas dessas perguntas que coloquei acima, porém com um ++.

Por ex: **Falar sobre as coleções em Java.**

Citar diferenças entre usar o **ArrayList, LinkedList, HashSet?**

Nesse ponto sugiro uma boa estudada, pois varia as características de tipo de implementação entre as listas, você verá que tudo depende da necessidade de implementação dessa lista, confesso que fiquei meio desconfortável, pois conforme respondia, outras perguntas surgiam pedindo para separar coleções de listas, mapas e etc, talvez não tenha me saído muito bem nessas perguntas, apesar de que desses 2 processos eu acabei passando em 1, e outro até hoje to esperando retorno rsrsrs.🤣

**Me recordo de uma pergunta que foi bem interessante na época, eu guardei para estudar,** foi a seguinte:

Tenho um **ArrayList** que sei que vai crescer até chegar a 1000 o tamanho, esses valores serão inseridos na base de dados, logo na hora da instanciação da lista existe uma forma de fazer com que isso fique fácil de ser trabalhado pela [JVM(máquina virtual Java)](https://docs.oracle.com/javase/9/vm/java-virtual-machine-technology-overview.htm#JSJVM-GUID-982B244A-9B01-479A-8651-CB6475019281)? Já que sabemos o tamanho máximo que pode chegar essa lista.

Bom eu não sabia ter a possibilidade de já definir na criação de um List o tamanho que a mesma pode chegar, foi interessante que após isso eu fui estudar sobre o assunto, e a [documentação](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html) me ensinou sobre isso muitas coisas mas, aqui tá um ponto legal das entrevistas, interessante também por isso, são vários novos assuntos que o mercado está pedindo que mesmo que você não passe, gera conhecimento para a próxima, sem falar no aprendizado obtido.

**Bom, mas o que aprendi sobre isso foi que…**

Uma lista pode ter alguns tipos de implementação, como falei acima, o que diz qual implementação usar e a sua vontade rsrsr(brincadeira), na verdade, e a necessidade mesmo, tem casos onde não podemos ter elementos duplicados, outros caso queremos mais performance na pesquisa, outros casos e mais importante performance nas inserções, como ficará na memória os dados, enfim cada caso é um caso, etc.

O **ArrayList**, ele cria um array padrão daquele objeto em questão(não consegui ver na documentação se já é gerado um tamanho padrão), mas já li em algum canto que é inicialmente criado com tamanho 10.

Mas sim, em um **ArrayList** é possível especificar o tamanho inicial da lista usando o construtor que recebe um inteiro que indica essa capacidade, a documentação se referência como **minCapacity**, isso traz um benefício ao fluxo dessa lista, pois vai reduzir a quantidade de **realocação incremental, **ou seja, não será necessário ficar incrementando novo tamanho a lista a cada inserção.

Ficaria assim:

**List<ENTIDADE_TAL> lista = new ArrayList<ENTIDADE_TAL>(40);**

**Tendeu?** É importante sim umas entrevistas, e uma forma de se medir em relação ao mercado e também aprender mais, mas claro isso deve ser feito com consciência, não acho justo sairmos fazendo entrevistas em um monte de lugares sem a intenção de talvez caso ache válido aceitar a vaga, no meu caso estava sim, pensando em uma mudança profissional e passei a pesquisar algumas vagas aceitar alguns convites, passei em muitos desses processos, mas por N motivos acabei não mudando de empresa, mas o aprendizado ficou… Outra coisa caso você não passe, calma sem desespero nem sempre o entrevistador consegue avaliar o real potencial de um candidato, então reavalie-se pratique o autoconhecimento com isso as chances de passar na próxima já aumentam em no mínimo 40%, tenha fé em Deus, “tenha fé porque fé até no lixão nasce flor”. (Racionais MC´s).

Te desejo sucesso!🖖