Question d'entretien pour Développeur Java

Votre latence au 99e centile a des pics que le code applicatif n'explique pas. Comment vérifiez-vous si le ramasse-miettes est responsable ?

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

Réponse rapide

Activez la journalisation du ramasse-miettes et alignez les horodatages des pauses avec les requêtes lentes. Si les pics correspondent aux pauses, regardez le taux d'allocation, la promotion et la marge du tas avant de toucher la moindre option, puisque la plupart des pauses viennent d'allocations excessives ou d'un tas trop petit. S'ils ne correspondent pas, vérifiez le temps jusqu'au safepoint, puisqu'un long safepoint bloque tous les threads et ressemble exactement à une pause de ramasse-miettes.

Pourquoi les recruteurs posent cette question

Déboguer la latence de queue est une compétence senior, et le recruteur veut des preuves plutôt que des options tirées au hasard. Corréler les logs de pause avec les traces de requêtes, et savoir que les safepoints, les défauts de page ou un voisin bruyant dans le conteneur peuvent produire le même symptôme, montre une pensée méthodique. Cela révèle aussi si vous corrigeriez la cause dans l'application ou si vous masqueriez le problème par du réglage de collecteur.

Comment structurer votre réponse

  • Récupérez les données : logs du ramasse-miettes et temps par requête.
  • Corrélez les fenêtres de pause avec les requêtes lentes.
  • Étudiez le taux d'allocation et le dimensionnement du tas avant les options.
  • Envisagez des causes hors ramasse-miettes comme les safepoints ou la plateforme.

Exemple de réponse

Exemple parlé, à la première personne

Je veux deux chronologies. La journalisation unifiée me donne chaque pause avec sa cause et sa durée, et mes traces me donnent les requêtes lentes, donc la première question est simplement de savoir si ça coïncide. Si oui, je résiste à l'envie de changer des options et je cherche pourquoi. En général le service alloue énormément par requête, du genre construire des listes intermédiaires dans une boucle ou logguer une charge utile sérialisée à chaque appel, donc le correctif est d'allouer moins. Parfois le tas est simplement trop serré et les collectes tournent en continu, ou dans G1 le code alloue de grands tableaux qui deviennent des objets humongous et se comportent mal. Ce n'est qu'après ça que j'envisagerais de passer à un collecteur à faibles pauses, et je le traiterais comme un compromis plutôt qu'un gain gratuit. Si les pauses ne corrèlent pas, je cherche ailleurs : le temps jusqu'au safepoint peut être long même quand la collecte elle-même est courte, donc un thread dans une boucle comptée bloque tout le monde. J'ai aussi poursuivi un cas qui s'est révélé être du throttling CPU du conteneur, où le processus était complètement désordonnancé et où aucun réglage de JVM n'aurait aidé.

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

  • Qu'est-ce qu'un safepoint, et pourquoi l'atteindre peut-il prendre longtemps ?
  • Comment réduiriez-vous le taux d'allocation sur un chemin de requête très sollicité ?
  • Comment le throttling CPU d'un conteneur se manifeste-t-il dans les métriques JVM ?

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