Kotlin-Vorstellungsgespräch: 5 Fallstricke und 7 Tricks für den Sieg

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Kotlin: Volltreffer oder daneben?

\n

Kotlin ist nicht einfach "Java ohne Boilerplate". Es ist eine Sprache, die Google ins Herz geschlossen hat, Swift beim Wachstum überholt hat und in Stellenausschreibungen für mobile Entwickler obligatorisch geworden ist. Aber hier ist das Paradoxon: Viele kommen mit dem Gedanken "Ich kann Java – ich werde klarkommen" zum Vorstellungsgespräch und gehen mit roten Augen wieder. Denn Kotlin ist eine andere Welt: ohne null, mit Coroutinen und Erweiterungsfunktionen, die Muster durchbrechen.

\n

Wir bei PythonLib (ja, wir sind für Python, aber Kotlin ist ein Must-have für modernes Backend und Mobile) haben einen echten Fall zusammengestellt: wie man das Kotlin-Vorstellungsgespräch mit Bravour besteht. Kein Wasser – nur Code, Logik und geheime Tricks, über die in Kursen geschwiegen wird.

\n\n

1. Warum ist Kotlin nicht einfach "Java 2.0"?

\n

Die erste Frage, die Ihnen gestellt wird: "Was ist der grundlegende Unterschied zwischen Kotlin und Java?". Wenn Sie "die Syntax ist kürzer" sagen, werden Sie höflich gebeten zu gehen. Der Hauptunterschied ist null safety auf Typebene. In Java können Sie vergessen, ein Objekt auf null zu prüfen, und erhalten zur Laufzeit eine NPE. In Kotlin lässt der Compiler Sie den Code gar nicht erst kompilieren, wenn ein Null-Risiko besteht.

\n
// Java\nString name = null;\nint length = name.length(); // NPE zur Laufzeit\n\n// Kotlin\nvar name: String? = null\nval length = name?.length ?: 0 // Sicher: length = 0
\n

Aber das ist die Basis. Der Interviewer wird tiefer graben: nach !! (non-null assertion), dem Elvis-Operator ?: und sicheren Aufrufen ?. fragen. Ihre Aufgabe ist es zu zeigen, dass Sie verstehen: !! ist böse, und ?: ist Ihr Freund.

\n
    \n
  • Safe call (?.) – wenn das Objekt null ist, wird null zurückgegeben.
  • \n
  • Elvis (?:) – wenn links null steht, nehmen wir den Wert rechts.
  • \n
  • !! – verwenden Sie nur, wenn Sie zu 100% sicher sind, sonst – ein Bug.
  • \n
\n\n

2. Extension functions: Magie, die erklärt werden muss

\n

Frage: "Wie fügt man einer Klasse eine Methode hinzu, die man nicht ändern kann?". In Java – Decorator-Muster oder Util-Klasse. In Kotlin – extension functions. Es ist keine echte Änderung der Klasse, sondern syntaktischer Zucker, der den Code lesbar macht.

\n
// Extension function für String\nfun String.isEmail(): Boolean {\n    return this.contains("@") && this.contains(".")\n}\n\n// Verwendung\nval email = "user@pythonlib.ru"\nprintln(email.isEmail()) // true
\n

Der Interviewer könnte fragen: "Kann man eine extension function überschreiben?". Antwort: nein, es ist ein statischer Aufruf, kein dynamischer. Wenn Sie eine Funktion mit demselben Namen in der Klasse deklarieren, hat die Klassenmethode Vorrang.

\n\n

3. Sealed class vs Enum: Wann verwendet man was?

\n

Das ist eine klassische Frage auf Middle-Niveau. Enum – für einen festen Satz von Konstanten (Wochentage, Status). Sealed class – für eine begrenzte Typhierarchie, bei der jedes Element seinen eigenen Zustand haben kann.

\n
sealed class Result {\n    data class Success(val data: String) : Result()\n    data class Error(val code: Int, val message: String) : Result()\n    object Loading : Result()\n}\n\nfun handleResult(result: Result) {\n    when (result) {\n        is Result.Success -> println("Data: ${result.data}")\n        is Result.Error -> println("Error ${result.code}: ${result.message}")\n        Result.Loading -> println("Loading...")\n    }\n}
\n

Warum ist das wichtig? Weil when mit sealed class garantiert, dass Sie alle Fälle behandelt haben. Der Compiler lässt Sie nicht vergessen, einen neuen Typ zu behandeln, wenn Sie ihn zur sealed class hinzufügen.

\n\n

4. Coroutinen: Wie man in der Asynchronität nicht scheitert

\n

Das Thema, an dem 70% der Kandidaten scheitern. Coroutinen sind keine Threads. Es sind leichtgewichtige "Fäden", die pausieren können, ohne den Thread zu blockieren.

\n
suspend fun fetchData(): String {\n    delay(1000) // Blockiert den Thread nicht!\n    return "Data from PythonLib"\n}\n\nfun main() = runBlocking {\n    launch {\n        val result = fetchData()\n                

Blogs

Buchempfehlungen