Вопросы по Kotlin
Язык от null-safety и sealed-классов до дженериков, делегатов, корутин и Flow. Закрывает теорию Kotlin на собесе в Android и на бэкенд, плюс задачи в стиле контеста.
Проверьте себя: тест по Kotlin
20 вопросов, 10 минут, уровень junior, middle или senior
Основы языка
val и var, типы, if и when как выражения, строки, диапазоны и равенство.
Урок: Основы Kotlin за 6 минут 6 мин- Чем const val отличается от val
- Разница между == и === в Kotlin
- Когда Int становится объектом
- Сырые строки в Kotlin
- Unit, Nothing и Any
- val, var и const val
- Почему в Kotlin нет тернарного оператора
- Неявное приведение Int к Long
Ещё 12 вопросов и задач
- Сравнение упакованных Int через ===
- Kotlin-типы и их аналоги в Java
- Тип Nothing в Kotlin
- Целочисленное деление и приведение
- Строковые шаблоны и выражения
- when с диапазонами и is
- Выражения и операторы в Kotlin
- Чем Kotlin лучше Java
- Во что компилируется функция верхнего уровня
- Диапазон until в цикле for
- val и изменяемый список в Kotlin
- Когда when обязан иметь else
Null-safety
Nullable-типы, ?., ?:, !!, smart cast, платформенные типы и lateinit.
Урок: Null-safety в Kotlin за 6 минут 6 мин- Что делает оператор !!
- Оператор Elvis ?: в Kotlin
- Elvis с return и тип Nothing
- Допиши выражения null-safety
- Функции stdlib для null
- lateinit или lazy
- Операторы ?., ?: и !!
- NPE при вызове открытого метода из конструктора
Ещё 10 вопросов и задач
- Как проверить инициализацию lateinit
- Ограничения lateinit
- Безопасный вызов let и пустой результат
- List<String?> и List<String>?
- let с Elvis и неожиданный результат
- Цепочка безопасных вызовов
- Платформенный тип String!
- Почему smart cast не работает для var-свойства
- Nullable в публичном API
- Как Kotlin защищает от NPE
Классы, data и sealed
Конструкторы, data class, sealed-иерархии, object, enum, value class и видимость.
Урок: Классы, data и sealed за 7 минут 7 мин- companion object и static
- Поверхностное копирование в data class copy
- Свойство в теле data class и equals
- Что генерирует data class
- Почему классы в Kotlin final по умолчанию
- Зачем нужен data object
- Ограничения data class
- Модификаторы видимости Kotlin
Ещё 11 вопросов и задач
- inner class и утечка памяти
- Какой вид класса выбрать
- Когда создаётся object-синглтон
- data class: equals, copy и деструктуризация
- Порядок инициализации свойств и init
- when по sealed-иерархии
- Чем sealed-класс отличается от enum
- Где можно объявлять наследников sealed
- Расскажи про data class
- Sealed-классы и моделирование состояний
- Когда value class упаковывается
Функции, расширения и scope-функции
Параметры по умолчанию, extension-функции, infix, let, run, with, apply, also.
Урок: Функции, расширения и scope-функции за 7 минут 7 минКоллекции и последовательности
Read-only и mutable, map, filter, groupBy, fold, Sequence и ленивость.
Урок: Коллекции и последовательности за 7 минут 7 мин- Сравнение массивов через ==
- Удаление элементов во время обхода
- Доступ к Map
- Array<Int> и IntArray
- Sequence против Iterable
- map и flatMap
- fold и reduce
- groupBy и associateBy
Ещё 11 вопросов и задач
- Операции над коллекциями
- groupBy, associateBy и eachCount
- distinct, sorted и take
- Порядок вызовов в Sequence и в List
- List в Kotlin: read-only или immutable
- Порядок выполнения операций в Sequence
- Когда использовать Sequence
- Порядок элементов в setOf и mapOf
- Устойчивость сортировки в Kotlin
- Read-only и неизменяемые коллекции
- Sequence и производительность коллекций
Лямбды, inline и reified
Функциональные типы, замыкания, inline, noinline, crossinline, non-local return и reified.
Урок: Лямбды, inline и reified за 7 минут 7 минДженерики и вариантность
in, out, use-site вариантность, star projection, ограничения и стирание типов.
Урок: Дженерики и вариантность за 7 минут 7 минДелегаты
by lazy, observable, Delegates.notNull, делегирование класса и свои делегаты свойств.
Урок: Делегаты в Kotlin за 6 минут 6 минКорутины и structured concurrency
suspend, CoroutineScope, Dispatchers, Job, launch и async, отмена и structured concurrency.
Урок: Корутины и structured concurrency за 8 минут 8 мин- Последовательно или параллельно
- Проглоченный CancellationException
- Во что компилируется suspend-функция
- Почему цикл не отменяется
- Dispatchers.IO и Dispatchers.Default
- Диспетчеры корутин
- Очистка после отмены
- Правила structured concurrency
Ещё 14 вопросов и задач
- Чем плох GlobalScope
- launch или async
- Порядок событий при ошибке в дочерней корутине
- async, await и структура
- Отмена корутины и finally
- coroutineScope ждёт детей
- Порядок выполнения launch в runBlocking
- yield и очередь одного потока
- runBlocking на главном потоке Android
- Как работает отмена корутин
- Что такое корутины
- Отмена родительской корутины
- Переносит ли suspend код в другой поток
- Что делает withContext
Flow, StateFlow и SharedFlow
Холодные и горячие потоки, операторы, flowOn, stateIn, буферы и конфляция.
Урок: Flow, StateFlow и SharedFlow за 8 минут 8 мин- Что ловит оператор catch
- Что значит холодный Flow
- combine и zip
- buffer, conflate, collectLatest
- Холодные и горячие потоки
- Безопасный сбор Flow в Android
- flatMapLatest для поиска
- Что делает flowOn
Ещё 12 вопросов и задач
- Операторы Flow
- catch и onCompletion
- Холодный Flow собирают дважды
- Цепочка операторов Flow
- StateFlow и одинаковые значения
- emit в SharedFlow без подписчиков
- Поиск с debounce на Flow
- StateFlow, SharedFlow и LiveData
- StateFlow и SharedFlow
- Зачем WhileSubscribed(5000)
- MutableStateFlow.update и гонки
- withContext внутри flow { }
Исключения в корутинах
Распространение ошибок, SupervisorJob, CoroutineExceptionHandler, CancellationException.
Урок: Исключения в корутинах за 7 минут 7 мин- Ошибка в async и try вокруг await
- CancellationException и родитель
- Где работает CoroutineExceptionHandler
- Ошибки в launch и async
- Распространение исключений
- CoroutineExceptionHandler в дочерней корутине
- launch(SupervisorJob()) внутри scope
- Путь необработанного исключения из дочернего launch
Ещё 10 вопросов и задач
Java-интероп
@JvmStatic, @JvmOverloads, @JvmField, платформенные типы, SAM-конверсия и исключения.
Урок: Java-интероп за 6 минут 6 мин- Read-only List и Java-код
- Функции верхнего уровня из Java
- Аннотации Kotlin для Java
- Ключевые слова Kotlin в Java-API
- Платформенный тип
- @JvmField и const val
- Параметры по умолчанию и Java
- Зачем нужен @JvmStatic
Ещё 9 вопросов и задач
Задачи на Kotlin
Задачи в стиле контеста: быстрый ввод-вывод, коллекции, строки и алгоритмы на Kotlin.
Урок: Задачи на Kotlin: ввод, вывод и инструменты 6 мин- Группы анаграмм
- Правильная скобочная последовательность
- Размен минимальным числом монет
- Количество островов на карте
- Сколько чисел не больше x
- Число пар с заданной суммой
- Сколько простых до N: решето Эратосфена
- Распаковка строки вида 3[a2[c]]
Ещё 44 вопроса и задачи
- Отчёт по отделам через groupBy
- Кратчайшие пути: алгоритм Дейкстры
- Система непересекающихся множеств
- Расстояние Левенштейна
- Число Фибоначчи по модулю для огромного n
- Кратчайший путь в лабиринте (BFS)
- k-й по величине в потоке чисел
- Наибольшая возрастающая подпоследовательность за n log n
- Самая длинная подстрока без повторов
- LRU-кеш на LinkedHashMap
- Максимальная сумма подотрезка
- Слияние отрезков
- Стек с минимумом за O(1)
- Палиндром без учёта регистра и знаков
- Суммы на отрезках через префиксные суммы
- Сжатие строки RLE
- Поворот матрицы на 90 градусов
- Калькулятор обратной польской записи
- Максимум в скользящем окне
- Распределить задачи по спринтам: бинпоиск по ответу
- Сумма дробей с сокращением
- Сумма чисел без переполнения Int
- Топ-k частых слов
- Порядок сборки модулей: топологическая сортировка
- Подсчёт слов по префиксу: префиксное дерево
- Стек и очередь в Kotlin
- binarySearch при повторяющихся элементах
- Сложность по ограничениям
- Быстрый ввод в Kotlin для контеста
- Допиши шаблон быстрого ввода
- Коллекции для алгоритмов в Kotlin
- Ограничения и сложность
- Шаблон контестной программы на Kotlin
- Переполнение Int в Kotlin
- Сравнение Long с литералом
- Порядок работы над задачей на собесе
- ArrayDeque и PriorityQueue
- Переполнение и Long в Kotlin
- Быстрый вывод больших ответов
- Куча в Kotlin
- Сортировка по двум ключам
- Как решать задачу на алгоритмической секции
- Особенности Kotlin в алгоритмических задачах
- Глубокая рекурсия на JVM