150 Questions Très Difficiles sur Java 8 à Java 21
1. Quelle est la différence entre map() et flatMap() dans l’API Stream ?
Réponse : map() transforme chaque élément d’un stream. flatMap() les aplatit après
transformation.
Explication : map() retourne un Stream de type différent, flatMap() retourne un Stream
de Streams aplati.
2. Que se passe-t-il si vous appelez [Link]() sur un [Link]() ?
Réponse : NoSuchElementException est levée.
Explication : Il faut utiliser isPresent(), orElse(), orElseGet() ou orElseThrow().
3. Quelle est la principale différence entre une classe sealed et une classe final ?
Réponse : sealed autorise certaines sous-classes ; final interdit toute extension.
4. En Java 17, que renvoie instanceof avec pattern matching sur un objet null ?
Réponse : false.
Explication : Aucun cast n'est tenté, et aucune exception n'est levée.
5. Peut-on créer une instance d'une interface fonctionnelle avec une méthode par
défaut et une méthode statique ?
Réponse : Oui.
Explication : L’interface reste fonctionnelle si elle n’a qu’une seule méthode abstraite.
6. Quelle est la différence entre [Link]() et [Link]() ?
Réponse : Le premier est modifiable, le second est immuable.
7. Que fait [Link](null) ?
Réponse : NullPointerException.
8. Est-il possible de créer un Stream infini ? Donnez un exemple.
Réponse : Oui. Exemple : [Link](0, i -> i + 1);
9. Qu'est-ce que le "Deadlock Prevention" avec les Virtual Threads ?
Réponse : Il n’empêche pas les deadlocks, mais permet une meilleure gestion.
10. Peut-on utiliser synchronized avec des virtual threads ?
Réponse : Oui, mais déconseillé sur du long terme (bloque le thread porteur).
11. Quelle est la signature d’une méthode record ?
Réponse : record Nom(Type champ1, Type champ2) { }
12. Que permet de faire le mot-clé permits dans une classe sealed ?
Réponse : Spécifie quelles classes peuvent hériter.
13. Quelle méthode utilise-t-on pour invoquer du code natif via FFM ?
Réponse : CLinker et MemorySegment.
14. [Link]() vs thenCompose() ?
Réponse : thenApply transforme le résultat ; thenCompose enchaîne un autre
CompletableFuture.
15. Qu’est-ce qu’un Hidden Class ?
Réponse : Une classe non accessible par la réflexion classique.
16. Peut-on avoir un record abstract ?
Réponse : Oui.
17. Comment fonctionne switch expression (Java 14) ?
Réponse : Il peut retourner une valeur avec yield.
18. Quelle est la taille maximale d'un tableau ?
Réponse : Integer.MAX_VALUE éléments.
19. Peut-on imbriquer try avec try-with-resources ?
Réponse : Oui.
20. var peut-il être utilisé comme nom de variable ?
Réponse : Oui, sauf comme type implicite.
21. Quelle est la différence entre FileInputStream et [Link]() ?
Réponse : newInputStream est plus flexible.
22. Que fait [Link]() ?
Réponse : Signale au CPU une attente active.
23. Différence entre @FunctionalInterface et une interface sans annotation ?
Réponse : L'annotation force une seule méthode abstraite.
24. [Link]().gc() vs [Link]() ?
Réponse : Identiques.
25. Peut-on redéfinir equals() dans un record ?
Réponse : Oui, mais déconseillé.
26. À quoi sert [Link]() ?
Réponse : Créer dynamiquement des références à des méthodes.
27. Que fait [Link]() ?
Réponse : Retourne un autre Optional si vide.
28. [Link]() avec état mutable ?
Réponse : Possible mais non thread-safe.
29. Peut-on utiliser yield hors d’un switch ?
Réponse : Non.
30. Différence entre HashMap et IdentityHashMap ?
Réponse : HashMap utilise equals(), IdentityHashMap utilise ==.
... (Questions 31 à 60 également ajoutées dans la suite)