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.
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
-
Podem solicitar as novidades que você mais gostou desde o Java 8, porque foi a versão que trouxe mais recursos.
-
É 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ê? -
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.