Maison  >  Article  >  Java  >  Partager un résumé des questions d'entretien en Java

Partager un résumé des questions d'entretien en Java

零下一度
零下一度original
2017-06-28 16:02:041077parcourir

1) Qu'est-ce que la machine virtuelle Java ? Pourquoi Java est-il appelé « langage de programmation indépendant de la plate-forme » ?

La machine virtuelle Java est un processus de machine virtuelle qui peut exécuter du bytecode Java. Les fichiers source Java sont compilés en fichiers de bytecode qui peuvent être exécutés par la machine virtuelle Java.
Java est conçu pour permettre aux applications de s'exécuter sur n'importe quelle plate-forme sans obliger les programmeurs à réécrire ou recompiler séparément pour chaque plate-forme. La machine virtuelle Java rend cela possible car elle connaît la longueur des instructions et d'autres caractéristiques de la plate-forme matérielle sous-jacente.

2) Quelle est la différence entre JDK et JRE ?

Le Java Runtime Environment (JRE) est la machine virtuelle Java qui exécutera les programmes Java. Il contient également les plug-ins de navigateur requis pour exécuter l'applet. Le Java Development Kit (JDK) est un kit complet de développement logiciel Java, comprenant JRE, un compilateur et d'autres outils (tels que JavaDoc, le débogueur Java), qui permet aux développeurs de développer, de compiler et d'exécuter des applications Java.

3) Que signifie le mot clé "static" ? Est-il possible de remplacer une méthode privée ou statique en Java ?

Le mot clé "static" indique qu'une variable membre ou une méthode membre est accessible sans variable d'instance de la classe à laquelle elle appartient.
Les méthodes statiques en Java ne peuvent pas être remplacées car les remplacements de méthodes sont basés sur une liaison dynamique au moment de l'exécution, tandis que les méthodes statiques sont liées statiquement au moment de la compilation. Les méthodes statiques ne sont liées à aucune instance de la classe, elles ne s’appliquent donc pas conceptuellement.

4) Est-il possible d'accéder à des variables non statiques dans un environnement statique ?

Les variables statiques appartiennent à des classes en Java et leurs valeurs sont les mêmes dans toutes les instances. Lorsqu'une classe est chargée par la machine virtuelle Java, les variables statiques sont initialisées. Si votre code tente d'accéder à des variables non statiques sans utiliser d'instance, le compilateur signalera une erreur car ces variables n'ont pas encore été créées et ne sont associées à aucune instance.

5) Quels sont les types de données supportés par Java ? Qu'est-ce qu'un carton de déballage automatique ?

Les huit types de données de base pris en charge par le langage Java sont : byte, short, int, long, float, double, boolean, char
Autoboxing est le type de données de base du compilateur Java et une conversion entre les types d’emballages d’objets correspondants. Par exemple : convertir int en Integer, double en Double, etc. Sinon, il est automatiquement déballé.

6) Que signifient le remplacement et la surcharge de méthodes en Java ?

La surcharge de méthodes en Java se produit lorsque deux méthodes ou plus de la même classe ont le même nom de méthode mais des paramètres différents. En revanche, le remplacement de méthode signifie que la sous-classe redéfinit la méthode de la classe parent. Les remplacements de méthode doivent avoir le même nom de méthode, la même liste de paramètres et le même type de retour. Un remplacement ne peut pas restreindre l'accès aux méthodes qu'il remplace.

7) Qu'est-ce qu'un constructeur en Java ? Qu’est-ce que la surcharge du constructeur ? Qu'est-ce qu'un constructeur de copie ?

Lorsqu'un nouvel objet est créé, le constructeur sera appelé. Chaque classe a un constructeur. Dans le cas où le programmeur ne fournit pas de constructeur pour la classe, le compilateur Java créera un constructeur par défaut pour la classe.
La surcharge de constructeur et la surcharge de méthode en Java sont très similaires. Plusieurs constructeurs peuvent être créés pour une classe. Chaque constructeur doit avoir sa propre liste de paramètres unique.
Java ne prend pas en charge les constructeurs de copie comme C++. Cette différence est due au fait que Java ne créera pas de constructeur de copie par défaut si vous n'écrivez pas le constructeur vous-même.

8) Java prend-il en charge l'héritage multiple ?

Les classes en Java ne prennent pas en charge l'héritage multiple, mais uniquement l'héritage unique (c'est-à-dire qu'une classe n'a qu'une seule classe parent). Cependant, les interfaces Java prennent en charge l'héritage multiple, c'est-à-dire qu'une sous-interface peut avoir plusieurs interfaces parents. (La fonction d'une interface est d'étendre les fonctions d'un objet. Une sous-interface hérite de plusieurs interfaces parents, indiquant que la sous-interface étend plusieurs fonctions. Lorsqu'une classe implémente l'interface, la classe étend les fonctions correspondantes).

9) Quelle est la différence entre interface et classe abstraite ?

Java fournit et prend en charge la création de classes et d'interfaces abstraites. Leurs implémentations ont quelque chose en commun, mais la différence est la suivante :
Toutes les méthodes de l'interface sont implicitement abstraites. Une classe abstraite peut contenir à la fois des méthodes abstraites et non abstraites.
Une classe peut implémenter de nombreuses interfaces, mais elle ne peut hériter que d'une seule classe abstraite.
Une classe n'a pas besoin d'implémenter toutes les méthodes déclarées par les classes abstraites et les interfaces. Bien entendu, dans ce cas, la classe doit également implémenter. être déclaré abstrait.
Les classes abstraites peuvent implémenter des interfaces sans fournir d'implémentations de méthodes d'interface.
Les variables déclarées dans les interfaces Java sont définitives par défaut. Les classes abstraites peuvent contenir des variables non finales.
Les fonctions membres dans les interfaces Java sont publiques par défaut. Les fonctions membres d'une classe abstraite peuvent être privées, protégées ou publiques.
Les interfaces sont absolument abstraites et ne peuvent pas être instanciées. Une classe abstraite ne peut pas être instanciée, mais elle peut être appelée si elle contient une méthode principale.

10) Que sont le passage par valeur et le passage par référence ?

Les objets sont transmis par valeur, ce qui signifie qu'une copie de l'objet est transmise. Par conséquent, même si vous modifiez la copie de l'objet, la valeur de l'objet source ne sera pas affectée.
Les objets sont passés par référence, ce qui signifie que ce qui est passé n'est pas l'objet réel, mais une référence à l'objet. Par conséquent, les modifications apportées en externe à l’objet référencé seront reflétées dans tous les objets.
11) Quelle est la différence entre un processus et un thread ?

Un processus est une application en cours d'exécution et un thread est une séquence d'exécution au sein d'un processus. Un processus peut avoir plusieurs threads. Les threads sont également appelés processus légers.

12) Combien de façons différentes existe-t-il de créer un fil de discussion ? Lequel préfères-tu ? Pourquoi?

Il existe trois façons de créer des threads :
Hériter de la classe Thread
Implémenter l'interface Runnable
Les applications peuvent utiliser le framework Executor pour créer des pools de threads
Implémenter l'interface Runnable. La méthode est plus efficace car elle ne nécessite pas d’hériter de la classe Thread. Dans le cas où d'autres objets ont été hérités dans la conception de l'application, cela nécessite un héritage multiple (et Java ne prend pas en charge l'héritage multiple), et seules des interfaces peuvent être implémentées. Dans le même temps, le pool de threads est également très efficace et facile à mettre en œuvre et à utiliser.

13) Expliquez brièvement les différents états disponibles des threads.

Nouveau, exécutable, en cours d'exécution, bloqué, mort


14) Quelle est la différence entre les méthodes synchronisées et les blocs de code synchronisés ?

Différence :
La méthode de synchronisation utilise par défaut cet objet de classe ou l'objet de classe actuel comme verrou
Le bloc de code de synchronisation peut choisir ce qu'il faut verrouiller, ce qui est plus granulaire que la synchronisation ; On peut choisir de synchroniser uniquement la partie du code qui posera des problèmes de synchronisation au lieu de la méthode entière

15) Comment se fait la synchronisation des threads à l'intérieur du moniteur (Monitor) ? Quel niveau de synchronisation le programme doit-il effectuer ?

Les moniteurs et les verrous sont utilisés ensemble dans la machine virtuelle Java. Le moniteur surveille un bloc de code synchronisé pour garantir qu'un seul thread exécute le bloc de code synchronisé à la fois. Chaque moniteur est associé à une référence d'objet. Le thread n'est pas autorisé à exécuter du code synchronisé avant d'acquérir le verrou.

16) Qu'est-ce qu'une impasse ?

Un blocage se produit lorsque deux processus ou plus attendent que d'autres processus terminent leur exécution avant de pouvoir continuer. Le résultat est que tous les processus sont bloqués dans une attente infinie.

17) Comment s'assurer que N threads peuvent accéder à N ressources sans provoquer de blocage ?

Lors de l'utilisation du multi-threading, un moyen très simple d'éviter les blocages consiste à spécifier l'ordre dans lequel les verrous sont acquis et à forcer les threads à acquérir les verrous dans l'ordre spécifié. Par conséquent, si tous les threads se verrouillent et libèrent les verrous dans le même ordre, il n’y aura pas de blocage.

18) Quelles sont les interfaces de base du framework de classes de collection Java ?

L'interface de classe collection spécifie un ensemble d'objets appelés éléments. Chaque classe d'implémentation concrète de l'interface de la classe collection peut choisir de sauvegarder et de trier les éléments à sa manière. Certaines classes de collection autorisent les clés en double, d'autres non.
Les classes de collection Java fournissent un ensemble d'interfaces et de classes bien conçues qui prennent en charge les opérations sur un ensemble d'objets. Les interfaces les plus basiques des classes de collection Java sont :
Collection : représente un groupe d'objets, chaque objet est son élément enfant.
Ensemble : Collection qui ne contient pas d'éléments en double.
Liste : une collection ordonnée pouvant contenir des éléments répétés.
Map : un objet qui peut mapper des clés à des valeurs ne peut pas être répété.

19) Pourquoi la classe collection n'implémente-t-elle pas les interfaces Cloneable et Serialisable ?

La sémantique et la signification du clonage ou de la sérialisation sont liées à l'implémentation spécifique. Par conséquent, il appartient à l’implémentation spécifique de la classe de collection de déterminer comment elle est clonée ou sérialisée.

20) Qu'est-ce qu'un itérateur ?

L'interface Iterator fournit de nombreuses méthodes pour itérer sur les éléments de la collection. Chaque classe de collection contient des méthodes d'itération qui renvoient des instances d'itérateur. L'itérateur peut supprimer des éléments de la collection sous-jacente pendant le processus d'itération, mais elle ne peut pas être supprimée en appelant directement le remove(Object Obj) de la collection. Elle peut être supprimée via la méthode remove() de l'itérateur.


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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn