DEV Community

Cover image for Guia para Trainee e Dev Jr usando Java
Albert Ribeiro
Albert Ribeiro

Posted on

Guia para Trainee e Dev Jr usando Java

Conceitos

Como pessoa iniciante, uma parte importante na entrevista técnica é saber conceitos e conseguir explicá-los. A pessoa entrevistadora pode também solicitar exemplos práticos.
Abaixo estão conceitos que vejo serem solicitados para iniciantes e o que seria legal saber. Tudo o que está sublinhado é um link para alguma referência.

Candidato sendo entrevistado (source: pexels.com)

API

É comum mencionarem REST API, mas é bom saber o conceito de API e qual a motivação para criar uma e sua utilidade.
Leitura sobre APIs.

POO - Programação Orientada a Objetos

Saber os 4 pilares e conseguir explicar. Como são conceitos básicos - no sentido de serem a base - é importante saber.
Leitura sobre POO.

MVC - Padrão arquitetural Model-View-Controller

Saber explicar o porquê de usar arquitetura MVC - prós e contras, onde é utilizada, como se divide, como funciona.
Leitura sobre MVC.

Microsserviço e Monolito - Tipos de arquitetura

Não existe melhor nem pior, existe a solução mais adequada para o problema. O texto do link explica muito bem as diferenças.
Leitura sobre microsserviços versus arquitetura monolítica.

Cloud Computing - Computação na Nuvem

Saber falar por que usar cloud, quais benefícios, riscos e trade-offs. Se tiver utilizado alguma, citar a necessidade e como ela foi atendida. Se conhecer os recursos apenas teoricamente, citar os mais utilizados e o que fazem. Os mais conhecidos são da Amazon - S3, SQS, SNS, EC2, API Gateway.
Leitura sobre Cloud Computing.

CI/CD - Continuous Integration/Continuous Delivery

Saber benefícios de integração contínua e entrega contínua. É importante entender como era feito o processo antes do CI/CD ser criado, porque nessa hora tudo fará sentido.
Existem ferramentas que fazem todo o processo, sendo o Jenkins a mais conhecida e utilizada - talvez por ser gratuita e de código aberto.
Leitura sobre CI/CD.

VCS - Version Control System - Git, CVS, SVN

Aqui o importante mesmo é entender o Git e como ele funciona. CVS e SVN são antigos e é raro encontrar lugares que ainda o utilizem. Pessoas entrevistadoras não costumam se aprofundar nesse tema, costumam apenas perguntar se você sabe se seguir em frente.
Git e Github não são a mesma coisa. É importante conhecer e saber quando utilizar as operações rotineiras - criar branches, abrir MR, trocar de branch, enviar código, resolver conflitos. PR (pull request) e MR (merge request) são a mesma coisa - Gitlab chama de MR e Github chama de PR.
Leitura sobre Git e outros VCSs.

Análise estática de código - Qualidade

É legal conhecer alguma ferramenta que faça esta análise. A mais utilizada por onde passei foi o Sonarqube. Consiga explicar o que ele faz, por que é bom e citar que ele pode ser incluído no processo de CI/CD como uma barreira que impede que códigos com bugs ou baixa qualidade cheguem aos ambientes.
Leitura sobre análise estática com Sonarqube.

Testes - Unitários e de Integração

Projeto sem testes é um erro, então saiba criar testes unitários e tenha algum conhecimento de testes integrados. O unitário faz parte da base, o integrado dá pra conseguir entender sob demanda e em pouco tempo. Com Java utilizamos muito jUnit e Mockito, mas também existem Wiremock, Faker, Fixture Factory etc. Saiba diferenciar a utilidade de cada um.
Faker, Instancio e Fixture Factory servem para criar objetos falsos, então não precisa estudar todos, só saber quando e por que utilizar.
Leitura sobre testes.

Padrões de Projeto, do inglês Design Patterns

Saber que existem pra resolver problemas da área de desenvolvimento de software comum a vários projetos. O Refactoring Guru ajuda bastante com texto. Se quiser um curso, recomendo este aqui do ITA.
Na entrevista, saber o que são e para que servem. É comum pedirem para citar e explicar 3, e os mais simples que prefiro são Singleton, Façade e Builder. O Strategy é uma excelente resposta, então se você souber, só vai.

Java - Versões, recursos e APIs

  1. Podem solicitar as novidades que você mais gostou desde o Java 8, porque foi a versão que trouxe mais recursos.

  2. É comum perguntarem sobre Collections (List, Set, Map etc), então saiba para que servem, o que fazem e como. Se for o caso, saber algumas implementações dessas interfaces e dar algum exemplo de uso. 
    Exemplo de pergunta: quero agrupar objetos que não podem se repetir e que estejam ordenados por sua chave natural, qual seria a melhor coleção de dados? Por quê?

  3. Sobre recursos novos, citar nova DateTime API, que veio no Java 8. Consiga comparar alguns recursos antigos com os novos.
    Stream API (Fluent API) também chegou no Java 8 e é muito utilizada, então saiba dizer o que ela facilita e simplifica. Se souber falar de Lambdas, melhor ainda.

O Baeldung é meu site preferido para aprender e explorar novidades de Java e Kotlin. Ele também tem uma newsletter maravilhosa. Recomendo.

Spring

Saber que é um framework, para que serve, no que ajuda, qual a função dos módulos mais usados (Boot, Data, Security)
Mais simples: Boot e Data
Complexo, porém importante: Security (opinião pessoal)
Leitura sobre Spring. Neste site tem muita coisa, é tão bem escrito que muitas vezes pesquiso nele antes de conferir a documentação oficial.

Persistência - Gravação de dados no banco de dados

Saber que existe JDBC, mas falar de JPA. Geralmente pedem Spring Data ou Hibernate, sendo que o Spring Data encapsula o Hibernate e adiciona facilidades.

  • Banco de dados relacional

Falar qual conhece/usou, saber que existe normalização de dados e por que é importante, saber que existem tamanhos de dados e a importância de analisar pra não haver desperdício de espaço/performance.

  • Banco de dados não-relacional

Se tiver usado, dizer quando ele é mais recomendado que o relacional e por qual motivo, citar performance e formato de dados gravados. Famosos: MongoDB e Redis (Redis também é cache)

Mensageria - Event-Driven Architecture

Este é um assunto extenso porque as tecnologias usadas neste modelo arquitetural possuem muitas configurações.
O importante aqui é saber o que é, como funciona, quais os prós e contras. Saber quais ferramentas são mais utilizadas, qual resultado procuram atingir e as diferenças entre elas. Os termos para se atentar são publisher e subscriber - ou Pub e Sub - porque tudo o que importa no início está relacionado a eles.
As mais utilizadas são RabbitMQ para mensagens e Apache Kafka para eventos, e ambas têm suas versões para nuvem.
No site da Confluent tem vídeos sobre o assunto e que usam Apache Kafka como ferramenta, é bem legal. Não precisa se aprofundar muito.
Leitura sobre event-driven architecture - EDA.

Conteinerização - Docker

Não é um assunto trivial e eu não exigiria de um iniciante.
Caso você tenha tido tempo de estudar o assunto, costumam cair perguntas sobre os prós e contras, quais ferramentas utilizam, como os dados são salvos e onde, quais benefícios o Docker adiciona no desenvolvimento e escalabilidade.
Recomendo ver os vídeos da LinuxTips sobre Docker. O material deles é muito bom e o @gomex_87 escreveu um livro gratuito sobre o assunto.
Leitura sobre Docker.

Top comments (2)

Collapse
 
jilherme profile image
jilherme

sou front e to querendo virar fullstack pq as vagas tao complicadas, artigo mt bom pra dar um norte!

Collapse
 
jessilyneh profile image
Jessilyneh

Boa, parabens pelo guia!