top 50 core java interview questions
Questions et réponses d'entretien Java les plus fréquemment posées avec des exemples:
Dans ce didacticiel, nous avons couvert plus de 50 questions d'entretien Java de base importantes pour les nouveaux arrivants et les candidats expérimentés.
Cet article sur les questions d'entrevue JAVA est préparé pour vous aider à comprendre les concepts de base de la programmation Java à des fins d'entretien. Tous les concepts JAVA importants sont expliqués ici avec des exemples pour faciliter votre compréhension.
Ce didacticiel couvre des sujets JAVA tels que les définitions Java de base, les concepts OOP, les spécificateurs d'accès, les collections, les exceptions, les threads, la sérialisation, etc., avec des exemples pour vous préparer parfaitement pour affronter toute interview JAVA en toute confiance.
Questions et réponses d'entretien Java les plus populaires
Vous trouverez ci-dessous une liste complète des questions d'entretien de base et avancées de programmation Java les plus importantes et les plus fréquemment posées avec des réponses détaillées.
Q # 1) Qu'est-ce que JAVA?
Répondre: Java est un langage de programmation de haut niveau indépendant de la plate-forme.
Java est une collection d'objets. Il a été développé par Sun Microsystems. Il existe de nombreuses applications, sites Web et jeux développés à l'aide de Java.
Q # 2) Quelles sont les fonctionnalités de JAVA?
Réponse: Les fonctionnalités de Java sont les suivantes:
- Concepts de POO
- Orienté objet
- Héritage
- Encapsulation
- Polymorphisme
- Abstraction
- Indépendant de la plateforme: Un seul programme fonctionne sur différentes plates-formes sans aucune modification.
- Haute performance: JIT (Just In Time compiler) permet des performances élevées en Java. JIT convertit le bytecode en langage machine, puis JVM démarre l'exécution.
- Multi-threadé: Un flux d'exécution est connu sous le nom de Thread. JVM crée un thread qui est appelé le thread principal. L'utilisateur peut créer plusieurs threads en étendant la classe de thread ou en implémentant l'interface Runnable.
Q # 3) Comment Java permet-il de hautes performances?
Répondre: Java utilise le compilateur Just In Time pour permettre des performances élevées. Il est utilisé pour convertir les instructions en bytecodes.
Q # 4) Nommez les IDE Java?
Répondre: Eclipse et NetBeans sont les IDE de JAVA.
Q # 5) Qu'entendez-vous par constructeur?
Réponse: Le constructeur peut être expliqué en détail avec des points inscrits:
- Lorsqu'un nouvel objet est créé dans un programme, un constructeur est appelé correspondant à la classe.
- Le constructeur est une méthode qui porte le même nom que le nom de la classe.
- Si un utilisateur ne crée pas implicitement de constructeur, un constructeur par défaut sera créé.
- Le constructeur peut être surchargé.
- Si l'utilisateur a créé un constructeur avec un paramètre, il doit créer un autre constructeur explicitement sans paramètre.
Q # 6) Que signifient la variable locale et la variable Instance?
Répondre:
Variables locales sont définis dans la méthode et la portée des variables qui existent à l'intérieur de la méthode elle-même.
Variable d'instance est défini à l'intérieur de la classe et à l'extérieur de la méthode et la portée des variables existe dans toute la classe.
Q # 7) Qu'est-ce qu'une classe?
Répondre: Tous les codes Java sont définis dans une classe. Il a des variables et des méthodes.
Variables sont des attributs qui définissent l'état d'une classe.
Méthodes sont le lieu où la logique métier exacte doit être élaborée. Il contient un ensemble d'instructions (ou) d'instructions pour satisfaire l'exigence particulière.
Exemple:
public class Addition{ //Class name declaration int a = 5; //Variable declaration int b= 5; public void add(){ //Method declaration int c = a+b; } }
Q # 8) Qu'est-ce qu'un objet?
Répondre: Une instance d'une classe est appelée un objet. L'objet a un état et un comportement.
Chaque fois que la machine virtuelle Java lit le mot clé «new ()», elle crée une instance de cette classe.
Exemple:
public class Addition{ public static void main(String() args){ Addion add = new Addition();//Object creation } }
Le code ci-dessus crée l'objet pour la classe Addition.
Q # 9) Quels sont les concepts de POO?
Réponse: Les concepts de POO comprennent:
- Héritage
- Encapsulation
- Polymorphisme
- Abstraction
- Interface
Lecture suggérée = >> Principales questions d'entretien OOPs
Q # 10) Qu'est-ce que l'héritage?
Répondre: L'héritage signifie qu'une classe peut s'étendre à une autre classe. Pour que les codes puissent être réutilisés d'une classe à une autre classe. La classe existante est connue sous le nom de Super classe tandis que la classe dérivée est connue sous le nom de sous-classe.
Exemple:
Super class: public class Manupulation(){ } Sub class: public class Addition extends Manipulation(){ }
L'héritage n'est applicable qu'au public et aux membres protégés uniquement. Les membres privés ne peuvent pas être hérités.
Q # 11) Qu'est-ce que l'encapsulation?
Réponse: But de l'encapsulation:
- Protège le code des autres.
- Maintenabilité du code.
Exemple:
Nous déclarons «a» comme une variable entière et elle ne devrait pas être négative.
public class Addition(){ int a=5; }
Si quelqu'un change la variable exacte comme ' a = -5 ' alors c'est mauvais.
Afin de surmonter le problème, nous devons suivre les étapes ci-dessous:
- Nous pouvons rendre la variable privée ou protégée.
- Utilisez des méthodes d'accès public telles que set et get.
Afin que le code ci-dessus puisse être modifié comme:
public class Addition(){ private int a = 5; //Here the variable is marked as private }
Le code ci-dessous montre le getter et le setter.
Des conditions peuvent être fournies lors de la définition de la variable.
get A(){ } set A(int a){ if(a>0){// Here condition is applied ......... } }
Pour l'encapsulation, nous devons rendre toutes les variables d'instance privées et créer un setter et un getter pour ces variables. Ce qui forcera à son tour les autres à appeler les setters plutôt que d'accéder directement aux données.
Q # 12) Qu'est-ce que le polymorphisme?
Répondre: Le polymorphisme signifie de nombreuses formes.
Un seul objet peut faire référence à la super-classe ou à la sous-classe selon le type de référence appelé polymorphisme.
Exemple:
Public class Manipulation(){ //Super class public void add(){ } } public class Addition extends Manipulation(){ // Sub class public void add(){ } public static void main(String args()){ Manipulation addition = new Addition();//Manipulation is reference type and Addition is reference type addition.add(); } }
En utilisant le type de référence Manipulation, nous pouvons appeler la méthode «add ()» de la classe Addition. Cette capacité est connue sous le nom de polymorphisme. Le polymorphisme est applicable pour primordial et pas pour surcharge .
Q # 13) Qu'entend-on par remplacement de méthode?
Réponse: Le remplacement de méthode se produit si la méthode de sous-classe satisfait aux conditions ci-dessous avec la méthode de super-classe:
- Le nom de la méthode doit être le même
- L'argument devrait être le même
- Le type de retour doit également être le même
Le principal avantage de la substitution est que la sous-classe peut fournir des informations spécifiques sur ce type de sous-classe par rapport à la super-classe.
Exemple:
public class Manipulation{ //Super class public void add(){ ……………… } } Public class Addition extends Manipulation(){ Public void add(){ ……….. } Public static void main(String args()){ Manipulation addition = new Addition(); //Polimorphism is applied addition.add(); // It calls the Sub class add() method } }
addition.add () appelle la méthode add () dans la sous-classe et non dans la classe parente. Il remplace donc la méthode Super-class et est connu sous le nom de remplacement de méthode.
Q # 14) Qu'entend-on par surcharge?
Répondre: La surcharge de méthode se produit pour différentes classes ou au sein de la même classe.
Pour la surcharge de méthode, la méthode de sous-classe doit satisfaire les conditions ci-dessous avec la méthode de super-classe (ou) les méthodes de la même classe elle-même:
- Même nom de méthode
- Différents types d'arguments
- Il peut y avoir différents types de retour
Exemple:
public class Manipulation{ //Super class public void add(String name){ //String parameter ……………… } } Public class Addition extends Manipulation(){ Public void add(){//No Parameter ……….. } Public void add(int a){ //integer parameter } Public static void main(String args()){ Addition addition = new Addition(); addition.add(); } }
Ici, la méthode add () a des paramètres différents dans la classe Addition est surchargée dans la même classe qu'avec la super-classe.
Remarque: Le polymorphisme n'est pas applicable pour la surcharge de méthode.
Q # 15) Qu'entend-on par interface?
Répondre: Les héritages multiples ne peuvent pas être obtenus en java. Pour surmonter ce problème, le concept d'interface est introduit.
Une interface est un modèle qui n'a que des déclarations de méthode et non l'implémentation de méthode.
Exemple:
Public abstract interface IManupulation{ //Interface declaration Public abstract void add();//method declaration public abstract void subtract(); }
- Toutes les méthodes de l'interface sont en interne vide abstrait public .
- Toutes les variables de l'interface sont en interne public statique final ce sont des constantes.
- Les classes peuvent implémenter l'interface et non l'étendre.
- La classe qui implémente l'interface doit fournir une implémentation pour toutes les méthodes déclarées dans l'interface.
public class Manupulation implements IManupulation{ //Manupulation class uses the interface Public void add(){ …………… } Public void subtract(){ ……………. } }
Q # 16) Qu'entend-on par classe abstraite?
Répondre: Nous pouvons créer la classe Abstract en utilisant le mot-clé «Abstract» avant le nom de la classe. Une classe abstraite peut avoir à la fois des méthodes «abstraites» et des méthodes «non abstraites» qui sont une classe concrète.
Méthode abstraite:
La méthode qui n'a que la déclaration et non l'implémentation est appelée la méthode abstraite et elle a le mot-clé appelé «abstract». Les déclarations se terminent par un point-virgule.
Exemple:
public abstract class Manupulation{ public abstract void add();//Abstract method declaration Public void subtract(){ } }
- Une classe abstraite peut également avoir une méthode non abstraite.
- La sous-classe concrète qui étend la classe abstraite devrait fournir l'implémentation des méthodes abstraites.
Q # 17) Différence entre Array et Array List.
Répondre: La différence entre Array et Array List peut être comprise dans le tableau ci-dessous:
Déployer | Liste des tableaux |
---|---|
La taille doit être indiquée au moment de la déclaration du tableau. Chaîne () nom = nouvelle chaîne (2) | La taille peut ne pas être requise. Il change la taille de manière dynamique. ArrayList name = new ArrayList |
Pour mettre un objet dans un tableau, nous devons spécifier l'index. name (1) = 'livre' | Aucun index requis. name.add ('livre') |
Le tableau n’est pas de type paramétré | ArrayList dans java 5.0 sont paramétrés. Par exemple: Ce crochet angulaire est un paramètre de type qui signifie une liste de String. |
Q # 18) Différence entre String, String Builder et String Buffer.
Répondre:
Chaîne de caractères: Les variables de chaîne sont stockées dans un «pool de chaînes constantes». Une fois que la référence de chaîne modifie l'ancienne valeur qui existe dans le «pool de chaînes constantes», elle ne peut pas être effacée.
Exemple:
Nom de la chaîne = 'livre';
Piscine à cordes constante
.
Si la valeur du nom est passée de «livre» à «stylo».
Piscine à cordes constante
Ensuite, la valeur la plus ancienne reste dans le pool de chaînes constantes.
Tampon de chaîne:
- Ici, les valeurs de chaîne sont stockées dans une pile. Si les valeurs sont modifiées, la nouvelle valeur remplace l'ancienne valeur.
- Le tampon de chaîne est synchronisé, ce qui est thread-safe.
- Les performances sont plus lentes que celles du générateur de chaînes.
Exemple:
String Buffer name = 'livre';
Une fois que la valeur du nom a été changée en «stylo», le «livre» est effacé dans la pile.
Générateur de chaînes:
C'est la même chose que String Buffer, à l'exception du String Builder qui n'est pas threadé en toute sécurité et qui n'est pas synchronisé. Alors évidemment, la performance est rapide.
Q # 19) Expliquez les spécificateurs d'accès public et privé.
Répondre: Les méthodes et les variables d'instance sont appelées membres.
Publique:
Les membres publics sont visibles dans le même package ainsi que dans le package externe qui concerne les autres packages.
Les membres publics de la classe A sont visibles par la classe B (même package) ainsi que par la classe C (différents packages).
Privé:
Les membres privés sont visibles dans la même classe uniquement et pas pour les autres classes du même package ainsi que pour les classes des packages extérieurs.
Les membres privés de la classe A ne sont visibles que dans cette classe. Il est invisible pour la classe B ainsi que pour la classe C.
Q # 20) Différence entre les spécificateurs d'accès par défaut et protégé.
Répondre:
Défaut: Les méthodes et les variables déclarées dans une classe sans aucun spécificateur d'accès sont appelées default.
Les membres par défaut de la classe A sont visibles pour les autres classes qui sont à l'intérieur du package et invisibles pour les classes qui sont à l'extérieur du package.
Les membres de la classe A sont donc visibles pour la classe B et invisibles pour la classe C.
Protégé:
.
Protected est identique à Default mais si une classe s'étend, elle est visible même si elle se trouve en dehors du package.
Les membres de la classe A sont visibles par la classe B car ils se trouvent à l'intérieur du package. Pour la classe C, elle est invisible mais si la classe C étend la classe A, les membres sont visibles pour la classe C même si elle se trouve à l'extérieur du package.
Q # 21) Différence entre HashMap et HashTable.
Répondre: La différence entre HashMap et HashTable peut être vue ci-dessous:
HashMap | HashTable |
---|---|
Les méthodes ne sont pas synchronisées | Les méthodes clés sont synchronisées |
Pas de sécurité du fil | Sécurité du fil |
Iterator est utilisé pour itérer les valeurs | L'énumérateur est utilisé pour itérer les valeurs |
Autorise une clé nulle et plusieurs valeurs nulles | N'autorise rien qui est nul |
Les performances sont élevées par rapport à HashTable | Les performances sont lentes |
Q # 22) Différence entre HashSet et TreeSet.
Répondre: La différence entre HashSet et TreeSet peut être vue ci-dessous:
HashSet | TreeSet |
---|---|
Les éléments insérés sont dans un ordre aléatoire | Conserve les éléments dans l'ordre trié |
Peut stocker des objets nuls | Impossible de stocker les objets nuls |
La performance est rapide | Les performances sont lentes |
Q # 23) Différence entre la classe abstraite et l'interface.
Réponse: Les différences entre la classe abstraite et l'interface sont les suivantes:
Classe abstraite:
- Les classes abstraites ont un constructeur par défaut et il est appelé chaque fois que la sous-classe concrète est instanciée.
- Il contient des méthodes abstraites ainsi que des méthodes non abstraites.
- La classe qui étend la classe Abstract ne devrait pas nécessiter l'implémentation de toutes les méthodes, seules les méthodes Abstract doivent être implémentées dans la sous-classe concrète.
- La classe abstraite contient des variables d'instance.
Interface:
- Il n’a pas de constructeur et ne peut pas être instancié.
- La méthode abstraite seule doit être déclarée.
- Les classes qui implémentent l'interface doivent fournir l'implémentation de toutes les méthodes.
- L'interface ne contient que des constantes.
Q # 24) Quelle est la signification des collections en Java?
Répondre: Collection est un cadre conçu pour stocker les objets et manipuler la conception pour stocker les objets.
Les collections sont utilisées pour effectuer les opérations suivantes:
- Recherche
- Tri
- Manipulation
- Insertion
- Effacement
Un groupe d'objets est appelé collections. Toutes les classes et interfaces de collecte sont disponibles dans le package util Java.
Q # 25) Quelles sont toutes les classes et interfaces disponibles dans les collections?
Répondre: Vous trouverez ci-dessous les classes et interfaces disponibles dans les collections:
Interfaces:
- Collection
- Lister
- Ensemble
- Carte
- Ensemble trié
- Carte triée
- File d'attente
Des classes:
- Listes:
- Liste des tableaux
- Vecteur
- Liste liée
Ensembles:
- Jeu de hachage
- Ensemble de hachage lié
- Ensemble d'arbres
Plans:
- Carte de hachage
- Table de hachage
- TreeMap
- Carte hachée liée
File d'attente:
- File d'attente de priorité
Q # 26) Qu'entend-on par ordre et tri dans les collections?
Répondre:
Commandé: Cela signifie que les valeurs stockées dans une collection sont basées sur les valeurs ajoutées à la collection. Nous pouvons donc itérer les valeurs de la collection dans un ordre spécifique.
Trié: Les mécanismes de tri peuvent être appliqués en interne ou en externe afin que le groupe d'objets triés dans une collection particulière soit basé sur les propriétés des objets.
Q # 27) Expliquez les différentes listes disponibles dans la collection.
Répondre: Les valeurs ajoutées à la liste sont basées sur la position d'index et sont triées par position d'index. Les doublons sont autorisés.
Les types de listes sont:
a) Liste des tableaux:
- Itération rapide et accès aléatoire rapide.
- C'est une collection ordonnée (par index) et non triée.
- Il implémente l'interface d'accès aléatoire.
Exemple:
public class Fruits{ public static void main (String ( ) args){ ArrayList names=new ArrayList (); names.add (“apple”); names.add (“cherry”); names.add (“kiwi”); names.add (“banana”); names.add (“cherry”); System.out.println (names); } }
Production:
(Pomme, cerise, kiwi, banane, cerise)
À partir de la sortie, Array List maintient l'ordre d'insertion et accepte les doublons. Mais ce n’est pas trié.
b) Vecteur:
C'est la même chose que Array List.
- Les méthodes vectorielles sont synchronisées.
- Sécurité du fil.
- Il implémente également l'accès aléatoire.
- La sécurité des threads entraîne généralement une baisse des performances.
Exemple:
public class Fruit { public static void main (String ( ) args){ Vector names = new Vector ( ); names.add (“cherry”); names.add (“apple”); names.add (“banana”); names.add (“kiwi”); names.add (“apple”); System.out.println (“names”); } }
Production:
(cerise, pomme, banane, kiwi, pomme)
Vector conserve également l'ordre d'insertion et accepte les doublons.
c) Liste liée:
- Les éléments sont doublement liés les uns aux autres.
- Les performances sont plus lentes que la liste Array.
- Bon choix pour l'insertion et la suppression.
- Dans Java 5.0, il prend en charge les méthodes de file d'attente courantes peek (), Pool (), Offer (), etc.
Exemple:
public class Fruit { public static void main (String ( ) args){ Linkedlist names = new linkedlist ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Production:
(banane, cerise, pomme, kiwi, banane)
Gère l'ordre d'insertion et accepte les doublons.
Q # 28) Expliquez Set et leurs types dans une collection.
méthode java qui prend un tableau
Répondre: Set se soucie de l'unicité. Il n'autorise pas les duplications. Ici, la méthode «equals ()» est utilisée pour déterminer si deux objets sont identiques ou non.
a) Ensemble de hachage:
- Non ordonné et non trié.
- Utilise le code de hachage de l'objet pour insérer les valeurs.
- Utilisez cette option lorsque l'exigence est 'pas de doublons et ne vous souciez pas de la commande'.
Exemple:
public class Fruit { public static void main (String( ) args){ HashSet names = new HashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Production:
(banane, cerise, kiwi, pomme)
Il ne suit aucun ordre d'insertion. Les doublons ne sont pas autorisés.
b) Ensemble de hachage lié:
- Une version ordonnée du jeu de hachage est connue sous le nom de jeu de hachage lié.
- Maintient une liste doublement liée de tous les éléments.
- Utilisez cette option lorsqu'un ordre d'itération est requis.
Exemple:
public class Fruit { public static void main (String( ) args){ LinkedHashSet; names = new LinkedHashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Production:
(banane, cerise, pomme, kiwi)
Il conserve l'ordre d'insertion dans lequel ils ont été ajoutés à l'ensemble. Les doublons ne sont pas autorisés.
c) Ensemble d'arbres:
- C'est l'une des deux collections triées.
- Utilise l'arborescence «Read-Black» et garantit que les éléments seront dans l'ordre croissant.
- Nous pouvons construire un ensemble d'arbres avec le constructeur en utilisant un comparateur comparable (ou).
Exemple:
public class Fruits{ public static void main (String( )args) { Treeset names= new TreeSet( ) ; names.add(“cherry”); names.add(“banana”); names.add(“apple”); names.add(“kiwi”); names.add(“cherry”); System.out.println(names); } }
Production:
(pomme, banane, cerise, kiwi)
TreeSet trie les éléments par ordre croissant. Et les doublons ne sont pas autorisés.
Q # 29) Expliquez la carte et ses types.
Réponse: Carte se soucie de l'identifiant unique. Nous pouvons mapper une clé unique à une valeur spécifique. C'est une paire clé / valeur. Nous pouvons rechercher une valeur, basée sur la clé. Comme l'ensemble, la carte utilise également la méthode «equals ()» pour déterminer si deux clés sont identiques ou différentes.
La carte est des types suivants:
a) Carte de hachage:
- Carte non ordonnée et non triée.
- Hashmap est un bon choix lorsque nous ne nous soucions pas de la commande.
- Il autorise une clé nulle et plusieurs valeurs nulles.
Exemple:
Public class Fruit{ Public static void main(String( ) args){ HashMap names =new HashMap( ); names.put(“key1”,“cherry”); names.put (“key2”,“banana”); names.put (“key3”,“apple”); names.put (“key4”,“kiwi”); names.put (“key1”,“cherry”); System.out.println(names); } }
Production:
{key2 = banane, key1 = cherry, key4 = kiwi, key3 = apple}
Les clés en double ne sont pas autorisées dans Map.
Il ne conserve aucun ordre d'insertion et n'est pas trié.
b) Table de hachage:
- Comme la clé vectorielle, les méthodes de la classe sont synchronisées.
- Filetez la sécurité et ralentit donc les performances.
- Il n'autorise rien qui est nul.
Exemple:
public class Fruit{ public static void main(String( )args){ Hashtable names =new Hashtable( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Production:
{clé2 = pomme, clé1 = cerise, clé4 = kiwi, clé3 = banane}
Les clés en double ne sont pas autorisées.
c) Carte de hachage liée:
- Maintient l'ordre d'insertion.
- Plus lent que la carte de hachage.
- Je peux m'attendre à une itération plus rapide.
Exemple:
public class Fruit{ public static void main(String( ) args){ LinkedHashMap names =new LinkedHashMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Production:
{clé2 = pomme, clé1 = cerise, clé4 = kiwi, clé3 = banane}
Les clés en double ne sont pas autorisées.
d) TreeMap:
- Carte triée.
- Comme Tree set, nous pouvons construire un ordre de tri avec le constructeur.
Exemple:
public class Fruit{ public static void main(String( )args){ TreeMap names =new TreeMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“banana”); names.put(“key3”,“apple”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Production:
{clé1 = cerise, clé2 = banane, clé3 = pomme, clé4 = kiwi}
Il est trié par ordre croissant en fonction de la clé. Les clés en double ne sont pas autorisées.
Q # 30) Expliquez la file d'attente prioritaire.
Réponse: interface de file d'attente
File d'attente de priorité: La classe de liste liée a été améliorée pour implémenter l'interface de file d'attente. Les files d'attente peuvent être gérées avec une liste chaînée. Le but d'une file d'attente est «Priorité à l'entrée, à la sortie».
Par conséquent, les éléments sont ordonnés soit naturellement, soit selon le comparateur. L'ordre des éléments représente leur priorité relative.
Q # 31) Qu'entend-on par exception?
Répondre: Une exception est un problème qui peut survenir pendant le déroulement normal de l'exécution. Une méthode peut lever une exception lorsque quelque chose gémit au moment de l'exécution. Si cette exception n’a pas pu être gérée, l’exécution se termine avant la fin de la tâche.
Si nous gérons l'exception, le flux normal se poursuit. Les exceptions sont une sous-classe de java.lang.Exception.
Exemple de gestion de l'exception:
try{ //Risky codes are surrounded by this block }catch(Exception e){ //Exceptions are caught in catch block }
Q # 32) Quels sont les types d'exceptions?
Répondre: Il existe deux types d'exceptions. Ils sont expliqués ci-dessous en détail.
a) Exception vérifiée:
Ces exceptions sont vérifiées par le compilateur au moment de la compilation. Les classes qui étendent la classe Throwable, à l'exception des exceptions d'exécution et des erreurs, sont appelées Exception vérifiée.
Les exceptions vérifiées doivent soit déclarer l'exception en utilisant le mot clé throws (ou) entouré par try / catch approprié.
Par exemple, Exception ClassNotFound
b) Exception non cochée:
Ces exceptions ne sont pas vérifiées lors de la compilation par le compilateur. Le compilateur ne force pas à gérer ces exceptions. Il comprend:
- Exception arithmétique
- Exception ArrayIndexOutOfBounds
Q # 33) Quelles sont les différentes façons de gérer les exceptions?
Répondre: Deux manières différentes de gérer les exceptions sont expliquées ci-dessous:
a) Utilisation de try / catch:
Le code risqué est entouré d'un bloc try. Si une exception se produit, elle est interceptée par le bloc catch qui est suivi du bloc try.
Exemple:
class Manipulation{ public static void main(String() args){ add(); } Public void add(){ try{ addition(); }catch(Exception e){ e.printStacktrace(); } } }
b) En déclarant le mot clé throws:
À la fin de la méthode, nous pouvons déclarer l'exception à l'aide du mot clé throws.
Exemple:
class Manipulation{ public static void main(String() args){ add(); } public void add() throws Exception{ addition(); } }
Q # 34) Quels sont les avantages de la gestion des exceptions?
Réponse: Les avantages sont les suivants:
- Le déroulement normal de l'exécution ne sera pas interrompu si une exception est gérée
- Nous pouvons identifier le problème en utilisant la déclaration catch
Q # 35) Quels sont les mots-clés de gestion des exceptions en Java?
Réponse: Vous trouverez ci-dessous les deux mots clés de gestion des exceptions:
un essai:
Lorsqu'un code risqué est entouré d'un bloc try. Une exception se produisant dans le bloc try est interceptée par un bloc catch. Try peut être suivi de catch (ou) finally (ou) des deux. Mais n'importe lequel des blocs est obligatoire.
b) attraper:
Ceci est suivi d'un bloc try. Les exceptions sont prises ici.
c) enfin:
Ceci est suivi par try block (ou) catch block. Ce bloc est exécuté indépendamment d'une exception. Les codes de nettoyage sont donc généralement fournis ici.
Q # 36) Expliquez la propagation des exceptions.
Répondre: L'exception est d'abord levée à partir de la méthode qui se trouve en haut de la pile. Si elle n’attrape pas, elle affiche la méthode et passe à la méthode précédente et ainsi de suite jusqu’à ce qu’elles soient obtenues.
C'est ce qu'on appelle la propagation d'exception.
Exemple:
public class Manipulation{ public static void main(String() args){ add(); } public void add(){ addition(); }
À partir de l'exemple ci-dessus, la pile ressemble à celle ci-dessous:
Si une exception se produit dans le une addition() méthode n'est pas interceptée, puis passe à la méthode ajouter() . Ensuite, il est déplacé vers le principale() méthode, puis il arrêtera le flux d'exécution. C'est ce qu'on appelle la propagation des exceptions.
Q # 37) Quel est le mot-clé final en Java?
Répondre:
Fin variable: Une fois qu'une variable est déclarée comme finale, la valeur de la variable ne peut pas être modifiée. C'est comme une constante.
Exemple:
int final = 12;
Méthode finale: Un mot clé final dans une méthode ne pouvait pas être remplacé. Si une méthode est marquée comme finale, elle ne peut pas être remplacée par la sous-classe.
Classe finale: Si une classe est déclarée comme finale, la classe ne peut pas être sous-classée. Aucune classe ne peut prolonger la classe finale.
Q # 38) Qu'est-ce qu'un fil?
Répondre: En Java, le flux d'exécution est appelé Thread. Chaque programme java a au moins un thread appelé thread principal, le thread principal est créé par JVM. L'utilisateur peut définir ses propres threads en étendant la classe Thread (ou) en implémentant l'interface Runnable. Les threads sont exécutés simultanément.
Exemple:
public static void main(String() args){//main thread starts here }
Q # 39) Comment créer un thread en Java?
Répondre: Il existe deux façons de créer un fil.
a) Étendre la classe de thread: Étendre une classe Thread et remplacer la méthode d'exécution. Le fil est disponible dans java.lang.thread.
Exemple:
Public class Addition extends Thread { public void run () { } }
L'inconvénient d'utiliser une classe de thread est que nous ne pouvons étendre aucune autre classe car nous avons déjà étendu la classe de thread. Nous pouvons surcharger la méthode run () dans notre classe.
b) Implémentez l'interface Runnable: Une autre façon consiste à implémenter l'interface exécutable. Pour cela, nous devons fournir l'implémentation de la méthode run () qui est définie dans l'interface.
Exemple:
Public class Addition implements Runnable { public void run () { } }
Q # 40) Expliquez la méthode join ().
Répondre: Join () méthode est utilisée pour joindre un thread avec la fin du thread en cours d'exécution.
Exemple:
public static void main (String() args){ Thread t = new Thread (); t.start (); t.join (); }
Sur la base du code ci-dessus, le thread principal a démarré l'exécution. Quand il atteint le code t.start () puis ‘thread t’ démarre la propre pile pour l’exécution. JVM bascule entre le thread principal et «thread t».
Une fois qu'il atteint le code t.join () alors 'thread t' seul est exécuté et termine sa tâche, puis seul le thread principal démarre l'exécution.
C'est une méthode non statique. La méthode Join () a une version surchargée. Nous pouvons donc mentionner la durée dans la méthode join () également «.s».
Q # 41) Que fait la méthode yield de la classe Thread?
Répondre: Une méthode yield () déplace le thread en cours d'exécution vers un état exécutable et autorise l'exécution des autres threads. Pour que les threads de priorité égale aient une chance de s'exécuter. C'est une méthode statique. Il ne libère aucun verrou.
La méthode Yield () ramène le thread à l'état Runnable uniquement, et non le bloc thread to sleep (), wait () (ou).
Exemple:
public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ Thread.yield(); } }
Q # 42) Expliquez la méthode wait ().
Réponse: attendez () est utilisée pour faire attendre le thread dans le pool d'attente. Lorsque la méthode wait () est exécutée pendant l'exécution d'un thread, alors immédiatement le thread abandonne le verrou sur l'objet et se dirige vers le pool d'attente. La méthode Wait () indique au thread d'attendre un laps de temps donné.
Ensuite, le thread se réveillera après l'appel de la méthode notify () (ou) notify all ().
Wait () et les autres méthodes mentionnées ci-dessus ne donnent pas le verrou sur l'objet immédiatement jusqu'à ce que le thread en cours d'exécution termine le code synchronisé. Il est principalement utilisé en synchronisation.
Exemple:
public static void main (String() args){ Thread t = new Thread (); t.start (); Synchronized (t) { Wait(); } }
Q # 43) Différence entre la méthode notify () et la méthode notifyAll () en Java.
Réponse: Les différences entre la méthode notify () et la méthode notifyAll () sont répertoriées ci-dessous:
notifier () | notifyAll () |
---|---|
Cette méthode est utilisée pour envoyer un signal pour réveiller un seul thread dans le pool d'attente. | Cette méthode envoie le signal pour réveiller tous les threads dans un spool en attente. |
Q # 44) Comment arrêter un thread en java? Expliquer la méthode sleep () dans un thread?
Répondre: Nous pouvons arrêter un thread en utilisant les méthodes de thread suivantes:
- En train de dormir
- Attendre
- Bloqué
Dormir: La méthode Sleep () est utilisée pour mettre en veille le thread en cours d'exécution pendant la durée donnée. Une fois que le thread est réveillé, il peut passer à l'état exécutable. Donc, la méthode sleep () est utilisée pour retarder l'exécution pendant un certain temps.
C'est une méthode statique.
Exemple:
Fil de discussion. Sommeil (2000)
Donc, il retarde le thread pour dormir 2 millisecondes. La méthode Sleep () lève une exception ininterrompue, nous devons donc entourer le bloc avec try / catch.
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ try{ Thread.sleep(2000); }catch(InterruptedException e){ } }
Q # 45) Quand utiliser l'interface Runnable vs la classe Thread en Java?
Répondre: Si nous avons besoin de notre classe pour étendre d'autres classes autres que le thread, nous pouvons utiliser l'interface exécutable car en java, nous ne pouvons étendre qu'une seule classe.
Si nous n'allons étendre aucune classe, nous pouvons étendre la classe de thread.
Q # 46) Différence entre les méthodes start () et run () de la classe de thread.
Répondre: La méthode Start () crée un nouveau thread et le code à l'intérieur de la méthode run () est exécuté dans le nouveau thread. Si nous appelons directement la méthode run (), un nouveau thread n'est pas créé et le thread en cours d'exécution continuera d'exécuter la méthode run ().
Q # 47) Qu'est-ce que le multi-threading?
Répondre: Plusieurs threads sont exécutés simultanément. Chaque thread démarre sa propre pile en fonction de la priorité de flux (ou) des threads.
Exemple de programme:
public class MultipleThreads implements Runnable { public static void main (String() args){//Main thread starts here Runnable r = new runnable (); Thread t=new thread (); t.start ();//User thread starts here Addition add=new addition (); } public void run(){ go(); }//User thread ends here }
Lors de l'exécution de la 1ère ligne, JVM appelle la méthode main et la pile de threads principale ressemble à l'illustration ci-dessous.
Une fois que l'exécution atteint, t.start () line puis un nouveau thread est créé et la nouvelle pile pour le thread est également créée. Maintenant, JVM bascule vers le nouveau thread et le thread principal revient à l'état exécutable.
Les deux piles ressemblent à celles illustrées ci-dessous.
Maintenant, le thread utilisateur a exécuté le code à l'intérieur de la méthode run ().
Une fois la méthode run () terminée, la JVM revient au thread principal et le thread utilisateur a terminé la tâche et la pile a disparu.
JVM bascule entre chaque thread jusqu'à ce que les deux threads soient terminés. C'est ce qu'on appelle le multi-threading.
Q # 48) Expliquez le cycle de vie des threads en Java.
Répondre: Thread a les états suivants:
- Nouveau
- Runnable
- Fonctionnement
- Non exécutable (bloqué)
- Terminé
- Nouveau: Dans l'état New, une instance de Thread a été créée mais la méthode start () n'est pas encore appelée. Maintenant, le fil n'est pas considéré comme vivant.
- Runnable : Le Thread est dans l'état exécutable après l'appel de la méthode start (), mais avant que la méthode run () ne soit appelée. Mais un thread peut également revenir à l'état exécutable après avoir attendu / dormi. Dans cet état, le thread est considéré comme vivant.
- Fonctionnement : Le thread est dans un état en cours d'exécution après avoir appelé la méthode run (). Maintenant, le thread commence l'exécution.
- Non exécutable (Bloqué): le thread est actif mais il ne peut pas être exécuté. Il n'est pas dans l'état exécutable mais aussi, il reviendra à l'état exécutable après un certain temps. Exemple: attendez, dormez, bloquez.
- Terminé : Une fois la méthode d'exécution terminée, elle est interrompue. Maintenant, le fil n'est plus vivant.
Q # 49) Qu'est-ce que la synchronisation?
Répondre: La synchronisation permet à un seul thread d'accéder à un bloc de code à la fois. Si plusieurs threads accèdent au bloc de code, il y a un risque de résultats inexacts à la fin. Pour éviter ce problème, nous pouvons fournir une synchronisation pour le bloc de codes sensible.
Le mot-clé synchronized signifie qu'un thread a besoin d'une clé pour accéder au code synchronisé.
Les verrous sont par objets. Chaque objet Java a un verrou. Une serrure n'a qu'une seule clé. Un thread ne peut accéder à une méthode synchronisée que si le thread peut obtenir la clé des objets à verrouiller.
Pour cela, nous utilisons le mot-clé «Synchronisé».
Exemple:
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ synchronized(object){ { } }
Q # 50) Quel est l'inconvénient de la synchronisation?
Ans: La synchronisation n'est pas recommandée pour implémenter toutes les méthodes. Parce que si un thread accède au code synchronisé, le thread suivant doit attendre. Cela fait donc une performance lente à l'autre bout.
Q # 51) Qu'entend-on par sérialisation?
Répondre: La conversion d'un fichier en flux d'octets est appelée sérialisation. Les objets du fichier sont convertis en octets à des fins de sécurité. Pour cela, nous devons implémenter une interface java.io.Serializable. Il n'a aucune méthode à définir.
Les variables marquées comme transitoires ne feront pas partie de la sérialisation. Nous pouvons donc ignorer la sérialisation des variables du fichier en utilisant un mot-clé transitoire.
En savoir plus = >> Sérialisable et clonable
Q # 52) Quel est le but d'une variable transitoire?
Répondre: Les variables transitoires ne font pas partie du processus de sérialisation. Lors de la désérialisation, les valeurs des variables transitoires sont définies sur la valeur par défaut. Il n'est pas utilisé avec des variables statiques.
Exemple:
nombres int transitoires;
Q # 53) Quelles méthodes sont utilisées pendant le processus de sérialisation et de désérialisation?
Répondre: Les classes ObjectOutputStream et ObjectInputStream sont de niveau supérieur java.io. paquet. Nous les utiliserons avec les classes de niveau inférieur FileOutputStream et FileInputStream.
ObjectOutputStream.writeObject —-> Sérialisez l'objet et écrivez l'objet sérialisé dans un fichier.
ObjectInputStream.readObject -> Lit le fichier et désérialise l'objet.
Pour être sérialisé, un objet doit implémenter l'interface sérialisable. Si la superclasse implémente Serializable, alors la sous-classe sera automatiquement sérialisable.
Q # 54) Quel est le but d'une variable volatile?
Répondre: Les valeurs des variables volatiles sont toujours lues à partir de la mémoire principale et non de la mémoire cache du thread. Ceci est principalement utilisé lors de la synchronisation. Il ne s'applique qu'aux variables.
Exemple:
nombre int volatil;
Q # 55) Différence entre la sérialisation et la désérialisation en Java.
Répondre: Voici les différences entre la sérialisation et la désérialisation en java:
Sérialisation | Désérialisation |
---|---|
La sérialisation est le processus utilisé pour convertir les objets en flux d'octets | La désérialisation est le processus inverse de la sérialisation où nous pouvons récupérer les objets du flux d'octets. |
Un objet est sérialisé en lui écrivant un ObjectOutputStream. | Un objet est désérialisé en le lisant à partir d'un ObjectInputStream. |
Q # 56) Qu'est-ce que SerialVersionUID?
entretien qa analyste questions et réponses
Répondre: Chaque fois qu'un objet est sérialisé, l'objet est marqué d'un numéro d'identification de version pour la classe d'objets. Cet ID est appelé SerialVersionUID. Ceci est utilisé lors de la désérialisation pour vérifier que l'expéditeur et le destinataire sont compatibles avec la sérialisation.
Conclusion
Voici quelques-unes des questions principales de l'entretien JAVA qui couvrent à la fois les concepts Java de base et avancés pour la programmation ainsi que l'entretien avec les développeurs, et ce sont celles auxquelles nos experts JAVA ont répondu.
J'espère que ce tutoriel vous donnera un aperçu détaillé des concepts de base du codage JAVA. Les explications données ci-dessus enrichiront vraiment vos connaissances et augmenteront votre compréhension de la programmation JAVA.
Préparez-vous à réussir une interview JAVA en toute confiance.