Maison  >  Article  >  Java  >  Compilation de questions d'entretien Java courantes

Compilation de questions d'entretien Java courantes

(*-*)浩
(*-*)浩original
2019-11-29 13:55:112596parcourir

Compilation de questions d'entretien Java courantes

Quelles sont les caractéristiques de l'orientation objet

La soi-disant encapsulation consiste à encapsuler des choses objectives dans Classe d'objets abstraits, et la classe peut permettre à ses propres données et méthodes d'être exploitées uniquement par des classes ou des objets de confiance, et cacher les informations à ceux qui ne sont pas fiables. L'encapsulation est l'une des caractéristiques de l'orientation objet et la principale caractéristique des concepts d'objets et de classes. (Étude recommandée : Questions d'entretien courantes Java)

L'héritage signifie qu'une sous-classe obtient les attributs et les méthodes de la classe parent. Par exemple, si un chien est un type d’animal, on peut également dire qu’il hérite des caractéristiques de l’animal ou que le chien est une sous-classe de l’animal.

Le polymorphisme signifie qu'une méthode ne peut avoir qu'un seul nom, mais elle peut avoir plusieurs formes, c'est-à-dire que plusieurs méthodes portant le même nom peuvent être définies dans le programme, qui est décrit par "une interface, plusieurs méthodes ". Vous pouvez transmettre les paramètres de méthode et les références de type

Cinq principes : Principe de responsabilité unique SRP Principe ouvert et fermé Principe de remplacement OCP Principe de dépendance LSP Principe de séparation d'interface DIP

Membre variables et variables locales La différence

* A : Différentes positions dans la classe

* Variables membres : en dehors des méthodes dans la classe

* Variables locales : Dans la définition de méthode ou la déclaration de méthode

* B : Différents emplacements en mémoire

* Variables membres : En mémoire tas (les variables membres appartiennent à des objets , objets dans la mémoire tas)

* Variables locales : dans la mémoire de la pile (les variables locales appartiennent aux méthodes, les méthodes sont poussées dans la mémoire de la pile)

* C : différents cycles de vie

* Variables membres : existent lorsque l'objet est créé et disparaissent lorsque l'objet disparaît

* Variables locales : existent lorsque la méthode est appelée et disparaissent lorsque la méthode est appelée

* D : Différentes valeurs d'initialisation

* Variables membres : ont des valeurs d'initialisation par défaut

* Variables locales : aucune valeur d'initialisation par défaut, doit être définie , attribué, puis peut être utilisé.

La différence entre les variables statiques et les variables membres

* Les variables statiques sont également appelées variables de classe. Les variables membres sont également appelées variables d'objet

* A : Différentes appartenances

* Les variables statiques appartiennent à des classes, elles sont donc également appelées variables de classe

* Les variables membres appartiennent à des objets, elles sont donc également appelées variables d'instance ( variables objet)

* B : Différents emplacements en mémoire

* Les variables statiques sont stockées dans la zone statique de la zone méthode

* Les variables membres sont stockées dans la mémoire du tas

* C : La mémoire apparaît à différents moments

* Les variables statiques sont chargées au fur et à mesure du chargement de la classe et disparaissent à mesure que la classe disparaît

* Les variables membres suivent l'Existe de l'objet lors de sa création et disparaissent lorsque l'objet disparaît

* D : Différents appels

* Les variables statiques peuvent être appelées via des noms de classe ou via des objets

* Les variables membres ne peuvent être appelées que via des noms d'objet

La différence et l'application de ceci et super

* A : Que signifie ceci et super

* ceci : représente la référence de l'objet actuel, celui qui m'appelle, je représenterai cette personne

* super : représente la référence de la classe parent de l'objet courant

* B : La différence entre this et super

* a : Appel des variables membres

* this. Les variables membres appellent les variables membres de cette classe ou de la classe parent. Variables membres

* super. Les variables membres appellent les variables membres de la classe parent

* b : appelle la méthode constructeur.

* this(...) appelle la méthode constructeur de cette classe

* super(...) appelle la méthode constructeur de la classe parent

* c: appelle la méthode membre

* this. La méthode membre appelle la méthode membre de cette classe, vous pouvez également appeler la méthode de la classe parent

* super. la classe parent

Quelles sont les méthodes de tri ? Veuillez lister les méthodes de tri

 : tri par insertion (tri par insertion directe, tri Hill), tri par échange (tri à bulles, tri rapide), tri par sélection (tri par sélection directe, tri par tas), tri par fusion, tri par distribution (tri par boîte, tri par base)

Pseudo code de tri rapide. La différence entre

String, StringBuffer et StringBuilder.

La longueur de String est immuable ;


La longueur de StringBuffer est variable si vous opérez fréquemment sur le contenu de la chaîne, surtout si le contenu est modifié. , utilisez StringBuffer. Si vous avez finalement besoin de String, utilisez la méthode toString() de StringBuffer ;

StringBuilder démarre à partir du JDK 5 et ajoute une méthode équivalente pour une utilisation avec un seul thread à la classe StringBuffer ; classe ; vous devez généralement utiliser la classe StringBuilder de préférence car elle prend en charge toutes les mêmes opérations, mais est plus rapide car elle n'effectue pas de synchronisation.

La différence entre surcharge et remplacement. Une méthode surchargée peut-elle changer le type de valeur de retour ?

Réponse : remplacement des méthodes et surcharge. La surcharge est une manifestation différente du polymorphisme Java.

La substitution est une manifestation du polymorphisme entre la classe parent et la sous-classe, et la surcharge est une manifestation du polymorphisme dans une classe. Si une méthode définie dans une sous-classe a le même nom et les mêmes paramètres que sa classe parent, on dit que la méthode est prioritaire.

Lorsqu'un objet d'une sous-classe utilise cette méthode, la définition dans la sous-classe sera appelée. Pour cela, la définition dans la classe parent semblera "protégée". Si plusieurs méthodes portant le même nom sont définies dans une classe et qu’elles ont un nombre différent de paramètres ou des types de paramètres différents, on parle de surcharge de méthode. Une méthode surchargée peut modifier le type de valeur de retour.

Quelle est la différence entre final et finalement ?

Réponse : final : modificateur (mot clé) ; Les nouvelles sous-classes dérivées ne peuvent pas être héritées en tant que classes parentes, donc une classe ne peut pas être déclarée à la fois abstraite et finale ; déclarer des variables ou des méthodes comme finales garantit qu'elles ne seront pas modifiées lors de l'utilisation. Les variables déclarées comme finales doivent recevoir une valeur initiale lorsqu'elles sont déclarées. , et ne peuvent être lues que dans les références ultérieures et ne peuvent pas être modifiées ; les méthodes déclarées comme finales ne peuvent également être utilisées que et ne peuvent pas être surchargées.

finally : fournissez un bloc final pour effectuer toute opération de nettoyage pendant la gestion des exceptions ; si une exception est levée, la clause catch correspondante sera exécutée, puis le contrôle entrera dans le bloc final (le cas échéant).

Plusieurs anomalies de fonctionnement courantes.

java.lang.nullpointerexception (exception de pointeur nul)

java.lang.classnotfoundexception (la classe spécifiée n'existe pas)

java.lang.arithmeticexception ( exception d'opération mathématique)

java.lang.arrayindexoutofboundsexception (exception d'index de tableau hors limites)

IOException (exception d'entrée et de sortie)

Deux problèmes mineurs courants avec les opérations de tableau sont pointeur hors limites et vide

* A : Démonstration de cas

* a : ArrayIndexOutOfBoundsException : exception hors limites de l'index de tableau

* Raison : Vous avez accédé à un indice inexistant.

* b : NullPointerException : Exception de pointeur nul

* Raison : Le tableau ne pointe plus vers la mémoire du tas. Et vous utilisez également des noms de tableaux pour accéder aux éléments.

  * int[] arr = {1,2,3};
  * arr = null;
  * System.out.println(arr[0]);

Comment le langage JAVA gère-t-il les exceptions ? Que signifient les mots-clés : throws, throw, try, catch et enfin ? Une exception peut-elle être levée dans le bloc try ?

Réponse : Java gère les exceptions via des méthodes orientées objet, classe diverses exceptions et fournit une bonne interface.

En Java, chaque exception est un objet, qui est une instance de la classe Throwable ou d'autres sous-classes. Lorsqu'une exception se produit dans une méthode, un objet d'exception est généré. L'objet contient des informations sur l'exception. La méthode d'appel de cet objet peut intercepter l'exception et la gérer.

La gestion des exceptions de Java est implémentée à travers 5 mots-clés : try, catch, throw, throws et enfin. Généralement, try est utilisé pour exécuter un programme. Si une exception se produit, le système lèvera une exception à ce moment-là, vous pouvez l'attraper par son type, ou enfin par le gestionnaire par défaut à gérer.

Utilisez try pour spécifier un programme qui empêche toutes les "exceptions". Immédiatement après le programme try, une clause catch doit être incluse pour spécifier le type « d'exception » que vous souhaitez intercepter.

L'instruction throw est utilisée pour lancer explicitement une "exception".

throws est utilisé pour indiquer diverses "exceptions" qu'une fonction membre peut lever.

Garantit enfin qu'un morceau de code sera exécuté quelle que soit "l'exception" qui se produit.

Vous pouvez écrire une instruction try en dehors d'un appel de fonction membre et écrire une autre instruction try à l'intérieur de la fonction membre pour protéger un autre code. Chaque fois qu'une instruction try est rencontrée, le cadre "exception" est placé sur la pile jusqu'à ce que toutes les instructions try soient terminées.

Si l'instruction try de niveau suivant ne gère pas une certaine "exception", la pile se développera jusqu'à ce qu'elle rencontre une instruction try qui gère cette "exception".

Lorsque le serveur reçoit les données du formulaire soumises par l'utilisateur, appelle-t-il la méthode doGet() ou doPost() du servlet ?

Réponse : L'élément ff9c23ada1bcecdd1a0fb5d5a0f18437 du HTML a un attribut de méthode, qui est utilisé pour spécifier la méthode de soumission du formulaire. Sa valeur peut être get ou post.

Notre servlet personnalisé remplacera généralement l'une ou les deux méthodes doGet() ou doPost() S'il s'agit d'une requête GET, la méthode doGet() sera appelée. S'il s'agit d'une requête POST, doPost. sera appelée la méthode .(), alors pourquoi cela se produit-il ?

Notre Servlet personnalisé hérite généralement de HttpServlet, HttpServlet hérite de GenericServlet et remplace la méthode service(), qui est définie dans l'interface Servlet.

La méthode service() réécrite par HttpServlet obtiendra d'abord la méthode demandée par l'utilisateur, puis appellera doGet(), doPost(), doPut(), doDelete() et d'autres méthodes selon la méthode de requête . Si vous personnalisez le Servlet Si ces méthodes sont remplacées dans , alors la méthode écrasée (personnalisée) sera évidemment appelée, ce qui est évidemment une application du modèle de méthode modèle (si vous ne comprenez pas, veuillez vous référer au chapitre 37 de . le livre "Java et Patterns") .

Bien sûr, la méthode service() peut également être directement réécrite dans un servlet personnalisé, donc quel que soit le type de requête, elle peut être traitée par votre propre code, ce qui est plus adapté aux scénarios où la méthode de requête n'est pas distingué.

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

L'interface est une variante de la classe abstraite, et toutes les méthodes de l'interface sont abstraites. Une classe abstraite est une classe qui déclare l’existence d’une méthode sans l’implémenter.

Les interfaces peuvent avoir plusieurs héritages, mais les classes abstraites ne le peuvent pas.

Les interfaces définissent des méthodes mais ne peuvent pas les implémenter, tandis que les classes abstraites peuvent implémenter certaines méthodes.

Le type de données de base dans l'interface est statique mais l'image abstraite ne l'est pas.

Fuite de mémoire et débordement de mémoire ?

Fuite de mémoire : cela signifie qu'une fois que l'application a demandé de la mémoire, elle ne peut pas libérer l'espace mémoire pour lequel elle a demandé. Les dommages causés par une fuite de mémoire peuvent être ignorés, mais si elle est autorisée à se développer. , cela entraînera un débordement de mémoire.

Par exemple : après la lecture du fichier, le flux doit être fermé à temps et la connexion à la base de données doit être libérée.

Débordement de mémoire : cela signifie que lorsque l'application demande de la mémoire, il n'y a pas d'espace mémoire final à utiliser.

Par exemple : Pour les gros lots d'importation de données dans le projet, nous utilisons la soumission par lots segmentée.

Qu'est-ce que la synchronisation des threads ?

1. Le but de la synchronisation des threads est de protéger les ressources contre les dommages lorsque plusieurs threads interrogent une ressource.

2. La méthode de synchronisation des threads est implémentée via des verrous. Chaque objet a exactement un verrou est associé à un objet spécifique. Une fois qu'un thread acquiert le verrou d'objet, les autres threads accèdent à l'objet. accéder à d’autres méthodes non synchronisées de l’objet.

3. Pour les méthodes de synchronisation statique, le verrou est destiné à cette classe et l'objet verrou est l'objet Class de cette classe. Les verrous des méthodes statiques et non statiques n'interfèrent pas les uns avec les autres. Lorsqu'un thread acquiert un verrou et accède à une méthode synchronisée sur un autre objet dans une méthode synchronisée, il acquiert les deux verrous d'objet.

4. Pour la synchronisation, il est essentiel de toujours savoir sur quel objet se synchroniser.

5. Lorsque vous écrivez des classes thread-safe, vous devez toujours faire attention à porter des jugements corrects sur la logique et la sécurité de plusieurs threads en compétition pour accéder aux ressources, analyser les opérations « atomiques » et vous assurer que les autres threads sont utilisé lors des opérations atomiques. Le thread ne peut pas accéder à la ressource concurrente.

6. Lorsque plusieurs threads attendent un verrouillage d'objet, le thread qui n'a pas acquis le verrou sera bloqué.

7. L'impasse est causée par des threads qui attendent les uns les autres pour se verrouiller. La probabilité d'apparition est très faible dans la pratique. Si je vous demande vraiment d'écrire un programme de blocage, cela risque de ne pas fonctionner, haha. Cependant, une fois qu'un blocage se produit dans le programme, le programme mourra.

Comprendre le multi-threading ?

La même chose faite par différentes personnes est le multi-threading.

Lorsque vous cuisinez à la cafétéria, une personne est monothread. Ouvrir N fenêtres et N personnes mangeant en même temps est multi-thread

Le concept de base des threads, le statut de base de les threads et la relation entre les états Relation :

Thread fait référence à une unité d'exécution qui peut exécuter le code du programme pendant l'exécution du programme. Chaque programme a au moins un thread, qui est le programme lui-même. Les threads en Java ont quatre états : en cours d’exécution, prêt, suspendu et terminé.

Quelles sont les collections ?

Fonctionnalités de la liste : les éléments sont rangés dans l'ordre, les éléments peuvent être répétés

Fonctionnalités de la carte : les éléments sont stockés par paires clé-valeur, aucun ordre de mise

Définir fonctionnalités : éléments Il n'y a pas d'ordre de placement et les éléments ne peuvent pas être répétés (Remarque : bien qu'il n'y ait pas d'ordre de placement des éléments, la position de l'élément dans l'ensemble est déterminée par le HashCode de l'élément, et sa position est en fait corrigé)

L'interface List a trois classes d'implémentation : LinkedList, ArrayList, Vector

LinkedList : L'implémentation sous-jacente est basée sur une liste chaînée. La mémoire de la liste chaînée est dispersée. propre adresse mémoire et stocke également l’adresse de l’élément suivant. Les listes liées sont rapides à ajouter et à supprimer, mais lentes à rechercher

La différence entre ArrayList et Vector : ArrayList n'est pas thread-safe et a une grande efficacité ; Vector est basé sur la sécurité des threads et a une faible efficacité

L'interface Set a deux classes d'implémentation : HashSet (la couche inférieure est implémentée par HashMap), LinkedHashSet

L'interface SortedSet a une classe d'implémentation : TreeSet (la couche inférieure est implémentée par un arbre binaire équilibré)

L'interface de requête a une classe d'implémentation : LinkList

L'interface Map a trois classes d'implémentation : HashMap, HashTable, LinkeHashMap

HashMap n'est pas thread-safe, n'est pas efficace et prend en charge null; HashTable est thread-safe, inefficace et ne prend pas en charge null

SortedMap a une classe d'implémentation : TreeMap

En fait, la chose la plus importante est que la liste est utilisée pour traiter les séquences, tandis que set est utilisé pour traiter les ensembles. Map est une classe de base qui stocke les paires clé-valeur

pour la lecture et l'écriture de fichiers :

La classe File Reader et la classe FileWriter héritent respectivement de la classe Reader et de la classe Writer. La classe FileReader est utilisée pour lire des fichiers et la classe File Writer est utilisée pour écrire des données dans des fichiers. Avant d'utiliser ces deux types, vous devez appeler leurs méthodes de construction pour créer les objets correspondants, puis appeler la lecture() ou l'écriture correspondante. () méthode.

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