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. 1. 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
finally
bloc est toujours exécuté. En plaçant une return
déclaration dans un try/catch
bloc ou en appelant System.exit()
de l'intérieur d'un try/catch
bloc, la question jette le doute sur cette croyance. La réponse à cette question délicate est la suivante : le finally
bloc sera exécuté lorsqu'une return
instruction est placée dans un try/catch
bloc, mais ne sera pas exécutée lorsqu'elle System.exit()
est appelée depuis l'intérieur d'un try/catch
bloc. 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 NullPointerException
s, peut-elle être remplacée par une méthode qui lance RuntimeException
s ? 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é NullPointerException
la 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 N
les threads peuvent accéder N
aux 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 StringBuffer
et StringBuilder
en 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 StringBuilder
classe est apparue dans JDK 1.5. La seule différence entre ces classes est que StringBuffer
les méthodes de , telles que length()
, capacity()
et append()
, sont synchronisées, tandis que les méthodes correspondantes dansStringBuilder
ne sont pas. Cette différence fondamentale signifie que la concaténation des chaînes est plus rapide avec StringBuilder
qu'avec StringBuffer
. En fait, l'utilisation StringBuffer
n'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 : unDouble
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
ne 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 HashMap
qui contient déjà cette clé ? Cette question délicate fait partie d'une autre question fréquemment posée : comment ça HashMap
marche en Java ? HashMap
est 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 HashMap
classe 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
GO TO FULL VERSION