Question d'entretien pour Développeur Java

Comment lanceriez-vous trois appels distants indépendants en même temps et combineriez-vous les résultats ?

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

Réponse rapide

Soit vous les soumettez à un executor de threads virtuels et vous joignez les résultats, soit vous les composez avec CompletableFuture en utilisant supplyAsync sur un executor explicite et allOf pour attendre. Posez un délai d'expiration sur l'opération combinée, traitez l'échec partiel de façon délibérée, et annulez les autres appels quand l'un échoue. La concurrence structurée avec un task scope exprime exactement cette forme et lie la durée de vie des sous-tâches au bloc, même si l'API est encore en preview.

Pourquoi les recruteurs posent cette question

L'éclatement puis la jonction est la forme de concurrence la plus courante dans un service, et le recruteur veut voir si vous gérez les parties ingrates : sur quel executor le travail s'exécute, ce qui arrive quand un appel échoue ou traîne, et si les autres appels sont annulés. Savoir que le pool asynchrone par défaut est le pool commun partagé, et pourquoi fournir son propre executor compte, est le détail qui sépare l'usage réel de l'usage de tutoriel.

Comment structurer votre réponse

  • Choisissez une approche et dites où les tâches s'exécutent réellement.
  • Combinez les résultats et posez un délai d'expiration global.
  • Décidez explicitement la politique d'échec partiel.
  • Mentionnez la concurrence structurée comme forme moderne plus claire.

Exemple de réponse

Exemple parlé, à la première personne

Avec les threads virtuels c'est devenu simple : j'ouvre un executor qui crée un thread par tâche, je soumets les trois appels, puis je joins chaque future. Ça se lit comme du séquentiel, mais les appels se chevauchent, et chacun a son propre délai d'expiration client. Sur une base de code plus ancienne j'utilise CompletableFuture avec supplyAsync, et je passe toujours mon propre executor, parce que celui par défaut est le ForkJoinPool commun, dimensionné pour du travail CPU et partagé par tout le processus. Ensuite allOf pour attendre, et un délai d'expiration sur la future combinée pour qu'une dépendance bloquée ne retienne pas la requête indéfiniment. La partie à laquelle je réfléchis le plus, c'est l'échec partiel : si l'appel aux recommandations échoue, est-ce que je fais échouer toute la page ou est-ce que je l'affiche sans elles ? En général la réponse est de dégrader, donc cette future reçoit un handler exceptionally qui renvoie une liste vide, tandis que les appels essentiels propagent l'erreur. La concurrence structurée exprime bien mieux tout ça, puisqu'un scope joint toutes les sous-tâches et annule le reste quand l'une échoue ou que l'échéance passe, et je l'utilise là où une API en preview est acceptable.

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

  • Quel executor supplyAsync utilise-t-il si vous ne lui en passez pas ?
  • Comment annulez-vous les autres appels quand l'un échoue ?
  • Quelle est la différence entre thenApply et thenCompose ?

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