Perguntas da entrevista do tópico Java
Perguntas sobre multithreading e simultaneidade são uma parte essencial de qualquer entrevista Java. Se você deseja obter uma posição de informação de front-office em qualquer banco de investimento em ações, deve estar preparado com muitas perguntas sobre multi-threading. Multithreading e simultaneidade são tópicos muito populares em bancos de investimento, especialmente no que se refere ao desenvolvimento do comércio eletrônico. Eles fazem aos entrevistadores muitas perguntas confusas sobre threading Java. O entrevistador quer apenas ter certeza de que possui conhecimento suficiente sobre threads Java e simultaneidade, porque muitos candidatos apenas arranham a superfície. Os sistemas de negociação eletrônica de alto volume e baixa latência para negociação direta no mercado são inerentemente simultâneos. A seguir estão perguntas sobre threading Java que gosto de fazer em momentos e lugares diferentes. Não forneço respostas, mas sempre que possível dou pistas, e às vezes essas pistas são suficientes para responder à pergunta. Há um número crescente de perguntas sobre ferramentas de simultaneidade e coleções simultâneas que fazem referência ao Java 5 Concurrency Package. Entre esses problemas, ThreadLocal, Blocking Queue, Counting Semaphore e ConcurrentHashMap são os mais populares.
15 perguntas e respostas da entrevista multi-threading Java
1) Agora existem três threads T1, T2 e T3. Como você garante que T2 seja executado após a execução de T1 e T3 seja executado após a execução de T2?
Esta pergunta do tópico geralmente é feita durante a primeira rodada ou na fase de entrevista por telefone para testar se você está familiarizado com o método de "junção". Este problema multithreading é relativamente simples e pode ser implementado usando o método join.
2) Quais são as vantagens da interface Lock sobre o bloco sincronizado em Java? Você precisa implementar um cache eficiente que permita a leitura de vários usuários, mas permita que apenas um usuário grave, mantendo assim sua integridade.
A maior vantagem da interface de bloqueio na programação multithread e simultânea é que ela fornece bloqueios separados para leitura e gravação, o que permite escrever estruturas de dados de alto desempenho como ConcurrentHashMap e bloqueio condicional. As perguntas da entrevista do thread Java são cada vez mais baseadas nas respostas do entrevistador. Eu recomendo fortemente a leitura sobre Locks antes de ir para uma entrevista multithread, pois atualmente ele é muito usado no cache do lado do cliente e no espaço de conexão de negociação para a construção de terminais de negociação eletrônicos.
3) Qual é a diferença entre os métodos wait e sleep em java?
Perguntas de entrevista de thread Java que geralmente são feitas em entrevistas por telefone. A maior diferença é que wait libera o bloqueio enquanto espera, enquanto sleep sempre mantém o bloqueio. Wait geralmente é usado para interação entre threads e sleep geralmente é usado para pausar a execução.
4) Use Java para implementar fila de bloqueio.
Esta é uma pergunta de entrevista relativamente difícil e multissegmentada que serve a muitos propósitos. Primeiro, ele pode testar se o candidato pode realmente escrever programas usando threads Java; segundo, pode testar a compreensão do candidato sobre cenários de simultaneidade e você pode fazer muitas perguntas com base nisso. Se ele usar os métodos wait() e notify() para implementar uma fila de bloqueio, você poderá pedir que ele a escreva novamente usando as classes de simultaneidade mais recentes do Java 5.
5) Escreva código em Java para resolver o problema produtor-consumidor.
É muito semelhante à pergunta acima, mas esta pergunta é mais clássica. Às vezes, as entrevistas farão a seguinte pergunta. Como resolver o problema produtor-consumidor em Java É claro que existem muitas soluções que compartilhei um método usando filas de bloqueio. Às vezes até perguntam como implementar o problema do jantar dos filósofos.
6) Se você programar um programa em Java que causará deadlock, como você resolverá isso?
Esta é minha pergunta favorita da entrevista de thread Java porque, embora problemas de deadlock sejam muito comuns ao escrever programas simultâneos multithread, muitos candidatos não conseguem escrever código livre de deadlock (código livre de deadlock?) e eles têm dificuldades. Basta dizer a eles que você tem N recursos e N threads e que precisa de todos os recursos para concluir uma operação. Para simplificar, n aqui pode ser substituído por 2. Dados maiores farão o problema parecer mais complicado. Obtenha mais informações sobre impasses em Evitando impasses em Java.
7) O que é operação atômica O que são operações atômicas em Java?
Pergunta de entrevista de thread java muito simples, a próxima pergunta é que você precisa sincronizar uma operação atômica.
8) Qual é o papel principal do volátil em Java? Como usar? Como é diferente dos métodos sincronizados em Java?
Desde as mudanças no Java 5 e no modelo de memória Java, os problemas de threading baseados na palavra-chave volátil tornaram-se cada vez mais populares. Você deve estar preparado para responder perguntas sobre como as variáveis voláteis garantem visibilidade, ordem e consistência em um ambiente simultâneo.
9) O que é uma condição de corrida? Como você identifica e resolve a concorrência?
Esta é uma questão que surge nos estágios avançados das entrevistas multithread. A maioria dos entrevistadores perguntará sobre uma situação competitiva que você encontrou recentemente e como a resolveu. Às vezes, eles escrevem um código simples e permitem detectar condições de corrida no código. Você pode consultar meu artigo anterior sobre condições de corrida Java. Na minha opinião, esta é uma das melhores perguntas de entrevista em Java, ela pode detectar com precisão a experiência do candidato na resolução de condições de corrida ou na escrita de código livre de corrida de dados ou qualquer outra condição de corrida (esta frase que é livre de corrida de dados será não traduzir). O melhor livro sobre esse assunto é "Práticas de simultaneidade em Java".
10) Como você usará o dump de thread? Como você analisaria um dump de Thread?
No UNIX você pode usar kill -3 e o dump do thread imprimirá o log, no Windows você pode usar "CTRL+Break". Pergunta de entrevista muito simples e profissional, mas complicada se ele perguntar como analisá-la.
11) Por que o método run() é executado quando chamamos o método start()? Por que não podemos chamar o método run() diretamente?
Esta é outra pergunta de entrevista multi-threading muito clássica em Java. Essa também foi minha confusão quando comecei a escrever programas de thread. Hoje em dia, essa pergunta geralmente é feita em entrevistas por telefone ou na primeira rodada de entrevistas Java de nível iniciante a intermediário. A resposta a esta pergunta deveria ser esta: ao chamar o método start() você criará um novo thread e executará o código no método run(). Mas se você chamar o método run() diretamente, ele não criará um novo thread e não executará o código do thread de chamada. Leia meu artigo anterior "A diferença entre os métodos de inicialização e execução" para obter mais informações.
12) Como você ativa um thread bloqueado em Java?
Esta é uma pergunta difícil sobre threads e bloqueios e tem muitas soluções. Não acho que exista uma maneira de abortar o thread se ele encontrar um bloco IO. Se um thread for bloqueado chamando wait(), sleep() ou join(), você pode interromper o thread e ativá-lo lançando InterruptedException. Meu artigo anterior "Como lidar com métodos de bloqueio em java" contém muitas informações sobre como lidar com o bloqueio de threads.
13) Qual é a diferença entre CycliBarriar e CountdownLatch em Java?
Esta questão do tópico é usada principalmente para testar se você está familiarizado com o pacote simultâneo no JDK5. A diferença entre os dois é que CyclicBarrier pode reutilizar barreiras que foram ultrapassadas, enquanto CountdownLatch não pode ser reutilizado.
14) O que é um objeto imutável e como ele ajuda a escrever aplicações simultâneas?
Outra pergunta clássica de entrevista sobre multi-threading, não está diretamente relacionada a threads, mas ajuda muito indiretamente. Esta pergunta da entrevista sobre Java pode ficar muito complicada se ele pedir para você escrever um objeto imutável ou perguntar por que String é imutável.
15) Quais são os problemas comuns que você encontra em ambientes multithread? Como você resolveu isso?
Comumente encontrados em programas multithread e simultâneos são interface de memória, condições de corrida, impasse, livelock e fome. Os problemas são infinitos e se você errar, será difícil encontrar e depurar. Isso é principalmente baseado em entrevistas e não em perguntas práticas de threading Java baseadas em aplicativos.
Algumas perguntas adicionais:
1) Qual é a diferença entre threads verdes e threads locais em Java?
2) Qual é a diferença entre thread e processo?
3) O que é mudança de contexto em multithreading?
4) Qual é a diferença entre impasse e livelock, e a diferença entre impasse e torta?
5) Qual é o algoritmo de escalonamento de threads usado em Java?
6) O que é agendamento de threads em Java?
7) Como você lida com exceções incapturáveis em threads?
8) O que é um grupo de threads e por que não é recomendado em Java?
9) Por que é melhor usar o framework Executor do que usar o aplicativo para criar e gerenciar threads?
10) Qual a diferença entre Executor e Executores em Java?
11) Como descobrir qual thread está usando mais tempo de CPU no Windows e Linux?