Українська
Контрольні питання
Питання для самоперевірки та підготовки до іспиту, згруповані за темами курсу.
Тема 1. Мова Kotlin і перша програма
- Що таке мова Kotlin? Які її основні переваги порівняно з Java? Поясніть поняття Kotlin/JVM і Kotlin Multiplatform.
- Поясніть процес компіляції та виконання програми мовою Kotlin на платформі JVM. Як Kotlin взаємодіє з кодом Java?
- Опишіть структуру програми мовою Kotlin: функція main, пакети, імпорт, файли верхнього рівня.
- Як створити проєкт Kotlin у IntelliJ IDEA з системою збирання Gradle? Поясніть файл build.gradle.kts і підключення залежностей.
- Що таке система керування версіями Git? Поясніть поняття репозиторію, коміту, гілки та основні команди Git.
- Як працювати з репозиторієм Git в IntelliJ IDEA? Які файли проєкту Gradle слід додавати до .gitignore?
Тема 2. Типи, null-безпека, керування
- Поясніть оголошення змінних за допомогою val і var та виведення типів у Kotlin.
- Які базові типи даних має мова Kotlin? Як виконується перетворення числових типів?
- Що таке null-безпека в Kotlin? Порівняйте типи, що допускають null, та типи, що його не допускають.
- Поясніть операції безпечного виклику ?., оператор Елвіса ?: та операцію !!.
- Що таке розумні приведення типів (smart casts)? Поясніть операції is та as?.
- Поясніть вираз when та порівняйте його з конструкцією switch у Java.
- Поясніть цикли for, while, do-while, діапазони та прогресії (until, step, downTo).
Тема 3. Функції та рядки
- Поясніть оголошення функцій у Kotlin, функції з тілом-виразом і тип Unit.
- Що таке параметри за замовчуванням та іменовані аргументи? Як вони замінюють перевантаження функцій?
- Що таке функції зі змінною кількістю аргументів (vararg), локальні та інфіксні функції?
- Що таке функції-розширення та властивості-розширення? Як вони працюють на рівні байт-коду?
- Поясніть шаблони рядків, багаторядкові рядки та основні функції для роботи з рядками.
- Що таке хвостова рекурсія та модифікатор tailrec?
Тема 4. Винятки, Result, налагодження
- Як працює обробка винятків у Kotlin? Чому в Kotlin немає перевірюваних винятків?
- Поясніть try як вираз, блок finally та тип Nothing.
- Що таке тип Result і функція runCatching? Порівняйте їх з обробкою винятків.
- Для чого призначені функції require, check та error?
- Як створити власний клас винятку в Kotlin?
- Які засоби налагодження надає IntelliJ IDEA для програм мовою Kotlin?
Тема 5. Класи та об’єкти
- Поясніть оголошення класу, первинний конструктор і блоки init у Kotlin.
- Що таке вторинні конструктори? Як вони пов’язані з первинним конструктором?
- Що таке властивості в Kotlin? Поясніть власні методи доступу get і set та поле field.
- Що таке відкладена ініціалізація властивостей (lateinit)?
- Поясніть модифікатори видимості public, private, protected та internal.
- Як організувати код за допомогою пакетів і модулів у проєкті Kotlin?
Тема 6. Наслідування та поліморфізм
- Чому класи в Kotlin за замовчуванням закриті для наслідування? Поясніть модифікатори open та override.
- Як викликати конструктор і методи базового класу за допомогою super?
- Що таке абстрактні класи та абстрактні члени класу?
- Що таке інтерфейси в Kotlin? Поясніть методи з реалізацією за замовчуванням та властивості інтерфейсів.
- Порівняйте абстрактні класи та інтерфейси. Як розв’язати конфлікт однакових методів кількох інтерфейсів?
- Що таке поліморфізм? Наведіть приклад ієрархії класів із перевизначенням методів.
Тема 7. Класи даних, переліки, sealed
- Що таке класи даних (data class)? Які методи компілятор генерує автоматично?
- Поясніть метод copy та деконструкцію об’єктів класів даних.
- Що таке переліки (enum class)? Як додати до переліку властивості та методи?
- Що таке запечатані класи та інтерфейси (sealed)? Як вони поєднуються з виразом when?
- Що таке оголошення object? Порівняйте об’єкти-одинаки та анонімні об’єкти.
- Що таке об’єкти-компаньйони (companion object) і чим вони замінюють статичні члени Java?
Тема 8. Операції та делегування
- Як перевантажити операції в Kotlin за допомогою модифікатора operator? Наведіть приклади функцій plus, get і invoke.
- Як перевантажити операції порівняння та перевірки належності (compareTo, contains)?
- Що таке делеговані властивості? Поясніть стандартний делегат lazy.
- Поясніть делегати Delegates.observable і Delegates.vetoable та зберігання властивостей у словнику.
- Як створити власний делегат властивості (getValue, setValue)?
- Що таке делегування класів (ключове слово by)? Порівняйте його з наслідуванням.
Тема 9. Узагальнене програмування
- Поясніть оголошення узагальнених класів і функцій у Kotlin.
- Що таке обмеження параметрів типу (upper bounds) та конструкція where?
- Що таке варіантність? Поясніть модифікатори out та in на рівні оголошення.
- Що таке проєкції типу та зірочна проєкція?
- Що таке стирання типів? Як параметри reified у вбудованих (inline) функціях дозволяють обійти його?
- Поясніть узагальнені функції-розширення на прикладах стандартної бібліотеки.
Тема 10. Масиви та колекції
- Опишіть ієрархію колекцій Kotlin. Порівняйте інтерфейси колекцій лише для читання та змінних колекцій.
- Поясніть роботу зі списками List і MutableList та функції listOf і mutableListOf.
- Поясніть множини Set і MutableSet. Як Kotlin порівнює елементи множини?
- Поясніть словники Map і MutableMap, пари Pair та функцію to.
- Порівняйте масиви Array та колекції Kotlin. Що таке масиви примітивних типів (IntArray)?
- Як Kotlin відображає колекції Java та які особливості має взаємодія колекцій із кодом Java?
Тема 11. Лямбди та послідовності
- Що таке лямбда-вирази та функціональні типи в Kotlin? Поясніть неявний параметр it.
- Що таке функції вищого порядку? Наведіть приклади функцій, що приймають і повертають функції.
- Що таке вбудовані (inline) функції? Як вони впливають на продуктивність лямбда-виразів?
- Поясніть операції над колекціями filter, map, flatMap, groupBy, associate і fold.
- Що таке послідовності (Sequence)? Порівняйте ліниві обчислення послідовностей та операції над колекціями.
- Поясніть функції області видимості let, run, with, apply та also.
- Що таке посилання на функції та властивості (:😃?
Тема 12. Файли, серіалізація, тести
- Як читати та записувати текстові файли в Kotlin за допомогою функцій readText, readLines, writeText і useLines?
- Для чого призначена функція use? Як вона гарантує закриття ресурсів?
- Що таке бібліотека kotlinx.serialization? Як підключити її плагін і анотувати класи атрибутом @Serializable?
- Як серіалізувати та десеріалізувати об’єкти у формат JSON? Поясніть налаштування об’єкта Json.
- Як писати модульні тести на Kotlin за допомогою kotlin.test і JUnit Platform (JUnit 6)?
- Як запускати тести в IntelliJ IDEA та за допомогою Gradle? Що таке покриття коду тестами?
Тема 13. Корутини та Flow
- Що таке корутини? Порівняйте корутини з потоками операційної системи.
- Що таке suspend-функції? Як компілятор перетворює їх (продовження, continuation)?
- Поясніть будівники корутин launch, async і runBlocking та функцію await.
- Що таке структурована паралельність? Поясніть CoroutineScope, Job та скасування корутин.
- Поясніть диспетчери корутин Dispatchers.Default, Dispatchers.IO і Dispatchers.Main та функцію withContext.
- Як обробляти винятки в корутинах? Що таке SupervisorJob і CoroutineExceptionHandler?
- Що таке асинхронні потоки Flow? Поясніть оператори потоків, StateFlow і SharedFlow.
Тема 14. Бази даних з Exposed
- Поясніть основні поняття реляційних баз даних та мови SQL: таблиці, ключі, зв’язки, оператори SELECT, INSERT, UPDATE, DELETE.
- Як створити локальну базу SQLite? Порівняйте її розгортання з PostgreSQL.
- Що таке бібліотека Exposed? Як підключитися до бази даних SQLite і виконувати транзакції?
- Як описати таблиці та виконувати запити за допомогою DSL бібліотеки Exposed?
- Поясніть підхід DAO в Exposed: сутності Entity та класи EntityClass.
- Як описати зв’язки між таблицями в Exposed та захиститися від SQL-ін’єкцій?
Тема 15. Compose Multiplatform
- Що таке Compose Multiplatform? Порівняйте декларативний та імперативний підходи до побудови інтерфейсу.
- Що таке компоновані функції (@Composable)? Як відбувається рекомпозиція?
- Поясніть основні компоненти Compose: Text, Button, TextField, Image.
- Поясніть компонування в Compose: Column, Row, Box, модифікатори Modifier.
- Як зберігати стан компонентів за допомогою remember та mutableStateOf?
- Що таке підйом стану (state hoisting) і однонаправлений потік даних?
- Як відображати списки за допомогою LazyColumn та оформлювати інтерфейс за допомогою Material Design 3?
Тема 16. MVVM і навігація
- Опишіть архітектуру MVVM у застосунках Compose Multiplatform. Яка роль класу ViewModel?
- Як передавати стан із ViewModel до інтерфейсу за допомогою StateFlow та collectAsState?
- Як організувати навігацію між екранами в Compose Multiplatform?
- Як виконувати запити до бази даних у корутинах, не блокуючи інтерфейс?
- Як організувати шар доступу до даних (репозиторій) у застосунку Compose Multiplatform?
- Як зібрати та розповсюдити настільний застосунок Compose Multiplatform?