Les quatre niveaux sont read uncommitted, read committed, repeatable read et serializable, et ils échangent de la concurrence contre les anomalies qu'ils autorisent : lectures sales, lectures non répétables, lectures fantômes et write skew. PostgreSQL utilise read committed par défaut, où chaque instruction voit un instantané frais ; MySQL avec InnoDB utilise repeatable read, où toute la transaction voit un seul instantané. Serializable est le seul niveau qui garantit que le résultat correspond à un ordre sériel.
Pourquoi les recruteurs posent cette question
Les bugs de concurrence dans les systèmes backend sont en général des bugs d'isolation, et ils n'apparaissent que sous charge, ce qui les rend coûteux. Le recruteur veut savoir si vous comprenez ce que votre base garantit réellement plutôt que de supposer qu'une transaction rend tout sûr. Nommer le niveau par défaut de votre moteur et décrire une anomalie réelle, comme une vérification de solde qui passe deux fois, montre que vous avez déboguré ça et pas seulement mémorisé un tableau.
Comment structurer votre réponse
- Listez les niveaux avec l'anomalie que chacun élimine.
- Indiquez le niveau par défaut de la base que vous utilisez vraiment.
- Décrivez une anomalie concrète que vous avez rencontrée.
- Dites comment vous la corrigeriez : isolation plus élevée ou verrouillage explicite.
Exemple de réponse
Ils vont de read uncommitted jusqu'à serializable, et chaque palier élimine une anomalie au prix d'un peu de concurrence. Read committed empêche les lectures sales mais chaque instruction obtient son propre instantané, donc la même requête exécutée deux fois dans une transaction peut renvoyer des lignes différentes. Repeatable read fige un instantané pour toute la transaction. Serializable garantit en plus que le résultat équivaut à exécuter les transactions les unes après les autres, ce que Postgres fait par suivi de prédicats, donc au lieu de bloquer il peut annuler une transaction et il faut être prêt à réessayer. Les valeurs par défaut comptent : Postgres est en read committed, InnoDB en repeatable read, ce qui surprend les gens qui passent de l'un à l'autre. Le bug que j'ai vraiment rencontré, c'était un write skew sur une table de réservations, où deux requêtes vérifiaient chacune qu'aucune réservation chevauchante n'existait, voyaient toutes les deux un instantané propre, et inséraient toutes les deux. Repeatable read n'aidait pas parce qu'elles écrivaient des lignes différentes. On a corrigé avec serializable plus une reprise, puis plus tard avec une contrainte d'exclusion, ce qui coûte moins cher.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Qu'est-ce que le write skew, et pourquoi repeatable read l'autorise-t-il ?
- Comment gérez-vous les échecs de sérialisation dans le code applicatif ?
- Quand utiliseriez-vous select for update plutôt que de monter le niveau d'isolation ?
Autres questions pour Développeur backend
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions