и посмотреть медиа
Kotlin | Вопросы собесов
и посмотреть медиа
Вопросы для Kotlin-разработчиков с ответами.
Вопросы для Kotlin-разработчиков с ответами.
AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.
Вопросы на Kotlin-собеседованиях: расширения, корутины, коллекции. С примерами кода и объяснениями для Android и backend.
🤔 Чем отличается data push от identification push? – Data push — содержит полезную нагрузку (данные), которые обрабатываются приложением (например, текст сообщения, обновления). – Identification push — содержит только метаинформацию, которая говорит приложению, что нужно самостоятельно запросить данные с сервера. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Для проектов в которых есть несколько модулей, там может быть много Android Manifest'ов, для чего это делается? В многомодульных проектах каждый модуль может иметь свой AndroidManifest.xml, чтобы: Задавать зависимости (uses-permission, uses-feature) для конкретного модуля. Определять компоненты (Activity, Service, BroadcastReceiver) для каждого модуля. Автоматически объединять манифесты всех модулей в AndroidManifest.xml главного (app) модуля. 🚩Как объединяются манифесты в многомодульном проекте? При сборке Gradle автоматически сливает (merge) все AndroidManifest.xml в один итоговый файл. app/ ├── src/main/AndroidManifest.xml ← Главный манифест ├── java/com/example/MainActivity.kt ├── res/ ├── build.gradle feature_login/ ├── src/main/AndroidManifest.xml ← Манифест модуля `login` ├── java/com/example/login/LoginActivity.kt ├── res/ ├── build.gradle feature_chat/ ├── src/main/AndroidManifest.xml ← Манифест модуля `chat` ├── java/com/example/chat/ChatActivity.kt ├── res/ ├── build.gradle 🚩Как работает объединение манифестов? При сборке манифесты модулей сливаются в манифест главного модуля. feature_login (feature_login/src/main/AndroidManifest.xml) feature_chat (feature_chat/src/main/AndroidManifest.xml) После объединения итоговый AndroidManifest.xml выглядит так 🚩Зачем модулям свой `AndroidManifest.xml`? 🟠Разные разрешения (`uses-permission`) для каждого модуля Например, модуль camera требует CAMERA, но другие модули — нет. 🟠Разные `Activity`, `Service`, `BroadcastReceiver` в каждом модуле Каждый модуль добавляет только свои компоненты (например, LoginActivity в feature_login). 🟠Разные зависимости для разных модулей Например, модуль feature_map использует Google Maps, но feature_login — нет. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как можно сделать Activity-фрагменты? – Выделить каждый экран в Fragment, – Хостить их в Activity, – Использовать FragmentTransaction или Navigation Component для навигации. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как по объекту понять, что он не используется? Сильная ссылка - это ссылка, которая напрямую указывает на объект и предотвращает его сборку сборщиком мусора. 🚩Основные подходы 🟠WeakReference Использование слабых ссылок (WeakReference) позволяет определить, был ли объект освобожден сборщиком мусора. 🟠ObjectWatcher (в LeakCanary) LeakCanary использует ObjectWatcher для отслеживания объектов. Если объект не освобожден, ObjectWatcher уведомляет об утечке. import java.lang.ref.WeakReference; public class MemoryLeakExample { public static void main(String[] args) { // Создание объекта MyObject myObject = new MyObject(); // Создание слабой ссылки на объект WeakReference weakRef = new WeakReference(myObject); // Удаление сильной ссылки myObject = null; // Вызов сборщика мусора System.gc(); // Проверка, была ли слабая ссылка освобождена if (weakRef.get() == null) { System.out.println("Object has been garbage collected"); } else { System.out.println("Object is still alive"); } } static class MyObject { // Некоторая логика класса } } 🚩Понимание, что объект не используется 🟠Нет сильных ссылок Убедитесь, что на объект нет сильных ссылок. Только слабые, мягкие или фантомные ссылки не предотвращают сборку объекта. 🟠Сборка мусора Если объект становится недоступным через сильные ссылки, сборщик мусора может его освободить. 🟠Проверка с помощью WeakReference Слабые ссылки могут быть использованы для проверки того, был ли объект освобожден. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что известно про антипаттерны? Антипаттерны — это распространённые, но неэффективные или опасные решения, например: – God Object, – Spaghetti Code, – Lava Flow, – Copy-Paste Programming. Они приводят к проблемам в сопровождении и развитии кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Вставка значения быстрее в Linked list или в Array list? 🚩Вставка в `ArrayList` ArrayList реализован на основе массива. 🟠Вставка в конец Амортизированное O(1). Если массив не заполнен, элемент добавляется в конец списка. В случае, если массив заполнен, требуется выделение нового массива и копирование элементов, что занимает O(n) времени. val arrayList = ArrayList() arrayList.add(1) // Быстрая вставка в конец 🟠Вставка в начало или середину O(n). Необходимо сдвинуть все элементы, начиная с позиции вставки, чтобы освободить место для нового элемента. Это требует времени, пропорционального количеству элементов после позиции вставки. arrayList.add(0, 2) // Медленная вставка в начало arrayList.add(1, 3) // Медленная вставка в середину 🚩Вставка в LinkedList LinkedList реализован на основе узлов, где каждый узел содержит ссылку на следующий и/или предыдущий узел (в случае двусвязного списка). 🟠Вставка в начало: O(1). Для добавления элемента в начало достаточно изменить ссылки первого узла и нового узла. val linkedList = LinkedList() linkedList.addFirst(1) // Быстрая вставка в начало 🟠Вставка в конец O(1) (если есть ссылка на последний узел) или O(n) (если необходимо пройти весь список). Если список двусвязный и хранится ссылка на последний элемент, вставка в конец осуществляется за O(1). В противном случае, требуется пройти весь список до конца. linkedList.addLast(2) // Быстрая вставка в конец, если есть ссылка на последний узел 🟠Вставка в середину O(n). Необходимо пройти список до нужной позиции и изменить ссылки узлов. linkedList.add(1, 3) // Медленная вставка в середину Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое DEX? DEX — Dalvik Executable — бинарный формат байткода, исполняемый Dalvik/ART. Файл classes.dex содержит весь скомпилированный Kotlin/Java код. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие способы навигации знаешь? В Android есть несколько способов навигации между экранами. Давай разберём основные. 🟠Activity-based навигация Каждый экран – это отдельная Activity, переход осуществляется с помощью Intent. val intent = Intent(this, SecondActivity::class.java) startActivity(intent) 🟠Fragment-based навигация Один Activity содержит несколько Fragment, навигация через FragmentManager. supportFragmentManager.beginTransaction() .replace(R.id.container, SecondFragment()) .addToBackStack(null) .commit() 🟠Navigation Component (Jetpack) Google рекомендует Navigation Component для удобной работы с Fragment. findNavController().navigate(R.id.action_firstFragment_to_secondFragment) 🟠Bottom Navigation / Tab Navigation Используется BottomNavigationView или TabLayout для переключения между экранами. bottomNavigationView.setOnNavigationItemSelectedListener { item -> when (item.itemId) { R.id.home -> replaceFragment(HomeFragment()) R.id.profile -> replaceFragment(ProfileFragment()) } true } 🟠Drawer Navigation (Navigation Drawer) Боковое меню (DrawerLayout) с пунктами навигации. drawerLayout.openDrawer(GravityCompat.START) 🟠Deep Links и App Links Навигация через ссылки (например, myapp://profile/123). 🟠Navigation в Jetpack Compose Используется NavHost и NavController. NavHost(navController, startDestination = "home") { composable("home") { HomeScreen(navController) } composable("profile") { ProfileScreen(navController) } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чём разница между action и category у Intent? - action — описывает действие, которое должен выполнить Intent (например, VIEW, EDIT). - category — определяет тип компонентов, которые могут обработать Intent (например, LAUNCHER, DEFAULT). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!