и посмотреть медиа
Kotlin | Interview Questions
и посмотреть медиа
Interview questions for Kotlin developers with answers.
Interview questions for Kotlin developers with answers.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Kotlin interview questions: extensions, coroutines, collections. With code examples and explanations for Android and backend.
🤔 Как можно писать RecyclerView, чтобы он кэшировал наперёд? 1. Использовать setItemViewCacheSize для кэширования определённого количества элементов. 2. Включить предзагрузку данных с помощью RecyclerView.OnScrollListener. 3. Реализовать Prefetching через LinearLayoutManager или RecyclerView.LayoutManager. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чем разница между работой с list и работой с sequence? 🚩Основные структуры работы с коллекциями 🟠List Является жадной коллекцией, что означает, что все операции над элементами выполняются немедленно и целиком. Когда вы применяете функции к списку, такие как map, filter и т.д., все элементы проходят через каждую функцию сразу же. В данном примере все элементы списка numbers сначала умножаются на 2, затем фильтруются. Вся работа выполняется сразу для каждого элемента. val numbers = listOf(1, 2, 3, 4, 5) val result = numbers .map { it * 2 } .filter { it > 5 } println(result) // Output: [6, 8, 10] 🟠Sequence Является ленивой коллекцией. Это означает, что элементы обрабатываются по мере необходимости. Функции, применяемые к последовательности, создают цепочку операций, которая выполняется только при обращении к элементам. В этом примере numbers сначала преобразуется в Sequence. Операции map и filter создают цепочку, которая выполняется только при преобразовании обратно в List с помощью toList(). Это позволяет избежать лишних операций и обрабатывать элементы по мере необходимости. val numbers = listOf(1, 2, 3, 4, 5) val result = numbers.asSequence() .map { it * 2 } .filter { it > 5 } .toList() println(result) // Output: [6, 8, 10] 🚩Различия 🟠Жадность против ленивости List: Все элементы обрабатываются сразу при вызове функций. Sequence: Элементы обрабатываются по мере необходимости, что может повысить эффективность. 🟠Производительность List: Подходит для небольших коллекций, где выполнение всех операций сразу не критично. Sequence: Эффективен для больших коллекций или длинных цепочек операций, так как уменьшает количество промежуточных коллекций. 🟠Использование памяти List: Может использовать больше памяти из-за создания промежуточных коллекций. Sequence: Уменьшает использование памяти, обрабатывая элементы по одному. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое лямбды с точки зрения синтаксиса в Java и Kotlin? В Java лямбды — это упрощённый синтаксис для анонимных классов, реализующих функциональный интерфейс. Синтаксис: (параметры) -> { тело }. В Kotlin лямбды представляют собой выражения, передаваемые как функции, с синтаксисом { параметры -> тело }. Kotlin более лаконичен, позволяя опускать параметры, если их можно вывести из контекста. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что используешь, если нужно получить элемент или список элементов? В Kotlin есть множество удобных функций для получения одного элемента или списка элементов из коллекций (List, Set, Map). Какую функцию использовать — зависит от задачи. 🚩Получение одного элемента 🟠`get(index)` и `getOrNull(index)` получение по индексу Если индекс может выйти за границы массива, лучше использовать getOrNull(). val list = listOf("A", "B", "C") println(list[1]) // "B" println(list.getOrNull(5)) // null 🟠`first()` и `last()` первый и последний элементы println(list.first()) // "A" println(list.last()) // "C" Используйте firstOrNull() или lastOrNull(), если список может быть пустым println(emptyList().firstOrNull()) // null 🟠`find {}` и `findLast {}` поиск по условию Возвращает первый или последний элемент, удовлетворяющий условию. val numbers = listOf(10, 20, 30, 40) println(numbers.find { it > 15 }) // 20 println(numbers.findLast { it > 15 }) // 40 println(numbers.find { it > 50 }) // null 🟠`single()` и `singleOrNull()` если ожидается только один элемент val oneElementList = listOf(42) println(oneElementList.single()) // 42 println(oneElementList.singleOrNull()) // 42 val emptyList = emptyList() println(emptyList.singleOrNull()) // null single() бросает исключение, если элементов нет или их больше одного. 🚩Получение нескольких элементов (списка) filter {} – фильтрация элементов по условию val numbers = listOf(1, 2, 3, 4, 5) val evenNumbers = numbers.filter { it % 2 == 0 } println(evenNumbers) // [2, 4] take(n) и takeLast(n) – первые/последние n элементов val items = listOf("a", "b", "c", "d", "e") println(items.take(3)) // [a, b, c] println(items.takeLast(2)) // [d, e] slice(indices) – получение элементов по индексам val sliced = items.slice(listOf(0, 2, 4)) println(sliced) // [a, c, e] map {} – преобразование списка val squared = numbers.map { it * it } println(squared) // [1, 4, 9, 16, 25] Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чем заключается передача объекта по ссылке и по значению? – По значению — создаётся копия объекта (в Kotlin: data class, val x = a). – По ссылке — передаётся указатель, и изменения влияют на оригинал. В Java и Kotlin передаются ссылки по значению (сама ссылка копируется, но указывает на один объект). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Чем отличаются data-классы и sealed-классы? data class — класс для хранения данных с автогенерацией equals(), hashCode(), copy(). sealed class — ограниченная иерархия классов, используется для when. 🚩`data class` – для хранения данных data class автоматически создаёт: equals() и hashCode() → сравнение объектов по значениям. copy() → удобное копирование с изменением параметров. toString() → красивый вывод. data class User(val id: Int, val name: String) fun main() { val user1 = User(1, "Alice") val user2 = user1.copy(name = "Bob") // Создаём копию с новым именем println(user1) // User(id=1, name=Alice) println(user2) // User(id=1, name=Bob) } 🚩`sealed class` – для ограниченных иерархий классов sealed class используется, когда есть фиксированное число подклассов. sealed class NetworkState { object Loading : NetworkState() data class Success(val data: String) : NetworkState() data class Error(val message: String) : NetworkState() } fun handleState(state: NetworkState) { when (state) { is NetworkState.Loading -> println("Загрузка...") is NetworkState.Success -> println("Данные: ${state.data}") is NetworkState.Error -> println("Ошибка: ${state.message}") } } 🚩Можно ли использовать `data class` внутри `sealed class`? Да! Это лучший вариант для управления состояниями: sealed class Result { object Loading : Result() data class Success(val data: String) : Result() data class Error(val message: String) : Result() } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Расскажи для чего нужен Dagger? Dagger — это библиотека для внедрения зависимостей, упрощающая создание, управление и тестирование объектов. Она генерирует код для автоматического предоставления зависимостей, что делает приложение модульным и устойчивым к изменениям. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Почему могут быть проблемы со списками в data class? В data class могут возникнуть проблемы со списками при использовании: Методов copy() – список не копируется, а передаётся по ссылке. Методов equals() и hashCode() – List сравнивается по элементам, что может быть медленно. Mutable списков (MutableList) – изменения внутри списка изменяют все копии объекта. 🚩Проблема `copy()` – список не клонируется data class User(val name: String, val tags: List) fun main() { val original = User("Alice", listOf("Admin", "Editor")) val copy = original.copy() // ✅ Поверхностное копирование println(original.tags === copy.tags) // true (один и тот же объект) } Используем toList(), чтобы создать новый неизменяемый список: fun main() { val original = User("Alice", listOf("Admin", "Editor")) val copy = original.copy(tags = original.tags.toList()) println(original.tags === copy.tags) // false (разные объекты) } 🚩`equals()` и `hashCode()` могут работать медленно data class Message(val id: Int, val content: String, val tags: List) fun main() { val message1 = Message(1, "Привет", listOf("important", "urgent")) val message2 = Message(1, "Привет", listOf("important", "urgent")) println(message1 == message2) // true (сравнивает элементы списка) } Если идентификатор (id) уникален, сравнивать только его data class Message(val id: Int, val content: String, val tags: List) { override fun equals(other: Any?) = other is Message && this.id == other.id override fun hashCode() = id.hashCode() } 🚩`MutableList` в `data class` – неожиданные изменения data class Task(val name: String, val subtasks: MutableList) fun main() { val original = Task("Купить продукты", mutableListOf("Хлеб", "Молоко")) val copy = original.copy() // ✅ Поверхностная копия copy.subtasks.add("Яйца") // ❌ Меняет список в обоих объектах! println(original.subtasks) // [Хлеб, Молоко, Яйца] println(copy.subtasks) // [Хлеб, Молоко, Яйца] } Создаём новый MutableList внутри copy() data class Task(val name: String, val subtasks: List) { fun deepCopy() = Task(name, subtasks.toMutableList()) } fun main() { val original = Task("Купить продукты", mutableListOf("Хлеб", "Молоко")) val copy = original.deepCopy() copy.subtasks.toMutableList().add("Яйца") // ✅ Теперь изменения не влияют на оригинал println(original.subtasks) // [Хлеб, Молоко] println(copy.subtasks) // [Хлеб, Молоко, Яйца] } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что произойдёт, если вместо ключевого слова class использовать object? object в Kotlin создаёт singleton — единственный экземпляр. Нельзя создавать новые экземпляры, он инициализируется при первом обращении. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!