Kotlin面试:常见问题与通关答案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Как пройти собеседование по Kotlin: топ вопросов



Kotlin прочно занял место основного языка для Android-разработки и активно используется в бэкенде (Ktor, Spring Boot). Собеседование на позицию Kotlin-разработчика — это проверка не только синтаксиса, но и понимания философии языка: null safety, корутин, функционального подхода. В этой статье мы разобрали самые частые вопросы, которые задают на интервью, с примерами кода и пояснениями.



1. Безопасность null: как Kotlin борется с NullPointerException



Один из главных плюсов Kotlin — встроенная защита от null. В отличие от Java, где любая ссылка может быть null, в Kotlin типы разделены на nullable и non-null.



Вопрос: чем отличается ? от !!?

? — оператор безопасного вызова. Если объект null, вызов метода или свойства просто возвращает null без исключения.

val name: String? = nullval length = name?.length  // null, ошибки нет

!! — утверждение non-null. Вы гарантируете, что значение не null. Если оно null — падает NullPointerException.

val length = name!!.length  // NPE при name == null


Вопрос: что такое элвис-оператор ?:?

Позволяет задать значение по умолчанию, если слева null.

val name: String? = nullval display = name ?: "Гость"


Вопрос: как работает let с nullable-типами?

let выполняется только если объект не null. Это идиоматический способ обработки nullable.

name?.let {     println("Имя: $it")}


2. Корутины: асинхронность без боли



Корутины — это легковесные потоки, которые позволяют писать асинхронный код в императивном стиле. На собеседовании проверяют понимание скоупов, диспатчеров и suspend-функций.



Вопрос: чем launch отличается от async?

  • launch — запускает корутину, возвращает Job. Не возвращает результат.
  • async — запускает корутину, возвращает Deferred (аналог Future). Результат получаем через .await().
coroutineScope {    val job = launch { delay(100) }    val deferred = async { 42 }    val result = deferred.await()  // 42}


Вопрос: что такое CoroutineContext и диспатчеры?

CoroutineContext — набор элементов, определяющих поведение корутины (диспатчер, Job, имя). Основные диспатчеры:

  • Dispatchers.Main — для UI (Android).
  • Dispatchers.IO — для ввода-вывода (сеть, файлы).
  • Dispatchers.Default — для CPU-интенсивных задач.


Вопрос: что такое withContext?

Позволяет сменить диспатчер внутри корутины, не меняя скоуп.

suspend fun loadData(): String = withContext(Dispatchers.IO) {    // долгая операция    "Данные"}


3. Классы и объекты: sealed, data, companion



Kotlin предлагает несколько специальных типов классов, которые упрощают типичные паттерны.



Вопрос: что такое sealed class и когда его использовать?

Sealed class — это абстрактный класс с ограниченным набором подклассов. Все наследники известны на этапе компиляции. Идеален для представления состояний (UI State) или результатов операций.

sealed class Result {    data class Success(val data: String) : Result()    data class Error(val message: String) : Result()    object Loading : Result()}

fun handleResult(result: Result) { when (result) { is Result.Success -> println(result.data) is Result.Error -> println(result.message) Result.Loading -> println("Загрузка...") }}

Ветка else не нужна — компилятор знает все варианты.



Вопрос: чем data class отличается от обычного класса?

博客

书籍推荐