Java-Interviews haben den Ruf, Trivia abzufragen, und teilweise zu Recht. Die guten sind darüber hinweg. Was ein kompetentes Panel heute prüft, ist, ob du verstehst, was die Laufzeitumgebung unter deinem Code tut: wo der Speicher hin ist, warum die Pause kam, was das Framework in deinem Namen generiert hat und was kaputtgeht, wenn zwei Threads gleichzeitig an derselben Zeile ankommen. Hier sind die Fragen, die immer wieder auftauchen, worauf jede abzielt und wie eine starke Antwort gebaut ist.
Das sind die Muster für die Rolle allgemein. Wenn du die Shortlist für ein konkretes Gespräch willst, füg die echte Stellenanzeige in den kostenlosen Question Predictor ein und hol dir die zwanzig Fragen, die in genau diesem Loop am wahrscheinlichsten kommen.
Was prüfen Java-Interviews wirklich?
Fünf Bereiche, verlässlich: JVM- und Speicherverhalten, Garbage Collection, das Collections-Framework in echter Tiefe, Nebenläufigkeit und das Framework, in dem das Team lebt, was fast immer Spring ist. Darunter liegt eine Frage, die niemand laut ausspricht: Wenn sich dieser Service um 2 Uhr nachts in Produktion danebenbenimmt, kriegst du raus, warum?
Die Tiefe skaliert stark mit der Seniorität. Ein Junior braucht korrekte Mechanik; ein Mid-Level-Kandidat braucht Abwägungen und Diagnose; von einem Senior wird erwartet, über Heap-Dimensionierung, Collector-Wahl und Thread-Pool-Konfiguration zu argumentieren, mit Geschichten aus der Produktion dazu. Eines hat sich wirklich geändert: Boilerplate ist inzwischen gratis, Panels verbringen also weniger Zeit damit, dich einen Builder schreiben zu lassen, und mehr damit, zu fragen, warum eine Transaktion nicht zurückgerollt ist.
Wie läuft der Java-Interviewprozess ab?
Ein typischer Loop hat vier bis sechs Stufen: ein Recruiter-Gespräch, ein technisches Screening, das Coding mit Grundlagen mischt, eine längere Coding-Runde, eine Design-Runde und ein Gespräch mit der einstellenden Führungskraft. Konzerne und Beratungen setzen auf Grundlagen und Spring; Produktfirmen gewichten Design und Nebenläufigkeit. Take-Home-Aufgaben sind in mittelgroßen Firmen üblich und drehen sich meist um einen kleinen Spring-Service.
- Recruiter-Gespräch (20 bis 30 Minuten). Version, Framework, Größenordnung, Gehaltsspanne. Wisse, welche Java-Version eure Codebasis anpeilt, denn "die neueste" zu sagen und dann nicht zu wissen, was ein Record ist, geht schief.
- Technisches Screening (45 bis 60 Minuten). Coding in einem geteilten Editor plus schnelle Grundlagen: Collections, Exceptions, Unveränderlichkeit, Streams.
- Coding-Runde (60 Minuten). Eine praktische Aufgabe statt eines Rätsels: eine Datei parsen und aggregieren, einen kleinen Cache implementieren, einen threadsicheren Zähler schreiben.
- Design-Runde (60 Minuten). Service-Design oder eine objektorientierte Aufgabe, bei Senior-Loops mit Kapazität und Fehlerfällen obendrauf.
- Framework- und Tiefenrunde. Spring-Verhalten, Transaktionen, Testing, manchmal eine Review-Aufgabe, in der du eine absichtlich fehlerhafte Klasse kritisierst.
- Einstellende Führungskraft oder Verhaltensfragen. Vorfälle, Meinungsverschiedenheiten, Mentoring und ob dein angegebenes Level Details standhält.
Wenn du weißt, bei welcher Firma du im Gespräch bist, sind die Fragenkataloge der Unternehmen der schnellere Weg zum Hausstil als Foren zu durchforsten, denn gerade große Beratungen fahren ein sehr gleichbleibendes Skript.
Welche Fragen zu JVM und Speicher solltest du erwarten?
Erwarte, dass du den Weg vom Quellcode zum laufenden Programm erklärst und die Speicherbereiche, in denen deine Objekte leben. Das Panel prüft, ob die JVM für dich eine Blackbox ist. Deck die Kompilierung zu Bytecode ab, das Class Loading, die Interpretation gefolgt von Just-in-Time-Kompilierung heißer Pfade und die Aufteilung in Heap, Thread-Stacks und Metaspace, ohne dass es zum Aufsagen wird.
Erklär mir, was zwischen dem Schreiben einer Klasse und ihrer Ausführung passiert. Worauf es abzielt: ob du die Laufzeitumgebung verstehst, auf der du deployst. Geh der Reihe nach vor: javac erzeugt Bytecode, der Class Loader lädt und linkt ihn (Parent Delegation lohnt sich zu benennen), der Interpreter beginnt auszuführen, und der JIT-Compiler optimiert Methoden, sobald sie heiß sind, mit Inlining und Deoptimierung als realem Verhalten.
Erklär die Speicherbereiche der JVM. Worauf es abzielt: ob du ein Speicherproblem verorten kannst. Der Heap hält Objekte und ist der Ort, an dem gesammelt wird; jeder Thread bekommt einen Stack für Frames und lokale Variablen; der Metaspace hält Klassen-Metadaten außerhalb des Heaps. Nativer Speicher, den Buffer nutzen, liegt außerhalb von allen dreien, und genau deshalb kann ein Container gekillt werden, während der Heap gesund aussieht.
Wie würdest du einen OutOfMemoryError in Produktion diagnostizieren? Worauf es abzielt: echte Betriebserfahrung. Frag zuerst, welcher OutOfMemoryError, denn Heap Space, Metaspace und fehlgeschlagene Thread-Erzeugung haben verschiedene Ursachen. Dann einen Heap-Dump bei Fehler ziehen, den Dominator Tree danach durchsehen, was die Retained Set festhält, und die GC-Logs auf stetiges Wachstum gegenüber einem Ausreißer prüfen.
Welche Fragen zur Garbage Collection kommen?
GC-Fragen prüfen, ob du Pausenzeit gegen Durchsatz abwägen kannst. Fang bei der Generationshypothese an (die meisten Objekte sterben jung), erklär, dass junge Collections billig sind und volle nicht, und behandle die Wahl des Collectors als Anforderungsentscheidung statt als Lieblingsthema. Behaupte nie, ein Tuning-Flag repariere ein Problem, das du nicht gemessen hast.
Wie funktioniert Garbage Collection tatsächlich? Worauf es abzielt: Mechanik, nicht Vokabular. Beschreib Erreichbarkeit von den GC Roots aus statt Referenzzählung, die Aufteilung in junge und alte Generation, Minor Collections, die Überlebende befördern, und Stop-the-World-Pausen als das, was tatsächlich wehtut.
Wie wählst du zwischen den verfügbaren Collectors? Worauf es abzielt: ob du Werkzeuge auf ein Latenzziel abstimmst. G1 ist der vernünftige Standard für die meisten Serverlasten und zielt auf ein Pausenziel. ZGC und Shenandoah tauschen Durchsatz gegen sehr niedrige Pausen auf großen Heaps, was zählt, wenn 300ms dein Budget sprengen.
Dein Service zeigt 400ms Pausen im 99. Perzentil. Wie gehst du das an? Worauf es abzielt: Messdisziplin. Schalt GC-Logging ein und bestätige, dass die Pausen wirklich GC sind, bevor du irgendetwas anfasst, denn Lock-Contention und langsame nachgelagerte Aufrufe erzeugen ähnliche Ausläufer. Wenn es GC ist, schau zuerst auf die Allokationsrate, denn die meisten Pausenprobleme sind Allokationsprobleme.
Welche Fragen zu Java Collections werden gestellt?
Collections sind der verlässlichste Filter im Loop, weil jeder behauptet, sie zu kennen, und wenige die Interna erklären können. Sei bereit zu beschreiben, wie HashMap implementiert ist, warum der Vertrag zwischen equals und hashCode nicht optional ist, wann eine LinkedList wirklich die richtige Wahl ist (selten) und wie sich die nebenläufigen Collections von einem synchronisierten Wrapper unterscheiden.
Wie funktioniert HashMap intern? Worauf es abzielt: Tiefe. Deck das Hashen des Schlüssels ab, das Streuen der Bits, die Indizierung in ein Bucket-Array, das Verketten von Kollisionen in eine Liste, die zu einem balancierten Baum wird, sobald ein Bucket lang wird, und das Vergrößern beim Load Factor durch Rehashing in ein größeres Array.
Was ist der Vertrag zwischen equals und hashCode, und was geht kaputt, wenn du ihn verletzt? Worauf es abzielt: ob du das je debuggt hast. Gleiche Objekte müssen gleiche Hash-Codes liefern; ungleiche Objekte dürfen kollidieren. Brich das, und ein Objekt, das du in ein HashSet gelegt hast, wird unauffindbar, weil die Suche im falschen Bucket landet.
ArrayList oder LinkedList: Wann würdest du wirklich zur LinkedList greifen? Worauf es abzielt: ob du Lehrbuch-Komplexität nachplapperst oder an Hardware denkst. Big O spricht beim Einfügen für LinkedList, aber in der Praxis gewinnt ArrayList bei fast allen Lasten, weil zusammenhängender Speicher cachefreundlich ist und Zeigerverfolgung nicht. LinkedList ist vor allem als Deque vertretbar, und dort schlägt ArrayDeque sie meistens.
ConcurrentHashMap oder eine synchronisierte Map: Wo ist der Unterschied? Worauf es abzielt: Verständnis von Contention. Ein synchronisierter Wrapper serialisiert jede Operation über ein Lock; ConcurrentHashMap erlaubt nebenläufige Lesezugriffe und Schreibzugriffe mit Lock Striping, was unter Last weit besseren Durchsatz gibt.
Welche Fragen zur Nebenläufigkeit stellen Java-Interviewer?
Nebenläufigkeit trennt Mid von Senior schneller als jedes andere Thema. Erwarte Sichtbarkeit gegen Atomarität, Thread-Pool-Konfiguration, Deadlocks und zunehmend Virtual Threads. Die stärksten Antworten vermeiden Abstraktion: Beschreib den konkreten Fehlerfall, einen veralteten Lesezugriff, ein verlorenes Update oder einen Pool, der von blockierten Tasks erschöpft ist, statt Schlüsselwort-Definitionen aufzusagen.
Was garantiert volatile, und was nicht? Worauf es abzielt: das Speichermodell. Volatile garantiert Sichtbarkeit und Reihenfolge: Ein Schreibzugriff wird von anderen Threads gesehen, und Umsortierung darüber hinweg ist eingeschränkt. Es garantiert keine Atomarität, ein Inkrement eines volatile-Zählers ist also weiterhin ein Lost-Update-Bug, weil Lesen, Addieren und Schreiben drei Operationen sind.
Wie dimensionierst du einen Thread-Pool, und was ist an den bequemen Factory-Methoden falsch? Worauf es abzielt: ob du einen Pool schon mal scheitern gesehen hast. Ein fixer Pool aus der bequemen Factory nutzt eine unbeschränkte Queue, sammelt unter Überlast also Tasks an, bis der Heap stirbt, statt Gegendruck zu erzeugen. Bau ihn explizit mit einer beschränkten Queue und einer Ablehnungsstrategie, dimensioniert nach Art der Last.
Was verursacht einen Deadlock und wie verhinderst du ihn? Worauf es abzielt: Präzision plus Praxis. Ein Deadlock braucht wechselseitigen Ausschluss, Halten und Warten, keine Verdrängung und einen zirkulären Wartezyklus, und du brichst ihn, indem du eine Bedingung entfernst, meist über eine globale Lock-Reihenfolge.
Wofür sind Virtual Threads da, und wann helfen sie nicht? Worauf es abzielt: ob du auf dem aktuellen Stand bist. Sie machen blockierendes IO billig, du kannst also geradlinigen blockierenden Code bei hoher Nebenläufigkeit schreiben, statt ihn in asynchrone Ketten zu verbiegen. Sie beschleunigen CPU-gebundene Arbeit nicht, und sie zu poolen, macht den Sinn zunichte.
Welche Fragen zu Spring und Spring Boot kommen?
Spring-Fragen prüfen, ob du verstehst, was das Framework für dich generiert. Erwarte Grundlagen der Dependency Injection, wie Auto-Configuration entscheidet, was verdrahtet wird, Transaktionsverhalten und Fehlerbehandlung in einer REST-Schicht. Die Transaktionsfrage ist der klassische Senior-Filter, denn die Arten, wie eine Annotation still nichts tut, sind genau die Arten, wie echte Bugs in Produktion landen.
Erklär Dependency Injection und warum Konstruktor-Injection bevorzugt wird. Worauf es abzielt: ob du Inversion of Control verstehst oder nur Dinge annotierst. Konstruktor-Injection macht Abhängigkeiten explizit und verpflichtend, erlaubt finale Felder und macht die Klasse ohne Container testbar. Feld-Injection versteckt Abhängigkeiten, lässt zirkuläre Referenzen unbemerkt überleben und braucht Reflection zum Testen.
Wie funktioniert @Transactional tatsächlich, und wann greift es stillschweigend nicht? Worauf es abzielt: Proxies. Spring hüllt die Bean in einen Proxy, der um den Aufruf herum eine Transaktion öffnet und committet, was heißt, dass Selbstaufrufe (eine Methode, die eine andere annotierte Methode derselben Klasse aufruft) den Proxy komplett umgehen und ganz ohne Transaktion laufen.
Was macht Auto-Configuration? Worauf es abzielt: ob die Magie verstanden oder gefürchtet wird. Spring Boot wertet bedingte Konfiguration gegen das aus, was im Classpath liegt und was du bereits definiert hast, das Hinzufügen einer Abhängigkeit verdrahtet also sinnvolle Standards, und eine eigene Bean zu deklarieren, schaltet den Standard ab. Der Conditions Report zeigt genau, was gegriffen hat, und ist der schnellste Weg, eine überraschende Bean zu erklären.
Wie behandelst du Fehler in einer Spring-REST-API? Worauf es abzielt: Konsistenz. Zentralisier es mit einem Controller Advice, der Exception-Typen auf Statuscodes und einen stabilen Fehlerkörper abbildet, halte Stacktraces aus den Antworten heraus und trenn Client-Fehler sauber von Server-Fehlern.
Welche Sprach- und Designfragen werden weiterhin gestellt?
Erwarte eine Handvoll Sprachfragen als Kalibrierung: Exceptions, Unveränderlichkeit und die neueren Ergänzungen. Halt die Antworten kurz und praktisch. Das Panel prüft, ob deine Meinungen in der Nutzung gegründet und nicht aufgesagt sind, häng also jede an eine Entscheidung, die du wirklich in einer Codebasis getroffen hast.
Checked oder unchecked Exceptions: Was ist deine Position? Worauf es abzielt: Geschmack im API-Design. Checked Exceptions zwingen den Aufrufer, eine behebbare Situation zu behandeln, aber sie verschmutzen Signaturen und werden in der Praxis verschluckt, und genau deshalb bevorzugen die meisten modernen Codebasen unchecked Exceptions mit einer klaren Grenze, die sie übersetzt.
Welches Problem lösen Records und Sealed Types? Worauf es abzielt: Aktualität in der Sprache. Records geben dir knappe unveränderliche Datenträger mit generiertem equals, hashCode und toString und räumen eine ganze Klasse handgeschriebener Bugs weg. Sealed Types beschränken die erlaubten Implementierungen, was Pattern Matching in switch erschöpfend und zur Compile-Zeit prüfbar macht.
Welche Fehler versenken Java-Kandidaten?
Fast alle sind Tiefenprobleme. Java-Panels bohren zwei oder drei Ebenen unter die Definition, ein Kandidat, der Vokabular auswendig gelernt, aber nie einen Heap-Dump oder Thread-Dump gelesen hat, fliegt also bei der Nachfrage auf und nicht bei der ersten Antwort. Das sind die wiederkehrenden Muster.
- Definitionen aufsagen ohne Mechanik. "Volatile macht es threadsicher" fällt durch. Sag, was es garantiert und was nicht.
- Die Laufzeitumgebung ignorieren. Ein Kandidat, der nicht beschreiben kann, wo Speicher hingeht oder was eine Pause auslöst, kann Produktion nicht debuggen, so sauber sein Code auch ist.
- Spring als Magie behandeln. Nicht zu wissen, dass Transaktionen über Proxies laufen, ist die mit Abstand häufigste Lücke auf Senior-Level.
- Lehrbuch-Komplexität statt echtem Verhalten. Die LinkedList-Antwort direkt aus dem Lehrbuch verrät jemanden, der nie etwas gemessen hat.
- Schweigen beim Coden. Panels kaufen deine Denkweise. Erzähl beim Tippen den Ansatz, die Randfälle und die Abwägung mit.
- Veraltetes Wissen. Wenn das Team auf einer aktuellen LTS ist und du noch nie von Records oder Virtual Threads gehört hast, liest sich das wie jemand, der aufgehört hat zu lernen.
Wie bereitest du dich auf ein Java-Interview vor?
Nimm dir die drei Bereiche vor, die das Panel garantiert abklopft (Collections-Interna, Nebenläufigkeit und das Framework, das die Stellenbeschreibung nennt), und bring sie so weit, dass du sie ohne Notizen erklären kannst. Lies einmal die GC-Logs und einen Thread-Dump deines eigenen Services, damit diese Antworten aus Erfahrung kommen und nicht aus Lektüre. Üb dann zwei Geschichten aus der Produktion, eine über Speicher oder Latenz und eine über eine Meinungsverschiedenheit.
Vor dem Loop selbst fügst du die echte Stellenanzeige in den kostenlosen Question Predictor ein und arbeitest die zwanzig Fragen durch, die er für genau diese Rolle markiert, denn ein Trading-Team mit niedriger Latenz und eine Enterprise-Spring-Bude teilen sich eine Sprache und sonst fast nichts.
Für die Live-Runden ist GhostPilot ein Interview-Copilot in Echtzeit: ein Seitenpanel als Chrome-Erweiterung und eine optionale Windows-Desktop-App, die den Call transkribieren, die Frage im Moment ihres Eintreffens greifen und rund zwei Sekunden später eine strukturierte Antwort bereit haben. Am meisten hilft es bei Fragen mit einer Falle darin, etwa der zur Transaktion. Es ist ein Stichwort und kein Skript, und das Detail aus der Produktion muss weiterhin von dir kommen. Der Gratis-Tarif gibt dir 10 Minuten Live-Gesprächszeit pro Woche, ohne Karte.
Java-Interview-FAQ
Wie lange sollte ich mich auf ein Java-Entwickler-Interview vorbereiten? Zwei bis drei Wochen für eine Mid-Level-Rolle, wenn du täglich Java schreibst: eine Woche Grundlagen und Collections, eine Woche Nebenläufigkeit und Framework-Verhalten, ein paar Tage für Geschichten.
Welche Java-Version sollte ich für Interviews 2026 kennen? Kenn die LTS, die deine Zielfirma fährt, und was die neueren Releases gebracht haben, besonders Records, Sealed Types, Pattern Matching in switch und Virtual Threads. Viele Konzerne sind noch auf einer älteren LTS, sei also ehrlich dazu, was du wirklich genutzt hast.
Wie viel Spring brauche ich? Wenn die Stelle Spring nennt, behandle es als erstrangiges Thema statt als Fußnote. Dependency Injection, Auto-Configuration, Transaktionen und Testing kommen in fast jedem Spring-Loop, und bei der Transaktionsfrage verlieren Kandidaten die Runde am häufigsten.
Soll ich zugeben, wenn ich etwas nicht weiß? Ja. "Diesen Collector habe ich in Produktion nicht getunt, aber so würde ich rangehen und das würde ich zuerst messen" schlägt eine selbstbewusst falsche Antwort. Java-Panels bohren bei Nachfragen zwei oder drei Ebenen tief, Bluffen bricht also schnell zusammen.