Les questions d’entrevue Core Java vous aident à vous préparer pour les entretiens basés sur Java. Que vous soyez un débutant ou un professionnel très expérimenté, Core Java joue un rôle crucial dans n’importe quelle entrevue Java/JEE.
Core Java est le domaine préféré dans la plupart des entrevues et joue un rôle crucial dans la décision de l’issue de votre entretien.
Ce message provient directement de mes 14+ années de programmation Java et de nombreuses expériences d’entrevue. Java 16 a été récemment publié et j’ai mis à jour le message pour inclure certaines questions des dernières versions.
Questions et réponses d’entrevue Core Java
I have already written a lot about java interview questions for specific topics such as String, Collections, and Multithreading.
- Questions d’entrevue sur les chaînes Java
- Questions d’entrevue sur les threads Java
- Questions d’entrevue sur les collections Java
- Questions d’entrevue sur les exceptions Java
Voici quelques-unes des questions d’entretien Java les plus importantes avec des réponses que vous devriez connaître. Vous pouvez mettre en signet ce post pour réviser vos connaissances avant de vous rendre à un entretien.
1. Citez quelques fonctionnalités importantes de la version Java 14 ?
Java 14 a été publié le 17 mars 2020. C’est une version Non-LTS. Certaines des fonctionnalités spécifiques aux développeurs de Java 14 sont :
- Expressions Switch – JEP 361
- Améliorations de la correspondance de motifs de l’opérateur instanceof – Fonctionnalité de prévisualisation, JEP 305
- Messages d’erreur NullPointerException utiles – JEP 358
- Blocs de texte – Deuxième prévisualisation, JEP 368
- Enregistrements – classe de données, fonctionnalité de prévisualisation, JEP 359.
2. Citez quelques fonctionnalités importantes de la version Java 13 ?
Java 13 a été lancé le 17 septembre 2019. C’est une version Non-LTS. Certaines des fonctionnalités spécifiques aux développeurs de Java 13 sont :
- Bloc de texte – Fonctionnalité de prévisualisation, JEP 355
- Expressions de commutation – Fonctionnalité de prévisualisation, JEP 354
- Réimplémentation de l’API Java Sockets – JEP 353
- Archive CDS dynamique – JEP 350
- Méthode FileSystem.newFileSystem()
- Fonctions DOM et SAX avec prise en charge des espaces de noms
- Prise en charge Unicode 12.1
- Améliorations de ZGC pour restituer la mémoire inutilisée – JEP 351
3. Nommez quelques fonctionnalités importantes de la version Java 12 ?
Java 12 a été lancé le 19 mars 2019. Il s’agit d’une version non LTS. Certaines des Fonctionnalités Java 12 sont :
- Changements JVM – JEP 189, JEP 346, JEP 344 et JEP 230.
- Expressions de commutation
- Méthode mismatch() de fichier
- Formatage de nombres compacts
- Collecteurs de découpage dans l’API Stream
- Nouvelles méthodes dans la classe String
- JEP 334 : API de constantes JVM
- JEP 305 : Pattern Matching pour instanceof
- Les littéraux de chaîne brute sont supprimés du JDK 12.
4. Quelles sont les caractéristiques importantes de la version Java 11 ?
Java 11 est la deuxième version LTS après Java 8. Ils ont changé le modèle de licence et de support, ce qui signifie que si vous téléchargez le JDK Oracle Java 11, vous devrez payer pour une utilisation commerciale. Si vous souhaitez utiliser une version gratuite, vous pouvez la télécharger depuis le site web OpenJDK.
Certaines des caractéristiques importantes de Java 11 sont :
- Nous pouvons exécuter un programme Java directement via la commande
java
. Le fichier source sera implicitement compilé et exécuté. Cela fait partie de l’implémentation de la fonctionnalité JEP 330. - Il y a 6 nouvelles méthodes ajoutées dans la classe String – isBlank(), lines(), strip(), stripLeading(), stripTrailing(), et repeat(). Vous pouvez en savoir plus à leur sujet dans notre article sur la classe Java String.
- La classe Files a obtenu deux nouvelles méthodes pour lire/écrire des données de chaîne – readString() et writeString().
- Nous pouvons utiliser « var » avec les expressions lambda aussi. Cela fait partie de l’implémentation de JEP 323.
- Epsilon : Un collecteur de déchets No-Op pour les environnements de test. Il s’agit d’une fonctionnalité expérimentale et fait partie de JEP 318.
Les modules Java EE et CORBA ont été supprimés de la version JDK standard. Le moteur JavaScript Nashorn a également été déprécié. - Les modules Java EE et CORBA ont été supprimés de la construction standard JDK. Le moteur Nashorn JavaScript est également déprécié.
- Nouveau Client HTTP (JEP 321) et Flight Recorder (JEP 328)
Pour un aperçu complet, veuillez lire Fonctionnalités Java 11.
5. Quelles sont les fonctionnalités importantes de la version Java 10?
Java 10 est la première version tous les six mois d’Oracle Corporation, donc ce n’est pas une version majeure comme les versions précédentes. Cependant, certaines des fonctionnalités importantes de Java 10 sont :
- Inférence de type de variable locale
- Améliorer java.util.Locale et les API connexes pour mettre en œuvre des extensions Unicode supplémentaires de balises de langue BCP 47.
- Permettre à HotSpot VM d’allouer le tas d’objets Java sur un dispositif de mémoire alternative, tel qu’un NV-DIMM, spécifié par l’utilisateur.
- Fournir un ensemble par défaut de certificats de l’Autorité de Certification racine (CA) dans le JDK.
Java 10 est principalement une version de maintenance, cependant, j’ai vraiment apprécié la fonctionnalité d’inférence de type de variable locale. Pour un aperçu détaillé de Java 10, veuillez consulter Fonctionnalités de Java 10.
6. Quelles sont les fonctionnalités importantes de la version Java 9?
Java 9 était une version majeure et a apporté de nombreuses fonctionnalités. Certaines des fonctionnalités importantes sont :
- REPL Java 9 (JShell)
- Système de modules Java 9
- Méthodes de fabrication pour Liste immuable, Ensemble, Carte et Carte.Entry
- Méthodes privées dans les interfaces
- Streams réactifs
- Améliorations du GC (collecteur de gravats)
Vous trouverez plus de détails à ce sujet à Fonctionnalités de Java 9.
7. Quelles sont les fonctionnalités importantes de la version Java 8?
Java 8 a été publié en mars 2014, ce qui en fait l’un des sujets brûlants dans les questions d’entretien Java. Si vous répondez à cette question clairement, cela montrera que vous aimez vous tenir à jour avec les dernières technologies.
Java 8 a été l’une des plus grandes versions depuis les annotations et les génériques de Java 5. Voici certaines des fonctionnalités importantes de Java 8:
- Changements d’interface avec des méthodes par défaut et statiques
- Interfaces fonctionnelles et Expressions Lambda
- API Java Stream pour les classes de collections
- API Java Date Time
I strongly recommend to go through above links to get proper understanding of each one of them, also read Java 8 Features.
8. Nommez quelques concepts de POO en Java?
Java est basé sur les concepts de programmation orientée objet, voici quelques-uns des concepts de POO implémentés dans la programmation Java.
- Abstraction
- Encapsulation
- Polymorphisme
- Héritage
- Association
- Agrégation
- Composition
En savoir plus à leur sujet à Concepts OOPS en Java.
9. Que signifie l’indépendance de la plateforme de Java?
L’indépendance de la plateforme signifie que vous pouvez exécuter le même programme Java sur n’importe quel système d’exploitation. Par exemple, vous pouvez écrire un programme Java sous Windows et l’exécuter sous Mac OS.
10. Qu’est-ce que JVM et est-ce qu’il est indépendant de la plateforme?
Java Virtual Machine (JVM) est le cœur du langage de programmation Java. JVM est responsable de la conversion du bytecode en code compréhensible par la machine. JVM n’est pas indépendant de la plateforme, c’est pourquoi vous avez différents JVM pour différents systèmes d’exploitation. Nous pouvons personnaliser JVM avec des Options Java, telles que l’allocation de mémoire minimale et maximale à JVM. On l’appelle virtuel parce qu’il fournit une interface qui ne dépend pas du système d’exploitation sous-jacent.
11. Quelle est la différence entre JDK et JVM?
Le Java Development Kit (JDK) sert à des fins de développement et la JVM en fait partie pour exécuter les programmes Java.
Le JDK fournit tous les outils, exécutables et binaires nécessaires pour compiler, déboguer et exécuter un programme Java. La partie exécution est gérée par la JVM pour fournir l’indépendance vis-à-vis de la machine.
12. Quelle est la différence entre JVM et JRE?
L’environnement d’exécution Java (JRE) est l’implémentation de la JVM. Le JRE se compose de la JVM et des binaires Java et d’autres classes pour exécuter avec succès tout programme. Le JRE ne contient pas d’outils de développement tels que le compilateur Java, le débogueur, etc. Si vous souhaitez exécuter un programme Java, vous devez avoir installé le JRE.
13. Quelle classe est la superclasse de toutes les classes?
java.lang.Object
est la classe de base pour toutes les classes Java et nous n’avons pas besoin de l’étendre.
14. Pourquoi Java ne prend pas en charge l’héritage multiple?
Java ne prend pas en charge l’héritage multiple pour les classes en raison du « problème du diamant ». Pour en savoir plus sur le problème du diamant avec exemple, lisez L’héritage multiple en Java.
Cependant, l’héritage multiple est pris en charge dans les interfaces. Une interface peut étendre plusieurs interfaces car elles ne déclarent que les méthodes et l’implémentation sera présente dans la classe qui les implémente. Il n’y a donc aucun problème de problème du diamant avec les interfaces.
15. Pourquoi Java n’est-il pas considéré comme un langage orienté objet pur?
Java n’est pas considéré comme un langage orienté objet pur car il prend en charge les types de base tels que int, byte, short, long, etc. Je pense que cela apporte une simplicité au langage lorsque nous écrivons notre code. Java aurait pu avoir des objets enveloppes pour les types de base, mais cela n’aurait apporté aucun avantage pour la représentation.
Comme nous le savons, pour tous les types de base, nous avons des classes enveloppes telles que Integer, Long, etc. qui fournissent certaines méthodes supplémentaires.
16. Quelle est la différence entre les variables de chemin et de classpath?
PATH est une variable d’environnement utilisée par le système d’exploitation pour localiser les exécutables. C’est pourquoi lorsque nous installons Java ou souhaitons que tout exécutable soit trouvé par le système d’exploitation, nous devons ajouter l’emplacement du répertoire dans la variable PATH. Si vous travaillez sur un système d’exploitation Windows, lisez cet article pour apprendre comment configurer la variable PATH sous Windows.
Le classpath est spécifique à Java et utilisé par les exécutables Java pour localiser les fichiers de classe. Nous pouvons fournir l’emplacement du classpath lors de l’exécution de l’application Java et il peut s’agir d’un répertoire, de fichiers ZIP, de fichiers JAR, etc.
17. Quelle est l’importance de la méthode principale en Java?
La méthode main() est le point d’entrée de toute application Java autonome. La syntaxe de la méthode principale est public static void main(String args[])
.
La méthode principale de Java est publique et statique afin que le runtime Java puisse y accéder sans initialiser la classe. Le paramètre d’entrée est un tableau de chaînes de caractères par lequel nous pouvons transmettre des arguments au moment de l’exécution au programme Java. Consultez ce post pour apprendre comment compiler et exécuter un programme Java.
18. Qu’est-ce que le surchargement et le remplacement en Java?
Lorsque nous avons plus d’une méthode avec le même nom dans une seule classe mais que les arguments sont différents, cela s’appelle le surchargement de méthode.
Le concept de remplacement entre en jeu avec l’héritage lorsque nous avons deux méthodes avec la même signature, une dans la classe parente et une autre dans la classe enfant. Nous pouvons utiliser @Override l’annotation dans la méthode remplacée de la classe enfant pour s’assurer que si la méthode de la classe parente est modifiée, la méthode de la classe enfant l’est également.
19. Peut-on surcharger la méthode main()?
Oui, nous pouvons avoir plusieurs méthodes avec le nom « main » dans une seule classe. Cependant, si nous exécutons la classe, l’environnement d’exécution Java recherchera la méthode main avec la syntaxe suivante : public static void main(String args[])
.
20. Peut-on avoir plusieurs classes publiques dans un fichier source Java?
Nous ne pouvons pas avoir plus d’une classe publique dans un seul fichier source Java. Un seul fichier source peut contenir plusieurs classes qui ne sont pas publiques.
21. Qu’est-ce qu’un paquetage Java et quel paquetage est importé par défaut?
Un paquetage Java est le mécanisme permettant d’organiser les classes Java en les regroupant. La logique de regroupement peut être basée sur la fonctionnalité ou les modules. Une classe Java complètement qualifiée contient le nom du paquetage et le nom de la classe. Par exemple, java.lang.Object
est le nom complet de la classe Object
qui fait partie du paquetage java.lang
.
Le paquetage java.lang
est importé par défaut et nous n’avons pas besoin d’importer explicitement une classe de ce paquetage.
22. Quels sont les modificateurs d’accès en Java?
Java fournit un contrôle d’accès via les mots-clés de modificateur d’accès public, private et protected. Lorsqu’aucun de ces mots-clés n’est utilisé, c’est ce qu’on appelle le modificateur d’accès par défaut.
A java class can only have public or default access modifier. Read Java Access Modifiers to learn more about these in detail.
23. Qu’est-ce que le mot-clé final?
Le mot-clé final est utilisé avec une classe pour s’assurer qu’aucune autre classe ne peut l’étendre. Par exemple, la classe String est final et nous ne pouvons pas l’étendre.
Nous pouvons utiliser le mot-clé final avec des méthodes pour nous assurer que les classes enfants ne peuvent pas les remplacer.
Le mot-clé final de Java peut être utilisé avec des variables pour s’assurer qu’elles ne peuvent être assignées qu’une seule fois. Cependant, l’état de la variable peut être modifié, par exemple, nous pouvons assigner une variable finale à un objet une seule fois, mais les variables de l’objet peuvent changer par la suite.
Les variables d’interface Java sont par défaut final et statiques.
24. Qu’est-ce que le mot-clé static?
Le mot-clé static peut être utilisé avec des variables de niveau de classe pour les rendre globales, c’est-à-dire que tous les objets partageront la même variable.
Nous pouvons également utiliser le mot-clé static avec des méthodes. Une méthode statique ne peut accéder qu’à des variables statiques de la classe et invoquer uniquement des méthodes statiques de la classe.
En savoir plus en détail à java static keyword.
25. Qu’est-ce que finally et finalize en java?
Le bloc finally est utilisé avec try-catch pour insérer le code que vous souhaitez toujours exécuter, même si une exception est levée par le bloc try-catch. Le bloc finally est principalement utilisé pour libérer des ressources créées dans le bloc try.
La méthode finalize() est une méthode spéciale dans la classe Object que nous pouvons surcharger dans nos classes. Cette méthode est appelée par le garbage collector lorsque l’objet est en cours de garbage collection. Cette méthode est généralement surchargée pour libérer les ressources système lorsque l’objet est garbage collected.
26. Pouvons-nous déclarer une classe comme statique?
Nous ne pouvons pas déclarer une classe de niveau supérieur comme statique, cependant, une classe interne peut être déclarée comme statique. Si la classe interne est déclarée comme statique, elle est appelée une classe imbriquée statique.
La classe imbriquée statique est la même qu’une autre classe de niveau supérieur et est imbriquée uniquement pour des raisons de commodité de paquetage.
Lisez plus sur les classes internes à java inner class.
27. Qu’est-ce qu’une importation statique?
Si nous devons utiliser une variable ou une méthode statique à partir d’une autre classe, généralement nous importons la classe et utilisons ensuite la méthode/variable avec le nom de la classe.
Nous pouvons faire la même chose en n’important que la méthode ou la variable statique et en l’utilisant dans la classe comme si elle en faisait partie.
L’utilisation d’une importation statique peut causer de la confusion, il est donc préférable d’éviter cela. Un excès d’importation statique peut rendre votre programme illisible et difficile à maintenir.
28. Qu’est-ce que try-with-resources en java?
L’un des nouveaux fonctionnalités de Java 7 est l’instruction try-with-resources pour la gestion automatique des ressources. Avant Java 7, il n’y avait pas de gestion automatique des ressources et nous devions explicitement fermer la ressource. Généralement, cela était fait dans le bloc finally
d’une instruction try-catch. Cette approche provoquait des fuites de mémoire lorsque nous oubliions de fermer la ressource.
Depuis Java 7, nous pouvons créer des ressources à l’intérieur du bloc try et les utiliser. Java s’occupe de les fermer dès que le bloc try-catch est terminé. Lisez plus à Gestion automatique des ressources en Java.
29. Qu’est-ce qu’un bloc multi-catch en Java?
Java 7 a apporté une amélioration avec le bloc multi-catch où nous pouvons attraper plusieurs exceptions dans un seul bloc catch. Cela rend notre code plus court et plus propre lorsque chaque bloc catch a un code similaire.
Si un bloc catch gère plusieurs exceptions, vous pouvez les séparer à l’aide d’une barre verticale (|) et dans ce cas, le paramètre d’exception (ex) est final, donc vous ne pouvez pas le changer.
Lisez plus à Bloc multi catch en Java.
30. Qu’est-ce qu’un bloc statique?
Un bloc statique Java est un ensemble d’instructions qui s’exécutent lorsque la classe est chargée en mémoire par le ClassLoader Java. Il est utilisé pour initialiser les variables statiques de la classe. Il est principalement utilisé pour créer des ressources statiques lors du chargement de la classe.
31. Qu’est-ce qu’une interface?
Les interfaces sont des concepts clés du langage de programmation Java et sont utilisées beaucoup non seulement dans le JDK mais aussi dans les modèles de conception Java, la plupart des frameworks et outils. Les interfaces fournissent un moyen d’atteindre l’abstraction en Java et sont utilisées pour définir le contrat pour que les sous-classes implémentent.
Les interfaces sont bonnes pour un point de départ pour définir un type et créer une hiérarchie de niveau supérieur dans notre code. Puisqu’une classe Java peut implémenter plusieurs interfaces, il est préférable d’utiliser des interfaces comme classe parente dans la plupart des cas. Lire plus à interface java.
32. Qu’est-ce qu’une classe abstraite?
Les classes abstraites sont utilisées en Java pour créer une classe avec une méthode de mise en œuvre par défaut pour les sous-classes. Une classe abstraite peut avoir une méthode abstraite sans corps et elle peut également avoir des méthodes avec mise en œuvre.
Le mot-clé abstract est utilisé pour créer une classe abstraite. Les classes abstraites ne peuvent pas être instanciées et sont principalement utilisées pour fournir une base pour les sous-classes afin qu’elles puissent étendre et mettre en œuvre les méthodes abstraites et remplacer ou utiliser les méthodes mises en œuvre dans la classe abstraite. Lisez les points importants sur les classes abstraites à classe abstraite Java.
33. Quelle est la différence entre une classe abstraite et une interface?
- Le mot-clé abstract est utilisé pour créer une classe abstraite tandis que interface est le mot-clé pour les interfaces.
- Les classes abstraites peuvent avoir des mises en œuvre de méthodes alors que les interfaces ne peuvent pas.
- A class can extend only one abstract class but it can implement multiple interfaces.
- Nous pouvons exécuter une classe abstraite s’il a une méthode main() alors que nous ne pouvons pas exécuter une interface.
Quelques différences plus précises se trouvent à Différence entre une classe abstraite et une interface.
34. Une interface peut-elle implémenter ou étendre une autre interface?
Les interfaces n’implémentent pas une autre interface, elles l’étendent. Étant donné que les interfaces ne peuvent pas avoir d’implémentations de méthodes, il n’y a pas de problème de diamant. C’est pourquoi nous avons une héritage multiple dans les interfaces, c’est-à-dire qu’une interface peut étendre plusieurs interfaces.
À partir de Java 8, les interfaces peuvent avoir des implémentations de méthodes par défaut. Ainsi, pour gérer le problème du diamant lorsqu’une méthode par défaut commune est présente dans plusieurs interfaces, il est obligatoire de fournir une implémentation de la méthode dans la classe qui les implémente. Pour plus de détails avec des exemples, lisez Modifications des interfaces Java 8.
35. Qu’est-ce qu’une interface marqueur?
A marker interface is an empty interface without any method but used to force some functionality in implementing classes by Java. Some of the well known marker interfaces are Serializable and Cloneable.
36. Qu’est-ce que les classes Wrapper?
Les classes Wrapper Java sont la représentation objet des huit types primitifs en Java. Toutes les classes Wrapper en Java sont immuables et finales. Java 5 autoboxing et unboxing permettent une conversion facile entre les types primitifs et leurs classes Wrapper correspondantes.
En savoir plus à Classes Wrapper en Java.
37. Qu’est-ce qu’un Enum en Java?
Enum a été introduit en Java 1.5 comme un nouveau type dont les champs consistent en un ensemble fixe de constantes. Par exemple, en Java, nous pouvons créer Direction comme un enum avec des champs fixes tels que EAST, WEST, NORTH, SOUTH.
enum est le mot-clé pour créer un type enum et est similaire à la classe. Les constantes enum sont implicitement statiques et finales. En savoir plus en détail à java enum.
38. Qu’est-ce que les annotations Java?
Les annotations Java fournissent des informations sur le code et n’ont aucun effet direct sur le code qu’elles annotent. Les annotations ont été introduites en Java 5. Une annotation est une métadonnée sur le programme intégrée dans le programme lui-même. Elle peut être analysée par l’outil d’analyse des annotations ou le compilateur. Nous pouvons également spécifier la disponibilité de l’annotation soit uniquement au moment de la compilation, soit jusqu’à l’exécution. Les annotations intégrées à Java sont @Override, @Deprecated et @SuppressWarnings. En savoir plus sur les annotations Java.
39. Qu’est-ce que l’API de réflexion Java et pourquoi est-elle si importante ?
L’API de réflexion Java permet d’inspecter et de modifier le comportement en temps d’exécution d’une application Java. Nous pouvons inspecter une classe Java, une interface, une énumération et obtenir des détails sur leurs méthodes et champs. L’API de réflexion est un sujet avancé et nous devrions l’éviter dans la programmation normale. L’utilisation de l’API de réflexion peut rompre le motif de conception tel que le motif Singleton en invoquant le constructeur privé, c’est-à-dire en violant les règles des modificateurs d’accès.
Même si nous n’utilisons pas l’API Reflection dans la programmation normale, elle est très importante à avoir. Nous ne pouvons pas avoir de frameworks tels que Spring, Hibernate ou de serveurs tels que Tomcat, JBoss sans l’API Reflection. Ils invoquent les méthodes appropriées et instancient des classes grâce à l’API Reflection et l’utilisent beaucoup pour d’autres traitements.
Lisez le tutoriel sur la Reflection en Java pour avoir une connaissance approfondie de l’API Reflection.
40. Qu’est-ce que la composition en Java ?
La composition est une technique de conception pour implémenter la relation « a » dans les classes. Nous pouvons utiliser la composition d’objets pour la réutilisation de code.
La composition en Java est réalisée en utilisant des variables d’instance qui font référence à d’autres objets. L’avantage de l’utilisation de la composition est que nous pouvons contrôler la visibilité des autres objets pour les classes clientes et ne réutiliser que ce dont nous avons besoin. Lisez plus avec un exemple sur l’exemple de la composition en Java.
41. Quel est l’avantage de la composition par rapport à l’héritage ?
L’une des meilleures pratiques de programmation Java est de « favoriser la composition plutôt que l’héritage ». Certaines des raisons possibles sont :
- Toute modification dans la superclasse pourrait affecter la sous-classe même si nous n’utilisons pas les méthodes de la superclasse. Par exemple, si nous avons une méthode test() dans la sous-classe et que soudainement quelqu’un introduit une méthode test() dans la superclasse, nous obtiendrons des erreurs de compilation dans la sous-classe. La composition ne rencontrera jamais ce problème car nous n’utilisons que les méthodes dont nous avons besoin.
- L’héritage expose toutes les méthodes et variables de la superclasse au client et si nous n’avons aucun contrôle dans la conception de la superclasse, cela peut conduire à des failles de sécurité. La composition nous permet de fournir un accès restreint aux méthodes et donc plus sécurisé.
- Nous pouvons obtenir une liaison dynamique à l’exécution dans la composition où l’héritage lie les classes à la compilation. Ainsi, la composition offre une flexibilité dans l’invocation des méthodes.
Vous pouvez en savoir plus sur les avantages de la composition par rapport à l’héritage à l’adresse java composition vs inheritance.
42. Comment trier une collection d’objets personnalisés en Java ?
Nous devons implémenter l’interface Comparable pour prendre en charge le tri des objets personnalisés dans une collection. L’interface Comparable a une méthode compareTo(T obj) qui est utilisée par les méthodes de tri, et en fournissant cette implémentation de méthode, nous pouvons fournir un moyen par défaut de trier la collection d’objets personnalisés.
Cependant, si vous souhaitez trier en fonction de différents critères, tels que le tri d’une collection d’employés en fonction du salaire ou de l’âge, alors nous pouvons créer des instances de Comparator et les passer comme méthodologie de tri. Pour plus de détails, lisez Java Comparable et Comparator.
43. Qu’est-ce qu’une classe interne en Java?
Nous pouvons définir une classe à l’intérieur d’une classe et elles sont appelées classes imbriquées. Toute classe imbriquée non statique est appelée classe interne. Les classes internes sont associées à l’objet de la classe et elles peuvent accéder à toutes les variables et méthodes de la classe externe. Comme les classes internes sont associées à l’instance, nous ne pouvons pas avoir de variables statiques en elles.
Nous pouvons avoir une classe interne locale ou une classe interne anonyme à l’intérieur d’une classe. Pour plus de détails, lisez java inner class.
44. Qu’est-ce qu’une classe interne anonyme?
A local inner class without a name is known as an anonymous inner class. An anonymous class is defined and instantiated in a single statement. Anonymous inner class always extend a class or implement an interface.
Étant donné qu’une classe anonyme n’a pas de nom, il n’est pas possible de définir un constructeur pour une classe anonyme. Les classes internes anonymes ne sont accessibles qu’à l’endroit où elles sont définies.
45. Qu’est-ce qu’un Classloader en Java?
Le Classloader Java est le programme qui charge le programme en bytecode en mémoire lorsque nous voulons accéder à une classe. Nous pouvons créer notre propre classloader en étendant la classe ClassLoader et en substituant la méthode loadClass(String name). En savoir plus sur java classloader.
46. Quels sont les différents types de classloaders?
Il existe trois types de classloaders intégrés en Java.
- Bootstrap ClassLoader – Il charge les classes internes JDK, charge généralement rt.jar et d’autres classes principales.
- Chargeur de classes d’extensions – Il charge les classes du répertoire des extensions JDK, généralement le répertoire $JAVA_HOME/lib/ext.
- Chargeur de classes système – Il charge les classes du chemin de classe actuel qui peut être défini lors de l’invocation d’un programme en utilisant les options de ligne de commande -cp ou -classpath.
47. Qu’est-ce que l’opérateur ternaire en Java ?
L’opérateur ternaire Java est le seul opérateur conditionnel qui prend trois opérandes. C’est un remplacement en une ligne pour l’instruction if-then-else et est largement utilisé en programmation Java. Nous pouvons utiliser l’opérateur ternaire pour des conditions if-else ou même des conditions switch en utilisant des opérateurs ternaires imbriqués. Un exemple peut être trouvé à l’adresse opérateur ternaire Java.
48. Que fait le mot-clé super ?
Le mot-clé super peut être utilisé pour accéder à la méthode de la superclasse lorsque vous avez redéfini la méthode dans la classe enfant.
Nous pouvons utiliser le mot-clé super pour invoquer les constructeurs de la superclasse dans le constructeur de la classe enfant, mais dans ce cas, il doit être la première instruction dans la méthode du constructeur.
L’utilisation du mot-clé super peut être vue dans l’implémentation de la classe enfant ci-dessous.
49. Qu’est-ce que l’instruction break et continue ?
Nous pouvons utiliser l’instruction break pour terminer une boucle for, while ou do-while. Nous pouvons utiliser une instruction break dans l’instruction switch pour sortir du cas switch. Vous pouvez voir l’exemple de l’instruction break à java break. Nous pouvons utiliser un break avec l’étiquette pour terminer les boucles imbriquées.
L’instruction continue passe à l’itération actuelle d’une boucle for, while ou do-while. Nous pouvons utiliser l’instruction continue avec l’étiquette pour passer à l’itération actuelle de la boucle la plus externe.
50. Qu’est-ce que le mot-clé this en Java ?
Le mot-clé this fournit la référence à l’objet actuel et il est principalement utilisé pour s’assurer que les variables d’objet sont utilisées, et non les variables locales ayant le même nom.
Nous pouvons également utiliser ce mot-clé pour invoquer d’autres constructeurs à partir d’un constructeur.
51. Qu’est-ce qu’un constructeur par défaut?
Un constructeur sans argument d’une classe est appelé constructeur par défaut. Lorsque nous ne définissons aucun constructeur pour la classe, le compilateur Java crée automatiquement le constructeur sans argument par défaut pour la classe. S’il existe d’autres constructeurs définis, alors le compilateur ne créera pas de constructeur par défaut pour nous.
52. Pouvons-nous avoir un bloc try sans bloc catch?
Oui, nous pouvons avoir une instruction try-finally et ainsi éviter le bloc catch.
53. Qu’est-ce que la collecte des déchets?
La collecte des déchets est le processus d’examen de la mémoire heap, d’identification des objets en cours d’utilisation et de ceux qui ne le sont pas, et de suppression des objets inutilisés. En Java, le processus de désallocation de mémoire est géré automatiquement par le ramasse-miettes.
Nous pouvons exécuter le garbage collector avec le code Runtime.getRuntime().gc()
ou utiliser la méthode utilitaire System.gc()
. Pour une analyse détaillée de la mémoire Heap et de la collecte des déchets, veuillez lire Java Garbage Collection.
54. Qu’est-ce que la sérialisation et la désérialisation ?
Nous pouvons convertir un objet Java en un flux, ce qui est appelé sérialisation. Une fois qu’un objet est converti en flux, il peut être enregistré dans un fichier, envoyé via le réseau ou utilisé dans des connexions de socket.
L’objet devrait implémenter une interface Serializable et nous pouvons utiliser java.io.ObjectOutputStream pour écrire des objets dans un fichier ou dans n’importe quel objet OutputStream. En savoir plus sur la sérialisation Java.
Le processus de conversion des données de flux créées par la sérialisation en objet est appelé désérialisation. En savoir plus sur la désérialisation Java.
55. Comment exécuter un fichier JAR via l’invite de commande ?
Nous pouvons exécuter un fichier JAR en utilisant la commande java, mais cela nécessite une entrée Main-Class dans le fichier manifeste du JAR. Main-Class est le point d’entrée du JAR et utilisé par la commande java pour exécuter la classe. En savoir plus sur le fichier JAR Java.
56. Quel est l’usage de la classe System ?
La classe System de Java est l’une des classes centrales. L’un des moyens les plus simples de journaliser des informations pour le débogage est la méthode System.out.print().
La classe System est finale, donc nous ne pouvons pas la sous-classer et remplacer son comportement par héritage. La classe System ne fournit pas de constructeurs publics, donc nous ne pouvons pas instancier cette classe et c’est pourquoi toutes ses méthodes sont statiques.
Certaines des méthodes utilitaires de la classe System sont pour la copie de tableau, obtenir l’heure actuelle, lire les variables d’environnement. En savoir plus sur la classe System Java.
57. Qu’est-ce que le mot-clé instanceof?
Nous pouvons utiliser le mot-clé instanceof pour vérifier si un objet appartient à une classe ou non. Nous devrions éviter son utilisation autant que possible. Exemple d’utilisation :
Étant donné que str est de type String à l’exécution, la première instruction if s’évalue à vrai et la deuxième à faux.
58. Peut-on utiliser String avec le cas switch?
Une des fonctionnalités de Java 7 était l’amélioration du cas switch pour autoriser les chaînes de caractères. Donc, si vous utilisez Java 7 ou une version ultérieure, vous pouvez utiliser String dans les instructions switch-case. En savoir plus sur l’exemple de switch-case Java avec String.
59. Java est-il Pass by Value ou Pass by Reference?
C’est une question très confuse, nous savons que les variables d’objet contiennent la référence aux objets dans l’espace de la pile. Lorsque nous invoquons une méthode, une copie de ces variables est passée et stockée dans la mémoire de la pile de la méthode. Nous pouvons tester n’importe quel langage qu’il s’agisse de passage par référence ou de passage par valeur grâce à une simple méthode de permutation générique, pour en savoir plus, lisez Java est passé par valeur et non par référence.
60. Quelle est la différence entre la mémoire Heap et Stack ?
Les principales différences entre la mémoire Heap et Stack sont les suivantes :
- La mémoire Heap est utilisée par toutes les parties de l’application tandis que la mémoire de la pile est utilisée uniquement par un thread d’exécution.
- Chaque fois qu’un objet est créé, il est toujours stocké dans l’espace Heap et la mémoire de la pile contient la référence à celui-ci. La mémoire de la pile contient uniquement des variables primitives locales et des variables de référence vers des objets dans l’espace Heap.
- La gestion de la mémoire dans la pile se fait de manière LIFO tandis qu’elle est plus complexe dans la mémoire Heap car elle est utilisée globalement.
Pour une explication détaillée avec un programme d’exemple, lisez Java Heap vs Stack Memory.
61. Le compilateur Java est stocké dans JDK, JRE ou JVM?
La tâche du compilateur Java est de convertir le programme Java en bytecode, nous avons l’exécutable javac
pour cela. Il doit donc être stocké dans JDK, nous n’en avons pas besoin dans JRE et JVM ne sont que les spécifications.
62. Quel sera le résultat des programmes suivants?
Contexte: méthode statique dans une classe
Réponse: Le code ne compilera pas car nous ne pouvons pas avoir de méthode de classe Object avec le mot-clé static. Notez que la classe Object a la méthode toString(). Vous obtiendrez une erreur de compilation comme « Cette méthode statique ne peut pas cacher la méthode d’instance de Object ». La raison en est que la méthode statique appartient à la classe et comme chaque classe de base est un Object, nous ne pouvons pas avoir la même méthode dans l’instance ainsi que dans la classe. Vous n’obtiendrez pas cette erreur si vous changez le nom de la méthode de toString() en quelque chose d’autre qui n’est pas présent dans la superclasse Object
.
Contexte: invocation de méthode statique
Réponse: Eh bien, c’est une situation étrange. Nous avons tous déjà rencontré une NullPointerException
lorsque nous invoquons une méthode sur un objet qui est NULL. Mais ici, ce programme fonctionnera et affichera « Test foo appelé ».
La raison en est l’optimisation du code du compilateur Java. Lorsque le code Java est compilé pour produire du bytecode, il détermine que foo() est une méthode statique et doit être appelée en utilisant la classe. Ainsi, il modifie l’appel de méthode obj.foo()
en Test.foo()
et donc pas de NullPointerException
.
I must admit that it’s a very tricky question and if you are interviewing someone, this will blow his mind off. ?
C’est tout pour les questions et réponses d’entretien Java de base. Je continuerai d’ajouter plus de questions à la liste, si vous pensez que j’en ai manqué une importante, veuillez me le faire savoir dans les commentaires.
Source:
https://www.digitalocean.com/community/tutorials/core-java-interview-questions-and-answers