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

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

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

Собеседование по Kotlin — это не просто проверка синтаксиса. Работодатели хотят видеть, что вы понимаете философию языка: нулевую безопасность, функциональный стиль, идиомы и особенности компиляции. В этой статье мы разобрали самые частые вопросы — от базовых до продвинутых. Подготовьтесь к интервью на 100%.

1. Базовые вопросы: синтаксис и null safety

Начинают собеседование обычно с основ. Вот что нужно знать обязательно.

Какие типы данных есть в Kotlin и чем они отличаются от Java?

Kotlin — статически типизированный язык. Все типы — объекты, нет примитивов (но компилятор может оптимизировать). Основные типы: Int, Double, Boolean, String, Array. В отличие от Java, в Kotlin нет new для создания объектов, а типы nullable явно помечаются знаком ?.

Что такое null safety и как Kotlin её реализует?

Null safety — встроенная защита от NullPointerException. Типы делятся на nullable (String?) и non-null (String). Для безопасного доступа используйте операторы:

val name: String? = null
println(name?.length)       // безопасный вызов -> null
println(name?.length ?: 0)  // элвис-оператор -> 0
println(name!!.length)      // принуждение -> NPE, если null

Чем val отличается от var?

  • val — неизменяемая ссылка (read-only). Аналог final в Java.
  • var — изменяемая ссылка (mutable).

Важно: val не гарантирует неизменяемость самого объекта, только ссылки.

2. Продвинутые конструкции: классы, функции и sealed

Здесь проверяют умение писать лаконичный и безопасный код.

Что такое data class и какие методы он генерирует?

data class — класс, предназначенный для хранения данных. Компилятор автоматически генерирует: equals(), hashCode(), toString(), copy(), и componentN().

data class User(val id: Int, val name: String)
val user = User(1, "Alice")
val copy = user.copy(name = "Bob")
println(user) // User(id=1, name=Alice)

Что такое sealed class и когда их использовать?

sealed class — ограниченная иерархия классов. Все подклассы должны быть объявлены в том же файле. Идеально для представления состояний (например, результат загрузки).

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

fun handle(result: Result) = when (result) {
    is Result.Success -> println(result.data)
    is Result.Error -> println(result.message)
    Result.Loading -> println("Loading...")
}

Преимущество: when должен быть исчерпывающим — компилятор проверит все варианты.

Что такое extension functions и как они работают?

Extension functions позволяют добавить новый метод к существующему классу без наследования. На самом деле это статические функции, которые принимают экземпляр класса как первый аргумент.

fun String.isEmail(): Boolean = this.contains("@")
println("test@mail.ru".isEmail()) // true

3. Функциональное программирование: лямбды, коллекции, области видимости

Kotlin активно использует функциональный подход. Будьте готовы к вопросам про работу с коллекциями и скоуп-функции.

Какие скоуп-функции вы знаете? Чем они отличаются?

Основные: let, run, with, apply, also. Главное различие — контекст (this или it) и возвращаемое значение.

ФункцияКонтекстВозвращает
letitрезультат лямбды
runthisрезультат лямбды
withthisрезультат лямбды
applythisобъект (контекст)
alsoitобъект (контекст)
val numbers = mutableListOf(1,2,3)
numbers.apply { add(4) }          // возвращает numbers
numbers.also { it.add(5) }        // возвращает numbers
numbers.let { it.size }           // возвращает Int

Как работают лямбды и функции высшего порядка?

Лямбда — анонимная функция. Функции высшего порядка принимают или возвращают лямбды. Пример:

fun operate(a: Int, b: Int, op: (Int, Int) -> Int): Int = op(a, b)
val sum = operate(5, 3) { x, y -> x + y }
println(sum) // 8

Часто используется it для одного параметра: list.filter { it > 0 }.

Какие методы работы с коллекциями наиболее популярны?

  • map — преобразование элементов
  • filter — фильтрация по условию
  • flatMap — разворачивание вложенных коллекций
  • fold / reduce — агрегация
  • groupBy — группировка
val list = listOf(1,2,3,4,5)
val evenSquares = list.filter { it % 2 == 0 }.map { it * it }
println(evenSquares) // [4, 16]

4. Корутины и асинхронность

Корутины — одна из ключевых фич Kot

Блоги

Рекомендаций по книгам