Questions et réponses sur Java SE 8 (Partie 2)

Dans mon précédent post, j’ai discuté de certaines questions et réponses importantes sur les entretiens Java SE 8. Dans ce post, nous allons discuter de quelques autres questions et réponses sur les entretiens Java SE 8. Avant de lire ce post, veuillez consulter mon précédent post à l’adresse : « Questions d’entretien Java SE 8 (Partie 1)« .

Questions d’entretien Java SE 8

  1. Qu’est-ce que l’itération interne en Java SE 8 ?
  2. Quelles sont les 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. Quelles sont les différences entre les opérations intermédiaires et les opérations terminales de l’API Stream de Java 8 ?
  9. Est-il possible de fournir des implémentations de méthode dans les interfaces Java ? Si c’est 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 les interfaces Java 8 ?
  12. Différences entre la programmation fonctionnelle et la programmation orientée objet ?
  13. Expliquer les problèmes de l’ancienne API de dates Java ? Quels sont les avantages de l’API de dates et heures de Java 8 par rapport à l’ancienne API de dates et à l’API Joda Time ?
  14. Pourquoi avons-nous besoin de la nouvelle API de dates et heures dans Java SE 8 ? Expliquer comment l’API de dates et heures de Java SE 8 résout les problèmes de l’ancienne API de dates Java ?
  15. Quelles sont les différences entre l’ancienne API de dates Java et l’API de dates et heures 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 dû aux méthodes par défaut ? Comment Java 8 résout ce problème ?

Questions et réponses sur Java SE 8

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

Avant Java 8, nous n’avions pas le concept d’itération interne. Java 8 a introduit une nouvelle fonctionnalité appelée « Itération interne ». Avant Java 8, le langage Java ne disposait que d’une itération externe pour itérer les éléments d’un objet agrégé tel que les collections, les tableaux, etc. L’itération interne signifie « itérer les éléments d’un objet agrégé un par un de manière interne par l’API Java ». Au lieu de demander à l’application Java d’effectuer l’itération de manière externe, nous demandons à l’API Java de faire ce travail de manière interne.

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

S.No. External Iteration Internal Iteration
1. Available before Java 8 too. It is introduced in Java SE 8
2. Iterating an Aggregated Object elements externally. Iterating an Aggregated Object elements internally (background).
3. Iterate elements by using for-each loop and Iterators like Enumeration, Iterator, ListIterator. Iterate elements by using Java API like “forEach” method.
4. Iterating elements in Sequential and In-Order only. Not required to iterate elements in Sequential order.
5. It follows OOP approach that is Imperative Style. It follows Functional Programming approach that is Declarative Style.
6. It does NOT separate responsibilities properly that is, it defines both “What is to be done” and “How it is to be done”. It defines only “What is to be done”. No need to worry about “How it is to be done”. Java API takes care about “How to do”.
7. Less Readable Code. More Readable code.

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 de manière impérative.
  • Il n’y a pas de séparation claire des responsabilités. Couplage étroit entre le code « ce qu’il faut faire » et le code « comment le faire ».
  • Code moins lisible.
  • Code plus verbeux et boilerplate.
  • Nous devons itérer les éléments dans un ordre séquentiel uniquement.
  • Il ne prend pas en charge correctement la concurrence et la parallélisme.

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

Comparée à l’itération externe, l’itération interne présente les avantages suivants :

  • Étant donné qu’elle suit le style de programmation fonctionnelle, nous pouvons écrire du code déclaratif.
  • Code plus lisible et concis.
  • Évite d’écrire un code verbeux et redondant
  • Pas besoin d’itérer les éléments dans un ordre séquentiel.
  • Il prend en charge correctement la concurrence et la 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 qui doit être fait » et le code « comment cela doit être fait ».
  • Nous devons écrire du code uniquement sur « ce qui doit être fait » et l’API Java prend en charge le 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, la bibliothèque Java s’occupe de l’itération des éléments en interne, nous n’avons donc pas le contrôle sur l’itération.

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

Comparé à l’itération interne, l’itération externe présente un avantage majeur :

  • Dans l’itération externe, la bibliothèque Java ne s’occupe pas de l’itération des éléments, nous avons donc un plus grand 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 dans quelles situations utiliser l’itération interne ou externe.

  • Quand nous avons besoin d’un plus grand contrôle sur l’itération, nous pouvons utiliser l’itération externe.
  • Quand nous n’avons pas besoin d’un plus grand contrôle sur l’itération, nous pouvons utiliser l’itération interne.
  • Quand nous devons développer des applications hautement concurrentes et parallèles, nous devons utiliser l’itération interne.

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

S.No. Stream Intermediate Operations Stream Terminal Operations
1. Stream Intermediate operations are not evaluated until we chain it with Stream Terminal Operation. Stream Terminal Operations are evaluated on it’s own. No need other operations help.
2. The output of Intermediate Operations is another Stream. The output of Intermediate Operations is Not a Stream. Something else other than a Stream.
3. Intermediate Operations are evaluated Lazily. Terminal Operations are evaluated Eagerly.
4. We can chain any number of Stream Intermediate Operations. We can NOT chain Stream Terminal Operations.
5. We can use any number of Stream Intermediate Operations per Statement. We can use only one Stream Terminal Operation per Statement.

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

En Java 7 ou antérieur, il n’est pas possible de fournir des implémentations de méthode dans les interfaces. À partir de Java 8, c’est possible. En Java SE 8, nous pouvons fournir des implémentations de méthode 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?

A Default Method is a method which is implemented in an interface with “default” keyword. It’s new featured introduced in Java SE 8. We need Default Methods because of the following reasons:

  • Cela nous permet de fournir l’implémentation des méthodes dans les interfaces.
  • Pour ajouter de nouvelles fonctionnalités à une interface sans casser les classes qui l’implémentent.
  • Pour fournir une fonctionnalité élégante de compatibilité ascendante.
  • Pour faciliter l’extension des fonctionnalités existantes.
  • Pour faciliter la maintenance des fonctionnalités existantes.

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

A Static Method is an Utility method or Helper method, which is associated to a class (or interface). It is not associated to any object. We need Static Methods because of the following reasons:

  • Nous pouvons garder les méthodes d’aide ou d’utilité spécifiques à une interface dans la même interface plutôt que dans une classe utilitaire séparée.
  • Nous n’avons pas besoin de classes utilitaires séparées comme Collections, Arrays, etc. pour stocker les méthodes utilitaires.
  • Séparation claire des responsabilités. Nous n’avons pas besoin d’une classe utilitaire pour regrouper toutes les méthodes utilitaires de l’API Collection, comme Collections, etc.
  • Facilité d’extension de l’API.
  • Facilité de maintenance de l’API.

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

Functional Programming OOP
Does not exist State Exists State
Uses Immutable data Uses Mutable data
It follows Declarative Programming Model It follows Imperative Programming Model
Stateless Programming Model Stateful Programming Model
Main Fcous on: “What you are doing” Main focus on “How you are doing”
Good for Parallel (Concurrency) Programming Poor for Parallel (Concurrency) Programming
Good for BigData processing and analysis NOT Good for BigData processing and analysis
Supports pure Encapsulation It breaks Encapsulation concept
Functions with No-Side Effects Methods with Side Effects
Functions are first-class citizens Objects are first-class citizens
Primary Manipulation Unit is “Function” Primary Manipulation Unit is Objects(Instances of Classes)
Flow Controls: Function calls, Function Calls with Recursion Flow Controls: Loops, Conditional Statements
It uses “Recursion” concept to iterate Collection Data. It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java
Order of execution is less importance. Order of execution is must and very important.
Supports both “Abstraction over Data” and “Abstraction over Behavior”. Supports only “Abstraction over Data”.
We use FP when we have few Things with more operations. We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java.

NOTE:- Pour plus d’informations sur les comparaisons entre FP, IP et OOP, veuillez consulter mon article précédent à : « Comparez FP, OOP(IP)« 

Expliquez les problèmes de l’ancienne API Date Java ? Quels sont les avantages de l’API Date et Heure de Java 8 par rapport à l’ancienne API Date et à l’API Joda Time ?

L’ancienne API Date Java de Java se réfère à l’API Date disponible avant Java SE 8, c’est-à-dire Date, Calendar, SimpleDateFormat, etc. L’ancienne API Date Java de Java présente les problèmes ou les inconvénients suivants par rapport à l’API Date et Heure de Java 8 et à l’API Joda Time.

  • La plupart de l’API est obsolète.
  • Moins lisible.
  • java.util.Date est mutable et non thread-safe.
  • java.text.SimpleDateFormat n’est pas thread-safe.
  • Moins performant.

L’API Date et Heure de Java SE 8 présente les avantages suivants par rapport à l’ancienne API Date Java de Java.

  • Très simple à utiliser.
  • Syntaxe lisible par l’homme, c’est-à-dire une meilleure lisibilité.
  • Toute l’API est thread-safe.
  • Meilleure performance.

Pourquoi avons-nous besoin d’une nouvelle API Date et Heure dans Java SE 8 ? Expliquez comment l’API Date et Heure de Java SE 8 résout les problèmes de l’ancienne API Date de Java ?

Nous avons besoin de l’API Date et Heure de Java 8 pour développer des applications Java hautement performantes, sûres pour les threads et hautement évolutives. L’API Date et Heure de Java 8 résout tous les problèmes de l’ancienne API Date de Java en suivant les principes d’immutabilité et de sûreté des threads.

Quelles sont les différences entre l’ancienne API Date de Java et l’API Date et Heure de Java 8 ?

Differences entre l’ancienne API Date de Java et l’API Date et Heure de Java 8 :

S.No. Java’s OLD Java Date API Java 8’s Date and Time API
1. Available before Java 8 too. It is introduced in Java SE 8
2. Not Thread Safe. Thread Safe.
3. Mutable API. Immutable API.
4. Less Performance. Better Performance.
5. Less Readability. More Readability.
6. It’s not recommended to use as its deprecated. It’s always recommended to use.
7. Not Extendable. Easy to Extend.
8. It defines months values from 0 to 11, that is January = 0. It defines months values from 1 to 12, that is January = 1.
9. It’s an old API. It’s a new API.

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

L’héritage multiple signifie qu’une classe peut hériter ou étendre des caractéristiques et des fonctionnalités de plus d’une classe parente. En Java 7 ou antérieur, l’héritage multiple n’est pas possible car Java suit la règle « Une classe ne doit étendre qu’une seule classe ou classe abstraite ». Cependant, il est possible de fournir un héritage d’implémentation multiple en utilisant une 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 de méthodes dans les interfaces » en introduisant de nouvelles fonctionnalités : les méthodes par défaut dans les interfaces. Grâce à 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 dû aux méthodes par défaut ? Comment Java 8 résout-il ce problème ?

Les méthodes par défaut de Java 8 peuvent introduire un problème de diamant lorsqu’une classe implémente plusieurs interfaces. Cela se produit lorsqu’une classe étend plus d’une interface 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 de diamant avec les méthodes par défaut d’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 le fragment de code ci-dessus, la classe D donne une erreur de compilation en temps de débogage indiquant « Des méthodes par défaut dupliquées nommées display avec les paramètres () et () sont héritées des types C et B ». C’est parce que le compilateur Java sera confus sur lequel display() utiliser dans la classe D. La classe D hérite de la méthode display() des deux 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();
	}
	
}

Cela B.super.display(); résoudra ce problème de diamant. Si vous voulez utiliser la méthode par défaut de l’interface C, alors utilisez C.super.display();. C’est tout sur les questions d’entretien Java 8. Nous discuterons de quelques autres questions d’entretien Java SE 8 dans mes prochains articles. Veuillez me laisser un commentaire si vous aimez mon article ou si vous avez des problèmes/suggestions.

Source:
https://www.digitalocean.com/community/tutorials/javase8-interview-questions-part2