Logo
TGCATALOG
Каталог Подборки Блог
Kotlin | Вопросы собесов

Kotlin | Вопросы собесов

Вопросы для Kotlin-разработчиков с ответами.

Нет оценок
726
29.10.2026
726
29.10.2026
Нет оценок
726
29.10.2026
Безопасный переход через бот
О канале

Вопросы для Kotlin-разработчиков с ответами.

Подписчиков 2,451
Тематика Технологии
Язык Русский
Ссылка t.me/easy_kotlin

Также рекомендуем

Kekaton AI | Озвучка и клон голоса
Kekaton AI | Озвучка и клон голоса
Бот

AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.

Описание

Вопросы на Kotlin-собеседованиях: расширения, корутины, коллекции. С примерами кода и объяснениями для Android и backend.

Последние посты

Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 После перебирания данных итератором, гарантируется ли очередность получения этих данных? Гарантируется только в том случае, если структура данных поддерживает порядок (например, List, LinkedList). Если коллекция неупорядоченная (например, HashSet, HashMap.keySet()), порядок может быть произвольным и не повторяться. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Можно ли создать анонимный класс внутри inline функции? Анонимный класс внутри inline-функции будет инстанцироваться при каждом вызове функции, что ломает цель inline — избавляться от накладных расходов на объекты. 🚩Что такое анонимный класс в Kotlin? Анонимный класс — это класс без имени, который можно создать с помощью object : Interface {}. interface ClickListener { fun onClick() } fun main() { val listener = object : ClickListener { override fun onClick() { println("Кнопка нажата!") } } listener.onClick() } 🚩Анонимный класс в `inline`-функции Если мы создадим анонимный класс внутри inline-функции, он будет создаваться каждый раз при вызове функции! inline fun setClickListener(action: () -> Unit) { val listener = object : ClickListener { override fun onClick() { action() } } listener.onClick() } fun main() { setClickListener { println("Нажато!") } } Ошибка компиляции Inline function cannot contain object expressions 🚩Как обойти ограничение? Если нужно использовать inline, можно передавать лямбду вместо анонимного класса. Рабочий вариант inline fun setClickListener(noinline action: () -> Unit): ClickListener { return object : ClickListener { override fun onClick() { action() } } } fun main() { val listener = setClickListener { println("Нажато!") } listener.onClick() } Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Расскажи про data классы и sealed классы Data-классы в Kotlin предназначены для хранения данных и автоматически создают полезные методы, такие как `equals()`, `hashCode()`, `toString()`, а также методы для копирования объектов. Они удобны для представления сущностей с полями, которые нужно сравнивать, копировать или выводить, например, записи в базе данных. Sealed-классы (запечатанные классы) ограничивают наследование, позволяя создавать иерархии с фиксированным набором подклассов, что полезно для работы с типами, набор которых известен на этапе компиляции. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Расскажи подробно, что из себя представляет каждый компонент Аndroid-приложения? Android-приложение состоит из четырёх основных компонентов: Activity – UI-экран приложения. Service – фоновая работа без UI. BroadcastReceiver – слушает системные и пользовательские события. ContentProvider – делится данными между приложениями. 🚩`Activity` – экран приложения (UI) Отображает интерфейс пользователя. Обрабатывает взаимодействие (нажатия, свайпы, ввод текста). Управляется системой через жизненный цикл (Lifecycle). Пример Activity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Загружаем XML-разметку } } 🚩`Service` – фоновая работа без UI Выполняет длительные фоновые задачи (музыка, загрузка файлов). Может работать даже если приложение закрыто. НЕ имеет UI (не рисует View). Пример Service class MyService : Service() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { Thread { // Долгая фоновая задача }.start() return START_STICKY } override fun onBind(intent: Intent?): IBinder? = null } Запуск сервиса startService(Intent(this, MyService::class.java)) Остановка сервиса stopService(Intent(this, MyService::class.java)) 🚩`BroadcastReceiver` – обработка событий (системных и пользовательских) - Получает события системы (BOOT_COMPLETED, BATTERY_LOW). - Слушает события других приложений. - Может быть динамическим (через код) или статическим (AndroidManifest.xml). Пример BroadcastReceiver (отключение Wi-Fi) class NetworkReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) { println("Сеть изменилась!") } } } Регистрируем BroadcastReceiver в AndroidManifest.xml Можно зарегистрировать динамически в коде val receiver = NetworkReceiver() registerReceiver(receiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)) 🚩`ContentProvider` – обмен данными между приложениями - Дает доступ к данным *другим приложениям. - Позволяет безопасно работать с БД (Room, SQLite). - Используется для Contacts, MediaStore, Calendar. Пример ContentProvider (чтение контактов) val cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null) cursor?.use { while (it.moveToNext()) { val name = it.getString(it.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) println("Контакт: $name") } } Запрос данных через Uri val uri = Uri.parse("content://com.example.provider/table") contentResolver.query(uri, null, null, null, null) 🚩Как компоненты взаимодействуют между собой? Пример: Activity запускает Service через Intent startService(Intent(this, MyService::class.java)) Пример: Service отправляет Broadcast, а Receiver его ловит sendBroadcast(Intent("com.example.CUSTOM_EVENT")) Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что такое UI thread и Worker thread? 1. UI thread: - Основной поток приложения, где выполняются все операции с пользовательским интерфейсом. - Долгие операции здесь могут привести к замораживанию приложения. 2. Worker thread: - Фоновые потоки для выполнения долгих задач (например, обработки данных, запросов в сеть). - Обновление UI из фонового потока невозможно. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 В чём отличие Dalvik Virtual Machine и ART(Android Run Time)? Dalvik Virtual Machine (DVM) и Android Runtime (ART) — это две среды выполнения для запуска Android-приложений. DVM использовалась в ранних версиях Android, в то время как ART пришла на замену DVM, начиная с Android 5.0 (Lollipop). Основное различие между ними заключается в способе выполнения кода и производительности. 🚩Основные отличия между Dalvik и ART 🟠Тип выполнения кода Dalvik Virtual Machine (DVM): Just-In-Time (JIT) компиляция Dalvik использует JIT-компиляцию (Just-In-Time), что означает, что код приложения компилируется в машинный код во время выполнения (runtime). Когда приложение запускается, DVM интерпретирует байт-код (.dex-файлы), а при необходимости компилирует часть кода "на лету" для повышения производительности. Этот подход требует дополнительных ресурсов во время работы приложения, что увеличивает задержки (лаг) при запуске и потребляет больше CPU и батареи. ART использует AOT-компиляцию (Ahead-Of-Time), которая компилирует весь код приложения в машинный код заранее — во время установки приложения. Это устраняет необходимость интерпретации и JIT-компиляции во время работы приложения, что снижает нагрузку на процессор и улучшает производительность. 🟠Производительность Dalvik (DVM): Поскольку JIT-компиляция происходит во время работы приложения, это создает дополнительную нагрузку на процессор и замедляет выполнение. Производительность ниже из-за частой интерпретации кода. ART: Благодаря AOT-компиляции приложения запускаются быстрее и работают плавнее. Потребление ресурсов (CPU, батарея) значительно ниже, поскольку интерпретация и компиляция кода уже выполнены на этапе установки. 🟠Ускорение запуска приложений Dalvik (DVM): Приложения запускаются медленнее, так как DVM интерпретирует код во время каждого запуска. ART: Приложения запускаются быстрее, так как код уже компилирован в машинный код на этапе установки. 🟠Потребление батареи Dalvik (DVM): Потребляет больше батареи из-за того, что JIT-компиляция выполняется постоянно во время работы приложения. ART: Более энергоэффективен, так как большая часть работы выполнена заранее, и процессор не нагружается так сильно. 🟠Время установки приложения Dalvik (DVM): Приложения устанавливаются быстрее, так как код не компилируется заранее. ART: Приложения устанавливаются медленнее, так как на этапе установки выполняется AOT-компиляция. Например, установка приложения в ART может занимать больше времени, чем в DVM, из-за компиляции кода. 🟠Память Dalvik (DVM): DVM использует меньше памяти на устройстве, так как код компилируется только во время работы приложения, и машинный код не сохраняется. ART: AOT-компиляция увеличивает размер приложения, так как компилированный машинный код сохраняется на устройстве. Это требует больше места в памяти. 🟠Отладка и инструменты Dalvik (DVM): Ограниченные возможности отладки, так как JIT-компиляция не предоставляет доступа к заранее оптимизированному коду. ART: ART позволяет разработчикам использовать более продвинутые инструменты отладки (например, профилирование исполнения) и лучше анализировать производительность приложений. 🟠Совместимость Dalvik (DVM): Dalvik был изначально разработан для устройств с ограниченными ресурсами (медленные процессоры, малый объем оперативной памяти). Приложения работали в основном в условиях ограниченного оборудования. ART: ART ориентирован на современные устройства с мощными процессорами и большим объемом памяти. Он лучше справляется с современными требованиями приложений. 🚩Пример различий 🟠На Dalvik (DVM): - Установка быстрая. - При запуске приложения DVM интерпретирует и компилирует код. Это требует времени и ресурсов. - Приложение может работать медленно из-за интерпретации кода в реальном времени. 🟠На ART: - Установка занимает больше времени, так как код компилируется сразу. - Запуск приложения быстрый, потому что код уже готов к исполнению. - Приложение работает плавно, так как отсутствует необходимость компиляции во время выполнения. Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как расшифровывается APK? APK — Android Package. Это архив (аналог .zip), содержащий: - Скомпилированный код (classes.dex) - Ресурсы (res, assets) - Манифест (AndroidManifest.xml) - Подпись Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как запустить асинхронные операции в чистом Android? В Android существует несколько способов запуска асинхронных операций. Наиболее распространённые из них включают использование AsyncTask (хотя он уже устарел), HandlerThread, AsyncTaskLoader, ExecutorService и современные подходы с использованием Kotlin Coroutines и библиотеки WorkManager. 🟠AsyncTask (устаревший) AsyncTask был одним из первых инструментов для выполнения асинхронных задач, однако его использование сейчас не рекомендуется из-за проблем с управлением жизненным циклом и утечками памяти. private class MyAsyncTask extends AsyncTask { @Override protected String doInBackground(Void... voids) { // Выполнение длительной операции return "Result"; } @Override protected void onPostExecute(String result) { // Обновление UI после завершения операции } } // Запуск new MyAsyncTask().execute(); 🟠HandlerThread HandlerThread — это удобный способ создания фонового потока с циклом обработки сообщений. HandlerThread handlerThread = new HandlerThread("MyHandlerThread"); handlerThread.start(); Handler handler = new Handler(handlerThread.getLooper()); handler.post(new Runnable() { @Override public void run() { // Выполнение длительной операции } }); 🟠ExecutorService ExecutorService из стандартной библиотеки Java предоставляет более гибкий способ управления потоками. ExecutorService executor = Executors.newSingleThreadExecutor(); executor.submit(new Runnable() { @Override public void run() { // Выполнение длительной операции } }); 🟠Kotlin Coroutines Корутины в Kotlin — это современный и мощный инструмент для асинхронного программирования. Они упрощают работу с асинхронными задачами и обеспечивают безопасность работы с UI. import kotlinx.coroutines.* fun performAsyncTask() { GlobalScope.launch(Dispatchers.IO) { // Выполнение длительной операции val result = longRunningTask() withContext(Dispatchers.Main) { // Обновление UI после завершения операции } } } suspend fun longRunningTask(): String { delay(1000) // Симуляция длительной операции return "Result" } 🟠WorkManager WorkManager — это библиотека для выполнения фоновых задач, которая обеспечивает выполнение задач даже после закрытия приложения или перезагрузки устройства. public class MyWorker extends Worker { public MyWorker(@NonNull Context context, @NonNull WorkerParameters params) { super(context, params); } @NonNull @Override public Result doWork() { // Выполнение длительной операции return Result.success(); } } // Запуск Worker WorkManager workManager = WorkManager.getInstance(context); OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MyWorker.class).build(); workManager.enqueue(request); 🟠RxJava RxJava — это библиотека для реактивного программирования, которая также может быть использована для выполнения асинхронных задач. import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.schedulers.Schedulers; Observable.fromCallable(() -> { // Выполнение длительной операции return "Result"; }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(result -> { // Обновление UI после завершения операции }); Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что такое PendingIntent? PendingIntent — это обёртка над Intent, позволяющая другим компонентам (например, системным) выполнить Intent от имени вашего приложения, даже если оно сейчас не активно. Используется: - В уведомлениях (NotificationManager). - Для запуска BroadcastReceiver или Service. - В AlarmManager. Он играет роль разрешения: система может отложить выполнение кода, но с уже подтверждёнными правами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Динамика подписчиков
+0.0% за 30 дней
Текущие
2,451
Месяц назад
2,450
Средний рост
+0 / день
Обновлено
3 часа назад

Отзывы о канале Kotlin | Вопросы собесов

Авторизуйтесь, чтобы оставить отзыв

Только зарегистрированные пользователи могут делиться своим мнением.

Пока нет отзывов

Станьте первым, кто поделится своим впечатлением об этом ресурсе!

Похожие ресурсы

Loading
Переход на светлую тему
Главная Каталог Подборки Блог Вход