Question d'entretien pour Développeur Java

Vous avez besoin d'un traitement de nuit qui lit vingt millions de lignes, les transforme et écrit les résultats. Comment l'écrivez-vous pour ne pas épuiser la mémoire ?

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

Réponse rapide

Traitez en flux plutôt que de tout matérialiser : lisez avec un curseur défilant ou une pagination par clé, fixez une taille de fetch pour que le pilote ne bufferise pas tout, et traitez par blocs avec un commit par bloc. Avec JPA, videz le contexte de persistance entre les blocs ou utilisez une session sans état, sinon chaque entité reste dans le cache de premier niveau. Groupez les écritures avec le batching JDBC, et rendez le traitement redémarrable depuis son dernier bloc commité.

Pourquoi les recruteurs posent cette question

Les traitements par lots sont là où le comportement mémoire de la JVM et celui du contexte de persistance deviennent évidents, donc cela teste l'expérience pratique plutôt que la théorie. Le recruteur veut le flux, les commits par blocs, le nettoyage du contexte de persistance et la redémarrabilité. Savoir qu'un pilote JDBC peut bufferiser tout le jeu de résultats quoi que fasse votre code, sauf si la taille de fetch et les réglages de transaction sont bons, est un signal fort.

Comment structurer votre réponse

  • Excluez de tout charger : lisez en flux ou par pages.
  • Expliquez la taille de fetch et le comportement de buffering du pilote.
  • Gérez le contexte de persistance pour que les entités ne s'accumulent pas.
  • Ajoutez les commits par blocs, les écritures groupées et la redémarrabilité.

Exemple de réponse

Exemple parlé, à la première personne

La règle centrale, c'est qu'aucune étape ne détient vingt millions de quoi que ce soit. Je lis avec une pagination par clé sur la clé primaire, ou un curseur défilant avec une taille de fetch explicite, et il faut savoir que certains pilotes ignorent ça et bufferisent tout le jeu de résultats sauf si vous êtes aussi dans une transaction avec l'autocommit désactivé, ce que les gens découvrent à la dure quand le tas se remplit avant que le moindre traitement ne commence. Ensuite je traite par blocs de quelques milliers, j'écris avec le batching JDBC pour avoir un aller-retour par bloc plutôt que par ligne, et je commite par bloc. Avec JPA le piège en plus, c'est le contexte de persistance : chaque entité lue reste gérée, donc la mémoire grimpe et les flushs ralentissent à mesure que la détection de modifications parcourt plus d'objets. Je le vide à chaque bloc ou j'utilise une session sans état. La redémarrabilité compte autant que la mémoire, donc le traitement enregistre la dernière clé commitée, ce qui veut dire qu'un échec à la dix-huit millionième ligne reprend au lieu de tout recommencer. Et je le bride, parce qu'un traitement par lots qui sature la base à deux heures du matin touche quand même ceux qui sont réveillés.

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

  • Pourquoi le contexte de persistance ralentit-il à mesure qu'il grossit ?
  • Comment paralléliseriez-vous cela sans risque entre partitions ?
  • Comment rendez-vous la transformation idempotente pour un redémarrage ?

Autres questions pour Développeur Java

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