Вопросы на собеседование

Вопросы на собеседование


В главное меню

  1. В чем отличие Data Class от обычного класса?

В Data классе переопределяется:

  • toString
  • equals
  • hashCode
  • Переопределены деструктивные операторы (component1(), component2()...)
  • Переопределен метод copy()

Можно использовать деструктор.

Если не укажем, что это дата класс, то деструктор не получится вызвать, т.к. необходимо чтобы в классе были переопределены методы "component 1" 2 и т.д. Их может быть сколько угодно. И в принципе можем переопределить сами.

class Student(val name: String, val lastName: String, val id: String) {
    operator fun component1() = name
    operator fun component2() = lastName
    operator fun component3() = id
}

operator означает, что это не наша функция, а функция, которая нужна для деструктора.


2. Как работает == и equals?

== сравнивает ссылки объектов

equals сравнивает параметры объекта


Но equals для начала нужно переопределить и указать по каким параметром будет проводиться проверка. Обычно проверяются 3 условия:

  • Сравнивается ссылка на объект - если она одинаковая, то это точно один объект
  • Сравниваются хэш коды. Если они не равны, то это точно разные объекты
  • Сравниваются значения класса по отдельности.

В идее можно автоматически всё это сгенерировать.


3. Модификаторы доступа в Kotlin

private - поля, методы и классы объявленные как private будут доступны только внутри класса. Особенность Kotlin - можно объявлять переменные в файле. Тогда переменная будет доступна только внутри файла. Private - объявленный только внутри класса - доступен внутри класса, а внутри файла - только внутри файла.

public - все методы и поля доступны в любом месте программа. Установлен по умолчанию и указывать его не нужно.

protected - доступен внутри классов, но таже и изнутри классов наследников

internal - видимость внутри одного модуля


4. Классы: вложенный и внутренний классы.

Внутренний класс всегда содержит ссылку на внешний. Для создания требует экземпляр внешнего класса, следовательно у него должна быть ссылка на внешний класс.

Вложенный класс не содержит ссылку на внешний класс. Используется как хелпер класс для внешнего. Не хранит никакого экземпляра для внешнего класса.

В Котлине классы всегда вложены. Надо указывать вручную если класс внутренний.

class Outer {           //Внешний
    class Nested {      //Вложенный
    }

inner class Internal() {    //Внутренний
    fun getOuter(): Outer = this@Outer
}

}

fun main() {
    val outer = Outer()
    val nested = Outer.Nested()
    val internal = outer.Internal()
}

Уточнить для чего это вообще нужно?

5. Как работают Extension функции?

Что происходит под капотом когда мы написали функцию и нажали на build?


6. Singleton

Когда будут проинициализированы поля?

Пока к классу не обратились - поля не будут проинициализированы


7. Что ты используешь из всех возможностей Kotlin?

Элвис

Null Safety

Перегрузка операторов

Оператор Use (автоматом закрывает потоки)


8. В чем разница между Launch методом и Awayt методом?

Разница в том, что они возвращают

Launch возвращает job который можно заканцелить. Джоуб

Await отдает деферт и разница в этом.

ЭТО КОРУТИНЫ

Report Page