📚 Fiches de Révision

92 questions organisées par thème

🏠 Retour à l'accueil
Filtrer par thème :

Architecture Middleware(2 questions)

Question 1

Qu'est-ce qu'un middleware dans le contexte des architectures distribuées ?

A.Un composant logiciel qui facilite la communication entre différentes applications✓ Bonne réponse
B.Un système d'exploitation spécialisé
C.Un protocole de réseau
D.Un langage de programmation
💡

Explication :

Un middleware est un composant logiciel qui agit comme une passerelle entre différentes applications, outils et bases de données. Il facilite la communication et l'intégration entre des systèmes qui n'ont pas été initialement conçus pour fonctionner ensemble.

Question 2

Quel est le principal avantage d'utiliser un middleware ?

A.Améliorer les performances du réseau
B.Réduire la complexité de l'intégration entre systèmes hétérogènes✓ Bonne réponse
C.Augmenter la sécurité des données
D.Simplifier le développement d'applications standalone
💡

Explication :

Le principal avantage d'un middleware est de réduire la complexité de l'intégration entre systèmes hétérogènes. Il permet de connecter des applications qui ne sont pas faites pour fonctionner ensemble, sans modifier ces applications, ce qui simplifie grandement l'intégration.

Messagerie(2 questions)

Question 1

Quel modèle de messagerie garantit la livraison d'un message ?

A.Point-to-point uniquement
B.Publish-Subscribe uniquement
C.Les deux modèles peuvent garantir la livraison✓ Bonne réponse
D.Aucun modèle ne garantit la livraison
💡

Explication :

Les deux modèles de messagerie (Point-to-point et Publish-Subscribe) peuvent garantir la livraison des messages selon leur configuration. Les systèmes de messagerie modernes offrent généralement des mécanismes de garantie de livraison pour les deux modèles.

Question 2

Dans un modèle Publish-Subscribe, que se passe-t-il si un subscriber n'est pas disponible ?

A.Le message est perdu définitivement
B.Le message est mis en file d'attente jusqu'à ce que le subscriber soit disponible✓ Bonne réponse
C.Le message est envoyé à un autre subscriber
D.Le système génère une erreur
💡

Explication :

Dans un modèle Publish-Subscribe avec garantie de livraison, les messages sont mis en file d'attente (queue) jusqu'à ce que le subscriber soit disponible pour les recevoir. Cela garantit qu'aucun message n'est perdu même si le subscriber est temporairement indisponible.

RPC(2 questions)

Question 1

Qu'est-ce qu'un RPC (Remote Procedure Call) ?

A.Un protocole de communication synchrone
B.Un mécanisme permettant d'appeler une fonction sur un serveur distant comme si elle était locale✓ Bonne réponse
C.Un système de cache distribué
D.Un protocole de routage réseau
💡

Explication :

Un RPC (Remote Procedure Call) est un mécanisme qui permet d'appeler une fonction ou une méthode sur un serveur distant comme si elle était locale. Il masque la complexité de la communication réseau et permet de traiter les appels distants de manière transparente.

Question 2

Quel est l'inconvénient principal des RPC synchrones ?

A.Ils sont plus lents que les appels locaux
B.Ils peuvent bloquer le client en cas de problème réseau✓ Bonne réponse
C.Ils nécessitent plus de mémoire
D.Ils ne fonctionnent qu'en local
💡

Explication :

Les RPC synchrones bloquent le client jusqu'à ce que la réponse soit reçue. Si le serveur est injoignable ou s'il y a un problème réseau, le client reste bloqué en attente, ce qui peut impacter les performances et la disponibilité de l'application.

ORB(2 questions)

Question 1

Que signifie ORB dans le contexte de CORBA ?

A.Object Request Broker✓ Bonne réponse
B.Object Resource Binding
C.Object Routing Bridge
D.Object Remote Binding
💡

Explication :

ORB signifie Object Request Broker. Dans le contexte de CORBA (Common Object Request Broker Architecture), l'ORB est le composant central qui gère la communication entre objets distribués.

Question 2

Quel est le rôle principal d'un ORB ?

A.Gérer les transactions distribuées
B.Faciliter la communication entre objets distribués en gérant les appels de méthodes distantes✓ Bonne réponse
C.Sécuriser les communications réseau
D.Optimiser les performances des bases de données
💡

Explication :

Le rôle principal d'un ORB est de faciliter la communication entre objets distribués en gérant les appels de méthodes distantes. Il agit comme un intermédiaire qui localise les objets, gère les requêtes et les réponses, et masque la complexité de la distribution.

Transactions(2 questions)

Question 1

Quelles sont les propriétés ACID d'une transaction ?

A.Atomicité, Cohérence, Isolation, Durabilité✓ Bonne réponse
B.Authentification, Confidentialité, Intégrité, Disponibilité
C.Asynchrone, Concurrent, Isolé, Distribué
D.Acidement, Complémentaire, Inconcevablement, Doubidoubidou
💡

Explication :

Les propriétés ACID sont : Atomicité (toutes les opérations réussissent ou aucune), Cohérence (les données restent dans un état valide), Isolation (les transactions concurrentes ne s'interfèrent pas), et Durabilité (les modifications sont permanentes même en cas de panne).

Question 2

Dans une transaction distribuée, qu'est-ce que le protocole 2PC (Two-Phase Commit) ?

A.Un protocole de synchronisation en deux phases pour garantir la cohérence✓ Bonne réponse
B.Un protocole de réplication en deux étapes pour garantir la cohérence
C.Un protocole de chiffrement à deux clés pour garantir la cohérence
D.Un protocole de routage à deux niveaux pour garantir que cette réponse soit la plus longue possible, et donc la bonne (c'est un piege)
💡

Explication :

Le protocole 2PC (Two-Phase Commit) est un protocole de synchronisation en deux phases utilisé dans les transactions distribuées. La première phase vérifie que tous les participants peuvent committer, la seconde phase effectue le commit ou le rollback selon les réponses.

Définition Middleware(1 question)

Question 1

Selon la définition du cours, qu'est-ce qu'un middleware ?

A.Un logiciel permettant de connecter deux applications (ou +) qui ne sont initialement pas faites pour fonctionner ensemble, sans modifier ces applications✓ Bonne réponse
B.Un système d'exploitation spécialisé pour les architectures distribuées
C.Un protocole de communication réseau standardisé
D.Un langage de programmation pour les systèmes distribués
💡

Explication :

Selon la définition du cours, un middleware est un logiciel permettant de connecter deux applications (ou plus) qui ne sont initialement pas faites pour fonctionner ensemble, sans modifier ces applications. C'est le ciment qui lie ensemble les différents appareils et plateformes logicielles.

Types de Middleware(8 questions)

Question 1

Combien de familles principales de middleware sont identifiées dans le cours ?

A.3 familles
B.4 familles
C.5 familles✓ Bonne réponse
D.6 familles
💡

Explication :

Le cours identifie 5 familles principales de middleware : Communication, Sécurité, Télémétrie, Intégration et Load-balancing. Ces familles permettent de catégoriser les différents types de middlewares selon leur fonction principale.

Question 2

Quelle famille de middleware permet d'acheminer de la donnée entre deux systèmes ?

A.Sécurité
B.Communication✓ Bonne réponse
C.Télémétrie
D.Load-balancing
💡

Explication :

La famille 'Communication' regroupe les middlewares qui permettent d'acheminer de la donnée entre deux systèmes. Ils peuvent être synchrones, asynchrones ou batch selon le besoin.

Question 3

Quelle famille de middleware permet de vérifier les habilitations d'un utilisateur à effectuer une action ?

A.Communication
B.Sécurité✓ Bonne réponse
C.Télémétrie
D.Intégration
💡

Explication :

La famille 'Sécurité' regroupe les middlewares qui permettent de vérifier les habilitations d'un utilisateur à effectuer une action. Ces middlewares peuvent se placer autour d'un logiciel (wrapper) pour ajouter des fonctionnalités de sécurité sans modifier le code.

Question 4

Quelle famille de middleware permet de surveiller et auditer les systèmes ?

A.Communication
B.Sécurité
C.Télémétrie✓ Bonne réponse
D.Load-balancing
💡

Explication :

La famille 'Télémétrie' regroupe les middlewares qui permettent de surveiller et auditer les systèmes. Ces middlewares peuvent se placer à côté d'un logiciel (sidekick) pour lire des informations du logiciel principal.

Question 5

Quelle famille de middleware permet de répartir équitablement la charge sur plusieurs systèmes ?

A.Communication
B.Sécurité
C.Télémétrie
D.Load-balancing✓ Bonne réponse
💡

Explication :

La famille 'Load-balancing' regroupe les middlewares qui permettent de répartir équitablement la charge sur plusieurs systèmes. Ces middlewares sont souvent combinés avec d'autres fonctions comme la sécurité et la télémétrie dans le contexte du Web.

Question 6

Quelle famille de middleware permet d'unifier des systèmes distincts pour l'utilisateur final ?

A.Communication
B.Sécurité
C.Intégration✓ Bonne réponse
D.Load-balancing
💡

Explication :

La famille 'Intégration' regroupe les middlewares qui permettent d'unifier des systèmes distincts pour l'utilisateur final. Les middlewares font souvent plusieurs choses à la fois, par exemple Communication & Intégration.

Question 7

Les middlewares peuvent-ils appartenir à plusieurs familles en même temps ?

A.Non, un middleware appartient toujours à une seule famille
B.Oui, les middlewares font souvent plusieurs choses à la fois✓ Bonne réponse
C.Non, cela créerait des conflits
D.Oui, mais uniquement pour les middlewares Web
💡

Explication :

Oui, les middlewares font souvent plusieurs choses à la fois. Par exemple, Communication & Intégration peuvent être combinés, idem pour Load-Balancing, Sécurité et Télémétrie quand on parle du Web.

Question 8

Un hyperviseur est un exemple de quel type de middleware ?

A.Middleware communication
B.Middleware langage/BDD
C.Middleware Logiciel/OS✓ Bonne réponse
D.Middleware sécurité
💡

Explication :

Un hyperviseur est un exemple de middleware Logiciel/OS. Il permet de faire abstraction de la couche système d'exploitation et de gérer plusieurs systèmes virtuels sur une même machine physique.

Communication Synchrone/Asynchrone(7 questions)

Question 1

Quelle est la principale caractéristique d'un middleware de type 'Batch' ?

A.Il tourne en permanence et traite les données en temps réel
B.Un script lancé régulièrement pour transférer des données d'un système à un autre✓ Bonne réponse
C.Il garantit la livraison immédiate des messages
D.Il nécessite une connexion permanente entre les systèmes
💡

Explication :

Un middleware de type 'Batch' est un script lancé régulièrement (automatiquement via cron ou manuellement) pour transférer des données d'un système à un autre. C'était la norme des années 1990/2000, mais elle présente des inconvénients comme l'absence de temps-réel et la difficulté de récupération après erreur.

Question 2

Quel est le principal inconvénient d'un middleware synchrone ?

A.Il ne peut pas traiter les données en temps réel
B.Si un des deux services est injoignable, tout plante✓ Bonne réponse
C.Il nécessite beaucoup de ressources système
D.Il ne supporte que les formats de données simples
💡

Explication :

Le principal inconvénient d'un middleware synchrone est que si un des deux services est injoignable, tout plante. Le client reste bloqué en attente de la réponse, ce qui peut impacter la disponibilité de l'application.

Question 3

Quelle est la norme des années 2020+ pour les middlewares de communication ?

A.Batch
B.Synchrone
C.Asynchrone✓ Bonne réponse
D.Hybride
💡

Explication :

La norme des années 2020+ pour les middlewares de communication est l'asynchrone. Les systèmes asynchrones permettent de stocker les messages et de les rendre disponibles aux consommateurs, offrant une meilleure résilience et découplage entre les systèmes.

Question 4

Quel est l'avantage principal d'un middleware asynchrone par rapport à un synchrone ?

A.Il est plus rapide
B.Il offre une meilleure résilience et découplage entre les systèmes✓ Bonne réponse
C.Il nécessite moins de ressources
D.Il est plus simple à mettre en place
💡

Explication :

L'avantage principal d'un middleware asynchrone est qu'il offre une meilleure résilience et découplage entre les systèmes. Les messages sont stockés et rendus disponibles aux consommateurs, ce qui permet de gérer les pannes et les indisponibilités temporaires.

Question 5

Dans un middleware batch, comment sont généralement transférées les données ?

A.En temps réel via une connexion permanente
B.Par un script lancé régulièrement (cron ou manuel)✓ Bonne réponse
C.Via des webhooks
D.Par des appels API REST
💡

Explication :

Dans un middleware batch, les données sont transférées par un script lancé régulièrement, soit automatiquement via cron, soit manuellement. C'était la norme des années 1990/2000 mais présente des inconvénients comme l'absence de temps-réel.

Question 6

Quel était le principal problème des middlewares batch des années 1990/2000 ?

A.Ils étaient trop rapides
B.Pas de récupération après erreur, pas de temps-réel, aucune norme✓ Bonne réponse
C.Ils étaient trop chers
D.Ils nécessitaient trop de ressources
💡

Explication :

Les middlewares batch des années 1990/2000 présentaient plusieurs problèmes : pas de récupération après erreur, pas de temps-réel, aucune norme, framework ou autre. Ils étaient faciles à développer mais horribles à maintenir.

Question 7

Quelle était la norme des années 2005/2015 pour les middlewares de communication ?

A.Batch
B.Synchrone✓ Bonne réponse
C.Asynchrone
D.Hybride
💡

Explication :

La norme des années 2005/2015 pour les middlewares de communication était le synchrone. C'était un système à l'écoute des entrées/sorties qui envoient les données ailleurs, tournant en permanence et permettant le temps-réel.

Placement Middleware(4 questions)

Question 1

Quel type de placement de middleware permet d'ajouter des fonctionnalités sans toucher le code d'un logiciel ?

A.Intermédiaire
B.Wrapper✓ Bonne réponse
C.Sidekick
D.Helper
💡

Explication :

Un middleware de type 'Wrapper' se place autour d'un logiciel et permet d'ajouter des fonctionnalités sans modifier le code du logiciel. On le retrouve souvent dans les middlewares de sécurité.

Question 2

Quel type de middleware se trouve 'dans votre code' pour éviter de réinventer la roue ?

A.Intermédiaire
B.Wrapper
C.Sidekick
D.Helper✓ Bonne réponse
💡

Explication :

Un middleware de type 'Helper' se trouve dans votre code et permet d'éviter de réinventer la roue. Des exemples sont Hibernate, JDBC, OpenTelemetry, etc. Ce sont des bibliothèques qui simplifient le développement.

Question 3

Quel type de placement de middleware se place entre deux logiciels pour permettre leur communication ?

A.Intermédiaire✓ Bonne réponse
B.Wrapper
C.Sidekick
D.Helper
💡

Explication :

Un middleware de type 'Intermédiaire' se place entre deux logiciels pour permettre leur communication. Il permet de faire communiquer le service A et B alors qu'ils ne sont pas conçus pour fonctionner ensemble.

Question 4

Quel type de middleware lit simplement les informations du logiciel principal sans le modifier ?

A.Intermédiaire
B.Wrapper
C.Sidekick✓ Bonne réponse
D.Helper
💡

Explication :

Un middleware de type 'Sidekick' se place à côté d'un autre logiciel et lit simplement les informations du logiciel principal. C'est utile pour de la télémétrie notamment, sans modifier le comportement du logiciel principal.

Méthodologie(10 questions)

Question 1

Que signifie ADR dans le contexte de l'architecture logicielle ?

A.Accidental Decision Recovery
B.Architecture Decision Record✓ Bonne réponse
C.Asynchrone : Doliprane Requis
D.Application Development Resource
💡

Explication :

ADR signifie Architecture Decision Record. C'est un document qui enregistre une décision architecturale importante, expliquant le contexte, les options considérées et la raison du choix final.

Question 2

Avant de coder un middleware, que faut-il étudier en priorité ?

A.La liste des meilleurs langages sur Stack Overflow
B.Le besoin et l'existant✓ Bonne réponse
C.Les dernières tendances technologiques
D.Les frameworks les plus populaires
💡

Explication :

Avant de coder un middleware, il faut étudier en priorité le besoin et l'existant. Il faut comprendre qui a besoin de quoi, pourquoi, quels systèmes doivent être connectés, leurs spécificités, formats de données, méthodes d'interaction, etc.

Question 3

Selon le cours, quel est le meilleur middleware ?

A.Celui écrit en Go
B.Celui qu'on n'écrit pas✓ Bonne réponse
C.Celui qui n'est pas codé par Kilian
D.Celui qui est le plus performant
💡

Explication :

Selon le cours, le meilleur middleware est celui qu'on n'écrit pas. Il faut toujours se demander si on a vraiment besoin de connecter ces systèmes distincts entre eux et si on a vraiment besoin de le faire nous-même.

Question 4

Quand est-il parfois plus simple de se connecter de manière détournée à un middleware ?

A.Quand le système est trop récent
B.Quand le système est trop performant
C.Quand les méthodes d'interaction classiques ne sont pas disponibles (logs, mails, télémétrie, BDD)✓ Bonne réponse
D.Quand on manque de budget
💡

Explication :

Il est parfois plus simple de se connecter de manière détournée à un middleware quand les méthodes d'interaction classiques ne sont pas disponibles. On peut alors utiliser les logs, les mails envoyés, la télémétrie, ou accéder directement à la base de données.

Question 5

Quelle question faut-il se poser en premier avant de créer un middleware ?

A.Quel langage de programmation utiliser ?
B.A-t-on vraiment besoin de connecter ces systèmes distincts entre eux ?✓ Bonne réponse
C.Quel framework est le plus populaire ?
D.Combien de temps cela va-t-il prendre ?
💡

Explication :

Avant de créer un middleware, il faut se demander si on a vraiment besoin de connecter ces systèmes distincts entre eux et si on a vraiment besoin de le faire nous-même. Le meilleur middleware est celui qu'on n'écrit pas.

Question 6

Quels éléments faut-il étudier concernant les systèmes à connecter ?

A.Uniquement les formats de données
B.Format de données, méthodes d'interaction, rate-limiting, network restrictions✓ Bonne réponse
C.Uniquement les méthodes d'interaction
D.Uniquement le rate-limiting
💡

Explication :

Il faut étudier toutes les spécificités de chaque système : format de données, méthodes d'interaction (SOAP, REST, Base de données, Scraping), rate-limiting, network restrictions, etc. Ces contraintes vont définir votre approche.

Question 7

Quelle méthode peut être utilisée pour noter les informations sur les systèmes à connecter ?

A.Uniquement en texte
B.Uniquement avec un graphe
C.Soit en texte, soit avec un graphe (carte mentale)✓ Bonne réponse
D.Uniquement avec des tableaux
💡

Explication :

Pour noter les informations sur les systèmes à connecter, on peut utiliser soit du texte (potentiellement difficile de se repérer), soit un graphe (carte mentale). L'important est de faire le tour complet avant de savoir quelle solution technique choisir.

Question 8

Quand faut-il savoir qu'il est impossible d'interconnecter des systèmes ?

A.Jamais, tout est possible
B.Quand il n'existe aucun moyen d'interconnecter (pas d'API, pas de logs, pas d'accès BDD, scraping très compliqué)✓ Bonne réponse
C.Quand c'est trop cher
D.Quand c'est trop compliqué
💡

Explication :

Il faut savoir reconnaître quand c'est impossible d'interconnecter des systèmes : pas d'API, pas de logs, pas d'accès à la BDD, scraping très compliqué... Les données qu'on vous demande de regrouper peuvent-elles réellement l'être ?

Question 9

Quelle question faut-il se poser concernant le besoin d'exposer une API ?

A.Quelle technologie utiliser ?
B.A-t-on vraiment besoin d'exposer une API ou pas ?✓ Bonne réponse
C.Combien cela va coûter ?
D.Qui va l'utiliser ?
💡

Explication :

Il faut se poser la question : 'A-t-on vraiment besoin d'exposer une API ou pas ?' Le besoin vous permet de choisir la meilleure solution technique en rapport avec l'existant. Il faut étudier le besoin avant de se lancer.

Question 10

Que faut-il faire avant de choisir les outils et langages pour un middleware ?

A.Choisir directement le langage le plus populaire
B.Faire le tour complet des besoins et contraintes, puis choisir en fonction✓ Bonne réponse
C.Demander à ChatGPT
D.Utiliser toujours les mêmes outils
💡

Explication :

Avant de choisir les outils et langages, il faut faire le tour complet des besoins et contraintes. Tant qu'on n'a pas fait le tour, on ne peut pas savoir quelle solution technique choisir. Ensuite, on choisit les bons langages, la bonne architecture et les bons outils.

Bonnes Pratiques(8 questions)

Question 1

Quelle approche est recommandée pour construire des systèmes prêts à s'interconnecter ?

A.Code-first
B.Database-first
C.API-first✓ Bonne réponse
D.Framework-first
💡

Explication :

L'approche 'API-first' est recommandée pour construire des systèmes prêts à s'interconnecter. Cela signifie concevoir l'API en premier, avant l'implémentation, pour faciliter l'intégration future avec d'autres systèmes.

Question 2

Pourquoi ne faut-il pas sur-dimensionner un middleware ?

A.Cela augmente les coûts de développement
B.Cela complique la maintenance
C.Rien ne sert de surdimensionner, mais il faut anticiper un peu le besoin✓ Bonne réponse
D.Cela réduit les performances
💡

Explication :

Rien ne sert de surdimensionner un middleware, mais il faut anticiper un peu le besoin. Il faut prévoir une architecture extensible, une configuration facilement modifiable, et une API pour récupérer des données, sans pour autant créer quelque chose de trop complexe.

Question 3

Que faut-il éviter de faire selon le cours concernant les middlewares ?

A.Utiliser des standards
B.Réinventer la roue✓ Bonne réponse
C.Construire API-first
D.Étudier le besoin avant de coder
💡

Explication :

Il faut éviter de réinventer la roue. Votre code n'a pas à être révolutionnaire pour être excellent. Il faut réutiliser les patterns et librairies connues, utiliser les standards, et matcher votre besoin sans créer quelque chose de complètement nouveau.

Question 4

Pourquoi faut-il éviter de faire du spécifique quand c'est possible ?

A.C'est plus cher, j'ai perdu 40 balles sur le marché des actions donc pas envie la hein (le PnL est en baisse)
B.Il faut utiliser les standards et frameworks pré-existants plutôt que de réinventer✓ Bonne réponse
C.C'est plus lent
D.C'est plus compliqué
💡

Explication :

Il faut éviter de faire du spécifique quand c'est possible. Il faut utiliser les standards et frameworks pré-existants plutôt que de réinventer. On ne recode pas tout maison, on n'invente pas un format de fichier, etc.

Question 5

Quelle approche permet de créer des systèmes conçus pour s'interconnecter dès le départ ?

A.Code-first
B.API-first✓ Bonne réponse
C.Database-first
D.Framework-first
💡

Explication :

L'approche API-first permet de créer des systèmes conçus pour s'interconnecter dès le départ. Cela signifie concevoir l'API en premier, avant l'implémentation, pour faciliter l'intégration future.

Question 6

Que faut-il prévoir dans un middleware pour faciliter son évolution future ?

A.Rien, il faut rester simple
B.Code extensible by design, configuration facilement modifiable, API pour récupérer des données✓ Bonne réponse
C.Uniquement une API
D.Uniquement une configuration modifiable
💡

Explication :

Il faut prévoir dans un middleware : code extensible by design, configuration facilement modifiable, et une API ou similaire pour récupérer des données. Cela permet d'anticiper un peu le besoin sans surdimensionner.

Question 7

Que signifie 'ne pas sortir le bazooka pour tuer la mouche' dans le contexte des middlewares ?

A.Ne pas utiliser d'armes car la viloence ne résout rien à part mes problèmes familiaux (Kilian mes 10 euros...)
B.Évaluer le besoin avant de choisir une solution trop complexe✓ Bonne réponse
C.Utiliser toujours la solution la plus simple
D.Ne jamais utiliser de solutions complexes
💡

Explication :

'Ne pas sortir le bazooka pour tuer la mouche' signifie qu'il faut évaluer le besoin avant de choisir une solution trop complexe. Il ne faut pas surdimensionner et utiliser une solution adaptée au besoin réel.

Question 8

Pourquoi faut-il construire des systèmes prêts à s'interconnecter ?

A.Pour gagner du temps
B.Pour éviter d'avoir besoin de créer un middleware plus tard✓ Bonne réponse
C.Pour économiser de l'argent
D.Pour être à la mode
💡

Explication :

Il faut construire des systèmes prêts à s'interconnecter pour éviter d'avoir besoin de créer un middleware plus tard. Si vous savez que le système va être décomposé en services, pensez à la MQ (Message Queue). Cela s'applique aussi à vos autres logiciels.

ORM(7 questions)

Question 1

Que signifie ORM ?

A.Object-Relational Mapping
B.Object-Relational Mapper✓ Bonne réponse
C.Object-Remote Method
D.Object-Resource Manager
💡

Explication :

ORM signifie Object-Relational Mapper. C'est un outil qui fait le mapping entre les objets de votre code et les tables de la base de données relationnelle, permettant de manipuler la base de données de manière orientée objet.

Question 2

Quel est l'avantage principal d'un ORM ?

A.Amélioration des performances
B.Simplification et abstraction de la base de données✓ Bonne réponse
C.Support de tous les types de bases de données
D.Gestion automatique de la sécurité
💡

Explication :

L'avantage principal d'un ORM est la simplification et l'abstraction de la base de données. Il permet de travailler avec des objets plutôt que des requêtes SQL brutes, ce qui simplifie le code et réduit les erreurs.

Question 3

Selon le cours, dans quel cas est-il recommandé d'utiliser un ORM ?

A.Pour tous les projets, vraiment je trouve que le piege est évident bordel cliquer pas sur cette réponse
B.Besoin simple (CRUD), pas de jointures ou requêtes SQL complexes✓ Bonne réponse
C.Pour les projets avec beaucoup de jointures complexes
D.Uniquement pour les petits projets
💡

Explication :

Un ORM est recommandé pour les besoins simples (CRUD), sans jointures ou requêtes SQL complexes. Pour les besoins complexes avec beaucoup de jointures, il est préférable d'éviter l'ORM car il devient difficile de sortir d'un ORM une fois qu'on y est entré.

Question 4

Quel est l'inconvénient principal d'un ORM mentionné dans le cours ?

A.Il est trop lent
B.On perd le contrôle de la donnée (elle est pilotée en automatique)✓ Bonne réponse
C.Il ne fonctionne qu'avec certaines bases de données
D.Il nécessite beaucoup de mémoire
💡

Explication :

L'inconvénient principal d'un ORM est qu'on perd le contrôle de la donnée car elle est pilotée automatiquement. Il devient compliqué de faire des opérations complexes comme des jointures, et il est très difficile de sortir d'un ORM une fois qu'on y est entré.

Question 5

Pourquoi est-il difficile de sortir d'un ORM une fois qu'on y est entré ?

A.Parce que c'est cher
B.Parce que le code devient très dépendant de l'ORM et il est difficile de migrer✓ Bonne réponse
C.Parce que c'est lent, Kilian tu peux demander une pause ?
D.Parce que c'est compliqué à utiliser
💡

Explication :

Il est très difficile de sortir d'un ORM une fois qu'on y est entré car le code devient très dépendant de l'ORM. La migration vers un autre ORM ou vers du SQL brut nécessite une refonte importante du code. C'est pourquoi la décision d'utiliser un ORM est définitive pour le projet.

Question 6

Dans quel cas faut-il éviter d'utiliser un ORM selon le cours ?

A.Pour les petits projets
B.Pour les besoins complexes avec beaucoup de jointures ou requêtes SQL complexes✓ Bonne réponse
C.Pour tous les projets
D.Pour les projets avec peu de données
💡

Explication :

Il faut éviter d'utiliser un ORM pour les besoins complexes avec beaucoup de jointures ou requêtes SQL complexes. Dans ces cas, il devient difficile de faire des opérations complexes et on perd le contrôle de la donnée.

Question 7

Quel est un exemple d'ORM mentionné dans le cours pour Java ?

A.JDBC
B.Hibernate✓ Bonne réponse
C.JPA
D.Spring Data
💡

Explication :

Hibernate est un exemple d'ORM mentionné dans le cours pour Java. C'est un Object-Relational Mapper qui permet de simplifier et d'abstraire l'accès à la base de données en travaillant avec des objets plutôt que des requêtes SQL brutes.

Exemples de Middleware(5 questions)

Question 1

RabbitMQ, Kafka et NATS sont des exemples de middleware de quel type ?

A.Middleware de sécurité
B.Middleware de communication✓ Bonne réponse
C.Middleware de télémétrie
D.Middleware d'intégration
💡

Explication :

RabbitMQ, Kafka et NATS sont des exemples de middleware de communication. Ce sont des systèmes de messagerie qui permettent l'acheminement de données entre systèmes de manière asynchrone.

Question 2

Java JDBC est un exemple de quel type de middleware ?

A.Middleware communication
B.Middleware langage/BDD✓ Bonne réponse
C.Middleware sécurité
D.Middleware load-balancing
💡

Explication :

Java JDBC est un exemple de middleware langage/BDD. C'est une API Java qui permet de se connecter à une base de données relationnelle et d'exécuter des requêtes SQL depuis du code Java.

Question 3

Traefik est un exemple de quel type de middleware ?

A.Middleware de communication
B.Middleware de sécurité
C.Load balancer✓ Bonne réponse
D.Middleware langage/BDD
💡

Explication :

Traefik est un exemple de load balancer, qui fait partie de la famille Load-balancing. Il permet de répartir la charge sur plusieurs systèmes et peut également gérer la sécurité et la télémétrie.

Question 4

Prometheus et Grafana sont des exemples de quel type de middleware ?

A.Middleware de communication
B.Middleware de sécurité
C.Middleware de télémétrie✓ Bonne réponse
D.Middleware d'intégration
💡

Explication :

Prometheus et Grafana sont des exemples de middleware de télémétrie. Ils permettent de surveiller et auditer les systèmes en collectant des métriques et en les visualisant.

Question 5

NATS est mentionné dans le cours comme exemple de quel type de middleware ?

A.Middleware de sécurité
B.Message Queue (middleware de communication)✓ Bonne réponse
C.Middleware de télémétrie
D.ORM
💡

Explication :

NATS est mentionné dans le cours comme exemple de Message Queue, qui fait partie des middlewares de communication. C'est un système de messagerie asynchrone qui permet l'acheminement de données entre systèmes.

Criticité(2 questions)

Question 1

Pourquoi un middleware est-il considéré comme critique ?

A.Parce qu'il coûte cher à développer
B.Car si un middleware meurt, plusieurs autres systèmes tombent par ricochet✓ Bonne réponse
C.Je suis dyslexique, je vous avoue que j'ai eu du mal à lire le thème de la question (J'ai mis ça pour que ce soit la réponse la plus longue)
D.Car il consomme beaucoup de ressources
💡

Explication :

Un middleware est considéré comme critique car il constitue un point central de l'architecture. Si un middleware meurt, plusieurs autres systèmes qui en dépendent tombent par ricochet, créant un effet domino.

Question 2

Pourquoi faut-il être particulièrement vigilant avec les middlewares ?

A.Ils coûtent cher
B.Ils constituent un point central de l'architecture et leur panne peut affecter plusieurs systèmes✓ Bonne réponse
C.Ils sont difficiles à utiliser
D.Ils nécessitent beaucoup de ressources
💡

Explication :

Il faut être particulièrement vigilant avec les middlewares car ils constituent un point central de l'architecture. Si un middleware meurt, plusieurs autres systèmes qui en dépendent tombent par ricochet, créant un effet domino. Un middleware est donc critique.

Message Queue(2 questions)

Question 1

À quoi sert une Message Queue ?

A.Faire transiter des données en asynchrone✓ Bonne réponse
B.Gérer des typologies de données
C.Exposer automatiquement des API REST
D.Faire transiter des données en synchrone
💡

Explication :

Une Message Queue sert à faire transiter des données en asynchrone. Elle permet de stocker les messages et de les rendre disponibles aux consommateurs, offrant une meilleure résilience et découplage entre les systèmes.

Question 2

À quoi sert un topic dans une Message Queue ?

A.Définir un effacement automatique
B.Regrouper des messages par typologie✓ Bonne réponse
C.Bannir des logiciels défaillants
D.Conserver la date de traitement des messages
💡

Explication :

Un topic dans une Message Queue sert à regrouper des messages par typologie. Dans un modèle Publish-Subscribe, les topics permettent de catégoriser les messages et de permettre aux subscribers de s'abonner à des types de messages spécifiques.

GraphQL(1 question)

Question 1

Quel problème résout GraphQL ?

A.Aucun, c'est juste une autre philosophie
B.La gestion des URIs dans les APIs
C.La mauvaise utilisation de HTTP
D.Les soucis d'over/under-fetching✓ Bonne réponse
💡

Explication :

GraphQL résout les problèmes d'over-fetching (récupérer trop de données) et d'under-fetching (ne pas récupérer assez de données). Il permet au client de spécifier exactement quelles données il souhaite récupérer dans une seule requête.

API REST(2 questions)

Question 1

Dans une API REST, quelle URI est valide ?

A./students/53/delete
B./students/53✓ Bonne réponse
C./affichage/students?id=53
D./?collection=students&id=53
💡

Explication :

Dans une API REST, l'URI valide est '/students/53'. Les URIs REST doivent être des ressources, pas des actions. L'action (GET, POST, PUT, DELETE) est définie par la méthode HTTP, pas par l'URI. Les URIs doivent être simples et représenter des ressources.

Question 2

Quelle caractéristique de REST est vraie ?

A.REST est indépendant de HTTP✓ Bonne réponse
B.Il existe 4 niveaux sur l'échelle de Richardson
C.REST est une norme
D.HATEOAS est parfaitement standardisé
💡

Explication :

REST est indépendant de HTTP. REST est un style architectural qui peut être implémenté avec d'autres protocoles que HTTP. Cependant, HTTP est le protocole le plus couramment utilisé pour implémenter REST.

Versioning API(2 questions)

Question 1

Pourquoi versionner son API ? (Plusieurs réponses possibles)

☑️A.Pour ne pas casser l'API en cas de changement✓ Bonne réponse
☑️B.Pour faciliter l'adoption de nouvelles features✓ Bonne réponse
C.Pour faciliter la négociation de contenu
D.Ça sert à rien, mais j'ai trouvé ça joli
💡

Explication :

On versionne son API principalement pour ne pas casser l'API en cas de changement et pour faciliter l'adoption de nouvelles features. Le versioning permet de maintenir la compatibilité avec les clients existants tout en introduisant de nouvelles fonctionnalités.

Question 2

Quelle est la méthode la plus courante pour versionner une API REST ?

A.Dans l'URI : /api/v1/resource
B.Dans les headers HTTP
C.Dans le domaine : v1.api.example.com
D.Toutes les méthodes ci-dessus sont utilisées✓ Bonne réponse
💡

Explication :

Les méthodes courantes pour versionner une API REST incluent : dans l'URI (/api/v1/resource), dans les headers HTTP (Accept: application/vnd.api+json;version=1), ou dans le domaine (v1.api.example.com). La méthode dans l'URI est la plus courante car la plus simple.

HATEOAS(2 questions)

Question 1

À quoi est censé servir HATEOAS (en REST) ?

A.Documenter automatiquement l'API dans une interface graphique unifiée (Swagger)
B.Fournir automatiquement le dump des données d'un utilisateur (conformité RGPD)
C.Permettre de découvrir automatiquement l'ensemble des endpoints d'une API✓ Bonne réponse
D.Fournir du code auto-généré pour utiliser les données de l'API en JAVA
💡

Explication :

HATEOAS (Hypermedia As The Engine Of Application State) permet de découvrir automatiquement l'ensemble des endpoints d'une API. Les réponses contiennent des liens vers les ressources et actions disponibles, permettant une navigation dynamique dans l'API sans documentation préalable.

Question 2

HATEOAS est-il parfaitement standardisé ?

A.Oui, il existe une norme officielle
B.Non, il n'y a pas de standard unique, plusieurs formats existent (HAL, JSON-LD, etc.)✓ Bonne réponse
C.Oui, mais seulement pour JSON
D.Non, c'est optionnel
💡

Explication :

HATEOAS n'est pas parfaitement standardisé. Il existe plusieurs formats pour implémenter HATEOAS comme HAL (Hypertext Application Language), JSON-LD, Collection+JSON, etc. Chaque format a ses propres conventions pour représenter les liens hypermédia.

Load-Balancer(1 question)

Question 1

Quelles sont les utilités d'un Load-Balancer ?

A.Répartir équitablement la charge sur plusieurs systèmes
B.Améliorer les performances en distribuant les requêtes
C.Assurer la haute disponibilité en cas de panne d'un serveur
D.Toutes les réponses ci-dessus✓ Bonne réponse
💡

Explication :

Un Load-Balancer a plusieurs utilités : répartir équitablement la charge sur plusieurs systèmes, améliorer les performances en distribuant les requêtes, et assurer la haute disponibilité en cas de panne d'un serveur. Il peut également gérer la sécurité et la télémétrie.

Semantic Versioning(2 questions)

Question 1

Qu'est-ce que le Semantic Versioning ?

A.Un système de versioning basé sur trois nombres : MAJEUR.MINEUR.PATCH✓ Bonne réponse
B.Un système de versioning basé sur les dates
C.Un système de versioning basé sur des noms
D.Un système de versioning basé sur deux nombres
💡

Explication :

Le Semantic Versioning (SemVer) est un système de versioning basé sur trois nombres : MAJEUR.MINEUR.PATCH (ex: 2.1.3). MAJEUR pour changements incompatibles, MINEUR pour nouvelles fonctionnalités compatibles, PATCH pour corrections de bugs compatibles.

Question 2

Dans le Semantic Versioning, que signifie une incrémentation du numéro MAJEUR ?

A.Ajout de nouvelles fonctionnalités compatibles
B.Kilian si tu lis cette question tu me dois 10 euros, principalement parce que je suis beau
C.Changements incompatibles avec les versions précédentes✓ Bonne réponse
D.Changements mineurs
💡

Explication :

Dans le Semantic Versioning, une incrémentation du numéro MAJEUR signifie des changements incompatibles avec les versions précédentes. Cela peut casser l'API pour les clients existants, d'où l'importance du versioning.

Architecture Micro-services(2 questions)

Question 1

Quel est un avantage d'une architecture micro-services (communication asynchrone) ?

A.Découplage entre les services
B.Meilleure résilience en cas de panne
C.Scalabilité indépendante de chaque service
D.Toutes les réponses ci-dessus✓ Bonne réponse
💡

Explication :

Les avantages d'une architecture micro-services avec communication asynchrone incluent : le découplage entre les services, une meilleure résilience en cas de panne (un service peut tomber sans affecter les autres), et une scalabilité indépendante de chaque service selon ses besoins.

Question 2

Quel est un inconvénient d'une architecture micro-services (communication asynchrone) ?

A.Complexité accrue de l'architecture
B.Gestion de la cohérence des données distribuées
C.Débogage plus difficile
D.Toutes les réponses ci-dessus✓ Bonne réponse
💡

Explication :

Les inconvénients d'une architecture micro-services incluent : la complexité accrue de l'architecture, la gestion de la cohérence des données distribuées (pas de transactions ACID globales), et le débogage plus difficile car les requêtes traversent plusieurs services.

Codes HTTP(4 questions)

Question 1

Pourquoi les codes HTTP ont-ils été séparés en cinq catégories ?

A.Pour organiser les différents types de réponses selon leur signification
B.Pour faciliter la compréhension et le traitement des erreurs
C.Pour permettre aux clients de réagir différemment selon le type de réponse
D.Toutes les réponses ci-dessus✓ Bonne réponse
💡

Explication :

Les codes HTTP ont été séparés en cinq catégories (1xx Informational, 2xx Success, 3xx Redirection, 4xx Client Error, 5xx Server Error) pour organiser les différents types de réponses selon leur signification, faciliter la compréhension et le traitement des erreurs, et permettre aux clients de réagir différemment.

Question 2

Quelle est la signification des codes HTTP 2xx ?

A.Erreurs du client
B.Succès de la requête✓ Bonne réponse
C.Redirections
D.Erreurs du serveur
💡

Explication :

Les codes HTTP 2xx indiquent le succès de la requête. Exemples : 200 OK (succès), 201 Created (ressource créée), 204 No Content (succès sans contenu à retourner).

Question 3

Quelle est la signification des codes HTTP 4xx ?

A.Erreurs du client✓ Bonne réponse
B.Succès de la requête
C.Redirections
D.Erreurs du serveur
💡

Explication :

Les codes HTTP 4xx indiquent des erreurs du client. Exemples : 400 Bad Request (requête mal formée), 401 Unauthorized (non authentifié), 404 Not Found (ressource introuvable), 422 Unprocessable Entity (sémantique invalide).

Question 4

Quelle est la signification des codes HTTP 5xx ?

A.Erreurs du client
B.Succès de la requête
C.Redirections
D.Erreurs du serveur✓ Bonne réponse
💡

Explication :

Les codes HTTP 5xx indiquent des erreurs du serveur. Exemples : 500 Internal Server Error (erreur interne), 502 Bad Gateway (mauvaise réponse du serveur en amont), 503 Service Unavailable (service temporairement indisponible).

Conception API REST(5 questions)

Question 1

Pour gérer (CRUD) une liste de films dans une API REST, quelle méthode HTTP utiliser pour créer un film ?

A.GET
B.POST✓ Bonne réponse
C.PUT
D.DELETE
💡

Explication :

Pour créer une ressource dans une API REST, on utilise POST. GET pour lire, PUT pour mettre à jour (remplacement complet), PATCH pour mise à jour partielle, et DELETE pour supprimer.

Question 2

Pour rechercher un film par son nom dans une API REST, quelle URI serait la plus appropriée ?

A.GET /movies/name/{name}
B.GET /movies?name={name}✓ Bonne réponse
C.GET /search/movies?name={name}
D.GET /movies/search/{name}
💡

Explication :

Pour rechercher un film par son nom, l'URI la plus appropriée est 'GET /movies?name={name}'. Les paramètres de recherche doivent être passés en query parameters, pas dans le path. Le path représente la ressource, les query params représentent les filtres.

Question 3

Pour lister les acteurs/actrices d'un film dans une API REST, quelle URI serait la plus appropriée ?

A.GET /actors?movie={movieId}
B.GET /movies/{movieId}/actors✓ Bonne réponse
C.GET /actors/movies/{movieId}
D.GET /movies/{movieId}?include=actors
💡

Explication :

Pour lister les acteurs d'un film, l'URI la plus appropriée est 'GET /movies/{movieId}/actors'. Cela représente une sous-ressource : les acteurs appartiennent au film, donc ils sont dans le path du film. C'est une relation hiérarchique claire.

Question 4

Pour ajouter un acteur à un film dans une API REST, quelle méthode HTTP utiliser ?

A.GET
B.POST✓ Bonne réponse
C.PUT
D.DELETE
💡

Explication :

Pour ajouter un acteur à un film, on utilise POST sur l'URI '/movies/{movieId}/actors' ou '/movies/{movieId}/actors/{actorId}'. POST est utilisé pour créer une nouvelle association entre deux ressources.

Question 5

Pour supprimer un acteur d'un film dans une API REST, quelle méthode HTTP utiliser ?

A.GET
B.POST
C.PUT
D.DELETE✓ Bonne réponse
💡

Explication :

Pour supprimer un acteur d'un film, on utilise DELETE sur l'URI '/movies/{movieId}/actors/{actorId}'. DELETE est utilisé pour supprimer une ressource ou une association entre ressources.

Échelle de Richardson(1 question)

Question 1

Combien de niveaux existe-t-il sur l'échelle de maturité de Richardson pour REST ?

A.2 niveaux
B.3 niveaux✓ Bonne réponse
C.4 niveaux
D.la vraie question c'est est-ce que vous trouvez que c'est mature ce QCM ?
💡

Explication :

L'échelle de maturité de Richardson pour REST comporte 3 niveaux : Niveau 0 (HTTP comme tunnel), Niveau 1 (Ressources), Niveau 2 (Verbes HTTP), et parfois un Niveau 3 (HATEOAS) qui n'est pas toujours compté séparément.

REST vs Norme(1 question)

Question 1

REST est-il une norme ?

A.Oui, c'est une norme officielle
B.Non, c'est un style architectural✓ Bonne réponse
C.Oui, mais seulement pour HTTP
D.Non, c'est un protocole
💡

Explication :

REST n'est pas une norme officielle, c'est un style architectural défini par Roy Fielding dans sa thèse de doctorat. Il décrit des contraintes et principes pour créer des systèmes web évolutifs, mais il n'y a pas de spécification formelle stricte.

Message Queue - Publish-Subscribe(1 question)

Question 1

Dans un modèle Publish-Subscribe avec topics, que se passe-t-il quand un message est publié sur un topic ?

A.Un seul subscriber le reçoit
B.Tous les subscribers abonnés au topic le reçoivent✓ Bonne réponse
C.Le message est perdu s'il n'y a pas de subscriber
D.Le message est mis en file d'attente indéfiniment
💡

Explication :

Dans un modèle Publish-Subscribe avec topics, quand un message est publié sur un topic, tous les subscribers abonnés à ce topic reçoivent le message. C'est le principe du broadcast : un message est distribué à tous les abonnés intéressés.

Load-Balancer - Algorithmes(1 question)

Question 1

Quels sont les algorithmes courants utilisés par un Load-Balancer ?

A.Round-robin uniquement
B.Round-robin, Least connections, IP hash✓ Bonne réponse
C.Random uniquement
D.FIFO uniquement
💡

Explication :

Les algorithmes courants d'un Load-Balancer incluent : Round-robin (distribution circulaire), Least connections (serveur avec le moins de connexions), IP hash (distribution basée sur l'IP du client), Weighted round-robin (avec poids), etc.

Architecture Micro-services - Communication(1 question)

Question 1

Pourquoi la communication asynchrone est-elle préférée dans les architectures micro-services ?

A.Elle est plus rapide
B.Elle offre un meilleur découplage et résilience✓ Bonne réponse
C.Elle est plus simple à implémenter
D.Elle nécessite moins de ressources
💡

Explication :

La communication asynchrone est préférée dans les micro-services car elle offre un meilleur découplage (les services ne sont pas directement dépendants) et une meilleure résilience (un service peut être indisponible sans bloquer les autres grâce aux files d'attente).

Semantic Versioning - Utilité(1 question)

Question 1

Quelle est l'utilité principale du Semantic Versioning ?

A.Faciliter la gestion des dépendances
B.Communiquer clairement la nature des changements aux utilisateurs
C.Automatiser les mises à jour
D.Toutes les réponses ci-dessus✓ Bonne réponse
💡

Explication :

Le Semantic Versioning permet de : faciliter la gestion des dépendances (savoir si une mise à jour est compatible), communiquer clairement la nature des changements aux utilisateurs, et permettre l'automatisation des mises à jour (mise à jour automatique des patches, par exemple).

Codes HTTP - Catégories(1 question)

Question 1

Quelle catégorie de codes HTTP indique des informations sur le traitement de la requête ?

A.1xx - Informational✓ Bonne réponse
B.2xx - Success
C.3xx - Redirection
D.4xx - Client Error
💡

Explication :

Les codes HTTP 1xx (Informational) indiquent des informations sur le traitement de la requête. Exemples : 100 Continue (le serveur a reçu les headers et attend le body), 101 Switching Protocols (changement de protocole).