Questions d'entretien de base Java haute fréquence——(3)
Les questions de l'entretien sont les suivantes :
1. À quoi sert a.hashCode() ? Qu'est-ce que cela a à voir avec a.equals(b) ?
(Recommandé pour des questions d'entretien plus connexes : questions et réponses d'entretien Java)
La méthode hashCode() correspond à la valeur de hachage de l'entier de l'objet. Il est couramment utilisé dans les classes de collection basées sur le hachage, telles que Hashtable, HashMap, LinkedHashMap, etc. Elle est particulièrement étroitement liée à la méthode equals(). Selon la spécification Java, deux objets égaux utilisant la méthode égal() doivent avoir le même code de hachage.
2. La différence entre le flux d'octets et le flux de caractères
Pour sortir un morceau de données binaires vers un appareil un par un, ou pour lire un morceau de données binaires un par un à partir d'un appareil , peu importe Que sont les périphériques d'entrée et de sortie ? Nous devons utiliser une méthode unifiée pour effectuer ces opérations et les décrire de manière abstraite. Cette méthode de description abstraite est nommée IO stream. Les classes abstraites correspondantes sont OutputStream et InputStream. are Représente différents périphériques d'entrée et de sortie, qui fonctionnent tous sur des octets.
Tout dans un ordinateur existe finalement sous forme d'octets binaires. Pour les caractères chinois fréquemment utilisés, obtenez d'abord les octets correspondants, puis écrivez les octets dans le flux de sortie. Lors de la lecture, la première chose lue est l'octet, mais si nous voulons l'afficher sous forme de caractères, nous devons convertir les octets en caractères. Étant donné que ces besoins sont répandus, Java fournit spécifiquement une classe wrapper de flux de caractères.
Le périphérique sous-jacent n'accepte toujours que les données en octets. Parfois, pour écrire une chaîne sur le périphérique sous-jacent, vous devez convertir la chaîne en octets avant d'écrire. Le flux de caractères est un wrapper pour le flux d'octets. Le flux de caractères accepte directement les chaînes. Il convertit les chaînes en octets en interne, puis les écrit sur le périphérique sous-jacent. Cela nous permet d'écrire ou de lire des chaînes sur le périphérique. Périphérique IO pratique.
Lors de la conversion de caractères en octets, faites attention aux problèmes d'encodage, car convertir une chaîne en un tableau d'octets revient en fait à la convertir en une certaine forme d'octet codée du caractère, et l'inverse est vrai lors de la lecture.
3. Qu'est-ce que la sérialisation Java et comment implémenter la sérialisation Java ? Ou veuillez expliquer le rôle de l'interface sérialisable.
Nous transférons parfois un objet Java dans un flux d'octets ou restaurons un objet Java à partir d'un flux d'octets. Par exemple, nous devons stocker l'objet Java sur le disque dur ou le transmettre au réseau pour d'autres ordinateurs. , dans ce processus, nous pouvons écrire notre propre code pour convertir un objet Java en un flux d'octets dans un certain format, puis le transmettre.
Cependant, jre lui-même fournit ce support. Nous pouvons appeler la méthode writeObject de OutputStream pour le faire. Si nous voulons que Java le fasse pour nous, l'objet à transférer doit implémenter l'interface sérialisable de cette manière. , lors de la compilation de javac, un traitement spécial sera effectué pour que la classe compilée puisse être exploitée par la méthode writeObject. C'est ce qu'on appelle la sérialisation. La classe qui doit être sérialisée doit implémenter l'interface Serialisable. Cette interface est une mini interface dans laquelle il n'est pas nécessaire d'implémenter des méthodes.
Par exemple, dans le développement Web, si l'objet est enregistré dans la session et que Tomcat doit sérialiser l'objet Session sur le disque dur lors du redémarrage, cet objet doit implémenter l'interface Serialisable. Si un objet doit être transmis sur le réseau via un système distribué, l'objet transmis doit implémenter l'interface sérialisable.
4. Décrivez le mécanisme principal de chargement des fichiers de classe par JVM ?
Le chargement des classes dans JVM est implémenté par ClassLoader et ses sous-classes. Java ClassLoader est un composant important du système d'exécution Java. Il est responsable de la recherche et du chargement des classes à partir des fichiers de classe au moment de l'exécution.
(Recommandations de didacticiel associées : Tutoriel d'introduction à Java)
5. Quelle est la différence entre le tas et la pile.
La mémoire Java est divisée en deux catégories, l'une est la mémoire de pile et l'autre est la mémoire de tas. La mémoire de pile signifie que lorsque le programme entre dans une méthode, un espace de stockage privé sera alloué à cette méthode pour stocker les variables locales à l'intérieur de cette méthode. Lorsque cette méthode se terminera, la pile allouée à cette méthode sera également libérée. par conséquent.
Le tas est une mémoire qui a des fonctions différentes de la pile. Il est généralement utilisé pour stocker des données qui ne sont pas dans la pile de méthodes actuelle. Par exemple, les objets créés à l'aide de new sont placés dans le tas. ne finira pas avec la méthode. Et disparaîtra. Une fois les variables locales de la méthode modifiées avec final, elles sont placées dans le tas au lieu de la pile.
6. Qu'est-ce que GC ? Pourquoi existe-t-il GC ?
GC signifie garbage collection (Gabage Collection) Le traitement de la mémoire est l'endroit où les programmeurs sont sujets à des problèmes, tels qu'une mémoire oubliée ou erronée. peut provoquer une instabilité ou même un effondrement du programme ou du système. La fonction GC fournie par Java peut détecter automatiquement si l'objet dépasse la portée pour atteindre l'objectif de recyclage automatique de la mémoire. Le langage Java ne fournit pas de méthode d'opération explicite pour libérer la mémoire allouée. .
7. Avantages et principes de la collecte des déchets. Et considérons 2 mécanismes de recyclage.
Une caractéristique notable du langage Java est l'introduction d'un mécanisme de récupération de place, qui résout le problème de gestion de la mémoire le plus gênant pour les programmeurs C++. Cela évite aux programmeurs Java de prendre en compte la gestion de la mémoire lors de l'écriture de programmes. En raison du mécanisme de récupération de place, les objets en Java n'ont plus le concept de « portée ». Seules les références aux objets ont une « portée ».
Le garbage collection peut prévenir efficacement les fuites de mémoire et utiliser efficacement la mémoire disponible. Le garbage collector fonctionne généralement comme un thread de bas niveau distinct, effaçant et recyclant les objets du tas de mémoire qui sont morts ou n'ont pas été utilisés depuis longtemps dans des circonstances imprévisibles. Les programmeurs ne peuvent pas appeler le garbage collector en temps réel pour gérer certaines choses. les objets ou tous les objets sont récupérés.
Le mécanisme de recyclage comprend la collecte des déchets de copie générationnelle, la collecte des déchets marquée et la collecte des déchets incrémentielle.
8. Quel est le principe de base du garbage collector ? Le garbage collector peut-il récupérer la mémoire immédiatement ? Existe-t-il un moyen de demander activement à la machine virtuelle d'effectuer un garbage collection ?
Pour GC, lorsque le programmeur crée un objet, GC commence à surveiller l'adresse, la taille et l'utilisation de l'objet. Habituellement, GC utilise un graphe orienté pour enregistrer et gérer tous les objets du tas. De cette manière, il est déterminé quels objets sont « atteignables » et quels objets sont « inaccessibles ». Lorsque le GC détermine que certains objets sont « inaccessibles », le GC est responsable de la récupération de ces espaces mémoire.
Les programmeurs peuvent exécuter manuellement System.gc() pour indiquer au GC de s'exécuter, mais la spécification du langage Java ne garantit pas que le GC sera exécuté.
9. En Java, quelle est la différence entre throw et throws ?
throw est utilisé pour lancer un objet instancié de la classe java.lang.Throwable, ce qui signifie que vous pouvez le lancer. le mot-clé throw Throw an Exception, tel que :
throw new IllegalArgumentException("XXXXXXXXX")
La fonction de throws fait partie de la déclaration et de la signature de la méthode, et la méthode lève l'exception correspondante afin que l'appelant peut le gérer. En Java, toute exception vérifiée non gérée doit être déclarée de force dans la clause throws.
(Tutoriel vidéo recommandé : cours Java )
10. Y aura-t-il une fuite de mémoire dans Java Veuillez décrire brièvement.
Expliquez d'abord ce qu'est une fuite de mémoire : ce qu'on appelle une fuite de mémoire signifie qu'un objet ou une variable qui n'est plus utilisé par le programme a été occupé dans la mémoire. Il existe un mécanisme de garbage collection en Java, qui peut garantir que lorsque l'objet n'est plus référencé, l'objet sera automatiquement effacé de la mémoire par le garbage collector.
Étant donné que Java utilise un graphe orienté pour la gestion du garbage collection, il peut éliminer le problème des cycles de référence, par exemple, s'il y a deux objets qui se référencent l'un l'autre, tant qu'ils ne sont pas accessibles depuis le processus racine. , le GC peut également les recycler.
Fuites de mémoire en Java : des fuites de mémoire sont susceptibles de se produire lorsque des objets à durée de vie longue contiennent des références à des objets à durée de vie courte, bien que les objets à durée de vie courte ne soient plus nécessaires, en raison du long cycle de vie. L'objet conserve sa référence et ne peut pas être recyclé. C'est le scénario dans lequel des fuites de mémoire se produisent en Java. En termes simples, le programmeur peut créer un objet et ne plus jamais l'utiliser, mais l'objet est toujours utilisé comme référence. L'objet est inutile mais ne peut pas être recyclé par le garbage collector. C'est la situation où des fuites de mémoire peuvent se produire en Java. Par exemple, dans le système de cache, nous chargeons un objet et le plaçons dans le cache (par exemple, dans une carte globale). object). ), puis ne l'utilisez plus jamais. Cet objet est toujours référencé par le cache, mais n'est plus utilisé.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
