Les questions suivantes sont toutes des questions relativement avancées, et ils sont généralement rarement posés lors des entretiens car ils peuvent désactiver l'intervieweur. Mais vous pouvez trouver du temps pour le pratiquer vous-même.
1. System.exit (0) sautera l'exécution du bloc final
System.SetSecurityManager (new SecurityManager () {@Override public void CheckExit (int status) {throw newredDeath ();}}); essayez {System.exit (0); } enfin {System.out.println ("dans le bloc enfin"); } Pourquoi ce code sortira-t-il dans le bloc enfin? Pourquoi les informations sur la trace de pile ne sont-elles pas imprimées?
2. String str = "Hello"; Où Str est un objet de chaîne
Contrairement à C ++, les variables en Java sont soit des types de base ou des références. Une variable ne peut pas être un objet. Cela signifie une expression comme ceci:
String str = "Hello"; Chaîne text = "bye"; str == texte; // Comparez deux références au lieu du contenu str = text; // attribue la référence du texte à Str
Dans la plupart des cas, il n'y a pas beaucoup de différence, mais l'écriture comme celle-ci peut facilement provoquer une confusion.
final StringBuilder sb = new StringBuilder (); SB.APPEND ("Hello"); // Cette référence est de type final, pas cette instance. Méthode (SB); // Cette instance peut être modifiée par des méthodes, mais cette variable ne peut pas être modifiée 3. La fuite de mémoire Java est la même que les programmeurs C ++ comprendre
La définition de la fuite de mémoire sur Wikipedia est "en informatique, si un programme ne gère pas correctement l'allocation de mémoire, les fuites de mémoire se produiront. Dans la programmation orientée objet, si un objet en mémoire ne peut pas être accessible dans le code, il s'agit d'une fuite de mémoire." Cependant, en Java, les objets sont toujours accessibles et ceux sans références fortes seront effacées. Le terme fuite de mémoire signifie en Java: il existe des objets qui ne devraient pas exister en mémoire, et généralement certaines ressources qui ne sont plus utilisées sont toujours stockées dans la collection.
4. La programmation multithread est difficile
Si vous n'avez aucune expérience, la programmation multi-threading est en effet difficile. Si vous jetez simplement un tas de code dans un tas de fils et l'exécutez, alors le problème ne peut pas être résolu du tout, ce sera un gâchis. Mais si vous pouvez effectuer une allocation de thread à la demande, contrôler les interactions entre les threads et utiliser des modèles simples que certains membres de l'équipe peuvent également comprendre, le problème devient beaucoup plus simple. Bien sûr, il y a un autre défi que vous devez faire en sorte que tout le monde dans l'équipe suive vos règles
5. Ne vous souciez pas des différentes performances entre les différentes opérations
J'ai récemment entendu qu'il y avait un problème, qui implique l'ajout d'entiers, d'accès à la mémoire, de module et de sortie à la console. Bien que chacune de ces opérations soit un ordre de grandeur plus lent que la précédente, ce gars veut simplement optimiser le fonctionnement, l'ajout et le remplacer les plus rapides par des opérations plus coûteuses. Si vous souhaitez vraiment optimiser les performances, vous feriez mieux de remplacer ces opérations coûteuses par une opération bon marché. Si votre goulot d'étranglement est dans le matériel, par exemple, vous devez lire un grand nombre de fichiers du disque dur, la modification du code du logiciel est inutile, car le problème n'est pas du tout.
6. Les nombres aléatoires sont aléatoires
Un ensemble spécifique de nombres aléatoires est comme des nombres d'un modèle. J'ai déjà parlé de cette question dans cet article. Beaucoup de gens ne croient pas que les nombres générés par des générateurs de nombres aléatoires ne sont en fait pas aléatoires.
7. Les points flottants doivent être évités car ils produiront des erreurs aléatoires
Pour la même opération, les nombres de points flottants produiront la même erreur à chaque fois. Les erreurs sont prévisibles et donc contrôlables. Si vous savez ce que vous allez faire et respectez certaines règles simples, telles que d'arrondir les résultats, les numéros de point flottants ne feront pas plus d'erreurs que BigDecimal. De plus, il est plus lisible et plus d'une centaine de fois plus rapide (et il y a moins d'objets de déchets générés en même temps).
8. Le fuseau horaire est éternel
La raison de ce malentendu est que, au fil du temps, le fuseau horaire change. Cela signifie que l'Europe / Londres était 1970/1/1 01:00 au lieu de 00:00. Pourquoi? Parce que Londres a utilisé du temps d'été dans les deux années de 1968 à 1971.
Au cours des dernières années, de nombreux fuseaux horaires ont également changé. Moscou était le Third District East (GMT + 3), mais maintenant c'est le quartier du quatrième est (GMT + 4) (à partir du 27 mars 2011). Si vous regardez à l'époque 2010, vous constaterez qu'il est East 3 et East 4.
Il y a des choses que vous pouvez sembler surpris:
Février de la Suède en 1721 a 30 jours.
Le premier jour en Angleterre en 1751 était le 25 mars, soit 11 jours de la France.
Une fois que les États-Unis ont adopté le calendrier grégorien, il retrace des centaines d'années, de sorte que les dates enregistrées à l'origine peuvent être exprimées dans deux calendriers (généralement deux dates sont fournies en même temps pour plus de précision). Par exemple, l'anniversaire de George Washington a changé du 11 février 1731 au 22 février 1732.
9. Lorsque vous lisez une variable non volatile dans un fil, vous pouvez enfin lire la valeur qu'elle a mise à jour.
Ce problème est apparu deux fois sur Stackoverflow il y a quelques jours. D'une manière générale, lorsque le compilateur JIT optimise le code, il en ligne des champs de types non volatils qui n'ont pas été modifiés pour ce fil. Une fois ce code compilé (vous pouvez le voir avec -xx: + printCompilation), il est probable qu'il ne sera jamais visible si vous modifiez ce champ dans un autre thread. L'ajout de blocs de synchronisation aléatoires ou d'instructions d'impression peut retarder l'exécution de cette optimisation ou perturber le compilateur JIT afin qu'il n'effectue pas cette optimisation.
10. Les questions d'entrevue de Java sont correctes
Il existe de nombreuses questions d'entrevue Java qui sont dépassées (non mises à jour pendant plus de 10 ans et déconnectées de la version Java actuelle), ou elles sont trompeuses, ou elles peuvent même être fausses. Malheureusement, aucune de ces réponses n'a été transmise sans les vérifier.
Je ferai référence aux réponses de Stackoverflow ci-dessus parce que la revue par les pairs ici fait un meilleur travail pour examiner les réponses. En général, n'allez pas sur des sites Web comme Rose India, les réponses ci-dessus sont de qualité ridicule. Si vous aimez vous rendre au bas, vous pouvez consulter le nombre d'erreurs d'orthographe (noms de classe et termes professionnels) ou de mauvaises remarques se trouvent dans l'article ci-dessus. L'une des raisons de ces problèmes est qu'il n'y a pas de mécanisme de rétroaction efficace pour corriger ces erreurs.
Je voudrais recommander des questions d'entrevue Java:
Les 50 questions d'entrevue Java les plus précieuses conviennent à l'admission aux programmeurs Java
10 Questions d'entrevue de méthode principale Java classique
Discutez des dix questions d'entrevue les plus courantes en Java (Super Classic)
10 questions d'entrevue XML pour les programmeurs Java sont publiées
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.