Question d'entretien pour Développeur Python

Comment traiteriez-vous un CSV de quarante gigaoctets qui ne tient pas en mémoire ?

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

Réponse rapide

Traitez-le en flux. Ouvrez le fichier et itérez ligne par ligne, ou utilisez csv.reader sur l'objet fichier, pour qu'une seule ligne soit en mémoire à la fois, et poussez chaque enregistrement à travers des étapes génératrices plutôt que de construire des listes intermédiaires. Groupez les écritures vers la destination par lots de quelques milliers. Si le travail est limité par le CPU, découpez par plages d'octets entre plusieurs processus.

Pourquoi les recruteurs posent cette question

Cela vérifie si le streaming est votre instinct ou une arrière-pensée. Les recruteurs voient beaucoup de candidats qui dégainent pandas read_csv par réflexe avant de découvrir que le conteneur se fait tuer. Ils veulent aussi entendre une réflexion opérationnelle : reprise après arrêt, suivi de la progression, écritures par lots, et savoir reconnaître le moment où la bonne réponse est d'arrêter d'écrire du Python et de charger le fichier dans la base.

Comment structurer votre réponse

  • Engagez-vous sur le streaming plutôt que sur le chargement.
  • Décrivez le pipeline de générateurs et les écritures par lots.
  • Ajoutez la reprise après arrêt et le suivi de progression.
  • Dites quand vous confieriez la tâche à un autre outil.

Exemple de réponse

Exemple parlé, à la première personne

Rien n'est chargé en entier. Un objet fichier est déjà un itérateur sur les lignes, donc je lis ligne par ligne avec csv.reader et j'enchaîne des étapes génératrices pour le parsing, le filtrage et la transformation, ce qui maintient le pic de mémoire à environ un enregistrement quelle que soit la taille du fichier. Les écritures sont groupées, typiquement quelques milliers de lignes par insert, parce que les allers-retours ligne par ligne vers Postgres dominent tout le reste. Comme quarante gigaoctets prennent du temps, je rends le traitement reprenable : je suis l'offset en octets ou la dernière clé traitée dans un petit fichier d'état, je journalise la progression toutes les cent mille lignes, et je rends l'écriture idempotente avec un upsert pour qu'une relance ne puisse pas dupliquer. Si le parsing s'avère être le goulot plutôt que les entrées/sorties, je découpe le fichier par offsets et je confie les plages à un pool de processus, en prenant soin de m'aligner sur les fins de ligne. Honnêtement, ma première suggestion est souvent d'éviter Python pour le chargement et d'utiliser la copie en masse de la base, puis de faire la transformation en SQL, parce que c'est en général un ordre de grandeur plus rapide.

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

  • Comment gérez-vous les lignes malformées en plein flux ?
  • Est-ce que polars ou duckdb changerait votre réponse ?
  • Comment rendriez-vous le traitement reprenable exactement une fois ?

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