Найти в Дзене
Lyakhov Eugene

Теоретические задачи Kotlin

Знание есть, но стресс мешает?
Бесплатное сообщество для прокачки карьеры в IT Подпишись на https://t.me/IT_Interview_Partner_Bot
Подпишись на https://t.me/LyakhovEugene

  1. Что такое Kotlin?
    Kotlin — статически типизированный язык программирования, работающий поверх JVM, а также компилируемый в JavaScript и нативный код (через Kotlin/Native). Разработан компанией JetBrains, полностью совместим с Java, лаконичен, безопасен и поддерживает функциональный стиль.
  2. Назовите ключевые особенности Kotlin.
    Null-безопасность
    Extension-функции
    Data-классы
    Функции высшего порядка и лямбды
    Сопрограммы (coroutines)
    Smart-приведения типов
    Делегирование свойств
    Полная интероперабельность с Java
  3. Как Kotlin обеспечивает null-безопасность?
    Типы разделены на nullable (допускающие null) и non-null (не допускающие).
    Для nullable-типов требуется явная проверка или безопасные вызовы:kotlinvar a: String = "Hello"
    // non-null
    var b: String? = null
    // nullable
    val len = b?.length ?: 0
    // ?. и элвис-оператор ?:
  4. Что такое extension-функции?
    Позволяют «добавить» новую функцию в существующий класс без наследования.kotlinfun String.isEmail(): Boolean = this.contains("@")
    val ok = "test@mail.com".isEmail()
  5. Что такое data class и какие методы он генерирует?
    Класс, предназначенный для хранения данных. Автоматически генерирует equals(), hashCode(), toString(), copy(), и компоненты для деструктуризации.kotlindata class User(val name: String, val age: Int)
  6. Для чего используются sealed-классы?
    Sealed-классы ограничивают иерархию наследования — все подклассы должны быть объявлены в том же файле. Удобны для представления конечных множеств состояний (например, результат выполнения операции: успех, ошибка, загрузка).kotlinsealed class Result { data class Success(val data: String) : Result() }
  7. Чем object отличается от companion object?
    object — синглтон (один экземпляр).
    companion object — объект внутри класса, его члены вызываются как статические (на уровне класса).kotlinclass MyClass { companion object { fun create() = MyClass() } }
    MyClass.create()
  8. Разница между val и var?
    val — неизменяемая ссылка (read-only), присвоить можно только один раз.
    var — изменяемая ссылка.
  9. Что такое первичный конструктор и блоки инициализации?
    Первичный конструктор объявляется в заголовке класса. Блоки init выполняются при создании экземпляра и могут использовать параметры конструктора.kotlinclass Person(val name: String) {
    init { require(name.isNotBlank()) }
    }
  10. Какие модификаторы видимости есть в Kotlin?
    private — виден внутри файла или класса
    protected — внутри класса + наследникам
    internal — виден внутри модуля
    public — везде (по умолчанию)
  11. Как работает when в сравнении с switch в Java?
    when — мощное выражение, может использоваться как оператор и как выражение, возвращающее значение. Поддерживает любые типы, проверки по диапазонам, типам и даже без аргумента.kotlinval result = when (x) {
    1 -> "one"
    in 2..5 -> "several"
    is String -> "string"
    else -> "unknown"
    }
  12. Что такое smart cast (умное приведение)?
    Компилятор автоматически приводит тип, если проверка типа уже прошла. Например, после if (obj is String) внутри блока можно использовать obj.length без явного приведения.
  13. Что такое функции высшего порядка и лямбды?
    Функции, принимающие другие функции как параметры или возвращающие их. Лямбда — анонимная функция.kotlinfun <T> List<T>.filter(predicate: (T) -> Boolean): List<T> { ... }
    list.filter { it > 0 }
  14. Перечислите scope-функции и их различия.
    let, run, with, apply, also.
    let { } — доступ через it, возвращает результат лямбды.
    run { } — доступ через this, возвращает результат.
    with(obj) { } — аналогично run, но вызывается как отдельная функция.
    apply { } — доступ через this, возвращает сам объект.
    also { } — доступ через it, возвращает сам объект.
  15. Что такое корутины и suspend-функции?
    Корутины — легковесные потоки для асинхронного программирования.
    suspend — маркер функции, которая может приостанавливаться без блокировки потока и возобновляться позже.
  16. Как запустить корутину?
    Используя билдеры: launch, async, runBlocking.kotlinGlobalScope.launch { delay(1000); println("Done") }
    val deferred = async { compute() }
  17. Что такое inline-функции и reified типы?
    inline подставляет тело функции в место вызова, уменьшая накладные расходы на лямбды.
    reified позволяет использовать тип-параметр внутри inline-функции как обычный класс (например, T::class.java).
  18. Как работает делегирование свойств (by)?
    Свойство может делегировать свои геттеры/сеттеры другому объекту. Стандартные делегаты:
    lazy {} — ленивая инициализация (val).
    observable {} — слежение за изменениями.
    vetoable {} — с возможностью отмены.
    Можно написать свой делегат.
  19. Чем интерфейс в Kotlin отличается от Java?
    Может содержать абстрактные методы, а также реализации методов (как default в Java 8), но также может иметь абстрактные свойства. Множественное наследование интерфейсов разрешено.
  20. Как перегрузить оператор?
    С помощью ключевого слова operator и соответствующего имени функции (например, plus, minus, get, set).kotlindata class Point(val x: Int, val y: Int) {
    operator fun plus(other: Point) = Point(x + other.x, y + other.y)
    }
  21. Что такое typealias?
    Псевдоним для существующего типа. Улучшает читаемость.kotlintypealias UserMap = Map<String, User>
    typealias Predicate<T> = (T) -> Boolean
  22. Как Kotlin взаимодействует с Java?
    Полная двусторонняя совместимость: Kotlin может вызывать Java-код и наоборот. Особенности:
    Геттеры/сеттеры превращаются в свойства.
    Типы из Java считаются platform type (могут быть null или нет, контроль на программисте).
    Аннотации @JvmStatic, @JvmOverloads, @JvmField управляют генерацией байт-кода.
  23. Что такое use-site target для аннотаций?
    Позволяет указать, к какому именно Java-элементу применить аннотацию (например, @get:Something, @field:JsonIgnore). Используется для точной настройки при взаимодействии с Java-библиотеками.
  24. Что такое Kotlin Multiplatform (KMM)?
    Технология для использования одного Kotlin-кода на нескольких платформах (iOS, Android, сервер, веб). Бизнес-логика пишется один раз, UI — отдельно под каждую платформу.
  25. Какие инструменты сборки поддерживают Kotlin?
    Gradle (официальный плагин Kotlin, Kotlin DSL)
    Maven (через плагин)
    Ant (менее популярно)
    Также есть поддержка в IntelliJ IDEA, Android Studio, VS Code (через плагины).

Страховка на собеседовании

Знание есть, но стресс мешает?
Бесплатное сообщество для прокачки карьеры в IT

Подпишись на https://t.me/IT_Interview_Partner_Bot

Подпишись на
https://t.me/LyakhovEugene