и посмотреть медиа
Kotlin Preguntas de Entrevista
и посмотреть медиа
Preguntas de entrevista para desarrolladores de Kotlin con respuestas.
Preguntas de entrevista para desarrolladores de Kotlin con respuestas.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Preguntas de entrevista Kotlin: extensiones, coroutenos, colecciones. Con ejemplos de código y explicaciones para Android y backend.
🤔 Что такое лямбды с точки зрения синтаксиса в Java и Kotlin? Лямбда-выражения представляют собой компактный способ представления анонимных функций, который особенно полезен для создания коротких блоков выполнения кода, предназначенных для последующей передачи другим функциям. Лямбды широко используются для упрощения работы с коллекциями, потоками данных, асинхронным кодом и в ситуациях, где требуется функциональный интерфейс. 🚩Лямбда-выражения Были введены в Java 8 и являются частью усилий по добавлению функциональных возможностей в язык. Лямбды в Java чаще всего используются с функциональными интерфейсами, которые являются интерфейсами с одним абстрактным методом. (parameters) -> expression или (parameters) -> { statements; } 🚩Лямбда-выражения Поддерживает более гибкие и выразительные лямбды по сравнению с Java. Лямбды могут использоваться как с функциональными интерфейсами, так и в качестве части синтаксиса языка, благодаря чему Kotlin особенно удобен для функционального программирования. { parameters -> code body } 🚩Примеры Лямбда без параметров { println("Hello, World!") } Лямбда с одним параметром { a: Int -> a * a } Лямбда с несколькими параметрами { a: Int, b: Int -> a + b } Лямбда с телом, содержащим несколько выражений { s: String -> println(s) s.length } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как заинжектить в поле в Dagger Hilt? Чтобы внедрить зависимость, достаточно добавить аннотацию @Inject к полю и использовать @AndroidEntryPoint на компоненте. Hilt автоматически подставит нужный объект. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое TransactionTooLargeException? TransactionTooLargeException — это исключение, которое возникает, если передаваемые данные превышают лимит 1MB в Binder. Чаще всего ошибка появляется при передаче больших объектов через Intent, Bundle, `onSaveInstanceState(). 🚩Как воспроизвести `TransactionTooLargeException`? Передача большого Bitmap через Intent (ОШИБКА!) val bitmap: Bitmap = getLargeBitmap() // ❌ Очень большой объект val intent = Intent(this, ImageActivity::class.java) intent.putExtra("image", bitmap) // ❌ Ошибка: TransactionTooLargeException startActivity(intent) Ошибка android.os.TransactionTooLargeException: data parcel size 2MB is larger than 1MB 🚩Как избежать `TransactionTooLargeException`? Использовать FileProvider и Uri вместо Bitmap val file = File(context.cacheDir, "image.png") file.outputStream().use { bitmap.compress(Bitmap.CompressFormat.PNG, 100, it) } val uri = FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", file) val intent = Intent(this, ImageActivity::class.java).apply { putExtra("image_uri", uri.toString()) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) } startActivity(intent) 🚩Использовать `ViewModel` вместо `onSaveInstanceState()` Ошибка: сохранение больших данных в onSaveInstanceState() override fun onSaveInstanceState(outState: Bundle) { outState.putSerializable("largeData", myLargeObject) // ❌ ОШИБКА! super.onSaveInstanceState(outState) } Решение → Используем ViewModel, чтобы хранить данные в памяти: class MyViewModel : ViewModel() { var largeData: MyLargeObject? = null } 🚩Хранить данные в `SharedPreferences` или `Room` Если данные не нужны постоянно → используем SharedPreferences getSharedPreferences("app_prefs", MODE_PRIVATE).edit() .putString("last_data", jsonData) .apply() Если данные большие и важные → используем Room @Dao interface MyDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun saveData(data: MyData) } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие переменные можно использовать в data class? В data class можно использовать только свойства, объявленные в первичном конструкторе (val или var). Эти свойства автоматически участвуют в: - equals, hashCode; - toString; - copy и componentN. Остальные свойства не считаются частью "данных" класса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как сказать адаптеру перерисовать список, если какой-то элемент удалился? Если удалился элемент из списка, нужно: Удалить его из списка данных. Сообщить Adapter, чтобы он перерисовал только изменённые элементы. 🚩Используем `notifyItemRemoved()` (лучший вариант) Этот метод обновляет только удалённый элемент, сохраняя анимации. fun removeItem(position: Int) { itemList.removeAt(position) // Удаляем из списка данных notifyItemRemoved(position) // Сообщаем адаптеру notifyItemRangeChanged(position, itemList.size) // Обновляем индексы } 🚩Если изменился весь список – `DiffUtil` Если изменился несколько элементов, лучше использовать DiffUtil, чтобы обновить только нужные элементы. class MyAdapter : ListAdapter(DIFF_CALLBACK) { companion object { private val DIFF_CALLBACK = object : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: Item, newItem: Item): Boolean { return oldItem.id == newItem.id } override fun areContentsTheSame(oldItem: Item, newItem: Item): Boolean { return oldItem == newItem } } } } Обновляем список через submitList() fun removeItem(item: Item) { val newList = currentList.toMutableList() newList.remove(item) submitList(newList) // `DiffUtil` сам вычислит, что обновить } 🚩Полное обновление списка (`notifyDataSetChanged()`) Использовать только если изменился весь список! fun removeItem(position: Int) { itemList.removeAt(position) notifyDataSetChanged() // Перерисовывает весь список (медленно) } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое инстанциация и инициализация? - Инстанциация — процесс создания экземпляра (объекта) класса (например, new ClassName()); - Инициализация — установка начальных значений полей и выполнение конструктора. Инстанциация включает в себя инициализацию. Вот подробные пояснения к каждому из ваших вопросов Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чем различие Default диспатчер и IO диспатчер? В Kotlin Coroutines есть несколько диспетчеров (Dispatchers), но Default и IO используются чаще всего. 🚩Главное различие: Dispatchers.Default — для тяжёлых вычислений (CPU-операции). Dispatchers.IO — для операций ввода-вывода (сеть, файлы, БД). 🟠`Dispatchers.Default` – для сложных вычислений (CPU-bound) Этот диспетчер используется, если код загружает процессор (например, сложные вычисления). import kotlinx.coroutines.* fun main() = runBlocking { launch(Dispatchers.Default) { val result = heavyComputation() println("Результат: $result") } } suspend fun heavyComputation(): Int { delay(1000) return (1..1_000_000).sum() } 🟠`Dispatchers.IO` – для работы с файлами, сетью, БД (IO-bound) Этот диспетчер оптимизирован для ввода-вывода (I/O): работа с файлами, сетью, БД. import kotlinx.coroutines.* import java.io.File fun main() = runBlocking { launch(Dispatchers.IO) { val text = File("data.txt").readText() println("Файл прочитан: $text") } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Для чего нужен объект Job? Job — это элемент управления жизненным циклом корутины. С его помощью можно: - отменять корутину; - отслеживать завершение; - объединять с другими задачами; - управлять родительскими и дочерними корутинами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Можешь рассказать отличия и в каких случаях их использовать list set map? В Kotlin есть три основных типа коллекций: List — упорядоченный список элементов. Set — множество уникальных элементов. Map — коллекция пар "ключ-значение". 🚩List — упорядоченный список List — это коллекция, в которой можно хранить дубликаты, а элементы доступны по индексу. val numbers = listOf(1, 2, 3, 4, 5) // Immutable (нельзя изменять) val mutableNumbers = mutableListOf(1, 2, 3) // Можно изменять mutableNumbers.add(4) // Добавляем элемент mutableNumbers.removeAt(1) // Удаляем элемент по индексу println(mutableNumbers) // [1, 3, 4] 🚩Set — множество уникальных элементов Set — это коллекция, в которой нет дубликатов. val numbers = setOf(1, 2, 3, 3, 4, 5) // Дубликаты удаляются автоматически println(numbers) // [1, 2, 3, 4, 5] val mutableNumbers = mutableSetOf(1, 2, 3) mutableNumbers.add(3) // Не добавится, потому что уже есть mutableNumbers.add(4) // Добавится println(mutableNumbers) // [1, 2, 3, 4] 🚩Map — коллекция пар "ключ-значение" Map — это структура данных, в которой каждому ключу соответствует одно значение. val userMap = mapOf( 1 to "Alice", 2 to "Bob", 3 to "Charlie" ) // Immutable val mutableUserMap = mutableMapOf(1 to "Alice", 2 to "Bob") mutableUserMap[3] = "Charlie" // Добавляем новый ключ-значение mutableUserMap.remove(1) // Удаляем элемент по ключу println(mutableUserMap) // {2=Bob, 3=Charlie} Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!