BUT Informatique study materials
BUT Informatique study resources

BUT Informatique practice questions

One question at a time. Build your BUT Informatique understanding.

First 50 of 199 questions. Each one lists the choices, the correct answer, and an explanation. The checker at the top of this page saves progress in this browser when it is available.

Continue in the practice tool above to load more questions, 50 at a time.

Question 1Réaliser un développement d'application

En Java, quelle construction permet de garantir qu'une ressource (fichier, connexion) est fermée automatiquement à la fin d'un bloc, même en cas d'exception ?

  1. Le bloc synchronized entourant l'ouverture du fichier
  2. Le bloc try-with-resources avec une ressource implémentant AutoCloseable Correct answer.
  3. L'appel explicite à System.gc() après le bloc
  4. La déclaration de la ressource en variable static

Explanation

Le try-with-resources ferme automatiquement chaque ressource déclarée dans son en-tête, dans l'ordre inverse de déclaration, y compris lorsqu'une exception est levée. La ressource doit implémenter AutoCloseable (ou Closeable).

Question 2Réaliser un développement d'application

Quel est le résultat de l'expression Java `7 / 2` lorsque les deux opérandes sont des int ?

  1. Une exception ArithmeticException
  2. 3.5
  3. 3 Correct answer.
  4. 4

Explanation

En Java, la division entre deux entiers effectue une division entière : la partie décimale est tronquée vers zéro, donc 7 / 2 vaut 3. Pour obtenir 3.5, il faut qu'au moins un opérande soit de type flottant.

Question 3Réaliser un développement d'application

En SQL, quelle clause permet de filtrer les groupes produits par un GROUP BY ?

  1. WHERE
  2. DISTINCT
  3. HAVING Correct answer.
  4. ORDER BY

Explanation

HAVING s'applique après le regroupement et peut porter sur des fonctions d'agrégat comme COUNT ou SUM. WHERE filtre les lignes avant le regroupement et ne peut pas référencer directement un agrégat.

Question 4Réaliser un développement d'application

Dans Git, quelle commande crée une nouvelle branche et bascule immédiatement dessus ?

  1. git merge nouvelle-branche
  2. git checkout -b nouvelle-branche Correct answer.
  3. git remote add nouvelle-branche
  4. git branch nouvelle-branche

Explanation

`git checkout -b` (ou `git switch -c`) crée la branche à partir du commit courant et y positionne HEAD. `git branch` seul crée la branche sans changer de branche active.

Question 5Réaliser un développement d'application

Quelle affirmation décrit correctement l'encapsulation en programmation orientée objet ?

  1. Elle regroupe plusieurs méthodes de même nom avec des signatures différentes
  2. Elle impose qu'une classe n'ait qu'une seule instance dans toute l'application
  3. Elle permet à une sous-classe de redéfinir le comportement d'une méthode héritée
  4. Elle consiste à masquer les détails internes d'un objet derrière une interface publique contrôlée Correct answer.

Explanation

L'encapsulation protège l'état interne en limitant l'accès direct aux attributs, généralement via des modificateurs comme private et des accesseurs. Elle facilite la maintenance car l'implémentation peut évoluer sans casser les clients.

Question 6Réaliser un développement d'application

En HTML, quel élément est le plus approprié pour regrouper un ensemble de champs de formulaire liés et leur associer une légende ?

  1. <fieldset> avec <legend> Correct answer.
  2. <section>
  3. <table>
  4. <div>

Explanation

L'élément fieldset regroupe sémantiquement des contrôles de formulaire et legend fournit un intitulé lu par les technologies d'assistance. Cela améliore l'accessibilité par rapport à un simple conteneur générique.

Question 7Réaliser un développement d'application

Quelle est la complexité temporelle moyenne d'une recherche dans une table de hachage bien dimensionnée ?

  1. O(n log n)
  2. O(1) Correct answer.
  3. O(n)
  4. O(log n)

Explanation

Avec une fonction de hachage qui répartit uniformément les clés et un facteur de charge maîtrisé, l'accès à un élément se fait en temps constant moyen. Le pire cas reste O(n) en cas de collisions massives.

Question 8Réaliser un développement d'application

En Java, quelle exception est levée lors d'un accès à un index hors des bornes d'un tableau ?

  1. IllegalArgumentException
  2. ClassCastException
  3. ArrayIndexOutOfBoundsException Correct answer.
  4. NullPointerException

Explanation

Un accès à un indice négatif ou supérieur ou égal à la longueur du tableau lève ArrayIndexOutOfBoundsException, sous-classe de IndexOutOfBoundsException. C'est une exception non vérifiée.

Question 9Réaliser un développement d'application

On souhaite tester une classe `Calculatrice` qui dépend d'un service `Journal` pour tracer ses appels. Quelle pratique favorise le test unitaire isolé ?

  1. Placer la logique de Journal dans une méthode static de Calculatrice
  2. Injecter une implémentation factice de Journal via le constructeur Correct answer.
  3. Instancier directement la vraie implémentation réseau de Journal dans le test
  4. Désactiver tous les tests qui touchent à Journal

Explanation

L'injection de dépendance permet de substituer un double de test (mock ou stub) qui n'effectue aucun appel réseau. Le test reste rapide, déterministe et vérifie uniquement le comportement de Calculatrice.

Question 10Réaliser un développement d'application

Une requête SQL `SELECT * FROM commande WHERE client_id = ?` est exécutée dans une boucle pour 1000 clients. Quel problème de performance est le plus probable ?

  1. Un deadlock systématique sur la table commande
  2. Un problème de requête N+1 générant 1000 allers-retours vers la base Correct answer.
  3. Une violation de contrainte de clé primaire
  4. Une erreur de syntaxe SQL à chaque itération

Explanation

Exécuter une requête par élément produit le schéma N+1 : une requête initiale puis une requête par ligne, ce qui multiplie la latence réseau. Une jointure ou une requête avec IN permettrait de tout récupérer en un seul aller-retour.

Question 11Réaliser un développement d'application

En Java, que se passe-t-il si une méthode déclarée dans une interface est annotée `default` ?

  1. Elle impose que l'interface ne soit implémentée que par une seule classe
  2. Elle rend la méthode privée à l'interface et inaccessible aux implémentations
  3. Elle fournit une implémentation utilisable si la classe ne la redéfinit pas Correct answer.
  4. Elle devient automatiquement abstraite pour toutes les classes

Explanation

Depuis Java 8, une méthode default possède un corps dans l'interface et peut être héritée sans redéfinition. Cela permet d'ajouter des méthodes aux interfaces sans casser les implémentations existantes.

Question 12Réaliser un développement d'application

Quelle instruction Git permet de réappliquer les commits d'une branche au sommet d'une autre branche en réécrivant leur historique ?

  1. git merge
  2. git rebase Correct answer.
  3. git revert
  4. git stash

Explanation

git rebase déplace et rejoue les commits sur une nouvelle base, produisant un historique linéaire mais avec de nouveaux identifiants de commit. git merge conserve l'historique et crée un commit de fusion.

Question 13Réaliser un développement d'application

Dans une architecture MVC, quel composant est responsable de la mise à jour de l'affichage après une modification des données ?

  1. Le modèle notifie la vue via un mécanisme d'observation Correct answer.
  2. Le contrôleur dessine directement la vue à chaque requête
  3. La vue modifie la base de données directement
  4. Le routeur recalcule le modèle à chaque rendu

Explanation

Dans MVC, le modèle contient les données et notifie ses observateurs lorsque son état change ; la vue se met alors à jour. Le contrôleur traduit les entrées utilisateur en actions sur le modèle, sans gérer le rendu.

Question 14Réaliser un développement d'application

Quel principe SOLID recommande qu'une classe ne dispose que d'une seule raison de changer ?

  1. Le principe d'inversion de dépendance
  2. Le principe de responsabilité unique Correct answer.
  3. Le principe de substitution de Liskov
  4. Le principe de ségrégation des interfaces

Explanation

Le Single Responsibility Principle attribue à une classe une seule responsabilité, donc une seule cause de modification. Cela limite l'impact des évolutions et facilite les tests ciblés.

Question 15Réaliser un développement d'application

En JavaScript, quelle affirmation décrit correctement `==` par rapport à `===` ?

  1. Les deux opérateurs ont un comportement strictement identique
  2. `===` effectue une coercition, `==` exige des types identiques
  3. `==` effectue une coercition de type avant comparaison, `===` compare type et valeur Correct answer.
  4. `==` compare uniquement les types, `===` compare uniquement les valeurs

Explanation

L'opérateur `==` applique des conversions de type implicites (par exemple `'1' == 1` vaut true), tandis que `===` ne renvoie true que si les types et les valeurs correspondent. On privilégie `===` pour éviter les surprises de coercition.

Question 16Réaliser un développement d'application

Quel est l'intérêt principal d'un test de régression automatisé dans une intégration continue ?

  1. Garantir que le code ne contient aucune faille de sécurité
  2. Détecter rapidement qu'une modification casse un comportement précédemment validé Correct answer.
  3. Remplacer entièrement la revue de code par un humain
  4. Mesurer la vitesse d'exécution de l'application en production

Explanation

Un test de régression vérifie qu'une fonctionnalité existante continue de fonctionner après une modification. Exécuté à chaque intégration, il signale précocement les régressions avant la mise en production.

Question 17Réaliser un développement d'application

Soit la fonction Python : ```python def f(n): if n <= 1: return 1 return n * f(n - 1) ``` Que renvoie `f(4)` ?

  1. 24 Correct answer.
  2. 4
  3. 16
  4. 10

Explanation

La fonction calcule la factorielle de n. f(4) = 4 × f(3) = 4 × 3 × 2 × 1 = 24, la condition d'arrêt renvoyant 1 pour n ≤ 1.

Question 18Réaliser un développement d'application

Quelle écriture CSS cible tous les éléments `<p>` situés à l'intérieur d'un élément de classe `contenu`, à n'importe quelle profondeur ?

  1. #contenu p
  2. p.contenu
  3. .contenu > p
  4. .contenu p Correct answer.

Explanation

Le sélecteur descendant `.contenu p` s'applique à tout p descendant d'un élément portant la classe contenu, quelle que soit la profondeur. Le combinateur `>` limite la sélection aux enfants directs.

Question 19Réaliser un développement d'application

Un étudiant écrit `git push` après un commit, mais Git rejette l'opération car la branche distante a divergé. Quelle démarche est la plus appropriée sur une branche partagée ?

  1. Renommer la branche locale avant de repousser
  2. Récupérer les changements distants puis fusionner ou rebaser localement avant de repousser Correct answer.
  3. Forcer le push avec `--force` pour écraser la branche distante
  4. Supprimer la branche distante puis la recréer

Explanation

Un push non fast-forward est refusé pour protéger le travail des autres. Il faut intégrer les commits distants (fetch puis merge ou rebase) et résoudre les conflits avant de repousser.

Question 20Réaliser un développement d'application

En Java, quelle est la différence entre `ArrayList` et `LinkedList` pour des insertions fréquentes en milieu de liste ?

  1. LinkedList ne peut pas stocker plus de 1000 éléments
  2. ArrayList est toujours plus rapide car elle utilise un tableau contigu
  3. ArrayList interdit les insertions en milieu de liste
  4. LinkedList est généralement plus efficace car elle ne décale pas les éléments, mais l'accès par index y est plus lent Correct answer.

Explanation

LinkedList est une liste doublement chaînée : insérer au milieu modifie quelques références sans décaler d'éléments. En revanche, atteindre l'indice coûte O(n), alors qu'ArrayList y accède en O(1) mais décale les éléments lors d'une insertion.

Question 21Réaliser un développement d'application

En SQL, que garantit une transaction déclarée avec le niveau d'isolation SERIALIZABLE ?

  1. Que les écritures sont toujours plus rapides car les verrous sont évités
  2. Que la transaction ne peut jamais être annulée par un ROLLBACK
  3. Que les lectures ne voient jamais de données non validées, mais des lectures fantômes restent possibles
  4. Que le résultat est équivalent à une exécution série des transactions concurrentes Correct answer.

Explanation

SERIALIZABLE est le niveau d'isolation le plus strict : il empêche les lectures sales, non répétables et fantômes, au prix d'une concurrence réduite. Le résultat équivaut à celui d'une exécution séquentielle des transactions.

Question 22Réaliser un développement d'application

On observe une méthode Java qui parcourt une liste et exécute une requête SQL pour chaque élément, puis calcule une moyenne en mémoire. Quelle refactorisation améliore le plus la performance sans changer le résultat ?

  1. Passer la liste en paramètre static pour éviter les allocations
  2. Ajouter un cache statique non borné pour mémoriser chaque résultat
  3. Envelopper l'appel dans un bloc synchronized
  4. Remplacer la boucle par une requête d'agrégat unique renvoyant la moyenne calculée par le SGBD Correct answer.

Explanation

Déléguer le calcul à une requête d'agrégat (AVG avec GROUP BY) supprime le schéma N+1 et réduit les transferts réseau. Le SGBD calcule la moyenne en une seule passe, avec un résultat identique.

Question 23Réaliser un développement d'application

Soit les tables `client(id, nom)` et `commande(id, client_id, montant)`. Quelle requête liste les clients n'ayant aucune commande, y compris ceux dont client_id est NULL dans commande ?

  1. SELECT c.nom FROM client c INNER JOIN commande o ON o.client_id = c.id
  2. SELECT c.nom FROM client c WHERE c.id NOT IN (SELECT client_id FROM commande)
  3. SELECT c.nom FROM client c LEFT JOIN commande o ON o.client_id = c.id WHERE o.montant IS NULL
  4. SELECT c.nom FROM client c WHERE NOT EXISTS (SELECT 1 FROM commande o WHERE o.client_id = c.id) Correct answer.

Explanation

NOT EXISTS évalue la sous-requête par corrélation et reste correct même si la colonne client_id contient des NULL. NOT IN devient dangereux dès qu'un NULL apparaît dans la sous-requête, car la comparaison renvoie UNKNOWN.

Question 24Réaliser un développement d'application

Une classe Java expose un attribut `List<String> tags` via un getter qui renvoie directement la référence interne. Quel est le risque principal ?

  1. Un appelant peut modifier la liste interne et violer l'invariant de l'objet Correct answer.
  2. Le getter devient obligatoirement synchronized
  3. Le garbage collector ne peut plus libérer la liste
  4. La liste est automatiquement sérialisée à chaque appel

Explanation

Renvoyer la référence directe brise l'encapsulation : le client peut ajouter ou supprimer des éléments sans passer par les contrôles de la classe. Il faut renvoyer une copie défensive ou une vue non modifiable.

Question 25Réaliser un développement d'application

Dans un pipeline d'intégration continue, quel ordre d'exécution minimise le retour d'information en cas d'échec rapide ?

  1. Déploiement en production, puis compilation, puis tests
  2. Tests d'intégration, puis déploiement, puis compilation
  3. Tests de bout en bout, puis tests unitaires, puis compilation
  4. Compilation, puis tests unitaires, puis tests d'intégration et de bout en bout Correct answer.

Explanation

Placer les étapes les plus rapides et les plus déterministes en premier (compilation, tests unitaires) permet d'échouer vite et à moindre coût. Les tests lents de bout en bout s'exécutent ensuite, une fois la base validée.

Question 26Réaliser un développement d'application

En Java, quelle est la particularité d'une méthode déclarée `static` dans une classe ?

  1. Elle ne peut être appelée qu'à l'intérieur du constructeur de la classe.
  2. Elle peut être appelée sans instance de la classe et n'a pas accès à `this`. Correct answer.
  3. Elle doit obligatoirement être redéfinie dans chaque sous-classe.
  4. Elle est automatiquement synchronisée pour tous les threads.

Explanation

Une méthode `static` appartient à la classe elle-même et non à une instance : elle est invoquée via `NomClasse.methode()` et ne dispose donc pas de la référence `this` ni d'accès direct aux attributs d'instance. Elle peut néanmoins lire les champs statiques de la classe.

Question 27Réaliser un développement d'application

En Python, que fait l'instruction `with open('data.txt') as f:` par rapport à un simple `f = open('data.txt')` ?

  1. Elle charge tout le fichier en mémoire avant de rendre la main.
  2. Elle garantit la fermeture du fichier à la sortie du bloc, même en cas d'exception. Correct answer.
  3. Elle ouvre le fichier en écriture exclusive par défaut.
  4. Elle empêche toute lecture tant que le fichier n'est pas verrouillé.

Explanation

Le protocole de contexte (`__enter__`/`__exit__`) appelle la fermeture du fichier lorsque le bloc `with` se termine, y compris si une exception est levée à l'intérieur. C'est pourquoi la gestion de ressources en Python privilégie `with` plutôt qu'une fermeture manuelle.

Question 28Réaliser un développement d'application

En SQL, quelle clause permet de filtrer les groupes produits par un `GROUP BY` en fonction d'une fonction d'agrégation ?

  1. DISTINCT
  2. WHERE
  3. ORDER BY
  4. HAVING Correct answer.

Explanation

`WHERE` s'applique aux lignes avant regroupement, tandis que `HAVING` s'applique aux groupes déjà constitués et peut donc tester une agrégation comme `COUNT(*) > 5`. L'ordre logique d'évaluation place `HAVING` après `GROUP BY`.

Question 29Réaliser un développement d'application

Une méthode Java reçoit une liste et doit renvoyer une nouvelle liste contenant les éléments pairs. Quelle implémentation respecte le mieux l'immuabilité de l'entrée ?

  1. Trier la liste reçue puis supprimer les éléments impairs avec `removeIf`.
  2. Renvoyer directement la liste reçue après avoir retiré les éléments impairs.
  3. Créer une nouvelle `List<Integer>` et y ajouter les éléments pairs sans modifier la liste reçue. Correct answer.
  4. Conserver une référence statique vers la liste reçue pour la réutiliser plus tard.

Explanation

Construire une nouvelle collection laisse l'objet d'entrée intact, ce qui évite les effets de bord chez l'appelant et rend la méthode plus facile à tester. Modifier ou retenir la liste reçue crée un couplage caché avec l'état de l'appelant.

Question 30Réaliser un développement d'application

En HTML, quel attribut rend un champ de formulaire obligatoire côté navigateur avant soumission ?

  1. validate
  2. notnull
  3. mandatory
  4. required Correct answer.

Explanation

L'attribut booléen `required` indique au navigateur qu'un champ doit être rempli pour que la soumission passe la validation native. Il ne remplace pas une validation serveur, car il peut être contourné.

Question 31Réaliser un développement d'application

Soit une table `employe(id, nom, salaire)` et la requête `SELECT nom, salaire FROM employe WHERE salaire > (SELECT AVG(salaire) FROM employe);`. Que renvoie-t-elle ?

  1. Les employés dont le salaire est égal au salaire maximum de la table.
  2. Tous les employés, car la sous-requête renvoie plusieurs lignes.
  3. Les employés dont le salaire dépasse la moyenne de tous les salaires de la table. Correct answer.
  4. Les employés dont le salaire est supérieur à celui du premier employé inséré.

Explanation

La sous-requête scalaire calcule la moyenne des salaires sur l'ensemble de la table, puis la requête externe conserve les lignes dont le salaire dépasse cette valeur. Comme la sous-requête renvoie une seule valeur, la comparaison `>` est valide.

Question 32Réaliser un développement d'application

On veut que la méthode `ajouterAuPanier` d'un service Java vérifie d'abord que le stock est suffisant, puis décrémente le stock et ajoute la ligne de panier, le tout de façon atomique. Quelle approche est la plus adaptée ?

  1. Décrémenter le stock dans une première transaction, puis ajouter la ligne de panier dans une seconde, sans lien entre elles.
  2. Vérifier le stock en mémoire avant l'appel, puis exécuter les deux écritures sans transaction.
  3. Encadrer les deux opérations dans une transaction unique avec `@Transactional` et vérifier le stock dans la même transaction. Correct answer.
  4. Journaliser l'erreur si le stock devient négatif et laisser les deux écritures se faire séparément.

Explanation

Une transaction englobant la vérification et les deux écritures garantit que tout est validé ou annulé ensemble, ce qui préserve la cohérence du stock et du panier. Sans cette unité atomique, un échec intermédiaire laisse le système dans un état incohérent.

Question 33Réaliser un développement d'application

Une application Java traite des objets `Animal` et appelle `crier()` sur chacun ; certaines sous-classes redéfinissent `crier()`, d'autres non. Quel comportement illustre le polymorphisme dynamique ?

  1. La méthode exécutée est choisie selon le type réel de l'objet à l'exécution, pas selon le type déclaré de la variable. Correct answer.
  2. La méthode de la superclasse est toujours exécutée pour éviter toute ambiguïté.
  3. La méthode exécutée est choisie à la compilation selon le type déclaré de la variable.
  4. La méthode exécutée dépend de l'ordre d'instanciation des objets dans la liste.

Explanation

En Java, la liaison tardive des méthodes d'instance non statiques et non privées fait intervenir le type réel de l'objet. Une variable déclarée `Animal` peut donc déclencher l'implémentation de `Chien` si l'objet est effectivement un `Chien`.

Question 34Réaliser un développement d'application

Dans une application web, un endpoint reçoit un identifiant fourni par l'utilisateur et construit la requête `"SELECT * FROM compte WHERE id = " + id`. Quel est le risque principal et quelle correction appliquer ?

  1. Un problème de performance ; il faut ajouter un index sur la colonne `id`.
  2. Une fuite mémoire ; il faut fermer la connexion après chaque requête.
  3. Une injection SQL ; il faut utiliser une requête paramétrée avec un `PreparedStatement`. Correct answer.
  4. Un dépassement de capacité ; il faut convertir l'identifiant en `long`.

Explanation

La concaténation directe d'une entrée utilisateur permet à un attaquant d'injecter du SQL et d'altérer la requête, par exemple pour contourner la condition. Les requêtes paramétrées transmettent la valeur comme donnée liée, ce qui neutralise l'interprétation malveillante.

Question 35Optimiser des applications informatiques

En algorithmique, quelle est la complexité temporelle dans le pire des cas d'une recherche dichotomique dans un tableau trié de n éléments ?

  1. O(n)
  2. O(1)
  3. O(n log n)
  4. O(log n) Correct answer.

Explanation

La recherche dichotomique divise l'intervalle de recherche par deux à chaque itération, ce qui donne un nombre d'étapes logarithmique en base 2. Le pire des cas correspond donc à O(log n) comparaisons.

Question 36Optimiser des applications informatiques

Quelle structure de données est la plus adaptée pour implémenter une file d'attente (FIFO) avec des opérations d'ajout et de retrait en O(1) ?

  1. Une table de hachage sans ordre
  2. Une pile (LIFO)
  3. Une file implémentée avec deux indices sur un tableau circulaire Correct answer.
  4. Un arbre binaire de recherche non équilibré

Explanation

Une file circulaire gère les ajouts en queue et les retraits en tête avec deux indices, sans décalage des éléments, donc en temps constant. C'est la structure canonique respectant la sémantique FIFO en O(1).

Question 37Optimiser des applications informatiques

Dans un schéma relationnel, quelle contrainte garantit qu'une valeur de clé étrangère référence bien un tuple existant dans la table cible ?

  1. La contrainte d'intégrité référentielle Correct answer.
  2. La contrainte de clé primaire
  3. La contrainte d'unicité
  4. La contrainte de domaine

Explanation

L'intégrité référentielle impose que toute valeur de clé étrangère corresponde à une clé candidate existante dans la relation référencée. Elle empêche les références orphelines lors des insertions et suppressions.

Question 38Optimiser des applications informatiques

En programmation orientée objet, quel principe justifie de remplacer une implémentation concrète par une interface dans le code appelant ?

  1. Le principe d'inversion de dépendance Correct answer.
  2. Le principe de ségrégation des interfaces
  3. Le principe de responsabilité unique
  4. Le principe de substitution de Liskov

Explanation

L'inversion de dépendance recommande de dépendre d'abstractions plutôt que de classes concrètes, ce qui réduit le couplage et facilite les tests. Les autres principes SOLID traitent d'autres aspects comme la cohésion ou la compatibilité des sous-types.

Question 39Optimiser des applications informatiques

Quel est l'objectif principal d'un test unitaire dans une démarche d'optimisation de la qualité logicielle ?

  1. Vérifier le comportement isolé d'une unité de code comme une fonction ou une classe Correct answer.
  2. Mesurer la charge supportée par le serveur en production
  3. Documenter les exigences fonctionnelles du client
  4. Valider l'ensemble du parcours utilisateur de bout en bout

Explanation

Un test unitaire isole une unité de code et vérifie son comportement attendu rapidement et de façon déterministe. Il sert de filet de sécurité lors des refactorisations et des optimisations.

Question 40Optimiser des applications informatiques

Quelle affirmation décrit correctement l'usage d'un index dans une base de données relationnelle ?

  1. Il accélère certaines lectures au prix d'un coût supplémentaire en écriture et en espace Correct answer.
  2. Il garantit automatiquement l'unicité des lignes sans contrainte déclarée
  3. Il accélère toutes les écritures car il réduit la taille des tables
  4. Il remplace la nécessité d'écrire des jointures entre tables

Explanation

Un index est une structure auxiliaire, souvent un arbre B, qui accélère la recherche sur les colonnes indexées. En contrepartie, chaque insertion, mise à jour ou suppression doit maintenir l'index, ce qui coûte du temps et de l'espace.

Question 41Optimiser des applications informatiques

En gestion de versions avec Git, quelle commande crée une branche et bascule immédiatement dessus ?

  1. git merge nouvelle-branche
  2. git checkout -b nouvelle-branche Correct answer.
  3. git clone nouvelle-branche
  4. git branch nouvelle-branche

Explanation

git checkout -b crée la branche à partir du commit courant puis y bascule la copie de travail. C'est l'équivalent combiné de git branch suivi de git checkout.

Question 42Optimiser des applications informatiques

Quelle métrique de qualité de code mesure la proportion de chemins d'exécution couverts par les tests automatisés ?

  1. La complexité cyclomatique
  2. Le taux de duplication
  3. La couverture de code Correct answer.
  4. La dette technique

Explanation

La couverture de code indique le pourcentage de lignes, branches ou instructions exécutées par la suite de tests. Elle s'obtient avec des outils d'instrumentation comme ceux intégrés aux chaînes de build.

Question 43Optimiser des applications informatiques

Dans une application Java, quel est l'effet principal de l'utilisation d'un pool de threads pour traiter des requêtes HTTP ?

  1. Garantir que toutes les requêtes sont exécutées dans l'ordre de leur arrivée
  2. Réutiliser un nombre borné de threads et limiter le coût de création par requête Correct answer.
  3. Augmenter automatiquement la mémoire disponible pour la JVM
  4. Supprimer la nécessité de synchroniser les accès aux données partagées

Explanation

Un pool maintient un ensemble de threads réutilisables, ce qui évite de créer et détruire un thread à chaque requête. Il borne aussi la concurrence, protégeant les ressources du serveur.

Question 44Optimiser des applications informatiques

On souhaite optimiser une requête SQL qui filtre sur une colonne de date et trie sur une autre colonne. Quel index composite est le plus pertinent pour ce filtre suivi du tri ?

  1. Un index composite (colonne de tri, colonne de filtre) dans cet ordre
  2. Un index sur la seule colonne de tri
  3. Un index composite (colonne de filtre, colonne de tri) dans cet ordre Correct answer.
  4. Aucun index, car les index composites ne servent jamais au tri

Explanation

Un index composite est utilisable d'abord sur son préfixe de gauche, donc la colonne de filtre doit venir en premier. Placer la colonne de tri ensuite permet au SGBD de lire les lignes déjà ordonnées et d'éviter un tri supplémentaire.

Question 45Optimiser des applications informatiques

Quel est l'effet d'une stratégie de cache avec invalidation trop agressive sur les performances d'une application ?

  1. Elle n'a aucun effet tant que la taille du cache reste constante
  2. Elle garantit la cohérence forte sans coût supplémentaire
  3. Elle réduit le taux de succès et provoque davantage d'accès au système d'origine Correct answer.
  4. Elle augmente le taux de succès du cache et réduit la charge base de données

Explanation

Invalider fréquemment les entrées fait que les requêtes suivantes ne trouvent plus les données en cache et doivent revenir à la source. Le taux de succès baisse et la latence moyenne augmente.

Question 46Optimiser des applications informatiques

Dans Git, pourquoi préfère-t-on généralement les branches de fonctionnalité fusionnées avec une revue de code avant intégration dans la branche principale ?

  1. Pour éviter que la branche principale ne contienne jamais de commits
  2. Pour détecter les régressions et les défauts de conception avant qu'ils n'atteignent la version partagée Correct answer.
  3. Pour supprimer automatiquement l'historique des commits de la branche
  4. Pour empêcher l'utilisation de tests automatisés en intégration continue

Explanation

La revue de code et l'intégration sur une branche dédiée permettent de contrôler la qualité avant la fusion. Cela limite les régressions dans la branche principale et facilite le travail collaboratif.

Question 47Optimiser des applications informatiques

Quel principe SOLID recommande qu'une classe n'ait qu'une seule raison de changer ?

  1. Responsabilité unique Correct answer.
  2. Ouvert/fermé
  3. Ségrégation des interfaces
  4. Inversion de dépendance

Explanation

Le principe de responsabilité unique énonce qu'une classe doit avoir une seule responsabilité et donc une seule raison de changer. Cela favorise la cohésion et limite l'impact des modifications.

Question 48Optimiser des applications informatiques

Dans une structure de données de type arbre binaire de recherche équilibré, quelle est la complexité d'une recherche dans le pire des cas ?

  1. O(n²)
  2. O(log n) Correct answer.
  3. O(1)
  4. O(n)

Explanation

Un arbre équilibré maintient une hauteur logarithmique, donc la recherche descend au plus O(log n) niveaux. C'est l'avantage des arbres équilibrés comme les arbres AVL ou rouges-noirs par rapport à un arbre non équilibré.

Question 49Optimiser des applications informatiques

Quel est le principal risque d'une optimisation prématurée du code sans mesure préalable ?

  1. Elle empêche la compilation du programme
  2. Elle complique le code et peut dégrader d'autres performances sans gain réel Correct answer.
  3. Elle rend les tests unitaires impossibles à écrire
  4. Elle supprime la nécessité de refactoriser plus tard

Explanation

Optimiser sans profiler revient à deviner où se situe le goulot d'étranglement, ce qui peut alourdir le code sans bénéfice mesurable. La démarche recommandée consiste à mesurer avant d'optimiser les points chauds identifiés.

Question 50Optimiser des applications informatiques

En SQL, quelle clause permet de connaître le plan d'exécution d'une requête dans la plupart des SGBD relationnels ?

  1. HAVING
  2. EXPLAIN Correct answer.
  3. GROUP BY
  4. UNION

Explanation

EXPLAIN affiche le plan choisi par l'optimiseur, avec les accès aux tables, les index utilisés et les jointures. C'est l'outil de base pour diagnostiquer une requête lente avant de la réécrire.