Maison  >  Article  >  Java  >  15 questions et réponses d'entretien sur la concurrence Java Thread

15 questions et réponses d'entretien sur la concurrence Java Thread

(*-*)浩
(*-*)浩original
2019-11-07 15:23:101825parcourir

15 questions et réponses d'entretien sur la concurrence Java Thread

1 Il y a maintenant les fils T1, T2 et T3. Comment vous assurer que le thread T2 s'exécute après T1 et que le thread T3 s'exécute après T2 ?

Cette question d'entretien fil est généralement posée lors du premier tour d'entretien ou d'entretien téléphonique. Cette question multithread est conçue pour tester si l'intervieweur est familier avec le concept de méthode de jointure. La réponse est également très simple : vous pouvez utiliser la méthode join de la classe Thread pour obtenir cet effet.

2. Quels sont les avantages de la nouvelle interface Lock en Java par rapport aux blocs synchronisés ? Si vous êtes invité à implémenter un cache hautes performances prenant en charge les lectures simultanées et les écritures uniques, comment garantir l'intégrité des données.

Le plus grand avantage de l'utilisation de l'interface de verrouillage dans la programmation multithread et simultanée est qu'elle fournit deux verrous distincts pour la lecture et l'écriture, vous permettant de créer des structures de données hautes performances telles que ConcurrentHashMap et conditionnelles. blocage.

Cette question d'entretien du fil Java devient de plus en plus courante, et les questions d'entretien ultérieures sont basées sur la réponse de l'intervieweur à cette question.

Je recommande fortement d'en savoir plus sur les verrous avant toute interview multithread Java, car les verrous sont fréquemment utilisés pour créer des caches dans l'interaction client et données dans les systèmes de trading électroniques aujourd'hui.

3. Quelle est la différence entre les méthodes d'attente et de veille en Java ?

Jetons un coup d'œil à une autre question d'entretien fréquemment posée. Cette question revient souvent lors des entretiens téléphoniques. La principale différence entre les deux réside dans l'attente du déverrouillage et du moniteur. La méthode sleep ne libère aucun verrou ni aucun moniteur pendant l'attente. La méthode wait est principalement utilisée pour la communication entre threads, tandis que sleep ne s'arrête que pendant l'exécution. Vous pouvez lire mon autre article sur l'attente et le sommeil en Java.

4. Comment implémenter une file d'attente de blocage en Java ?

Il s'agit d'une question d'entretien multithread Java relativement difficile avec de nombreux points de test. Il examine si l'intervieweur a réellement écrit du code multithread Java et examine sa compréhension des scénarios de concurrence. Et vous pouvez poser de nombreuses questions de suivi basées sur le code de l'intervieweur. S'il implémente avec succès la file d'attente de blocage à l'aide des méthodes wait() et notify(), vous pouvez le laisser la réimplémenter à l'aide de la classe de concurrence Java 5.

5. Comment écrire du code pour résoudre le problème producteur-consommateur en Java ?

La réponse est similaire à la question ci-dessus sur les fils de discussion. Cette question est très typique au travail, mais parfois les intervieweurs poseront ce type de question, comme « Comment résoudre le problème producteur-consommateur dans Java ?" En fait, il existe de nombreuses solutions. J'ai partagé la solution en utilisant BlockingQueue en Java. Parfois, ils vous demanderont même de vous donner une solution au problème des philosophes de la restauration.

6. Écrivez un code de blocage. Comment résoudre les blocages en Java ?

C'est ma question d'entretien multi-thread Java préférée, car même si les blocages sont très courants dans la programmation simultanée multi-thread, de nombreuses personnes interrogées se grattent encore la tête et sont incapables d'écrire du code sans blocage.

Demandez-leur simplement s'il y a N ressources et N threads pour effectuer une opération, puis demandez toutes les ressources.

N ici peut être 2 comme cas le plus simple, ou il peut s'agir d'un très grand nombre pour compliquer le problème.

7. Que sont les opérations atomiques ? Quelles sont les opérations atomiques en Java ?

Il s'agit d'une simple question d'entretien sur un fil Java. Une autre question immédiate serait : avez-vous besoin de synchroniser les opérations atomiques ? Vous pouvez lire cet article pour en savoir plus sur la synchronisation Java.

8. Quel est le mot clé volatile en Java ? Comment l'utilisez-vous ? En quoi est-ce différent des méthodes synchronisées en Java ?

Depuis l'ajustement du mot-clé volatile et du modèle de mémoire Java dans Java 5, les problèmes de thread liés au mot-clé volatile sont de plus en plus courants. Il est important de comprendre comment les variables volatiles garantissent la visibilité, l'ordre et la cohérence dans un environnement concurrent.

9. Qu'est-ce qu'une condition de concurrence ? Comment détecter et résoudre les conditions de concurrence ?

Cette question multithread Java apparaît généralement dans les entretiens avec les seniors. La plupart des enquêteurs vous poseront des questions sur la dernière condition de concurrence que vous avez rencontrée et comment vous l'avez résolue. Parfois, ils écriront également un code simple pour vous permettre de découvrir la condition de concurrence. Vous pouvez consulter mon article Conditions de course en Java. À mon avis, il s'agit de l'une des meilleures questions d'entretien de threading Java et teste l'expérience du candidat dans la résolution de conditions de concurrence ou dans l'écriture de code exempt de courses de données et de conditions de concurrence.

10. Comment vider les threads en Java ? Comment l'analyser ?

Sous UNIX, vous pouvez utiliser kill -3 et le journal de vidage du thread sera imprimé à l'écran et pourra être visualisé en utilisant CTRL+Pause. Il s'agit simplement d'une question d'entretien plus simple. Si vous êtes un peu astucieux, ils vous demanderont comment analyser les journaux de vidage. Les journaux de vidage de thread sont très utiles pour analyser les situations de blocage.

11. Puisque la méthode start() appellera la méthode run(), pourquoi appelons-nous la méthode start() au lieu d'appeler directement la méthode run() ?

Il s'agit d'une question d'entretien multithread Java de base. Au départ, j'étais un peu confus au sujet de la programmation multithread lorsque j'ai commencé. De nos jours, je me rencontre généralement lors d'un entretien téléphonique ou d'un entretien unique pour les entretiens de niveau intermédiaire Java.

La réponse à cette question est la suivante. Lorsque vous appelez la méthode start(), elle crée un nouveau thread et exécute le code dans la méthode run(). Si vous appelez directement la méthode run(), aucun nouveau thread ne sera créé et le code de la méthode sera exécuté dans le thread de l'appelant actuel.

12. Comment réveiller un thread bloqué en Java ?

C'est une question délicate à propos des discussions. Il existe de nombreuses raisons de blocage, s'il s'agit d'un blocage d'E/S, je ne pense pas qu'il existe un moyen d'interrompre le thread (veuillez me dire s'il y en a). D'un autre côté, si le thread est bloqué en raison d'un appel aux méthodes wait(), sleep() ou join(), vous pouvez interrompre le thread et le réveiller en lançant une exception InterruptedException.

13. Quelle est la différence entre CyclicBarriar et CountdownLatch en Java ?

La plupart des récentes questions d'entretien sur le fil Java testent votre maîtrise du package concurrent JDK 5. L'une des différences entre les deux est que CyclicBarrier peut être réutilisé une fois la barrière ouverte (tous les threads atteignent le point de barrière). Mais CountDownLatch ne fonctionne pas. Si vous souhaitez en savoir plus, vous pouvez suivre le cours Multithreading et Parallel Computing en Java.

14. Qu'est-ce qu'une classe immuable ? Comment cela aide-t-il à écrire des applications simultanées ?

Bien que cette question d'entretien ne soit pas directement liée aux fils de discussion, l'impact indirect est également grand. Si l'intervieweur vous demande ensuite d'écrire une classe immuable, ou vous demande pourquoi String en Java est immuable, cela rendra les questions de l'entretien plus compliquées.

15. Quels sont les problèmes les plus courants que vous rencontrez dans un environnement multithread ? Comment l'avez-vous résolu ?

Les interférences de mémoire, les conditions de concurrence critique, les blocages, les livelocks et la famine des threads sont des problèmes relativement représentatifs de la programmation multithread et concurrente. Ces problèmes sont infinis et difficiles à localiser et à déboguer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:AucunArticle suivant:java笔试手写算法面试题大全含答案