Sempre que me preparo para entrevistas para o cargo de “desenvolvedor Java”, entendo que um plano de preparação concreto realmente me ajudaria. Portanto, todas as anotações acumuladas durante o curso das entrevistas, foi decidido estruturar e publicar. Espero que alguém ache este plano útil.
E, deliberadamente, não escrevo para quem esse plano de treinamento se destina: para um desenvolvedor sênior, médio ou júnior - tudo depende da vaga específica e dos requisitos do empregador. Portanto, confie nesse plano, mas filtre e, ao mesmo tempo, não o leve como um guia exaustivo.
- Núcleo Java . Aqui, você pode se concentrar, por exemplo, no livro “OCP: Guia de Estudo do Java SE 8 Programador II para Profissionais Certificados da Oracle: Exame 1Z0-809” para se preparar para a certificação Java do nível Profissional. Existe um livro semelhante , OCA: Guia de Estudo do Java SE 8 Programmer I para Oracle Certified Associate: Exame 1Z0-808, para o nível Associate - você também pode ver. Percorra o índice e destaque por si mesmo o que pode repetir. Obviamente, você não deve ser sério e ler uma capa de livro - muitos tópicos deste livro podem ser ignorados, por exemplo, a formatação da data. Destaque o mais básico. Por exemplo, para mim, esses eram os seguintes tópicos: coleções (perguntas padrão “Como o HashMap é organizado?” Ou “Qual é a diferença entre LinkedList e ArrayList?” Também são frequentemente solicitadas em entrevistas), genéricos, interfaces funcionais, multithreading (aqui, também filtro - você não precisa de informações cíclicas) estrutura de junção de barreira e forquilha).
Também não se esqueça de projetar conhecimento em sua experiência. Por exemplo, quando você teve que usar a programação multithread? Que problemas você resolveu? Quais bloqueios você usou?
- Multithreading. Ainda enfatizo esse tópico em um parágrafo separado - como o livro acima não explica o que são voláteis, bloqueios e espera / notificação. Se você não trabalhou com programação multithread antes - seja honesto e fale na entrevista. Mas algumas coisas que, por exemplo, foram listadas acima, seria bom saber pelo menos em teoria (especialmente a pergunta "O que é volátil?", Eu tive em quase todas as entrevistas).
- Algoritmos Este tópico é relevante não apenas para desenvolvedores java. É improvável que você seja solicitado a escrever qualquer algoritmo de classificação. O entrevistador não está interessado em saber o quão maravilhoso você aprendeu o código de classificação por mesclagem (provavelmente ele apenas pedirá que você conte o princípio geral). Mas resolver um problema algorítmico, avaliar a complexidade da sua solução ou, por exemplo, explicar em palavras o princípio da pesquisa profunda, é uma opção completamente possível.
- Estruturas de dados. Como uma árvore difere de um gráfico? O que são árvores AVL? Como a pilha é diferente da fila?
Em relação ao java: quais classes no java implementam uma pilha ou fila? Qual a diferença entre LinkedList e ArrayList? O que é um hashset? Como é diferente do TreeSet? Como o HashMap funciona?
É provável que essas e outras perguntas semelhantes sejam entrevistadas. Mas vale a pena notar que as perguntas sobre árvores e gráficos têm muito menos probabilidade de aparecer em entrevistas - essas estruturas não são usadas na prática com tanta frequência. Em vez disso, espera-se que você tenha um bom conhecimento do que usou anteriormente. Não conhece ou não usou madeira vermelho-preta? Então me diga, você não pode saber tudo.
- Bases de dados Relacional e não relacional. Qual a diferença? O que e quando usar?
Se falarmos sobre os relacionais, repita todos os objetos desses bancos de dados: tabelas, visualizações, índices. Repita o sql - como a consulta é criada, que tipos de junção existem, do que diferente de onde. Repita também as transações separadamente - níveis de isolamento, propriedades ACID. Lembre-se, você já teve casos de otimização de consultas? Você precisou examinar o plano de execução da consulta?
Também não se esqueça de repetir o jpa (se essa especificação for necessária na vaga). O que é gerente de entidade? O que é contexto de persistência? E assim por diante, o que eu tinha que enfrentar.
- Frameworks Quais estruturas você precisa repetir depende da vaga específica. Na maioria dos casos, a primavera é necessária. Então não se esqueça de repetir como o Spring geralmente funciona, as etapas para inicializar o bean. Lembre-se de quais estruturas do Spring você usou (por exemplo, Spring mvc, Spring security, Spring data) e por quê. Repita as anotações principais (não se esqueça do Qualificador, Primário e Condicional - eles gostam de perguntar sobre elas com frequência). E não se esqueça dos escopos de feijão.
Separadamente, quero tocar na anotação Transacional. Como ela trabalha? O que pode ser configurado adicionalmente?
- Dispositivo JVM. O que é um heap e uma pilha? Como os objetos são armazenados na jvm? O que é um pool de strings? O que fornece o princípio acontece antes? Como o coletor de lixo funciona? Repita o máximo possível - não será supérfluo.
- Padrões Não há necessidade de dirigir - ninguém precisará listar todos os padrões existentes. Mas alguns, usados em Java ou Spring, precisam ser conhecidos (por exemplo, Imutável, Singleton, Protótipo, Construtor, Proxy, Fábrica abstrata, Wrapper).
- Problemas algorítmicos. Muitas vezes, nas entrevistas, eles pedem para resolver um problema específico. Às vezes, em um pedaço de papel, às vezes em um quadro negro, às vezes em um site específico, se for uma entrevista pelo Skype. Esteja preparado para escrever código sem usar seu ambiente de desenvolvimento favorito. Também pratique a solução de quebra-cabeças, por exemplo, no Leetcode .
- Redes. Repita os níveis do modelo OSI. E não se esqueça de repetir os protocolos principais com mais detalhes: tcp, udp, http, https.
- Arquitetura SOLID, descoberta de serviço, filas de mensagens. Quando usar microsserviços e quando é um monólito? Você já usou eureka ou cônsul?
- O resto. Agile, Git e Gitflow, REST / SOAP, Linux (se você trabalhou), Docker e Kubernetes (se você trabalhou). E também testes - funcional, integração e unidade. Quais são as diferenças, quais escreveram, eles usaram TDD?
- Inglês Somente se necessário. Obviamente, não repita as regras da gramática do idioma inglês. Basta treinar para contar sobre você, é possível lembrar algumas frases pré-preparadas.
- Para mim. Esteja preparado para responder a essas perguntas: “Que problema interessante você teve que resolver no trabalho?”, “Diga-nos do que mais se orgulha.”, “Conte-nos sobre suas realizações.”, “Conte-nos sobre suas falhas.”, “Como você se educa?” , "Por que eles deixaram o local de trabalho anterior?". Se você tem seus próprios projetos, artigos ou discursos, não deixe de contar sobre eles. Eles estão muito interessados nessas coisas e pedirão mais detalhes.
Além disso, prepare as perguntas da sua empresa. Destaque os pontos principais que são importantes para você, diretamente nos pontos. Em um habr, há um
post maravilhoso
sobre isso .
E eu vou dar alguns conselhos de mim mesmo.
Pessoalmente, sempre coloco as 2 primeiras entrevistas como treinamento. Ou seja, geralmente essas são as empresas que menos me interessam. Essas entrevistas são necessárias apenas para entrar no ritmo e não ter medo das subsequentes.
Também esteja preparado para falar sobre sua experiência em um currículo. O que eles fizeram, porque, que problemas resolveram.
Lembre-se de que você não é uma enciclopédia e não deve listar imediatamente, por exemplo, todas as interfaces funcionais em Java. Será bastante normal se você contar apenas sobre o que trabalhou.
E lembre-se de que a entrevista é principalmente uma conversa. Eles não o interrogam e não querem envergonhá-lo se você não souber de nada. O empregador descobrirá se você é um candidato adequado e descobrirá se esse trabalho é adequado para você.
Outro bom livro é
Cracking the Coding Interview . Você pode dar uma olhada, especialmente se for fazer entrevistas em empresas estrangeiras como Google, Facebook.
Recursos úteis que podem ser necessários na preparação:
- Quebrando a entrevista de codificação.
- OCP: Guia de Estudo do Oracle Certified Professional Java SE 8 Programmer II: Exame 1Z0-809.
- A postagem "Eu ligo de volta" .
- Leetcode .
- Entrevista Outro site com problemas algorítmicos. Aqui, as tarefas são estruturadas em categorias.
Boa sorte