Interviewfrage für Java-Entwickler

Wie würdest du drei unabhängige Remote-Calls gleichzeitig ausführen und die Ergebnisse zusammenführen?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Entweder du schickst sie an einen Executor mit Virtual Threads und joinst die Ergebnisse, oder du komponierst sie mit CompletableFuture über supplyAsync auf einem expliziten Executor und allOf zum Warten. Setz ein Timeout auf die kombinierte Operation, behandle Teilausfälle bewusst und brich die Geschwister ab, wenn einer fehlschlägt. Structured Concurrency mit einem Task Scope drückt genau diese Form aus und bindet die Lebensdauer der Subtasks an den Block, ist aber immer noch eine Preview-API.

Warum Interviewer das fragen

Fan-out und Join ist die häufigste Nebenläufigkeitsform in einem Service, und der Interviewer will sehen, dass du die unglamourösen Teile beherrschst: auf welchem Executor die Arbeit läuft, was passiert, wenn ein Call fehlschlägt oder hängt, und ob die anderen Calls abgebrochen werden. Zu wissen, dass der Default-Pool für Asynchrones der geteilte Common Pool ist und warum ein eigener Executor wichtig ist, ist genau das Detail, das echten Einsatz von Tutorial-Einsatz trennt.

So baust du deine Antwort auf

  • Wähl einen Ansatz und sag, wo die Tasks tatsächlich laufen.
  • Führ die Ergebnisse zusammen und setz ein Gesamt-Timeout.
  • Leg die Policy für Teilausfälle explizit fest.
  • Erwähne Structured Concurrency als die klarere moderne Form.

Beispielantwort

Gesprochenes Beispiel, erste Person

Mit Virtual Threads ist das einfach geworden: ich öffne einen Executor, der pro Task einen Thread erzeugt, schicke die drei Calls rein und joine dann jedes Future. Es liest sich sequenziell, die Calls überlappen sich aber, und jeder hat sein eigenes Client-Timeout. Bin ich in einer älteren Codebase, nehme ich CompletableFuture mit supplyAsync und übergebe immer meinen eigenen Executor, denn der Default ist der Common ForkJoinPool, der für CPU-Arbeit dimensioniert ist und von allem im Prozess geteilt wird. Dann allOf zum Warten und ein Timeout auf dem kombinierten Future, damit eine hängende Abhängigkeit den Request nicht ewig festhält. Am längsten denke ich über Teilausfälle nach: wenn der Call für die Empfehlungen fehlschlägt, lasse ich die ganze Seite scheitern oder rendere ich ohne sie? Meistens lautet die Antwort degradieren, dieses Future bekommt also einen exceptionally-Handler, der eine leere Liste zurückgibt, während die essenziellen Calls den Fehler weiterreichen. Structured Concurrency drückt das viel besser aus, denn ein Scope joint alle Subtasks und bricht den Rest ab, wenn einer fehlschlägt oder die Deadline reißt, und ich nutze es dort, wo eine Preview-API akzeptabel ist.

Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.

So funktioniert es

Nachfragen, mit denen du rechnen solltest

  • Welchen Executor nutzt supplyAsync, wenn du keinen übergibst?
  • Wie brichst du die anderen Calls ab, wenn einer fehlschlägt?
  • Was ist der Unterschied zwischen thenApply und thenCompose?

Weitere Fragen für Java-Entwickler

Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.

Meine Fragen vorhersagen

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen