Les problèmes de lecture et de concurrence multithys sont un élément essentiel de toute entrevue Java. Si vous souhaitez obtenir un poste d'information frontal dans n'importe quelle banque d'investissement en actions, vous devez préparer beaucoup de questions sur le multithreading. Le multithreading et la concurrence sont un sujet très populaire dans la banque d'investissement, en particulier lié au développement de transactions électroniques. Ils poseront sur les intervieweurs de nombreuses questions de filetage Java déroutantes. L'intervieweur veut juste être sûr que l'intervieweur a suffisamment de connaissances sur le filetage et la concurrence de Java, car de nombreux candidats ne sont que superficiels. Les systèmes de trading électronique à haute capacité et à faible latence pour les transactions directes axés sur le marché sont intrinsèquement concurrents. Voici les questions de filetage Java que j'aime poser à différents moments et endroits. Je n'ai pas fourni de réponse, mais je vais vous donner des indices chaque fois que possible, et parfois ces indices sont suffisants pour répondre aux questions. Maintenant, il y a de plus en plus de problèmes faisant référence aux packages concurrents Java5 concernant les outils simultanés et les collections simultanées. Le filetage, la file d'attente de blocage, le comptage du sémaphore et le coffrage concurrent sont plus populaires parmi ces questions.
15 Questions et réponses d'interview multithread Java
1) Il y a maintenant trois fils T1, T2 et T3. Comment vous assurez-vous que T2 est exécuté après l'exécution de T1 et que T3 est exécuté après l'exécution de T2?
Cette question de fil est généralement posée lors de la phase d'entrevue du premier tour ou du téléphone, dans le but de vérifier si vous connaissez la méthode "Join". Ce problème multi-threading est relativement simple et peut être implémenté à l'aide de la méthode de jointure.
2) Quels sont les avantages de l'interface de verrouillage sur le bloc synchronisé en Java? Vous devez implémenter un cache efficace qui permet à plusieurs utilisateurs de lire, mais un seul utilisateur à écrire pour maintenir son intégrité. Comment l'implémenteriez-vous?
Le plus grand avantage des interfaces de verrouillage dans la programmation multi-thread et simultanée est qu'ils fournissent des verrous pour la lecture et l'écriture séparément, ce qui peut vous satisfaire pour écrire des structures de données hautes performances comme le blocage concurrent et le blocage conditionnel. Les questions d'entrevue de fil Java sont de plus en plus posées en fonction des réponses de l'intervieweur. Je recommande fortement de lire attentivement les verrous avant d'aller à une interview multithread, car il est actuellement utilisé pour créer un cache client de transaction électronique et un espace de connexion de transaction.
3) Quelles sont les différences entre les méthodes d'attente et de sommeil en Java?
Les questions d'entrevue sur le fil Java qui sont souvent posées lors des entretiens téléphoniques. La plus grande différence est que Wait libère la serrure en attendant, tandis que le sommeil tient toujours la serrure. L'attente est généralement utilisée pour les interactions inter-thread, et le sommeil est généralement utilisé pour interrompre l'exécution.
4) Utilisez Java pour implémenter des files d'attente de blocage.
Il s'agit d'une question d'interview multi-thread relativement difficile, qui peut atteindre de nombreux objectifs. Tout d'abord, il peut détecter si le candidat peut réellement écrire des programmes dans les threads Java; Deuxièmement, il peut détecter la compréhension du candidat des scénarios simultanés, et vous pouvez poser de nombreuses questions en fonction de cela. S'il utilise des méthodes Wait () et Notify () pour implémenter des files d'attente de blocage, vous pouvez lui demander de l'écrire à nouveau avec les dernières classes concurrentes de Java 5.
5) Utilisez Java pour écrire du code pour résoudre le problème du producteur-consommateur.
Il est très similaire à la question ci-dessus, mais cette question est plus classique. Parfois, les questions suivantes seront posées dans les entretiens. Comment résoudre le problème du producteur-consommateur à Java? Bien sûr, il existe de nombreuses solutions. J'ai partagé une méthode qui utilise des files d'attente de blocage pour implémenter. Parfois, ils demandent même comment réaliser le problème des philosophes qui mangent.
6) Comment résoudre le problème de la programmation d'un programme qui provoquera une impasse en Java?
C'est ma question d'interview de fil Java préférée, car même si les problèmes de blocage sont très courants lors de la rédaction de programmes simultanés multipliés, de nombreux candidats ne peuvent pas écrire de code sans impasse (pas de code de blocage?), Et ils ont du mal. Dites-leur simplement que vous avez N ressources et n threads, et vous avez besoin de toutes les ressources pour effectuer une opération. Pour plus de simplicité, N peut être remplacé par 2, plus les données rendront le problème plus compliqué. Obtenez plus d'informations sur les impasses en évitant les impasses en Java.
7) Qu'est-ce que le fonctionnement atomique et quel est le fonctionnement atomique en Java?
Question d'entrevue de fil Java très simple, la question suivante est que vous devez synchroniser une opération atomique.
8) Quel est le rôle clé de la volatile dans Java? Comment l'utiliser? En quoi est-ce différent de la méthode synchronisée de Java?
Étant donné que les modèles de mémoire Java 5 et Java ont changé, les problèmes de filetage basés sur le mot-clé volatil sont devenus de plus en plus populaires. Vous devriez être prêt à répondre à la façon dont les variables volatiles garantissent la visibilité dans un environnement simultané.
9) Quelles sont les conditions de concurrence? Comment découvrez-vous et résolvez-vous la compétition?
Il s'agit d'une question qui apparaît au stade avancé des entretiens multithreads. La plupart des intervieweurs poseront des questions sur les conditions de compétition que vous avez rencontrées récemment et comment vous l'avez résolu. Il y a des moments où ils écrivent du code simple, puis vous permettent de détecter les conditions de course du code. Vous pouvez vous référer à mon article précédent sur les conditions de course Java. À mon avis, il s'agit de l'une des meilleures questions d'entrevue de fil Java, qui peuvent détecter avec précision l'expérience des candidats dans la résolution des conditions de race ou l'écriture de code sans race de données ou toute autre condition de course. Le meilleur livre à ce sujet est "les pratiques de concurrence en Java".
10) Comment allez-vous utiliser le vidage? Comment allez-vous analyser le vidage?
Dans UNIX, vous pouvez utiliser Kill -3, puis le vide de thread imprimera le journal. Dans Windows, vous pouvez utiliser "Ctrl + Break". Question d'entrevue de fil très simple et professionnel, mais ce sera difficile s'il vous demande comment l'analyser.
11) Pourquoi exécutons-nous la méthode run () lorsque nous appelons la méthode start (), et pourquoi ne pouvons-nous pas appeler directement la méthode run ()?
Il s'agit d'une autre question d'interview multi-thread Java très classique. C'est aussi ma confusion lorsque j'ai commencé à écrire des programmes de filetage. Maintenant, cette question est généralement posée lors de l'interview téléphonique ou le premier tour de l'interview junior et du milieu de Java. La réponse à cette question devrait être ceci: lorsque vous appelez la méthode start (), vous allez créer un nouveau thread et exécuter le code dans la méthode run (). Mais si vous appelez directement la méthode run (), il ne créera pas un nouveau thread ou exécutera le code qui appelle le thread. Lisez l'article "La différence entre la méthode de démarrage et d'exécution" J'ai déjà écrit pour obtenir plus d'informations.
12) Comment réveillez-vous un fil de blocage en Java?
C'est une question délicate sur le filetage et le blocage, et il a de nombreuses solutions. Si le fil rencontre un blocage IO, je ne pense pas qu'il existe un moyen d'abandonner le fil. Si le thread bloque en raison de l'appel Wait (), Sleep () ou Join (), vous pouvez interrompre le fil et le réveiller en lançant une interruption. Le "comment gérer les méthodes de blocage en Java" que j'ai écrit auparavant a beaucoup d'informations sur le traitement du blocage des fils.
13) Quelle est la différence entre Cyclibarriar et CountdownLatch à Java?
Ce problème de filetage est principalement utilisé pour détecter si vous connaissez les packages simultanés dans JDK5. La différence entre ces deux est que Cyclic Carrier peut réutiliser la barrière qui a été adoptée, tandis que CountdownLatch ne peut pas être réutilisé.
14) Qu'est-ce qu'un objet immuable et comment aide-t-il à rédiger des applications simultanées?
Une autre question d'entrevue classique pour le multi-threading n'est pas directement liée aux fils, mais elle aide beaucoup indirectement. Cette question d'interview Java peut devenir très délicate s'il vous demande d'écrire un objet immuable, ou vous demande pourquoi String est immuable.
15) Quels sont les problèmes courants que vous rencontrez dans un environnement multithread? Comment l'avez-vous résolu?
Les programmes multithreads et simultanés sont généralement des programmes de mémoire, des conditions de course, des impasses, des verrous en direct et de la faim. Le problème n'a aucune fin, et si vous vous trompez, il sera difficile de découvrir et de déboguer. Il s'agit principalement de questions de threading Java basées sur des entretiens et non basées sur les applications.
Plusieurs autres questions ajoutées:
1) Quelle est la différence entre le fil vert et le fil local en Java?
2) La différence entre les fils et les processus?
3) Qu'est-ce que le changement de contexte dans le multithreading?
4) La différence entre l'impasse et la serrure en direct, la différence entre l'impasse et la faim?
5) Quel est l'algorithme de planification de threads utilisé dans Java?
6) Qu'est-ce que la planification des threads en Java?
7) Comment gérez-vous les exceptions inaccessibles dans le fil?
8) Qu'est-ce qu'un groupe de threads et pourquoi n'est-il pas recommandé en Java?
9) Pourquoi est-il préférable d'utiliser le cadre de l'exécuteur que de créer et de gérer des threads avec des applications?
10) Quelle est la différence entre l'exécuteur testamentaire et les exécuteurs exécuteurs en Java?
11) Comment trouver quel thread utilise le temps de processeur le plus long sur Windows et Linux?
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.