└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Les Questions pour un entretien profile JAVA | JEE | Spring Ecosystem | Microservices 2 | 3 | 4 | 5 | 6 | ## Partie 1: Questions java 7 | 8 | - 1 . C'est quoi une classe Java? C’est une template définissant un type de données. Elle est utilisée pour créer des objets. 9 | 10 | - 2 . Qu’est-ce qu’un objet? C’est un élément d’une classe (instance) 11 | 12 | - 3 . Qu’es-ce qu’une méthode? C’est l’action qu’un objet peut faire. 13 | 14 | - 4 . Heap vs Stack 15 | * Heap: Lorsqu'un objet est créé, il est toujours créé dans Heap. 16 | * Stack: Lorsqu'une fonction est appelée, un bloc est réservé en haut de Stack pour stocker ses variables locales. aussi on trouve les références aux objets qui sont utilisés par cette méthode. 17 | 18 | - 5 . La différence entre JDK, JVM et JRE: 19 | * JDK : Java Devlopment Kit. C’est l’ensemble des packages et programmes qu’on utilise pour écrire nos propres programmes. 20 | * JRE : Java Runtime Environment . C’est la couche logicielle fournissant les packages et les ressources nécessaires pour qu’un programme java puisse s'exécuter. 21 | * JVM : Java Virtuel Machine. C’est l’environnement dans lequel le code Java (Byte Code) s’exécute. 22 | 23 | - 6 . Oracle JDK Vs OpenJDK 24 | * OpenJDK est une implémentation gratuite et open source de Java SE Platform Edition. 25 | * Oracle JDK nécessite une licence commerciale. 26 | 27 | - 7 . Est-ce que Java utilise les pointeurs? Non, Java importe une couche de sécurité en utilisant les références à la place des pointeurs. 28 | 29 | - 8 . les modificateurs d’accès en java: Ce sont les mots clés utilisés pour spécifier l’accès et la porté des objets, 30 | * public : les classes, attributs, les méthodes peuvent être utilisés par n’importe quel objet. 31 | * protected : Seules les classes du même packages ou des sous-classes qui peuvent utiliser les objets, attributs, méthodes avec ce modificateur. 32 | * private: c’est le modificateur le plus restreint, les objets, attributs, méthodes, variables ne peuvent être utilisées que dans la classes où ils sont déclarés. 33 | * « nothing » : pas de modificateur ou le modificateur par défaut, la visibilité est restreinte dans le même package. 34 | 35 | - 9 . Quelle est la différence entre inner class et subclass? 36 | * inner class : ou classe interne, est une classe définie (déclarée) à l’intérieur d’une classe. 37 | * subclass : sous classe, est une classe fille d’une classe mère. 38 | 39 | - 10 . Qu’est-ce qu’un constructeur? quels sont ses type? 40 | Un constructeur est un bloc de code utilisé pour initialiser un objet. On distingue deux types de constructeur : constructeur par défaut, et constructeur paramètré. 41 | 42 | - 11 . Overloading Vs Overriding? 43 | * Overloading : décrit le fait que deux méthodes (ou plus) peuvent avoir le même nom mais pas les mêmes parametres. 44 | * Overriding : décrit le fait que deux méthodes (ou plus) peuvent avoir le même nom et les mêmes parametres avec une relation mère-fille entre elles. 45 | 46 | - 12 . Quelle est la différence entre equals() et ==? 47 | 48 | == | equals() 49 | --- | --- 50 | Est un opérateur | Est une méthode 51 | Pour la comparaison des primitives et des objets (leurs réferneces) | Pour la comparaison de contenu des objets 52 | 53 | - 13 . Qu'est-ce qu'un objet immuable ? 54 | Tu ne peux pas modifier les objets d'une classe immuable une fois qu'ils sont créés. (ex String) 55 | 56 | - 23 . Quelle est la différence entre les classes String, StringBuilder et StringBuffer en Java ? 57 | 58 | String | StringBuilder | StringBuffer 59 | --- | --- | --- 60 | String est une classe immuable. | Mutable | Mutable 61 | ... | non synchronisée (not thread safe) | synchronisée (thread safe) 62 | 63 | - 14 . Différence entre Arraylist et List 64 | * List est une interface qui contient des méthodes abstraites. Une interface est un contrat qui doit être respecté par les développeurs. 65 | * ArrayList est une classe qui implémente l’interface List et respecte ce contrat. 66 | 67 | - 15 . C’est quoi le Garbage Collector? 68 | C’est un mécanisme défini dans la JVM pour faire le ménage. Si un objet n’est plus utilisé, il sera automatiquement détruit pour libérer les ressources. 69 | 70 | - 16 . Qu’est-ce qu’une exception? 71 | C’est un problème qui se produit lors de l’exécution d’un programme, et qui nécessite un traitement spéciale pour le bon fonctionnement de l’application. Ceci peut être réalisé, soit par: 72 | * l’envoi de l’exception à un niveau supérieur (throws) 73 | * ou par la capture et le traitement au niveau local (try/catch) 74 | 75 | - 17 . Différence entre Exception et Error en java 76 | * Error représente les erreurs principalement causées par l’environnement d’exécution de l’application. 77 | * Exception représente les erreurs principalement causées par l’application elle-même. 78 | 79 | - 18 . C’est quoi une classe abstraite? 80 | Est une classe qu'on peut pas l'instancier. Pour l’exploiter il faut absolument passer par l’héritage. 81 | 82 | - 19 . C’est quoi une interface? 83 | C’est une classe abstraite, qui permet de regrouper un certain nombre de méthodes sans qu’elle soit instanciée. Pour l’exploiter il faut l’implémenter 84 | 85 | - 20 . Quelle est la différence entre une classe abstraite et une interface ? 86 | 87 | Classe abstraite | Interface 88 | --- | --- 89 | Les constructeurs sont autorisés | Une interface ne peut pas avoir de constructeur. 90 | Les méthodes static sont autorisées | Les méthodes static ne sont pas autorisées 91 | Une classe ne peut avoir qu'un seul parent abstrait | Une classe peut implémenter plusieurs interfaces 92 | Une classe Java abstraite peut avoir des membres de classe private et protected | Les membres d'une interface Java sont public par défaut 93 | 94 | - 21 . Différence entre une méthode statique et non statique 95 | 96 | Méthode statique | Méthode non statique 97 | --- | --- 98 | appartient à une classe | appartient à un objet d’une classe. 99 | ne peut accéder qu’aux membres statiques. | peut accéder aux membres statiques et non statiques, 100 | 101 | - 22 . Ordre d'execution d'un programme java: 102 | static block -> Initialization block -> Constructor. 103 | 104 | - 24 . size() vs length 105 | La méthode size() fonctionne avec les collections, tandis que la propriété length fonctionne avec les tableaux. 106 | 107 | - 25 . Quelles sont les étapes pour établir une connexion à une base de données? 108 | * Enregistrer le driver 109 | * Créer la connexion 110 | * Créer le statement 111 | * Exécuter la requête 112 | * Récupérer les résultats ou l’état de l’exécution 113 | * Fermer la connexion 114 | 115 | --- 116 | 117 | ## Partie 2: Questions générales JEE 118 | 119 | - 1 . JEE : C'est l’ensemble de spécifications (JPA, JAX-WS, JMS...) pour créer des applications web Java, et c'est le serveur d’application qui fournit les implémentations. 120 | 121 | - 2 . La version courante de la specification JEE est : Jakarta EE 9 (le 25 Mai 2021) 122 | 123 | - 3 . Les versions LTS Java sont : Java 8, 11, 17 124 | 125 | - 4 . AOP : La séparation des aspects métiers et des aspects techniques d'une application est rendu possible grâce à la programmation Orienté Aspect. 126 | 127 | - 5 . TDD : Test Driven Développement : développer d’abord les tests. 128 | 129 | - 6 . Statefull et Statless : Deux approches pour sécuriser application web. 130 | * Statfull : la session de l’utilisateur authentifié est gérée par le serveur (avec état) 131 | * Stateless : la session de l’utilisateur authentifié est gérée par le client. 132 | 133 | - 7 . Les méthodes Agile comme Scrum ou l'eXtreme Programming (XP) partent du constat que le cycle de développement en cascade est un échec. 134 | * Des cycles de développement itératifs, 135 | * L’implication du client final tout au long du projet, 136 | * Des spécifications réduites en début de projet, 137 | 138 | - 8 . Maven est un outil permettant d'automatiser la gestion de projets Java. Il offre les fonctionalités suivantes: 139 | * Gérer les dépendances 140 | * Lancer la compilation des sources 141 | * Lancer les Test Unitaires 142 | * Générer les packages (jar, war, ear) 143 | * Installer les packages dans le repository 144 | * Déployer l’application dans le serveur 145 | * Générer la documentation du projet 146 | 147 | - 9 . Lombok : une librairie java pour la génération de code automatique. Getter et setter … 148 | 149 | - 10 . DevTools : une librairie java vient avec spring boot, permet le rechargement automatiquement des classes Java et leur configuration côté serveur. Après les changements côté serveur, il s'est déployé dynamiquement, 150 | --- 151 | ## Partie 3: Spring framework 152 | 153 | - 11 . Spring : est un framework open source pour construire et définir l'infrastructure d'une application Java, dont il facilite le développement et les tests. 154 | 155 | - 12 . Spring : est un framework de l’inversion contrôle pour créer des applications entreprises, on peut le sembler avec un conteneur web (tomcat) pour avoir un serveur application. 156 | 157 | - 13 . CotextLoaderListener est un listener appelé par Tomcat au moment du démarrage de l’application. Ce listener cherchera le fichier de beans spring. ce qui permet de faire l’injection des dépendances. 158 | 159 | - 14 . DispatcherServlet : Une Servlet qui joue le rôle de front contrôleur, pour traiter les requêtes de clients. 160 | 161 | - 15 . Differentes Configuration de Spring container : 162 | * XML (ClassPathXmlAppContext(path xml file) 163 | * Annotations (ClassPathXmlAppContext(path xml file) 164 | * Code source Java (AnnotationConfigAppContext(ClassConfig.class) 165 | 166 | - 16 . Bean scope : 167 | * Singleton ( scope par défaut ) 168 | * Prototype 169 | * Request (Application web) 170 | * Session (Application web) 171 | * Global-session (Application web) 172 | 173 | - 17 . C'est quoi Spring container: 174 | * Création et gestion des beans (IOC) 175 | * Injecter ces beans pour l’utiliser (DI) 176 | 177 | - 18 . Les types d’injection d’un Bean Spring: 178 | * Via le constructeur (recommandé) 179 | * Sous forme attribut avec l’annotation @Autoward 180 | 181 | - 19 . C’est quoi la differnec entre : 182 | * @Param : Un parametre Spring Data 183 | * @RequestParam : Un parametre Spring MVC, sous la forme ( url?variable=valeur ). 184 | * @PathVariable : Un parametre Spring MVC, sous la forme ( url/varibale ). 185 | * @PathParam : Un parametre Jersey 186 | * @WebParam : Un parametre JAX-WS 187 | 188 | - 20 . Nouveautés de Spring 5 : Vient avec des fonctionnalités suivantes: 189 | * Support de java 8 / 9 190 | * Support de Hibernate 5 et Junit 5 191 | * Support JPA 2 192 | * Programmation fonctionnelle 193 | * Support de kotlen 194 | * Supprt de Http2 195 | 196 | - 21 . Spring boot : un module spring, ou une super couche de spring pour créer des applications spring avec zéro configuration. 197 | 198 | - 22 . Avantages spring boot : 199 | * Auto configuration 200 | * Serveur web intégré (Tomcat) 201 | * Gestion de dépendances ( starters ) 202 | * Création des applications standalone (jar) 203 | 204 | - 23 . @SpringBootApplication : C'est une annotation de spring boot qui combine trois autres annotations: 205 | * @Configuration: pour marquer une classe comme une classe de configuration, 206 | * @EnableAutoConfiguration: pour activer la configuration automatique de spring boot. 207 | * @ComponentScan: pour scanner les différentes classes constituant les Beans de notre application. 208 | 209 | - 24 . Actuator: Une dépendance spring boot pour faire le monitoring de votre application en production. 210 | 211 | - 25 . C'est quoi la différence entre @Controller et @RestController: Les deux servent à marquer une classe comme contrôleur, la différence est le type de retour, les méthodes de @Controller renvoient une vue HTML ou JSP, Tandis que celles de @RestController renvoient les données aux formats JSON, XML... ( @RestController = @Controller + @ResponseBody) 212 | 213 | 214 | --- 215 | 216 | ## Partie 4: Web service 217 | 218 | - 1 . Un API (Application Programming Interface) est un ensemble de règles : interfaces Annotations et des classes abstraites. permettent à votre produit ou service de communiquer avec d'autres produits et services sans connaître les détails de leur mise en œuvre. 219 | 220 | - 2 . Service web : C’est des composants web basés sur HTTP pour la communication et l'échange de données entre applications et systèmes distribués. On a deux spécifications (JAX-WS et JAX-RS) 221 | 222 | - 4 . JAX-WS est une spécification JEE pour créer des web service basée sur le protocole SOAP, et interagit avec les messages XML. 223 | 224 | - 3 . JAX-RS est une spécification JEE pour créer des web service basée sur la norme Restful. et interagit avec les messages XML, JSON, HTML… 225 | (Implementations RESTEasy ET Jersey, Spring MVC, RestController, spring data rest). 226 | 227 | - 5 . Jersey est une implémentation de référence de JAX-RS. 228 | 229 | - 6 . SoapUI est une application de test de services web SOAP (Simple Object Access Protocol) et REST. 230 | 231 | - 7 . RESTful ou REST : est un style architectural utilisé dans le développement de web services. 232 | 233 | - 8 . JMS est une spécification pour la communication asynchrone entre les applications. 234 | 235 | - 9 . KafKa : est un broker (provider) pour le stockage ( file d’attente) et l'échange des messages entre les applications en mode asynchrone. 236 | 237 | - 10 . WSDL (Web Service Description language) : un document XML qui contient la description de l’interface de web service.( méthodes de web service, paramètres d’entrée et sortie) 238 | 239 | - 11 . UDDI (Universal Description Discovery and Integration) : Annuaire des web service permettant à la fois la publication (Register) et l’exploration (Discover) de web services. 240 | 241 | - 12 . JAXB : Une librairie Java pour le mapping OXM objet / xml. Ex(@XMLTransieint) 242 | 243 | - 13 . XML : Format de données un peu lourd mais avec les schémas XSD on a la garantie que les données sont valides. 244 | 245 | - 14 . JACKSON : Une librairie Java pour le mapping objet / JSON. Ex(@JsonIgnore) 246 | 247 | - 15 . JSON : Format léger d’échange de données le plus recommandé. 248 | 249 | - 16 . Projection : Citez les attributs d’une classe retournés par un service web. 250 | 251 | - 17 . Spécifications et implémentations 252 | 253 | Spécification | Implémentation de référence (Oracle) | Autres implémentations 254 | --- | --- | --- 255 | JAX-WS | GlassFish Metro (Oracle) | CXF 256 | JAX-RS | Jersey (Oracle) | RestEasy(Jboss), SpringMVC 257 | JPA | Eclipselink (Oracle) | Hibernate (Jboss), Ibatis 258 | Serveur Application | Glassfish (Oracle) | Wildfly (Jboss), websphere(IBM) 259 | Bean validation | Hibernate Validation | Apache Bean Validation (formerly agimatec) 260 | 261 | 262 | --- 263 | ## Partie 5: Persistence de données ( JDBC, JPA, Hibernate, Spring data) 264 | 265 | - 1 . JDBC (Java DataBase Connectivity) est une API fournie avec Java permettant de développer des applications capables de se connecter à des bases de données relationnelles (SGBDR). 266 | 267 | - 2 . JPA : Java persistence Api : C’est une spécification pour le mapping objet relationnel ORM, vient pour standariser différents framework ORM comme Hibernate, ExlepseLink. 268 | 269 | - 3 . Hibernate : le framework de mapping objet relationnel le plus populaire, c’est l’implémentation de JPA. 270 | 271 | - 4 . Avantages d'ORM : 272 | * Code généré automatiquement 273 | * Cache, performance 274 | * HQL ou JPQL 275 | * Indépendant de la base de données. 276 | 277 | - 5 . Qu'est-ce que HQL ? 278 | Hibernate Query Language (HQL) est utilisé comme une extension de SQL. HQL est la représentation orientée objet du langage de requête, c'est-à-dire qu'au lieu d'utiliser le nom de la table, nous utilisons le nom de la classe qui rend ce langage indépendant de toute base de données. 279 | 280 | - 6 . Spring data : Module de Spring, contient les interfaces et implémentations génériques qui utilisent JPA pour faire le mapping Objet Relationnel. 281 | 282 | - 7 . Quelques Annotations JPA: @Entity, @Id, @GeneratedValue, @Table, @Column, @Inheritance, @JoinColumn, @ManyToMany, @Transient 283 | 284 | - 8 . Quelques contraintes sur une entité JPA : Une classe d'entité doit remplir les conditions suivantes : 285 | * La classe doit avoir un constructeur sans parametres. 286 | * La classe ne peut pas être "final". 287 | * La classe doit être annotée avec l'annotation @Entity et @Id. 288 | 289 | - 9 . Cycle de vie d'une entité JPA : 290 | * Transient, [new()] 291 | * Persistent, [save(), persist(), saveOrUpdate(), merge(), load(), get() ] 292 | * Detached, [session.close(), session.clear(), session.evict(obj)] 293 | 294 | - 10 . Quelle est la différence entre persist(), save(), merge() and update() ? 295 | * Vous pouvez utiliser les méthodes persist(), save() pour stocker une nouvelle entité (Transient) dans la base de données. 296 | * Et merge(), update() pour enregistrer les modifications d'une entité détachée (Detached) dans la base de données. 297 | 298 | - 11 . Quelle est la différence entre load() et get()? 299 | Lorsque l'objet n'est disponible ni dans le cache ni dans la base de données, 300 | * load() : lève une exception (ObjectNotFoundException). la méthode load() peut retourner un proxy (lazy loading) 301 | * get() : renvoie null. renvoie jamais de proxy, elle atteint toujours la base de données. 302 | 303 | - 12 . Différentes stratégies de Mapping d’héritage : @Inheritance(strategy= InheritanceType.SINGLE_TABLE) 304 | * Une table par la hiérarchie : SINGLE_TABLE (la plus utilisée) 305 | @DiscriminatorColumn: Ajoutez cette annotation dans la classe mère, et @DiscriminatorValue dans les classes filles. 306 | * Une table pour chaque classe concrète : TABLE_PER_CLASS 307 | * Une table pour la classe mère et une table pour chaque classe fille: JOINED_TABLE 308 | 309 | - 13 . Les relations avec JPA et le fetch par défaut (JPA2+) : 310 | 311 | Relation | fetch par defaut 312 | --- | --- 313 | @OneToMany | LAZY 314 | @ManyToMany | LAZY 315 | @ManyToOne | EAGER 316 | @OneToOne | EAGER 317 | 318 | * FetchType.LAZY : indique que la relation doit être chargée à la demande ; 319 | * FetchType.EAGER : indique que la relation doit être chargée en même temps que l'entité qui la porte. 320 | 321 | - 14 . Les niveaux de cache JPA : 322 | * L1 est activé par défaut, et réside dans l'objet de session d'hibernation. 323 | * L2 (cache hibernate) Ceci n'est pas activé par défaut. Il doit être configuré explicitement, et réside dans l'objet SessionFactory et de ce fait, les données sont accessibles par l'ensemble de l'application. parmi les implémentations on trouve ehcache (Easy Hibernate cache). 324 | 325 | - 15 . Transaction : Traiter un ensemble d’opérations comme une seule pour avoir des données cohérentes, pour gérer les transactions on utlise JTA (Java Transaction API), 326 | 327 | - 16 . Qu'est-ce qu'une session Hibernate ? 328 | Une session est un objet qui maintient la connexion entre l'application objet Java et la base de données. Session a également des méthodes pour manipuler les données de la base de données à l'aide de méthodes telles que persist(), load(), get(), update(), delete(), etc. 329 | 330 | - 17 . Qu'est-ce qu'une SessionFactory ? 331 | Est une classe qui permet de créer une instance de Session, afin d'établir la connexion à la base de données. Comme bonne pratique, l'application a généralement une seule instance de SessionFactory. 332 | 333 | - 18 . la différence entre les méthodes getCurrentSession et openSession ? 334 | * getCurrentSession() : Cette méthode renvoie la session liée au contexte. Cet objet de session est fermé une fois la SessionFactory est fermée. 335 | * openSession() : Cette méthode ouvre toujours une nouvelle session. C'est le développeur qui va fermer cet objet une fois toutes les opérations de base de données terminées. 336 | 337 | - 19 . Qu'est-ce qu'un Entitymanager ? 338 | EntityManager est une API qui gère le cycle de vie des instances d'entité JPA. 339 | 340 | - 20 . Les requêtes JPA : 341 | * requêtes Natives. entityManager.createNativeQuery(...) 342 | * Requêtes JPQL. entityManager.createQuery(...) 343 | * l'API Criteria entityManager.getCriteriaBuilder().createQuery(...) 344 | 345 | - 21 . Quelle est la différence entre JPA et JDO ? 346 | * JPA (Java Persistence API) se concentre uniquement sur les bases de données relationnelles, 347 | * Alors JDO (Java Data Objects) est une spécification plus générale qui décrit l'ORM pour toutes les bases et référentiels possibles. 348 | 349 | 350 | --- 351 | ## Partie 6: Programmation Réactive en Java 352 | 353 | - 1 . Deux modèles de programmation : 354 | * Modèle multi threads bloquant 355 | * Programmation impérative. 356 | * Basé sur un pool de threads. 357 | * Les entrées sorties bloquants 358 | * Modèle single thread non bloquant 359 | * Programmation Réactive. 360 | * IO selector thread et des workers 361 | * Les entrées sorties non bloquants (NIO java 7). 362 | * Je dépends pas à la Tence des clients. 363 | 364 | - 2 . Nodjs : c’est la première téchnologie qui a introduit la programmation asynchrone en se basant sur le pattern Reactor. 365 | 366 | - 3 . Programmation Réactive : Modèle de programmation basé sur les événements en utilisant une séquence d’observables (Streams). 367 | 368 | - 4 . Streams : sont simplement les flux continues de données. Cela peut être n'importe quoi, des appels de service RESTful, des listes de données provenant d'une base de données, etc. 369 | 370 | - 5 . Operations sur streams. 371 | * Intermediate operation: Renvoyer un nouveau flux sur lequel un traitement ultérieur peut être effectué. 372 | * map(): produit un nouveau flux après avoir appliqué une fonction à chaque élément du flux d'origine. Le nouveau flux pourrait être de type différent. 373 | * filter(): cela produit un nouveau flux qui contient des éléments du flux d'origine qui réussissent un test donné (spécifié par un prédicat). 374 | * Terminal operation: Marquer le flux comme consommé, après quoi il ne peut plus être utilisé. 375 | * forEach(): il boucle sur les éléments du flux. 376 | * collect(): nous collectons tous les éléments du flux dans une liste. 377 | 378 | - 6 . La différence entre Map et flatMap : 379 | * Map : Transformer les objets d'un flux en un autre type d'objets. 380 | * FlatMap : FlatMap transforme chaque élément du flux en un flux d'autres objets. 381 | 382 | - 7 . Deux API pour travailler avec la programmation réactive : 383 | * Reactive Streams : API pour développer des applications réactive, implementations: Reactor de Spring, Vertx de Java. 384 | * Reactive X : est une API pour développer des applications réactive, implementations (RxJs, RxJava) 385 | 386 | - 8 . Publisher: est celui qui va émettre les données 387 | 388 | - 9 . Subscriber : est celui qui va les recevoir en s’abonnant au Publisher. 389 | 390 | - 10 . Backpressure : c’est le subscriber qui va décider combien de données qu’il va recevoir. 391 | 392 | - 11 . L’échange de données entre Publisher et Subscribe va se terminer par : 393 | * Complete : si tout se passe bien 394 | * Error : si il ya un problème. 395 | 396 | - 12 . Reactor : Est la bibliothèque réactive de choix pour Spring. Se compose principalement de deux types de Stream. 397 | * Flux: Un Publisher correspondant à un échange de 1 à plusieurs éléments. 398 | * Mono : Un Publisher correspondant à un échange de 0 à 1 élément. 399 | 400 | - 13 . Spring webflux : est un projet spring introduit pour prendre en charge la programmation réactive dans le Web. C'est une alternative à Spring MVC qui est basée sur Servlet, Il a été introduit pour la première fois avec Spring 5. (spring-boot-starter-webflux) 401 | 402 | - 14 . Pouvons-nous exécuter des applications Spring Webflux sur Tomcat ? 403 | La seule exigence est que le serveur soit conforme à la spécification Servlet 3.1+. Cependant, les applications Spring Webflux sont généralement déployées sur des serveurs Web tels que Netty et Undertow. 404 | 405 | - 15 . Quel est le cas d'utilisation de Spring Webflux ? 406 | Nous devrions l'utiliser lorsque nous voulons construire des systèmes qui sont résistants à une charge élevée. avec un nombre reduit de threads. 407 | 408 | - 16 . WebClient : Api qui permet d’accéder des services distants d’une manière réactive, est une alternative au classique RestTemplate. 409 | 410 | --- 411 | 412 | ## Partie 7: Micro-services 413 | 414 | - 1 . Deux architectures : 415 | * Architecture basé sur une application monolithique 416 | * Architecture basé sur les micro-services. 417 | 418 | - 2 . Application monolithique : est une application qui est développée en un seul bloc ( jar, war ) avec une seule technologie. et déployée d’une manière unitaire dans un serveur d’application. 419 | 420 | - 3 . Problèmes d’une application monolithique : 421 | * Centralise tous les besoins fonctionnels 422 | * Est réalisée dans une seule technologie. 423 | * Chaque modification nécessite la redéployèrent de toute application. 424 | * Livraison en bloc, client attend beaucoup de temps pour commencer à voir les premières versions. 425 | 426 | - 4 . Les micro-services sont une approche d’architecture et de développement d’une application composée de petits services. L’idée étant de découper un grand problème en petites unités implémentée sous forme de micro-services. 427 | 428 | - 5 . Avantages d’une application basée sur micro-services 429 | * Performances 430 | * Redéploiement à chaud 431 | * Technologies différentes 432 | * Equipes indépendantes 433 | * Facile à appliquer agilité et TDD 434 | 435 | - 6 . Désavantages d’une application basée sur micro-services 436 | * la communication entre les méthodes est plus lente, 437 | * plus difficiles à déboguer. 438 | * il y aura un effort supplémentaire pour les opérations, le déploiement, scaling, configuration, monitoring et les tests car chaque service est séparé. 439 | 440 | - 7 . Les cas d'utilsation de l'architecture microservices: 441 | * Application très large. 442 | * Besion de scaler l'application. 443 | * Des grandes équipes. 444 | 445 | - 8 . Spring Cloud: Projet Spring pour créer des applications microservices, fournit registration, configuration et Proxy service. 446 | 447 | - 9 . Eureka Server ou service registry : Est un microservice technique qui enregistre la localisation des micro-services créer par Netflix : 448 | * Nom de micro-service 449 | * Adresse IP 450 | * Port 451 | 452 | Pour l'implementer: 453 | * ajouter la dépendance (spring-cloud-starter-netflix-eureka-server) 454 | * ajouter cette annotation dans la classe main. @EnableEurekaServer // Enable eureka server 455 | 456 | - 10 . Configuration service : Est un microservice qui centralise la configuration de tous les micro-services. 457 | 458 | - 11 . Proxy service : Dispatcher toutes les requêtes des clients vers les instances, donc il fait équilibrage de charge (load balancer) 459 | * ZUUL : Est un proxy qui utilise un model multi threads avec IO bloquantes, [ @EnableZuulProxy pour l'activer. sa dépendance (spring-cloud-starter-netflix-zuul)] 460 | * Spring cloud Gateway : Est un proxy qui utilise un Model single threads avec IO Non bloquantes 461 | 462 | - 12 . Circuit breakers: Est un design pattern qui permet d'éviter une défaillance sur le système. 463 | 464 | - 13 . Hystrix: C'est une implementation de Circuit breaker fournit par Netflix, qui donne un contrôle sur la latence et l'échec entre les services distribués. (spring-cloud-starter-hystrix) 465 | 466 | - 14 . Spring Sleuth: est un outile qui va donner un ID unique à chaque requête à travers nos Microservices, de façon à pouvoir les suivre avec précision. (spring-cloud-starter-sleuth) 467 | 468 | - 15 . Zipkin: Est une dépendence pour tracer et suivre des requêtes , C-à-d voir le chemin qu'une requête a parcouru afin de détecter où le problème s'est déclenché. (spring-cloud-sleuth-zipkin) 469 | 470 | - 16 . OpenFeign : Faire communiquer les micro-services distants en mode synchrone, et basé sur Ribbon pour faire l’équilibrage de charge. 471 | (spring-cloud-starter-openfeign) 472 | 473 | - 17 . Pourquoi les conteneurs sont-ils utilisés dans les Microservices ? Parce que nous devons déployer beaucoup, et scaler notre microservice dans plusieurs machines. 474 | 475 | - 18 . quelle est la signification de OAuth ? un protocole d'autorisation permet à vos clients de créer un compte sur votre application web en se connectant sur un compte appartenant à une société vérifiée, comme Google, Facebook, Twitter, Okta ou GitHub... 476 | 477 | - 19 . C'est quoi Swagger ? un projet open source qui offre des outils permettant de générer la documentation pour les API Web. il respecte le standard OpenAPI, Il offre également une interface permettant d’explorer et tester les différentes méthodes offertes par ces services. 478 | 479 | - 20 . C'est quoi MapStruct ? Pour faire le mapping objet / objet ( DTO) 480 | 481 | - 21 . Quand est-we que on est besion de Base de données NoSql ? Quand la quantité de données est très importante, exemple MongoDb 482 | 483 | 484 | 485 | --------------------------------------------------------------------------------