Question d'entretien pour Développeur Python

Expliquez-moi comment livrer une migration de base de données sans interruption de service.

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

Réponse rapide

Découpez-la en étapes rétrocompatibles. Déployez d'abord le changement de schéma sous une forme que le code en cours tolère, par exemple l'ajout d'une colonne nullable, puis déployez du code qui écrit à la fois dans l'ancien et le nouveau, remplissez par lots, basculez les lectures, et ne supprimez l'ancienne colonne que dans une version ultérieure. Évitez les verrous longs sur les tables et testez toujours le chemin de retour arrière.

Pourquoi les recruteurs posent cette question

Les migrations séparent les ingénieurs prudents de ceux qui n'ont travaillé que sur des projets assez petits pour s'offrir une coupure. Le recruteur veut le motif expand and contract, la compréhension que l'ancien et le nouveau code tournent en même temps pendant un déploiement progressif, et la conscience des opérations qui verrouillent une table Postgres assez longtemps pour faire tomber le site.

Comment structurer votre réponse

  • Nommez le motif expand and contract.
  • Ordonnez les déploiements pour que les deux versions du code fonctionnent.
  • Remplissez par lots, jamais en une seule instruction.
  • Signalez les opérations verrouillantes à éviter.

Exemple de réponse

Exemple parlé, à la première personne

La règle à laquelle je me tiens, c'est que pendant un déploiement progressif deux versions du code parlent à une seule base, donc chaque étape doit être sûre pour les deux. Renommer une colonne est le piège classique. À la place j'étends : j'ajoute la nouvelle colonne nullable dans sa propre migration, je livre du code qui écrit les deux champs et lit encore l'ancien, je remplis les lignes existantes par lots de quelques milliers avec une pause entre chacun pour que la réplication ne décroche pas, puis je bascule les lectures à la version suivante, et seulement à une troisième version je supprime l'ancienne colonne. Les spécificités Postgres comptent aussi. Ajouter une contrainte NOT NULL sur une grosse table prend un verrou lourd, donc j'ajoute la colonne nullable, je remplis, puis je valide la contrainte séparément. Django vous donne separate_database_and_state et des migrations non atomiques quand il en faut, et je règle un lock_timeout court pour qu'une migration bloquée échoue vite au lieu de mettre en file toutes les requêtes derrière elle. Chaque migration reçoit aussi un retour arrière testé.

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

  • Et si le remplissage prend six heures ?
  • Comment ajoutez-vous un index sans bloquer les écritures ?
  • Comment revenez-vous en arrière sur un déploiement après un changement de schéma ?

Autres questions pour Développeur Python

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