Si vous vous êtes déjà préparé à un entretien pour un poste de programmeur Java ou si vous avez réussi un examen de certification (pas nécessairement sur la programmation), vous avez probablement déjà remarqué que les questions qui y sont posées sont très spécifiques. Beaucoup d'entre eux vous obligent à réfléchir à la conception du langage. Certains sont conçus pour sonder les profondeurs de vos connaissances. Il y a des questions qui ressemblent plus à des énigmes qu'autre chose, tandis que d'autres concernent des nuances de la langue très difficiles à percevoir sans pratique. Dans cet article, le développeur Sarans Sing présente quelques-unes de ces questions sur Java. Avec des réponses, bien sûr. Questions délicates sur Java fréquemment posées lors des entretiens - 11. Que se passe-t-il si je mets une instruction return ou System.exit() dans un bloc try/catch ? C'est une question Java très populaire et subtile. L'astuce est que de nombreux programmeurs pensent que le finallybloc est toujours exécuté. En plaçant une returndéclaration dans un try/catchbloc ou en appelant System.exit()de l'intérieur d'un try/catchbloc, la question jette le doute sur cette croyance. La réponse à cette question délicate est la suivante : le finallybloc sera exécuté lorsqu'une returninstruction est placée dans un try/catchbloc, mais ne sera pas exécutée lorsqu'elle System.exit()est appelée depuis l'intérieur d'un try/catchbloc. 2. Java prend-il en charge l'héritage multiple ? C'est une question très délicate. Les enquêteurs demandent souvent : "Si C ++ prend en charge l'héritage multiple direct, alors pourquoi Java ne le peut-il pas?" La réponseest un peu plus compliqué qu'il n'y paraît, car Java prend en charge l'héritage de plusieurs types. Après tout, une interface Java peut étendre d'autres interfaces. Cela dit, Java ne prend pas en charge l'héritage multiple d'implémentations. 3. Si une méthode dans une classe parent lance NullPointerExceptions, peut-elle être remplacée par une méthode qui lance RuntimeExceptions ? C'est une autre question délicate liée à la surcharge et au dépassement. Réponse : Une méthode surchargée peut lancer en toute sécurité NullPointerExceptionla classe parent de — RuntimeException, mais vous ne pouvez pas faire de même avec un type d'exception coché comme Exception. 4. Comment garantissez-vous que Nles threads peuvent accéder Naux ressources sans blocage ? Si l'écriture de code multithread n'est pas votre fort, vous pouvez vraiment tomber sur cette question. Cela peut être difficile même pour un programmeur expérimenté qui n'a pas rencontré d'impasses et de conditions de course. Toute l'astuce ici est dans l'ordre : vous pouvez éviter les blocages en libérant les ressources dans l'ordre inverse dans lequel elles ont été acquises. 5. Quelle est la différence entre les classes StringBufferet StringBuilderen Java ? Il s'agit d'une question classique du langage Java que certains développeurs trouvent délicate et d'autres - très simple. La StringBuilderclasse est apparue dans JDK 1.5. La seule différence entre ces classes est que StringBufferles méthodes de , telles que length(), capacity()et append(), sont synchronisées, tandis que les méthodes correspondantes dansStringBuilderne sont pas. Cette différence fondamentale signifie que la concaténation des chaînes est plus rapide avec StringBuilderqu'avec StringBuffer. En fait, l'utilisation StringBuffern'est pas recommandée, car la concaténation de chaînes est effectuée sur le même thread 99 % du temps. 6. Quel est le résultat de l'évaluation de l'expression 1,0/0,0 ? Produira-t-il une exception ou une erreur de compilation ? C'est une autre question délicate sur la classe. Les développeurs Java sont conscients de l'existence d'un type de données double primitif et d'une classe , mais lorsqu'ils effectuent des opérations en virgule flottante, ils ne prêtent pas suffisamment attention à , , et aux règles régissant les calculs arithmétiques associés. La réponse à cette question est simple : unQuestions délicates sur Java fréquemment posées lors des entretiens - 2DoubleDoubleDouble.POSITIVE_INFINITYDouble.NEGATIVE_INFINITYNaN-0.0ArithmeticExceptionne sera pas jeté; l'expression vaut Double.POSITIVE_INFINITY. 7. Que se passe-t-il si vous essayez d'insérer une clé dans un HashMapqui contient déjà cette clé ? Cette question délicate fait partie d'une autre question fréquemment posée : comment ça HashMapmarche en Java ? HashMapest une source populaire de questions confuses et délicates sur Java. Voici la réponse : si vous essayez de réinsérer une clé dans un HashMap, l'ancienne clé sera remplacée, car la HashMapclasse n'autorise pas les clés en double. Et la même clé recevra le même code de hachage, ce qui signifie qu'elle se retrouvera au même endroit dans le seau de hachage. Basé sur les matériaux Quora