Basta olhar para isso sem desvios, "Essência condensada: perguntas da entrevista de programação simultânea em 2020"

Pegando emprestado da prática de programação simultânea Java: Não é fácil escrever o programa correto e é ainda mais difícil escrever um programa concorrente normal. Em comparação com o caso de execução sequencial, a segurança de thread de multithreading é sutil e inesperada, porque a ordem das operações em multithreading é imprevisível sem a sincronização adequada.

A programação simultânea tem uma barreira relativamente alta para o aprendizado em comparação com outros pontos de conhecimento em Java, e é mais trabalhoso de aprender, o que fez com que muitas pessoas se afastassem; enquanto a implementação de entrevistas no local de trabalho e sistemas de alta simultaneidade e tráfego ainda são inseparáveis ​​da programação simultânea. Como resultado, talentos que podem realmente dominar a programação simultânea são urgentemente necessários no mercado.
Insira a descrição da imagem aqui

texto

1) Existem três threads T1, T2 e T3. Como você garante que T2 seja executado após T1 ser executado e T3 seja executado após T2 ser executado?
Esta pergunta do tópico geralmente é feita na primeira rodada ou na fase de entrevista por telefone, o objetivo é testar se você está familiarizado com o método "join". Esse problema de multithreading é relativamente simples e pode ser implementado com o método de junção.

2) Quais são as vantagens da interface Lock sobre o bloco sincronizado em Java?
Você precisa implementar um cache eficiente, que permite que vários usuários leiam, mas permite que apenas um usuário escreva, a fim de manter sua integridade, como você o implementaria? A maior vantagem da interface de bloqueio em multithreading e programação simultânea é que eles fornecem bloqueios para leitura e gravação respectivamente.Ele pode satisfazê-lo para escrever estruturas de dados de alto desempenho como ConcurrentHashMap e bloqueio condicional. Cada vez mais, as perguntas da entrevista do tópico Java serão feitas com base nas respostas do entrevistador. Eu recomendo fortemente que você leia Locks com atenção antes de ir para a entrevista multi-threaded, porque atualmente é um grande número de caches do lado do cliente e espaços de conexão de transação usados ​​para construir sistemas de transações eletrônicas.

3) A diferença entre os métodos de espera e suspensão em java?
Perguntas da entrevista de encadeamento de Java que são freqüentemente feitas em entrevistas por telefone. A maior diferença é que a espera libera o bloqueio enquanto espera, enquanto o sono sempre mantém o bloqueio. Wait geralmente é usado para interação entre threads e sleep é geralmente usado para suspender a execução.

4) Implementar fila de bloqueio em Java?
Esta é uma pergunta de entrevista multi-threaded relativamente difícil, que pode atingir muitos propósitos. Primeiro, ele pode detectar se o candidato pode realmente escrever programas com threads Java; em segundo lugar, ele pode detectar a compreensão do candidato de cenários simultâneos, e você pode fazer muitas perguntas com base nisso. Se ele usar os métodos wait () e notificação () para implementar filas de bloqueio, você pode pedir a ele para usar as classes de simultaneidade Java 5 mais recentes para escrevê-lo novamente.

5) Escrever código em Java para resolver o problema produtor-consumidor?
É semelhante à pergunta acima, mas esta pergunta é mais clássica.Às vezes, a entrevista fará as seguintes perguntas. Como resolver o problema produtor-consumidor em Java, é claro, existem muitas soluções, compartilhei um método para conseguir uma fila de bloqueio. Às vezes, eles até perguntam como perceber o problema da refeição do filósofo.

6) Usando Java para programar um programa que causará um deadlock, como você resolveria?
Esta é minha pergunta favorita da entrevista de thread Java, porque embora o problema de deadlock seja muito comum ao escrever programas simultâneos multi-threaded, muitos candidatos não podem escrever código livre de deadlock (código livre de deadlock?), Eles estão lutando. Basta dizer a eles que você tem N recursos e N threads e precisa de todos os recursos para concluir uma operação. Por razões de simplicidade, n pode ser substituído por 2. Quanto maiores os dados, mais complicado se torna o problema. Obtenha mais informações sobre deadlocks evitando deadlocks em Java.

7) O que são operações atômicas e o que são operações atômicas em Java?
Pergunta muito simples da entrevista de thread java, a próxima pergunta é que você precisa sincronizar uma operação atômica.

8) Qual é o papel principal do volatile em Java? Como usá-lo?
Como é diferente do método sincronizado em Java? Desde que o Java 5 e o modelo de memória Java mudaram, os problemas de encadeamento baseados na palavra-chave volatile tornaram-se cada vez mais populares. Você deve estar preparado para responder às perguntas sobre como as variáveis ​​voláteis garantem a visibilidade em um ambiente simultâneo.

9) Quais são as condições de corrida? Como você descobre e resolve a competição?
Essa é uma pergunta que aparece no estágio avançado das entrevistas multithread. A maioria dos entrevistadores perguntará sobre as condições competitivas que você encontrou recentemente e como você as resolveu. Às vezes, eles escreverão um código simples e então permitirão que você detecte as condições de corrida no código. Você pode consultar meu artigo anterior sobre as condições de corrida do Java. Na minha opinião, esta é uma das melhores perguntas da entrevista de thread 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 que está livre de corrida de dados ou qualquer outra condição de corrida. O melhor livro sobre isso é "Práticas de simultaneidade em Java".
Insira a descrição da imagem aqui

10) Como você usará o threaddump?
Como você analisará o despejo de thread? No UNIX, você pode usar kill -3, e o thread dump imprimirá o log. No Windows, você pode usar "CTRL + Break". Pergunta de entrevista encadeada muito simples e profissional, mas se ele perguntar a você como analisá-la, será complicada.

11) Por que executamos o método run () quando chamamos o método start (), por que não podemos chamar o método run () diretamente?
Esta é outra pergunta de entrevista multithreaded java muito clássica. Essa também é a confusão quando comecei a escrever programas de thread. Agora, essa pergunta geralmente é feita na entrevista por telefone ou na primeira rodada da entrevista Java de nível médio. A resposta a esta pergunta deve 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 nem executará o código do thread de chamada. Leia o artigo que escrevi anteriormente "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?
Este é um problema espinhoso sobre threads e bloqueio, e tem muitas soluções. Se o encadeamento encontrar bloqueio de E / S, não acho que haja uma maneira de abortar o encadeamento. Se o thread for bloqueado chamando wait (), sleep () ou join (), você pode interromper o thread e ativá-lo lançando InterruptedException. O artigo "Como lidar com métodos de bloqueio em java" que escrevi anteriormente 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 verificar se você está familiarizado com pacotes simultâneos no JDK5. A diferença entre os dois é que CyclicBarrier pode reutilizar barreiras que já passaram, enquanto CountdownLatch não pode ser reutilizado.

14) O que é um objeto imutável e como ele ajuda a escrever aplicativos concorrentes?
Outra pergunta clássica da entrevista com vários tópicos não está diretamente relacionada aos tópicos, mas ajuda muito indiretamente. Esta pergunta da entrevista java pode se tornar 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 um ambiente multithread?
Como você resolveu? Comumente encontrados em programas multithread e simultâneos são interface de memória, condições de corrida, impasse, livelock e fome. O problema é infinito e, se você cometer um erro, será difícil localizar e depurar. Isso se baseia principalmente em entrevistas, não em aplicações reais de questões de threading Java.

Fim da frase

As respostas às perguntas da entrevista acima são organizadas em notas de documento. Também resolvi alguns materiais de entrevista e as últimas perguntas de entrevistas coletadas por grandes empresas em 2020 (todas organizadas em documentos, uma pequena parte das imagens), se você precisar, clique para adicionar o grupo: 1149778920 senha qf.
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/w1103576/article/details/108997386
Recomendado
Clasificación