Java Questions et réponses de l'entretien SE 8 (Partie 2)

De Get Docs
Aller à :navigation, rechercher

Dans mon post précédent, j'ai discuté d'importantes questions et réponses de l'entretien Java SE 8. Dans cet article, nous allons discuter d'autres questions et réponses de l'entretien Java SE 8. Avant de lire cet article, veuillez parcourir mon article précédent à : "Java SE 8 Interview Questions (Part 1)".

Java SE 8 Questions d'entretien

  1. Qu'est-ce que l'itération interne dans Java SE 8 ?
  2. Différences entre l'itération externe et l'itération interne ?
  3. Quels sont les principaux inconvénients de l'itération externe ?
  4. Quels sont les principaux avantages de l'itération interne par rapport à l'itération externe ?
  5. Quel est le principal inconvénient de l'itération interne par rapport à l'itération externe ?
  6. Quel est le principal avantage de l'itération externe par rapport à l'itération interne ?
  7. Quand devons-nous utiliser l'itération interne ? Quand devons-nous utiliser l'itération externe ?
  8. Différences entre les opérations intermédiaires et les opérations de terminal de l'API Stream de Java 8 ?
  9. Est-il possible de fournir des implémentations de méthode dans les interfaces Java ? Si possible, comment les fournissons-nous ?
  10. Qu'est-ce qu'une méthode par défaut ? Pourquoi avons-nous besoin de méthodes par défaut dans les interfaces Java 8 ?
  11. Qu'est-ce qu'une méthode statique ? Pourquoi avons-nous besoin de méthodes statiques dans Java 8 Interfaces ?
  12. Différences entre la programmation fonctionnelle et la programmation orientée objet ?
  13. Expliquer les problèmes de l'ancienne API de date Java ? Quels sont les avantages de l'API Date and Time de Java 8 par rapport à l'API Old Date et à l'API Joda Time ?
  14. Pourquoi avons-nous besoin d'une nouvelle API de date et d'heure dans Java SE 8 ?
  15. Quelles sont les différences entre l'ancienne API de date Java de Java et l'API de date et heure de Java 8 ?
  16. Qu'est-ce que l'héritage multiple ? Comment Java 8 prend en charge l'héritage multiple ?
  17. Qu'est-ce que le problème du diamant dans les interfaces en raison des méthodes par défaut ? Comment Java 8 Résout ce problème ?

Java Questions et réponses de l'entretien SE 8

Qu'est-ce que l'itération interne dans Java SE 8 ?

Avant Java 8, nous n'avions pas de concept d'itération interne. Java 8 a introduit une nouvelle fonctionnalité appelée "Itération interne". Avant Java 8, le langage Java n'avait qu'une itération externe pour itérer les éléments d'un objet agrégé comme les collections, les tableaux, etc. L'itération interne signifie "Itérer les éléments d'un objet agrégé un par un en interne par l'API Java". Au lieu que l'application Java fasse une itération en externe, nous demandons à l'API Java de faire ce travail en interne.

Différences entre l'itération externe et l'itération interne ?

S.Non. Itération externe Itération interne
1. Disponible avant Java 8 aussi. Il est introduit dans Java SE 8
2. Itération d'éléments d'un objet agrégé en externe. Itérer les éléments d'un objet agrégé en interne (arrière-plan).
3. Itérez les éléments en utilisant une boucle for-each et des itérateurs comme Enumeration, Iterator, ListIterator. Itérez les éléments en utilisant l'API Java comme la méthode "forEach".
4. Itération d'éléments en séquentiel et dans l'ordre uniquement. Il n'est pas nécessaire d'itérer les éléments dans l'ordre séquentiel.
5. Il suit l'approche OOP qui est le style impératif. Il suit l'approche de programmation fonctionnelle qui est le style déclaratif.
6. Il ne sépare PAS correctement les responsabilités, c'est-à-dire qu'il définit à la fois "ce qui doit être fait" et "comment cela doit être fait". Il ne définit que "ce qui doit être fait". Pas besoin de s'inquiéter de "Comment cela doit être fait". L'API Java s'occupe du "Comment faire".
7. Code moins lisible. Code plus lisible.


Quels sont les principaux inconvénients de l'itération externe ?

L'itération externe présente les inconvénients suivants :

  • Nous devons écrire du code dans le style impératif.
  • Il n'y a pas de séparation claire des responsabilités. Couplage étroit entre le code "Ce qui doit être fait" et "Comment cela doit-il être fait".
  • Code moins lisible.
  • Plus de code verbeux et passe-partout.
  • Nous devons itérer les éléments dans l'ordre séquentiel uniquement.
  • Il ne prend pas correctement en charge la concurrence et le parallélisme.

Quels sont les principaux avantages de l'itération interne par rapport à l'itération externe ?

Par rapport à l'itération externe, l'itération interne présente les avantages suivants :

  • Comme il suit le style de programmation fonctionnelle, nous pouvons écrire du code déclaratif.
  • Code plus lisible et concis.
  • Évite d'écrire du code Verbose et Boilerplate
  • Pas besoin d'itérer les éléments dans l'ordre séquentiel.
  • Il prend correctement en charge la concurrence et le parallélisme.
  • Nous pouvons écrire du code parallèle pour améliorer les performances de l'application.
  • Séparation claire des responsabilités. Couplage lâche entre le code "Ce qu'il faut faire" et "Comment cela doit être fait".
  • Nous avons besoin d'écrire du code uniquement sur "Ce qui doit être fait" et l'API Java s'occupe du code "Comment cela doit être fait".

Quel est le principal inconvénient de l'itération interne par rapport à l'itération externe ?

Comparée à l'itération externe, l'itération interne présente un inconvénient majeur :

  • Dans l'itération interne, comme l'API Java s'occupe de l'itération des éléments en interne, nous n'avons PAS de contrôle sur l'itération.

Quel est le principal avantage de l'itération externe par rapport à l'itération interne ?

Par rapport à l'itération interne, l'itération externe présente un avantage majeur :

  • Dans l'itération externe, comme l'API Java ne s'occupe PAS des éléments d'itération, nous avons beaucoup de contrôle sur l'itération.

Quand devons-nous utiliser l'itération interne ? Quand devons-nous utiliser l'itération externe ?

Nous devons comprendre les situations pour utiliser l'itération interne ou l'itération externe.

  • Lorsque nous avons besoin de plus de contrôle sur l'itération, nous pouvons utiliser l'itération externe.
  • Lorsque nous n'avons PAS besoin de plus de contrôle sur l'itération, nous pouvons utiliser l'itération interne.
  • Lorsque nous avons besoin de développer des applications hautement simultanées et parallèles et que nous , nous devons utiliser l'itération interne.

Différences entre les opérations intermédiaires et les opérations de terminal de l'API Stream de Java 8 ?

S.Non. Flux des opérations intermédiaires Opérations du terminal de flux
1. Les opérations Stream Intermediate ne sont pas évaluées tant que nous ne les enchaînons pas avec Stream Terminal Operation. Les opérations du terminal de flux sont évaluées en elles-mêmes. Pas besoin d'autres opérations d'aide.
2. La sortie des opérations intermédiaires est un autre flux. La sortie des opérations intermédiaires n'est pas un flux. Autre chose qu'un flux.
3. Les opérations intermédiaires sont évaluées paresseusement. Les opérations du terminal sont évaluées avec impatience.
4. Nous pouvons enchaîner n'importe quel nombre d'opérations intermédiaires de flux. Nous ne pouvons PAS chaîner les opérations du terminal de flux.
5. Nous pouvons utiliser n'importe quel nombre d'opérations intermédiaires de flux par relevé. Nous ne pouvons utiliser qu'une seule opération de terminal de flux par relevé.


Est-il possible de fournir des implémentations de méthode dans les interfaces Java ? Si possible, comment les fournissons-nous ?

Dans Java 7 ou antérieur, il n'est pas possible de fournir des implémentations de méthode dans les interfaces. Java 8 et suivants, c'est possible. Dans Java SE 8, nous pouvons fournir des implémentations de méthodes dans les interfaces en utilisant les deux nouveaux concepts suivants :

  • Méthodes par défaut
  • Méthodes statiques

Qu'est-ce qu'une méthode par défaut ? Pourquoi avons-nous besoin de méthodes par défaut dans les interfaces Java 8 ?

Une méthode par défaut est une méthode qui est implémentée dans une interface avec le mot-clé "default". C'est une nouvelle fonctionnalité introduite dans Java SE 8. Nous avons besoin des méthodes par défaut pour les raisons suivantes :

  • Cela nous permet de fournir l'implémentation de la méthode dans les interfaces.
  • Pour ajouter une nouvelle fonctionnalité à l'interface sans casser les classes qui implémentent cette interface.
  • Pour fournir une fonction élégante de rétrocompatibilité.
  • Pour faciliter l'extension de la fonctionnalité existante.
  • Pour faciliter la maintenance de la fonctionnalité existante.

Qu'est-ce qu'une méthode statique ? Pourquoi avons-nous besoin de méthodes statiques dans Java 8 Interfaces ?

Une méthode statique est une méthode utilitaire ou une méthode d'assistance, qui est associée à une classe (ou une interface). Il n'est associé à aucun objet. Nous avons besoin de méthodes statiques pour les raisons suivantes :

  • Nous pouvons conserver les méthodes Helper ou Utility spécifiques à une interface dans la même interface plutôt que dans une classe Utility distincte.
  • Nous n'avons pas besoin de classes d'utilitaires distinctes telles que des collections, des tableaux, etc. pour conserver les méthodes d'utilitaire.
  • Séparation claire des responsabilités. C'est-à-dire que nous n'avons pas besoin d'une classe utilitaire pour conserver toutes les méthodes utilitaires de l'API de collection comme les collections, etc.
  • Facile à étendre l'API.
  • Facile à maintenir l'API.

Différences entre la programmation fonctionnelle et la programmation orientée objet ?

Programmation fonctionnelle POO
N'existe pas Etat Existe Etat
Utilise des données immuables Utilise des données mutables
Il suit le modèle de programmation déclarative Il suit le modèle de programmation impératif
Modèle de programmation sans état Modèle de programmation avec état
Point principal sur : "Ce que vous faites" Accent mis sur "Comment ça va ?"
Bon pour la programmation parallèle (concurrence) Mauvais pour la programmation parallèle (concurrence)
Bon pour le traitement et l'analyse de BigData PAS bon pour le traitement et l'analyse de BigData
Prend en charge l'encapsulation pure Il brise le concept d'encapsulation
Fonctions sans effets secondaires Méthodes avec effets secondaires
Les fonctions sont des citoyens de première classe Les objets sont des citoyens de première classe
L'unité de manipulation principale est "Fonction" L'unité de manipulation principale est des objets (instances de classes)
Contrôles de flux : appels de fonction, appels de fonction avec récursivité Contrôles de flux : boucles, instructions conditionnelles
Il utilise le concept de «récursion» pour itérer les données de collection. Il utilise le concept de "boucle" pour itérer les données de collection. Par exemple :-boucle pour chaque dans Java
L'ordre d'exécution est moins important. L'ordre d'exécution est indispensable et très important.
Prend en charge à la fois "l'abstraction sur les données" et "l'abstraction sur le comportement". Prend en charge uniquement "l'abstraction sur les données".
Nous utilisons FP lorsque nous avons peu de choses avec plus d'opérations. Nous utilisons la POO lorsque nous avons peu d'opérations avec plus de choses. Par exemple : les choses sont des classes et les opérations sont des méthodes dans Java.


REMARQUE : - Pour plus d'informations sur les comparaisons FP, IP et OOP, veuillez consulter mon message précédent : "Comparer FP, OOP (IP) "

Expliquer les problèmes de l'ancienne API de date Java ? Quels sont les avantages de l'API Date and Time de Java 8 par rapport à l'API Old Date et à l'API Joda Time ?

L'ANCIENNE API de date Java de Java signifie l'API de date disponible avant Java SE 8, c'est-à-dire Date, Calendar, SimpleDateFormat, etc. L'API Old Date de Java présente les problèmes ou inconvénients suivants par rapport à l'API Date and Time de Java 8 et à l'API Joda Time.

  • La plupart de l'API est obsolète.
  • Moins de lisibilité.
  • java.util.Date est Mutable et non Thread-Safe.
  • java.text.SimpleDateFormat n'est pas Thread-Safe.
  • Moins de performances.

L'API de date et d'heure de Java SE 8 présente les avantages suivants par rapport à l'ancienne API de date de Java.

  • Très simple à utiliser.
  • Syntaxe lisible par l'homme qui est plus lisible.
  • Toutes les API sont Thread-Safe.
  • Meilleure performance.

Pourquoi avons-nous besoin d'une nouvelle API de date et d'heure dans Java SE 8 ?

Nous avons besoin de l'API de date et d'heure de Java 8 pour développer des applications Java hautement performantes, sécurisées pour les threads et hautement évolutives. L'API de date et d'heure de Java 8 résout tous les problèmes d'API d'ancienne date de Java en suivant les principes d'immuabilité et de sécurité des threads.

Quelles sont les différences entre l'ancienne API de date Java de Java et l'API de date et heure de Java 8 ?

Différences entre l'ANCIENNE API de date Java de Java et l'API de date et heure de Java 8 :

S.Non. ANCIENNE API de date Java de Java API de date et d'heure de Java 8
1. Disponible avant Java 8 aussi. Il est introduit dans Java SE 8
2. Non thread-safe. Thread Safe.
3. API mutable. API immuable.
4. Moins de performances. Meilleure performance.
5. Moins de lisibilité. Plus de lisibilité.
6. Il n'est pas recommandé de l'utiliser car il est obsolète. Il est toujours recommandé d'utiliser.
7. Non extensible. Facile à étendre.
8. Il définit les valeurs des mois de 0 à 11, c'est-à-dire janvier = 0. Il définit les valeurs des mois de 1 à 12, c'est-à-dire janvier = 1.
9. C'est une ancienne API. C'est une nouvelle API.


Qu'est-ce que l'héritage multiple ? Comment Java 8 prend en charge l'héritage multiple ?

L'héritage multiple signifie qu'une classe peut hériter ou étendre les caractéristiques et fonctionnalités de plusieurs classes parentes. Dans Java 7 ou versions antérieures, l'héritage multiple n'est pas possible car Java suit la règle "Une classe doit étendre une et une seule classe ou classe abstraite". Cependant, il est possible de fournir un héritage d'implémentation multiple à l'aide de l'interface car Java suit la règle "Une classe peut étendre n'importe quel nombre d'interfaces". Cependant, Java 8 prend en charge "l'implémentation des méthodes dans les interfaces" en introduisant de nouvelles fonctionnalités : méthodes par défaut dans l'interface. En raison de cette fonctionnalité, Java 8 prend en charge l'héritage multiple avec certaines limitations.

Qu'est-ce que le problème du diamant dans les interfaces en raison des méthodes par défaut ? Comment Java 8 Résout ce problème ?

Java 8 méthodes par défaut peuvent introduire un problème de diamant lorsqu'une classe implémente plusieurs interfaces. Cela se produit lorsqu'une classe étend plusieurs interfaces avec les mêmes implémentations de méthode (méthode par défaut). Exemple de code Java SE 8 pour montrer le problème du diamant avec les méthodes par défaut de l'interface.

interface A {
    default void display() {
        System.out.println("A");
    }
}

interface B extends A {
    default void display() {
        System.out.println("B");
    }
}

interface C extends A {
    default void display() {
        System.out.println("C");
    }
}

class D implements B, C {
}

Dans l'extrait de code ci-dessus, la classe D donne une erreur de compilation car "Les méthodes par défaut en double nommées display avec les paramètres () et () sont héritées des types C et B". C'est parce que le compilateur Java ne sait plus quel display() utiliser dans la classe D. La classe D hérite de la méthode display() des interfaces B et C. Pour résoudre ce problème, Java 8 a donné la solution suivante.

class D implements B, C {

    @Override
    public void display() {
        B.super.display();
    }
    
}

Ce B.super.display(); résoudra ce problème de diamant. Si vous souhaitez utiliser la méthode par défaut de l'interface C, utilisez C.super.display();. C'est tout sur Java 8 questions d'entrevue. Nous discuterons d'autres questions d'entrevue Java SE 8 dans mes prochains articles. S'il vous plaît laissez-moi un commentaire si vous aimez mon message ou si vous avez des problèmes / suggestions.