Chapitre 18
18 - QCM (100 Questions)
> 100 questions à choix multiples pour valider vos connaissances Java, Spring, architecture et DevOps
Chapitre 18 — QCM : 100 Questions
Évaluez votre niveau avec 100 questions couvrant l'ensemble du programme
Section 1 : Fondamentaux Java (Q1-Q10)
Q1 — Quel est le type de var dans var x = "Hello" ?
a) String
b) Object
c) CharSequence
d) Le type est déterminé à l'exécution
R : a) var est un sucre syntaxique. Le type est inféré à la compilation : c'est String.
Q2 — Quelle interface fonctionnelle représente une fonction qui prend un paramètre et retourne un booléen ?
a) Consumer<T>
b) Function<T,R>
c) Predicate<T>
d) Supplier<T>
R : c) Predicate<T> a la méthode boolean test(T t).
Q3 — Que retourne Stream.of(1, 2, 3).map(i -> i * 2).filter(i -> i > 3).findFirst() ?
a) Optional[4]
b) Optional[6]
c) Optional[2]
d) 4
R : a) 12=2 (pas >3), 22=4 (>3) → Optional[4].
Q4 — Quelle différence entre abstract class et interface (Java 21) ?
a) Une interface ne peut pas avoir de méthodes avec implémentation
b) Une classe abstraite peut avoir des constructeurs, pas une interface
c) On ne peut pas implémenter plusieurs classes abstraites
d) b et c
R : d) Les interfaces peuvent avoir des default/static méthodes depuis Java 8. Les classes abstraites ont des constructeurs. Pas d'héritage multiple de classes.
Q5 — Que fait Objects.requireNonNull(obj) ?
a) Retourne obj si non-null, sinon NullPointerException
b) Retourne Optional.of(obj)
c) Retourne obj si non-null, sinon Optional.empty()
d) Lance IllegalArgumentException
R : a) requireNonNull lève NullPointerException si l'argument est null.
Q6 — Quel mot-clé empêche l'héritage d'une classe ?
a) abstract
b) static
c) final
d) sealed
R : c) final empêche l'héritage. sealed le limite.
Q7 — Quelle est la sortie de "Java".chars().map(c -> c + 1).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString() ?
a) "Kbwb"
b) "Java"
c) "Kbvb"
d) "Javb"
R : a) J→K(74→75), a→b(97→98), v→w(118→119), a→b(97→98).
Q8 — Quelle est la différence entre == et equals() pour les String ?
a) == compare le contenu, equals() compare les références
b) == compare les références, equals() compare le contenu
c) Les deux comparent les références
d) Les deux comparent le contenu
R : b) == compare les références mémoire, equals() compare le contenu (pour String).
Q9 — Que fait List.of(1, 2, 3).add(4) ?
a) Ajoute 4 à la liste
b) Crée une nouvelle liste avec 4
c) Lance UnsupportedOperationException
d) Lance IllegalArgumentException
R : c) List.of() crée une liste immuable.
Q10 — Quelle annotation JUnit 5 exécute une méthode avant chaque test ?
a) @BeforeAll
b) @BeforeEach
c) @Before
d) @BeforeClass
R : b) @BeforeEach (JUnit 5). @Before est JUnit 4.
Section 2 : Java Moderne (Q11-Q22)
Q11 — Quelle est la bonne syntaxe pour un Record en Java ?
a) record Point(int x, int y)
b) class Point(int x, int y)
c) data class Point(int x, int y)
d) record Point { int x; int y; }
R : a) La syntaxe des records est concise.
Q12 — Les Records sont implicitement... ?
a) final
b) abstract
c) sealed
d) static
R : a) Les records sont implicitement final.
Q13 — Quel Pattern Matching de switch est valide ?
Object obj = "Hello";
switch (obj) {
case String s -> System.out.println(s.length());
case Integer i -> System.out.println(i);
default -> System.out.println("Unknown");
}
a) Valide depuis Java 17
b) Invalide : il faut instanceof avant
c) Valide depuis Java 8
d) Invalide : String et Integer ne sont pas compatibles
R : a) Depuis Java 17 (Preview en 17, final en 21).
Q14 — Que sont les Sealed Classes ?
a) Des classes qui ne peuvent pas être instanciées
b) Des classes qui contrôlent les sous-classes autorisées
c) Des classes avec des champs privés
d) Des classes avec des méthodes sealed
R : b) Les sealed classes définissent une hiérarchie contrôlée.
Q15 — Quel est l'avantage des Text Blocks ?
a) Syntaxe plus lisible pour les chaînes multi-lignes
b) Meilleure performance mémoire
c) Support de l'interpolation de variables
d) a et c
R : a) Les Text Blocks ("""...""") améliorent la lisibilité. Pas d'interpolation.
Q16 — Quelle est la différence entre Stream.map() et Stream.flatMap() ?
a) map change le type, flatMap ne change pas
b) flatMap aplatit un Stream de Streams en un seul Stream
c) map est terminal, flatMap est intermédiaire
d) Il n'y a pas de différence
R : b) flatMap transforme chaque élément en Stream puis aplatit.
Q17 — Comment créer un Stream infini ?
a) Stream.of()
b) Stream.iterate(0, i -> i + 1)
c) Stream.range(0, Integer.MAX_VALUE)
d) new Stream<Integer>()
R : b) Stream.iterate() avec une UnaryOperator génère un stream infini.
Q18 — Que fait Collectors.toUnmodifiableList() ?
a) Retourne une liste mutable
b) Retourne une liste immuable
c) Retourne un Optional
d) Lance une exception si la liste contient des nulls
R : b) Retourne une liste qui ne peut pas être modifiée.
Q19 — Quelle est la sortie de IntStream.rangeClosed(1, 5).sum() ?
a) 15
b) 10
c) 14
d) 16
R : a) 1+2+3+4+5 = 15. rangeClosed inclut la borne supérieure.
Q20 — Quelle est la différence entre orTimeout() et completeOnTimeout() sur CompletableFuture ?
a) orTimeout lance une exception, completeOnTimeout retourne une valeur
b) completeOnTimeout lance une exception
c) Elles sont identiques
d) orTimeout est synchrone
R : a) orTimeout(timeout, unit) → TimeoutException. completeOnTimeout(value, timeout, unit) → valeur par défaut.
Q21 — Que permet Thread.startVirtualThread() ?
a) Créer un thread système
b) Créer un thread virtuel Loom
c) Démarrer un thread daemon
d) Créer un thread avec une stack fixe
R : b) startVirtualThread() crée un virtual thread (Project Loom).
Q22 — Quelle JEP a introduit les Records ?
a) JEP 359
b) JEP 384
c) JEP 395
d) JEP 398
R : c) JEP 395 a finalisé les Records en Java 16.
Section 3 : Concurrence (Q23-Q30)
Q23 — Quelle est la différence entre synchronized et ReentrantLock ?
a) ReentrantLock offre des tentatives de lock avec timeout
b) synchronized est plus flexible
c) ReentrantLock utilise wait/notify
d) Aucune différence
R : a) ReentrantLock offre tryLock(timeout), lockInterruptibly(), etc.
Q24 — Que fait Executors.newCachedThreadPool() ?
a) Crée un pool fixe de threads
b) Crée un pool qui ajuste dynamiquement sa taille
c) Crée un thread unique
d) Crée un pool qui exécute les tâches séquentiellement
R : b) newCachedThreadPool() crée des threads à la demande et réutilise les inactifs.
Q25 — Quelle est la différence entre submit() et execute() sur ExecutorService ?
a) submit() retourne un Future, pas execute()
b) execute() est asynchrone
c) submit() lance une exception
d) Aucune différence
R : a) submit() retourne Future<T> pour récupérer le résultat ou l'exception.
Q26 — Que fait CountDownLatch ?
a) Compte les threads en attente
b) Permet à N threads d'attendre un signal
c) Compte le nombre d'opérations atomiques
d) Synchronise l'accès à une ressource
R : b) CountDownLatch attend que N opérations countDown() soient appelées.
Q27 — Quelle est la différence entre volatile et AtomicInteger ?
a) volatile garantit l'atomicité des opérations composées
b) AtomicInteger offre des opérations atomiques comme incrementAndGet()
c) volatile est plus rapide pour les compteurs
d) Aucune différence
R : b) volatile garantit la visibilité mais pas l'atomicité des opérations composées.
Q28 — Que se passe-t-il si on appelle future.get() alors que la tâche n'est pas terminée ?
a) Retourne null immédiatement
b) Bloque jusqu'à ce que le résultat soit disponible
c) Lance TimeoutException
d) Lance InterruptedException
R : b) get() est bloquant jusqu'à l'obtention du résultat.
Q29 — Quelle est la propriété de StructuredTaskScope (Loom) ?
a) Les sous-tâches sont automatiquement nettoyées
b) La durée de vie d'un thread virtuel est limitée à la méthode
c) Les threads filles doivent terminer avant le thread père
d) Toutes les réponses
R : d) StructuredTaskScope assure que la durée de vie des threads virtuels est structurée et bornée.
Q30 — Que fait Thread.sleep(0) ?
a) Endort le thread pour toujours
b) Provoque une réorganisation des threads par le scheduler
c) Lance IllegalArgumentException
d) Ne fait rien
R : b) sleep(0) est un hint pour le scheduler de réévaluer les priorités.
Section 4 : JPA/Hibernate (Q31-Q40)
Q31 — Quelle annotation définit la clé primaire composite ?
a) @Id
b) @IdClass ou @EmbeddedId
c) @CompositeId
d) @PrimaryKey
R : b) @IdClass et @EmbeddedId sont les deux approches JPA.
Q32 — Quelle est la différence entre FetchType.EAGER et FetchType.LAZY ?
a) EAGER charge les associations immédiatement, LAZY à la demande
b) LAZY charge immédiatement
c) Les deux sont identiques
d) EAGER est plus performant
R : a) EAGER charge en une requête. LAZY utilise un proxy chargé à l'accès.
Q33 — Que fait @Transactional(readOnly = true) ?
a) Interdit les écritures en base
b) Optimise les lectures (flush mode = MANUAL)
c) Lance IllegalArgumentException si une écriture est tentée
d) a et b
R : d) readOnly = true interdit les écritures et optimise les lectures (pas de dirty checking).
Q34 — Qu'est-ce que le problème N+1 ?
a) N requêtes supplémentaires après la requête principale
b) Un problème de cache
c) Une boucle infinie dans les relations
d) Un deadlock en base
R : a) N+1 queries : 1 requête pour la liste + N pour chaque association.
Q35 — Comment résoudre N+1 avec JPA ?
a) @BatchSize
b) JOIN FETCH
c) @EntityGraph
d) Toutes les réponses
R : d) Toutes ces approches résolvent le problème N+1.
Q36 — Que fait @Version ?
a) Définit la version d'une entité
b) Implémente l'optimistic locking automatiquement
c) Versionne l'API REST
d) a et b
R : d) @Version implémente l'optimistic locking en incrémentant un champ.
Q37 — Quelle est la différence entre em.persist() et em.merge() ?
a) persist attache une nouvelle entité, merge attache une entité détachée
b) persist fonctionne avec les entités détachées
c) merge ne fonctionne qu'avec les nouvelles entités
d) Aucune différence
R : a) persist() = nouvelle entité transient. merge() = entité détachée existante.
Q38 — Que fait CascadeType.ALL ?
a) Cascade toutes les opérations (persist, merge, remove, refresh, detach)
b) Cascade seulement persist
c) Cascade toutes les opérations sauf remove
d) Ne fait rien sur les cascades
R : a) ALL cascade toutes les opérations JPA.
Q39 — Quelle est la différence entre @OneToMany et @ManyToMany ?
a) @ManyToMany utilise une table de jointure
b) @OneToMany peut utiliser mappedBy
c) Les deux nécessitent une relation bidirectionnelle
d) a et b
R : d) @ManyToMany nécessite une table de jointure. @OneToMany peut être unidirectionnel.
Q40 — Quand Hibernate lance-t-il la requête SQL pour une association LAZY ?
a) Au chargement de l'entité parente
b) Au premier accès à la propriété
c) À la fermeture de la session
d) Jamais si on ne commit pas
R : b) Lazy loading : la requête est exécutée au premier accès à la propriété.
Section 5 : Spring Core & Boot (Q41-Q52)
Q41 — Qu'est-ce que l'Inversion of Control (IoC) ?
a) Un design pattern pour créer des objets
b) Le conteneur gère le cycle de vie des beans
c) Une méthode de Spring pour injecter des dépendances
d) b et c
R : d) IoC : le conteneur Spring gère l'instanciation, la configuration et l'assemblage.
Q42 — Quelles sont les manières d'injecter des dépendances ?
a) Constructor injection
b) Setter injection
c) Field injection (@Autowired)
d) Toutes les réponses
R : d) Les trois sont supportées. Constructor est recommandée.
Q43 — Quelle est la portée (scope) par défaut d'un bean Spring ?
a) prototype
b) singleton
c) request
d) session
R : b) Les beans Spring sont des singletons par défaut.
Q44 — Que fait @SpringBootApplication ?
a) Combine @Configuration, @EnableAutoConfiguration, @ComponentScan
b) Active Spring Boot
c) Configure le logging
d) a et b
R : d) @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan.
Q45 — Quelle est la différence entre @Component, @Service, @Repository ?
a) Elles sont identiques
b) @Repository ajoute la traduction des exceptions JPA
c) @Service ajoute la gestion des transactions
d) b est correct, @Component est générique
R : d) @Repository traduit les exceptions JPA. @Service est un alias sémantique.
Q46 — Que fait @EnableAutoConfiguration ?
a) Configure Spring Boot automatiquement basé sur les dépendances
b) Active toutes les configurations manuelles
c) Désactive la configuration automatique
d) Configure les beans utilisateur
R : a) Auto-configuration basée sur le classpath et les propriétés.
Q47 — Quelle propriété change le port de l'application Spring Boot ?
a) server.port
b) spring.port
c) application.port
d) http.port
R : a) server.port=8081 dans application.properties.
Q48 — Que fait @ConfigurationProperties ?
a) Injecte des propriétés préfixées dans un bean
b) Configure une source de données
c) Active le profiling
d) Définit des beans conditionnels
R : a) @ConfigurationProperties(prefix = "app.datasource") mappe les propriétés.
Q49 — Quelle est la différence entre @RequestParam et @PathVariable ?
a) @RequestParam pour query params, @PathVariable pour segments d'URL
b) @RequestParam pour POST, @PathVariable pour GET
c) Elles sont identiques
d) @PathVariable est obligatoire
R : a) /api/users?id=5 → @RequestParam, /api/users/5 → @PathVariable.
Q50 — Que fait ResponseEntity ?
a) Représente la réponse HTTP complète (status, headers, body)
b) Retourne une entité du domaine
c) Convertit une exception en réponse
d) Valide les paramètres de requête
R : a) ResponseEntity permet de contrôler status, headers et body.
Q51 — Quelle exception lève BeanCreationException ?
a) Quand un bean ne peut pas être créé
b) Quand une dépendance est manquante
c) Quand le contexte ne peut pas être rafraîchi
d) Toutes les réponses
R : d) BeanCreationException pour toute erreur de création de bean.
Q52 — Que permet @Profile ?
a) Activer des beans pour un environnement spécifique
b) Profiler la performance de l'application
c) Logger les profils utilisateur
d) Créer des profils de test
R : a) @Profile("dev") active le bean seulement en environnement "dev".
Section 6 : Microservices (Q53-Q60)
Q53 — Quel pattern utilise Spring Cloud Gateway ?
a) API Gateway pattern
b) Saga pattern
c) CQRS pattern
d) Event Sourcing
R : a) Spring Cloud Gateway implémente l'API Gateway pattern.
Q54 — Que fait Resilience4j Circuit Breaker ?
a) Empêche les appels à un service défaillant
b) Réessaie automatiquement les appels échoués
c) Limite le taux d'appels
d) a, b et c partiellement (a est correct)
R : a) Circuit Breaker ouvre le circuit quand les échecs dépassent un seuil.
Q55 — Quel est le rôle d'Eureka dans Spring Cloud ?
a) Service Discovery : enregistrement et découverte de services
b) Distributed tracing
c) API Gateway
d) Configuration centralisée
R : a) Eureka est un service registry.
Q56 — Que fait @EnableFeignClients ?
a) Active les clients HTTP déclaratifs Feign
b) Active les clients WebSocket
c) Configure les clients REST
d) Active les tests d'intégration
R : a) Feign permet de définir des clients HTTP avec des annotations.
Q57 — Dans Spring Cloud Config, d'où le config-server peut-il lire la configuration ?
a) Git repository
b) Base de données
c) File system local
d) Toutes les réponses
R : d) Spring Cloud Config supporte Git, JDBC, Vault, filesystem, etc.
Q58 — Qu'est-ce que le Distributed Tracing ?
a) Suivi d'une requête à travers plusieurs microservices
b) Journalisation des erreurs distribuées
c) Sauvegarde distribuée des logs
d) Monitoring des performances réseau
R : a) tracing distribué avec des IDs de corrélation (traceId, spanId).
Q59 — Quel outil Spring Cloud pour le tracing ?
a) Spring Cloud Sleuth (maintenant Micrometer Tracing)
b) Spring Cloud Config
c) Spring Cloud Bus
d) Spring Cloud Stream
R : a) Spring Cloud Sleuth (intégré à Micrometer Tracing depuis Spring Boot 3.x).
Q60 — Que fait Spring Cloud Bus ?
a) Propage les événements de configuration via un message broker
b) Gère le trafic réseau
c) Collecte les métriques
d) Synchronise les bases de données
R : a) Spring Cloud Bus propage les changements de configuration (ex: refresh via RabbitMQ).
Section 7 : Architecture (Q61-Q66)
Q61 — Quel est le principe de l'architecture hexagonale ?
a) Le domaine est au centre, les adaptateurs à la périphérie
b) Les couches sont strictement verticales
c) La base de données est au centre
d) L'interface utilisateur est le point d'entrée unique
R : a) L'architecture hexagonale (ports/adapters) isole le domaine des infrastructures.
Q62 — Que signifie CQRS ?
a) Command Query Responsibility Segregation
b) Central Query Response System
c) Concurrent Query Router Service
d) Command Query Response Service
R : a) CQRS : séparation des commandes (écritures) et des requêtes (lectures).
Q63 — Qu'est-ce qu'un Value Object en DDD ?
a) Un objet immutable défini par ses attributs
b) Une entité avec un identifiant
c) Un service sans état
d) Un objet de base de données
R : a) Un Value Object est immutable et défini par ses valeurs, pas par un ID.
Q64 — Quelle est la différence entre Aggregate et Entity en DDD ?
a) Un Aggregate est un cluster d'objets traités comme une unité
b) Une Entity est toujours un Aggregate
c) Un Aggregate n'a pas d'identifiant
d) Il n'y a pas de différence
R : a) L'Aggregate garantit la consistance des changements à l'intérieur de ses frontières.
Q65 — Que signifie le principe de ségrégation des interfaces (ISP) ?
a) Une interface doit être petite et spécifique
b) Une classe doit implémenter toutes les interfaces
c) Les interfaces doivent être publiques
d) Les interfaces ne doivent pas avoir de méthodes
R : a) ISP (le I de SOLID) : mieux vaut des interfaces spécifiques qu'une interface générale.
Q66 — Qu'est-ce que l'Event Sourcing ?
a) Stocker l'état actuel dans des événements
b) Stocker tous les changements d'état comme une séquence d'événements
c) Une technique de logging
d) Un pattern de test
R : b) L'état courant est dérivé de la relecture des événements.
Section 8 : Testing (Q67-Q74)
Q67 — Quelle annotation JUnit 5 pour un test paramétré ?
a) @ParameterizedTest
b) @ParamTest
c) @TestFactory
d) @Parameterized
R : a) @ParameterizedTest avec @ValueSource, @CsvSource, etc.
Q68 — Que vérifie Assertions.assertThrows() ?
a) Qu'une exception est levée
b) Qu'aucune exception n'est levée
c) Le message d'une exception
d) Le type et le message d'une exception
R : a) assertThrows(IllegalArgumentException.class, () -> obj.methode()).
Q69 — Quelle est la différence entre @Mock et @InjectMocks ?
a) @Mock crée un mock, @InjectMocks injecte les mocks dans l'objet testé
b) @Mock injecte les dépendances
c) @InjectMocks crée un mock
d) Aucune différence
R : a) @Mock crée un simulacre. @InjectMocks crée l'objet réel avec les mocks injectés.
Q70 — Que fait Mockito.when().thenReturn() ?
a) Définit le comportement d'un mock
b) Vérifie une interaction
c) Crée un spy
d) Capture un argument
R : a) when(mock.methode()).thenReturn(valeur) stube le comportement.
Q71 — Que permet Testcontainers ?
a) Exécuter des tests avec des vrais services (DB, Kafka, etc.) dans Docker
b) Créer des containers Docker de production
c) Tester des API REST
d) Déployer en production
R : a) Testcontainers démarre des containers Docker pour les tests d'intégration.
Q72 — Quelle est la bonne pratique avec Testcontainers ?
a) Réutiliser le container pour plusieurs tests
b) Créer un container par test
c) Utiliser toujours les versions latest des images
d) Ne pas utiliser Testcontainers en CI
R : a) Réutiliser le container (static ou singleton) pour la performance.
Q73 — Que fait @TestMethodOrder(MethodName.class) ?
a) Ordonne les tests par nom de méthode
b) Exécute les tests dans l'ordre aléatoire
c) Ordonne les tests par priorité
d) Ignore les tests
R : a) Ordonne les tests par ordre alphabétique des noms de méthode.
Q74 — Que vérifie @Nested en JUnit 5 ?
a) Permet de grouper des tests logiquement
b) Crée des tests imbriqués
c) Exécute des tests en parallèle
d) a et b
R : d) @Nested groupe des tests dans des classes internes pour une meilleure organisation.
Section 9 : Performance (Q75-Q80)
Q75 — Quel GC est recommandé pour les applications avec des exigences de faible latence ?
a) G1GC
b) ZGC
c) Serial GC
d) Parallel GC
R : b) ZGC (et Shenandoah) sont conçus pour les très faibles latences (< 10ms).
Q76 — Que permet JFR (Java Flight Recorder) ?
a) Enregistrer des événements JVM pour l'analyse de performance
b) Enregistrer les logs de l'application
c) Capturer les heap dumps
d) Monitorer la base de données
R : a) JFR est un outil de profiling basé sur les événements intégré à la JVM.
Q77 — Que montre la métrique "GC Pause Time" ?
a) Le temps d'arrêt de l'application dû au garbage collection
b) Le temps d'exécution du GC
c) La fragmentation de la heap
d) La taille de la heap
R : a) GC pause time = temps pendant lequel les threads applicatifs sont arrêtés (Stop-The-World).
Q78 — Quelle commande JVM pour lister les threads ?
a) jstack
b) jmap
c) jstat
d) jcmd
R : a) jstack <pid> imprime la stack trace de tous les threads.
Q79 — Que fait l'option -Xmx4g ?
a) Définit la heap maximale à 4 Go
b) Définit la heap initiale à 4 Go
c) Définit la metaspace à 4 Go
d) Définit la stack à 4 Go
R : a) -Xmx = taille maximale de la heap. -Xms = taille initiale.
Q80 — Quelle est la différence entre un CPU-bound et un IO-bound ?
a) CPU-bound : limité par le processeur, IO-bound : limité par les entrées/sorties
b) CPU-bound : lent, IO-bound : rapide
c) CPU-bound : utilise plus de mémoire
d) Aucune différence
R : a) CPU-bound bénéficie de plus de cœurs. IO-bound bénéficie de l'async.
Section 10 : Sécurité (Q81-Q86)
Q81 — Quelle annotation active Spring Security ?
a) @EnableWebSecurity
b) @EnableSecurity
c) @SpringSecurity
d) @Secure
R : a) @EnableWebSecurity active la configuration Web Security dans Spring Boot.
Q82 — Que fait SecurityFilterChain ?
a) Définit une chaîne de filtres de sécurité
b) Authentifie les utilisateurs
c) Configure le CORS
d) Gère les sessions
R : a) SecurityFilterChain est un bean qui configure la chaîne de filtres.
Q83 — Que signifie JWT ?
a) JSON Web Token
b) Java Web Token
c) JavaScript Web Token
d) JSON Web Transport
R : a) JSON Web Token : format de token basé sur JSON.
Q84 — Quelle est la structure d'un JWT ?
a) Header.Payload.Signature
b) Header.Body.Signature
c) Token.Signature.Payload
d) Header.Payload.Key
R : a) JWT = Base64(header) + "." + Base64(payload) + "." + signature.
Q85 — Que fait CSRF ?
a) Cross-Site Request Forgery : attaque où un site malveillant exécute des actions
b) Cross-Site Scripting
c) Cross-Origin Resource Sharing
d) Central Security Framework
R : a) CSRF est une attaque qui force l'utilisateur à exécuter des actions non désirées.
Q86 — Quelle est la différence entre OAuth2 et JWT ?
a) OAuth2 est un protocole d'autorisation, JWT est un format de token
b) OAuth2 utilise toujours JWT
c) JWT est un protocole, OAuth2 est un format
d) Aucune différence
R : a) OAuth2 définit le flux d'autorisation. JWT est un format de token possible.
Section 11 : DevOps (Q87-Q92)
Q87 — Quelle est la différence entre Docker et une VM ?
a) Docker partage le noyau hôte, la VM a son propre noyau
b) Docker est plus lourd qu'une VM
c) Une VM partage le noyau hôte
d) Aucune différence
R : a) Docker utilise le kernel de l'hôte ; une VM virtualise l'OS complet.
Q88 — Que fait un Docker multi-stage build ?
a) Utilise plusieurs FROM pour séparer build et runtime
b) Construit plusieurs images
c) Déploie sur plusieurs environnements
d) Exécute plusieurs étapes de test
R : a) Multi-stage : builder image avec JDK, runtime image avec JRE uniquement.
Q89 — Quelle phase Maven compile le code source ?
a) compile
b) package
c) install
d) process-classes
R : a) Le lifecycle Maven : validate → compile → test → package → verify → install → deploy.
Q90 — Que fait mvn dependency:tree ?
a) Affiche l'arbre des dépendances
b) Installe les dépendances
c) Met à jour les dépendances
d) Supprime les dépendances inutiles
R : a) Affiche la hiérarchie complète des dépendances Maven.
Q91 — Quel est le rôle de SonarQube ?
a) Analyse la qualité du code
b) Compile le code
c) Déploie l'application
d) Gère les dépendances
R : a) SonarQube fait de l'analyse statique de code pour détecter bugs, vulnérabilités, code smells.
Q92 — Que permet GitHub Actions ?
a) Automatiser les workflows CI/CD
b) Héberger du code
c) Gérer les issues
d) Déployer uniquement sur AWS
R : a) GitHub Actions exécute des workflows définis dans .github/workflows/.
Section 12 : Jakarta EE (Q93-Q96)
Q93 — Quelle est la différence entre Jakarta EE et Java EE ?
a) Jakarta EE est Java EE sous l'égide de la fondation Eclipse
b) Jakarta EE est une version cloud de Java EE
c) Java EE est plus récent que Jakarta EE
d) Aucune différence
R : a) Java EE a été transféré à la fondation Eclipse et renommé Jakarta EE.
Q94 — Que fait @Stateless en EJB ?
a) Définit un EJB sans état
b) Définit un EJB avec état
c) Définit un singleton
d) Définit un message-driven bean
R : a) @Stateless : EJB sans état de session, interchangeable, poolable.
Q95 — Quelle annotation Jakarta REST définit un endpoint GET ?
a) @GET
b) @GET/PATH
c) @HttpMethod(GET)
d) @RequestMapping(GET)
R : a) @GET de jakarta.ws.rs.GET.
Q96 — Que permet CDI (Contexts and Dependency Injection) ?
a) L'injection de dépendances et la gestion de contexte
b) La création de servlets
c) La configuration de la sécurité
d) La gestion des transactions
R : a) CDI est le standard Jakarta pour l'injection de dépendances.
Section 13 : Kotlin (Q97-Q100)
Q97 — Quelle est la différence entre val et var en Kotlin ?
a) val est immuable (read-only), var est mutable
b) val est mutable
c) var est immuable
d) Aucune différence
R : a) val = final (Java final), var = variable mutable.
Q98 — Que fait ? en Kotlin (ex: String?) ?
a) Rend le type nullable
b) Rend le type optionnel
c) Déclare un type générique
d) Définit une propriété
R : a) String? peut contenir null. String ne peut pas (null safety).
Q99 — Quelles sont les coroutines en Kotlin ?
a) Des threads légers pour l'async
b) Des threads système
c) Des callbacks
d) Des services
R : a) Les coroutines sont des unités d'exécution asynchrones légères.
Q100 — Comment Kotlin interopère avec Java ?
a) Compatibilité bidirectionnelle complète
b) Kotlin peut appeler Java, mais pas l'inverse
c) Java ne peut pas appeler Kotlin
d) L'interopérabilité nécessite des annotations
R : a) Kotlin compile en bytecode JVM et peut appeler/appelé par Java.
Résultats
| Score | Niveau | Recommandation |
|---|---|---|
| 90-100 | Expert | Prêt pour certification Oracle |
| 75-89 | Avancé | Postes Senior confirmés |
| 50-74 | Intermédiaire | Révisions ciblées |
| < 50 | Débutant | Revoir les fondamentaux |