So bereitest du dich auf ein Kotlin-Vorstellungsgespräch vor: Die wichtigsten Fragen mit Beispielen
Kotlin hat sich fest als moderne Sprache für die Android-Entwicklung und das Backend auf der JVM etabliert. Wenn du dich auf ein technisches Interview vorbereitest, ist es wichtig, nicht nur die Syntax zu kennen, sondern auch die Philosophie der Sprache zu verstehen: Sicherheit, Prägnanz und Kompatibilität mit Java. In diesem Artikel analysieren wir die wichtigsten Fragen, die in Kotlin-Vorstellungsgesprächen am häufigsten gestellt werden, mit echten Codebeispielen.
1. Null Safety: Wie Kotlin das Null-Problem löst
Einer der Hauptvorteile von Kotlin ist der eingebaute Schutz vor NullPointerException. Im Vorstellungsgespräch wirst du auf jeden Fall nach nullable- und non-null-Typen gefragt.
Frage: Was ist der Unterschied zwischen String? und String? Wie arbeitet man sicher mit nullable?
Antwort: Der Typ String garantiert, dass die Variable niemals null sein wird. String? erlaubt null. Für den sicheren Zugriff werden die Operatoren ?., ?: (Elvis) und !! (nur wenn du dir zu 100% sicher bist) verwendet.
fun main() { val name: String? = null // Sicherer Aufruf println(name?.length) // null // Standardwert val length = name?.length ?: 0 println(length) // 0 // Erzwungene Extraktion (NPE-Risiko) // println(name!!.length) // Fehler!}Zusatzfrage: Was sind lateinit und lazy?
lateinit— für Variablen, die später initialisiert werden (nurvar).lazy— für delegierte Initialisierung (nurval).
class User { lateinit var email: String val config by lazy { loadConfig() } fun init() { email = "test@example.com" }}2. Koroutinen: Asynchronität ohne Schmerz
Koroutinen (coroutines) sind ein Must-have für modernes Kotlin. Interviewer prüfen das Verständnis von suspend, launch, async und Dispatchern.
Frage: Was ist der Unterschied zwischen launch und async?
Antwort: launch startet eine Koroutine und gibt ein Job zurück (ohne Ergebnis). async gibt ein Deferred zurück, aus dem das Ergebnis über await() abgerufen werden kann.
suspend fun fetchData(): String { delay(1000) return "Daten geladen"}
fun main() = runBlocking { // launch: ohne Ergebnis val job = launch { println("Aufgabe 1 erledigt") } // async: mit Ergebnis val deferred = async { fetchData() } println(deferred.await()) // "Daten geladen" job.join()}Frage: Welche Dispatcher (Dispatchers) kennst du?
Dispatchers.Main— für die UI (Android).Dispatchers.IO— für Ein-/Ausgabe, Netzwerk.Dispatchers.Default— für CPU-intensive Aufgaben.Dispatchers.Unconfined— nicht an einen bestimmten Thread gebunden (selten verwendet).
3. Extension functions und Sealed class: Möglichkeiten erweitern
Kotlin ermöglicht es, bestehenden Klassen neue Funktionen hinzuzufügen, ohne Vererbung. Dies wird oft im Kontext der Architektur abgefragt.
Frage: Was sind extension functions? Gib ein Beispiel.
Antwort: Dies sind Funktionen, die außerhalb der Klasse deklariert werden, aber wie ihre Methoden aufgerufen werden. Sie ändern die Klasse nicht, sondern fügen lediglich syntaktischen Zucker hinzu.
// Extension function für Stringfun String.isEmail(): Boolean { return this.contains("@") && this.contains(".")}
fun main() { val email = "user@example.com" println(email.