Interviewfrage für Java-Entwickler

Wie entscheidest du zwischen einer Checked und einer Unchecked Exception, und wie behandelst du Exceptions in einem Service?

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

Kurzantwort

Nimm eine Checked Exception nur dann, wenn der Aufrufer realistisch reagieren kann und du willst, dass der Compiler eine Entscheidung erzwingt; nimm Unchecked für Programmierfehler und für Fehler, die niemand weiter oben beheben kann. In der Praxis tendiert moderner Java-Code zu Unchecked, wobei Low-Level-Fehler in eine Domain-Exception mit Kontext gewrappt werden, die einmal an einer Grenze behandelt wird, etwa in einem Exception-Handler, der sie auf eine Response mappt.

Warum Interviewer das fragen

Der Interviewer sucht Urteilsvermögen und Gewohnheiten, die Codebases ruinieren: Exception fangen und loggen, eine Exception in einen leeren Block schlucken oder alles ohne Kontext in RuntimeException wickeln. Sie wollen außerdem von einer einzigen Übersetzungsschicht hören, denn try-catch quer durch die Businesslogik ist genau das, was Fehler unauffindbar macht. Lambdas und Streams machen Checked Exceptions wirklich unhandlich, und das ist erwähnenswert.

So baust du deine Antwort auf

  • Gib den Recoverability-Test für die Wahl zwischen beiden an.
  • Erklär das Wrappen mit Kontext statt rohes Weiterwerfen der Ursache.
  • Beschreib die Behandlung in einer Grenzschicht, nicht überall.
  • Zähl die Antipatterns auf, die du im Review nicht durchgehen lässt.

Beispielantwort

Gesprochenes Beispiel, erste Person

Mein Test ist, ob ein Aufrufer damit etwas Sinnvolles anfangen kann. Eine vom Provider abgelehnte Zahlung ist ein legitimes fachliches Ergebnis, das ist also entweder eine Checked Exception oder, häufiger, ein Result-Typ. Ein null-Argument oder eine fehlgeschlagene Datenbankverbindung kann der aufrufende Code nicht beheben, das ist also Unchecked. In Services nehme ich überwiegend Unchecked Domain-Exceptions und wrappe die zugrunde liegende Ursache, damit der Stacktrace erhalten bleibt, und hänge die Identifier dran, die ich später im Log haben will, etwa die Order-Id, denn eine nackte SQL-Exception drei Schichten tiefer sagt mir nichts. Behandelt wird einmal, an einer Grenze: in Spring ist das ein Exception-Handler, der jede Domain-Exception auf einen Statuscode und einen Response-Body mappt, damit die Controller sauber bleiben. Wogegen ich mich im Review wehre: breit Exception fangen, fangen und loggen und dann weitermachen, als wäre nichts gewesen, und leere catch-Blöcke. Ich nutze außerdem überall try-with-resources statt finally-Blöcken, weil Suppressed Exceptions und Fehler beim Schließen damit gratis korrekt behandelt werden.

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

  • Wie gehst du mit einer Checked Exception innerhalb eines Stream-Lambdas um?
  • Wann würdest du einen Result-Typ zurückgeben statt zu werfen?
  • Welchen Kontext hängst du an eine Exception, damit sie im Log nützlich ist?

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