Question d'entretien pour Développeur full stack

Comment renommeriez-vous une colonne sur une table de 50 millions de lignes sans interruption de service ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Expansion, migration, contraction. Ajoutez la nouvelle colonne, déployez du code qui écrit les deux et lit encore l'ancienne, remplissez par lots régulés, puis basculez les lectures vers la nouvelle colonne dans un déploiement séparé, et ne supprimez l'ancienne colonne qu'une fois que plus rien ne la référence. Ne combinez jamais un changement de schéma et une bascule de code dans une seule release, parce que vous perdez la capacité de revenir en arrière proprement.

Pourquoi les recruteurs posent cette question

Ça teste si vous avez livré des migrations face à du trafic réel ou seulement lancé des migrations en local. Le recruteur veut la séquence sur plusieurs déploiements, la conscience du comportement de verrouillage sur les grandes tables, et une histoire de retour arrière. Les candidats qui répondent par un seul ALTER n'ont en général jamais vu une migration prendre un verrou exclusif et bloquer toutes les requêtes d'une base de production en pleine heure de pointe.

Comment structurer votre réponse

  • Nommez le motif expand and contract d'entrée.
  • Déroulez les déploiements dans l'ordre avec ce que fait chacun.
  • Expliquez comment vous remplissez sans verrouiller ni saturer la base.
  • Énoncez la position de retour arrière à chaque étape.

Exemple de réponse

Exemple parlé, à la première personne

Un renommage, c'est en réalité une séquence de petits changements sûrs plutôt qu'une seule instruction. Le premier déploiement ajoute la nouvelle colonne en nullable, ce qui coûte peu dans Postgres puisque ça ne réécrit pas la table, et livre du code qui écrit dans les deux colonnes tout en lisant encore l'ancienne. Ensuite je remplis par lots, peut-être cinq mille lignes à la fois avec une courte pause, en surveillant le retard de réplication et les attentes de verrou, pour ne jamais tenir une longue transaction. Le deuxième déploiement bascule les lectures vers la nouvelle colonne, avec la double écriture toujours en place pour pouvoir revenir instantanément si quelque chose cloche. Ce n'est qu'après quelques jours de stabilité que le troisième déploiement arrête d'écrire l'ancienne colonne et la supprime. La raison pour laquelle j'insiste sur des déploiements séparés, c'est le retour arrière. Si le changement de schéma et le changement de code partent ensemble, revenir sur le code laisse la base dans une forme que l'ancien code ne sait pas lire. J'ajoute aussi les index en mode concurrent et je pose un lock timeout pour qu'une migration échoue vite au lieu de faire la queue derrière une longue requête et de geler les écritures.

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 marche

Questions de relance à prévoir

  • Lesquelles de ces étapes prennent un verrou dans Postgres, et combien de temps ?
  • Comment vérifieriez-vous que le remplissage est correct avant de basculer les lectures ?
  • Quel est votre retour arrière si le remplissage est à moitié fait ?

Autres questions pour Développeur full stack

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

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot