и посмотреть медиа
Kotlin | Вопросы собесов
и посмотреть медиа
Вопросы для Kotlin-разработчиков с ответами.
Вопросы для Kotlin-разработчиков с ответами.
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.
Вопросы на Kotlin-собеседованиях: расширения, корутины, коллекции. С примерами кода и объяснениями для Android и backend.
🤔 В чём отличие обычного метода от extension метода в Kotlin? Extension-функция выглядит как будто добавлена в класс, но на самом деле это статическая функция, которой не требуется менять сам класс. Она даёт синтаксический сахар, не добавляя нового в байткод класса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как определить изменение скорости работы программы после наших действий? 🟠Profile GPU Rendering Этот инструмент показывает время, затраченное на отрисовку каждого кадра. Использование этого инструмента позволяет выявить "тяжелые" кадры и измерить улучшения после оптимизации. 1⃣Включите режим разработчика на устройстве. 2⃣Перейдите в "Настройки" -> "Для разработчиков". 3⃣Включите опцию "Profile GPU Rendering" и выберите "On screen as bars". 4⃣Запустите ваше приложение и наблюдайте за графиками. Зеленые линии указывают на время отрисовки, и ваша цель - оставаться ниже 16 мс (для 60 кадров в секунду). 🟠Android Profiler Предоставляет набор инструментов для анализа производительности приложения. 1⃣ Откройте Android Studio и запустите ваше приложение. 2⃣Перейдите в "View" -> "Tool Windows" -> "Profiler". 3⃣Выберите ваше устройство и запущенное приложение. 4⃣Используйте вкладки CPU, Memory, Network и Energy для анализа различных аспектов производительности. 5⃣Сравните данные до и после оптимизации. 🟠Benchmarking Создание и использование тестов производительности помогает количественно оценить улучшения. Вы можете использовать библиотеку Jetpack Benchmark для создания и выполнения тестов производительности. 🚩Пример использования Jetpack Benchmark: 1⃣Добавьте зависимости в build.gradle: dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.1.0" androidTestImplementation "androidx.test:runner:1.3.0" androidTestImplementation "androidx.test:rules:1.3.0" } 2⃣Создайте класс теста: import androidx.benchmark.junit4.BenchmarkRule import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class ExampleBenchmark { @get:Rule val benchmarkRule = BenchmarkRule() @Test fun myFunctionBenchmark() { benchmarkRule.measureRepeated { // Вызов вашей функции или кода для тестирования производительности myFunction() } } } 🟠Logcat Используйте журналирование для измерения времени выполнения определенных операций. val startTime = System.currentTimeMillis() // Ваш код val endTime = System.currentTimeMillis() Log.d("Performance", "Время выполнения: ${endTime - startTime} мс") 🟠StrictMode StrictMode помогает обнаружить операции, которые могут замедлить работу приложения, такие как работа с сетью или базой данных в главном потоке. if (BuildConfig.DEBUG) { StrictMode.setThreadPolicy( StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .build() ) StrictMode.setVmPolicy( StrictMode.VmPolicy.Builder() .detectAll() .penaltyLog() .build() ) } 🟠Systrace Systrace позволяет собирать и анализировать трассировки производительности системы, предоставляя детализированные данные о времени выполнения различных операций. 1⃣Включите режим разработчика на устройстве. 2⃣В "Настройки" -> "Для разработчиков" включите "Enable GPU Debug Layers". 3⃣Запустите команду adb shell am broadcast -a com.android.systemui.screenshot.ScreenshotService.ACTION_SYSTRACE. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое сущность Observable? Это объект, который может производить данные (события) и передавать их подписчикам (Observer). Он используется для работы с асинхронными потоками данных. Основные возможности: 1. Генерация данных. 2. Обработка данных через операторы. 3. Управление подпиской и отпиской. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как сделать метод потокобезопасным? Использовать ключевое слово synchronized — оно не даёт методу быть вызванным из двух потоков одновременно. Можно также использовать блокировки (Lock) или атомарные типы (AtomicInteger). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как подключить BroadcastReceiver, чтобы он смог получать сообщения? Подключение BroadcastReceiver в Android состоит из двух основных шагов: создание самого ресивера и его регистрация. Ресивер можно зарегистрировать как статически в манифесте, так и динамически в коде. 🚩Создание BroadcastReceiver Создадим простой BroadcastReceiver, который будет реагировать на определённое событие, например, на получение SMS. import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Сообщение получено!", Toast.LENGTH_SHORT).show(); } } 🚩Регистрация ресивера 🟠Статическая регистрация в манифесте Можно зарегистрировать ресивер в файле AndroidManifest.xml. Это удобно, когда вы хотите, чтобы ресивер всегда был активен и слушал определённые системные события, например, перезагрузку устройства или получение SMS. 🟠Динамическая регистрация в коде Иногда нужно регистрировать ресивер только на время выполнения определённой активности или службы. В этом случае лучше использовать динамическую регистрацию. import android.content.IntentFilter; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private MyBroadcastReceiver myBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myBroadcastReceiver = new MyBroadcastReceiver(); } @Override protected void onStart() { super.onStart(); IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(myBroadcastReceiver, filter); } @Override protected void onStop() { super.onStop(); unregisterReceiver(myBroadcastReceiver); } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие есть реализации коллекций? - ArrayList, LinkedList, - HashSet, TreeSet, LinkedHashSet, - HashMap, TreeMap, LinkedHashMap, - PriorityQueue, ArrayDeque. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какая особенность у Data Class относительно других Kotlin Classes? Data Class автоматически генерирует equals, hashCode, toString, copy, и componentN функции. Они удобны для хранения данных и значительно упрощают работу с неизменяемыми структурами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Расскажи о контрактах equals и hashCode Методы equals() и hashCode() используются для сравнения объектов и их корректной работы в коллекциях (Set, Map). 🚩Контракт `equals()` Метод equals() должен: Рефлексивность: a.equals(a) → true (объект равен самому себе). Симметричность: a.equals(b) == b.equals(a). Транзитивность: если a == b и b == c, то a == c. Согласованность: если a == b, то a.equals(b) всегда возвращает одно и то же, пока объект не изменится. Сравнение с null всегда даёт false: a.equals(null) == false. class User(val name: String, val age: Int) { override fun equals(other: Any?): Boolean { if (this === other) return true // Проверка на ссылочное равенство if (other !is User) return false // Проверка типа return name == other.name && age == other.age // Сравнение полей } } val user1 = User("Alice", 25) val user2 = User("Alice", 25) println(user1 == user2) // true (потому что переопределён equals) 🚩Контракт `hashCode()` Метод hashCode() должен: Согласованность с equals(): если a == b, то a.hashCode() == b.hashCode(). Но обратное не обязательно: два разных объекта могут иметь одинаковый hashCode(). Хеш-код не должен меняться, если объект не изменился. class User(val name: String, val age: Int) { override fun equals(other: Any?): Boolean { if (this === other) return true if (other !is User) return false return name == other.name && age == other.age } override fun hashCode(): Int { return name.hashCode() * 31 + age // 31 - стандартный коэффициент } } val userSet = HashSet() userSet.add(User("Alice", 25)) println(userSet.contains(User("Alice", 25))) // true 🚩Автоматическая генерация в Kotlin Чтобы не писать equals() и hashCode() вручную, можно использовать data class: data class User(val name: String, val age: Int) data class автоматически создаёт equals(), hashCode(), а также copy() и toString(). val user1 = User("Alice", 25) val user2 = User("Alice", 25) println(user1 == user2) // true (equals) println(user1.hashCode() == user2.hashCode()) // true Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как работает async/await? async запускает асинхронную корутину, возвращающую Deferred, аналог Future. await приостанавливает выполнение до получения результата. Это позволяет параллельно выполнять задачи и синхронно работать с результатом. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!
Una plataforma de videoconferencias corporativa segura con soporte para hasta 10.000 usuarios. Servicio sencillo y fiable para el trabajo en equipo.
CanalForçaJovemUniversalEventos y noticias de Brasil.
Canal sobre desarrollo de front-end: noticias, herramientas, marcos y mejores prácticas para diseñadores web.