Logo
TGCATALOG
Catalog Collections Blog
Kotlin | Interview Questions

Kotlin | Interview Questions

Interview questions for Kotlin developers with answers.

No ratings
686
27.10.2026
686
27.10.2026
No ratings
686
27.10.2026
Safe redirect via bot
О канале

Interview questions for Kotlin developers with answers.

Подписчиков 2,449
Тематика Technology
Язык English
Ссылка t.me/easy_kotlin

We also recommend

Kekaton AI | Voiceover and voice clone
Kekaton AI | Voiceover and voice clone
Bot

AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.

Description

Kotlin interview questions: extensions, coroutines, collections. With code examples and explanations for Android and backend.

Latest posts

Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 Какие есть операторы Flow? Операторы в Flow бывают: - Создания: flow {}, flowOf(), asFlow(). - Трансформации: map(), flatMapConcat(), filter(), transform(). - Буферизации: buffer(), conflate(), collectLatest(). - Объединения: zip(), combine(). - Терминальные: collect(), toList(), first(). Эти операторы помогают эффективно обрабатывать, изменять и управлять потоками данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 Как бороться с тем что из-за deeplink активити может открыться много раз? Когда используется deeplink, может возникнуть проблема, что одно и то же Activity может быть открыто несколько раз в стеке задач. Это происходит, если приложение запускается из внешнего источника (например, из браузера или другого приложения), и Android создает новую задачу или новую копию Activity вместо использования уже существующей. Чтобы справиться с этим, нужно правильно настроить launchMode, интенты и флаги. 🚩Причина проблемы При запуске приложения через deep link, система Android может: 1. Создать новый экземпляр вашего Activity (даже если оно уже существует в стеке задач). 2. Поместить новую задачу в стек задач. Если это не контролировать, пользователь может увидеть много дубликатов одного и того же Activity, что плохо для UX и может вызвать утечку памяти. 🚩Решения 🟠Использование launchMode в манифесте В файле AndroidManifest.xml можно настроить поведение Activity с помощью атрибута launchMode: singleTop: Если Activity уже находится на вершине стека, система не будет создавать новый экземпляр. singleTask: Убедитесь, что только один экземпляр Activity существует в задаче. Если Activity уже существует, система передаст интент в метод onNewIntent(). singleInstance: Подходит для случаев, когда Activity должно быть абсолютно уникальным (используется редко). 🟠Использование флагов в интенте Если вы используете deep link или запускаете Activity вручную, можно добавить флаги, чтобы управлять созданием экземпляров: val intent = Intent(this, MyActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP startActivity(intent) 🟠Обработка метода onNewIntent() Если используется singleTop или singleTask, система вызывает метод onNewIntent(Intent intent) вместо создания нового экземпляра Activity. Этот метод можно переопределить для обработки новых данных из интента override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) // Обработка нового интента val data = intent?.data // Используйте данные deeplink } 🟠Использование taskAffinity Если требуется, чтобы разные deep link открывали одну и ту же задачу, можно настроить taskAffinity. Это нужно реже, но полезно, если нужно обрабатывать ссылки с разными контекстами. 🟠Проверка состояния Activity Дополнительно можно вручную проверять, существует ли нужное Activity в текущем состоянии приложения, например, используя LiveData или ViewModel. Файл AndroidManifest.xml Файл MyActivity.kt class MyActivity : AppCompatActivity() { override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) // Обработка данных из нового интента (deeplink) val uri = intent?.data uri?.let { // Например, получить параметры из ссылки val param = it.getQueryParameter("id") Log.d("Deeplink", "Parameter id: $param") } } } Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 В каких случаях используют atomic, в каких synchronized? В Kotlin для работы с многопоточностью можно использовать atomic переменные или synchronized блоки. Они помогают избежать гонок данных (race conditions), когда несколько потоков одновременно изменяют одну и ту же переменную. 🚩Когда использовать `atomic` переменные? Atomic переменные (AtomicInteger, AtomicLong, AtomicReference и др.) используются, когда нужно быстро и безопасно обновлять одно значение без блокировки потока. Высокая производительность – атомарные операции работают быстрее, чем synchronized. Потокобезопасность – операции выполняются без блокировок (lock-free). Удобство – простые методы incrementAndGet(), compareAndSet() и т. д. Работает только с одним значением – не подходит для сложных операций. Не подходит для зависимых изменений (например, если изменение одной переменной зависит от другой). import java.util.concurrent.atomic.AtomicInteger val counter = AtomicInteger(0) fun increment() { counter.incrementAndGet() // Увеличиваем значение безопасно } 🟠Когда использовать `synchronized`? Используется, когда нужно защитить сразу несколько связанных операций от одновременного выполнения в нескольких потоках. Подходит для сложных операций с несколькими переменными. Работает с любыми типами данных. Снижает производительность – потоки ждут, пока один поток закончит работу. Может вызывать deadlock (взаимную блокировку). val lock = Any() var count = 0 fun increment() { synchronized(lock) { count++ // Только один поток может изменять `count` одновременно } } Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 Зачем нужны Data Class и Sealed Classes? Data Class и Sealed Class решают разные задачи и обеспечивают улучшения в организации кода, управлении состоянием и безопасности типов. Они вносят значительные упрощения и повышают читаемость кода в Kotlin-проектах. 🚩Зачем они нужны Data Class предназначены для хранения данных и автоматически предоставляют ряд полезных методов, что упрощает разработку и уменьшает объем шаблонного кода. Основные причины использования Data Class: 🟠Сокращение кода Автоматически генерирует методы equals(), hashCode(), и toString(), а также copy() и компонентные функции для объектов данных. Это избавляет от необходимости ручной реализации этих методов, что уменьшает количество кода и возможность ошибок. 🟠Упрощение передачи данных Идеально подходят для передачи данных между различными частями приложения, например, между слоями в архитектуре MVVM или при передаче данных между активностями и фрагментами. 🟠Поддержка неизменяемости С помощью них легко создавать неизменяемые объекты, что способствует безопасной работе с данными, особенно в многопоточной среде. 🚩Зачем они нужны Sealed Class используются для определения закрытых иерархий классов, где все потомки известны и ограничены. Они полезны по следующим причинам: 🟠Полное покрытие случаев в `when` Гарантируют, что все возможные подтипы обработаны в выражениях when, что предотвращает ошибки во время выполнения из-за пропущенных случаев. Это упрощает управление состояниями и делает код более безопасным и предсказуемым. 🟠Ограниченное наследование Ограничивают возможность создания подклассов за пределами файла, в котором они объявлены. Это предотвращает неожиданное наследование и сохраняет иерархию классов контролируемой и понятной. 🟠Инкапсуляция Поскольку все расширения таких классов должны быть объявлены в том же файле, это способствует лучшей инкапсуляции и организации кода. data class User(val name: String, val age: Int) Пример Sealed Class sealed class Result { data class Success(val data: String) : Result() data class Failure(val error: Throwable) : Result() } fun handleResult(result: Result) { when (result) { is Result.Success -> println("Success with data: ${result.data}") is Result.Failure -> println("Failure with error: ${result.error.message}") } } Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 Как написать наследование между двумя классами в Kotlin? Через open и :. Родительский класс должен быть open, а дочерний объявляется с class B : A(). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 Как сказать адаптеру перерисовать список, если какой-то элемент удалился? Если удалился элемент из списка, нужно: Удалить его из списка данных. Сообщить 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() // Перерисовывает весь список (медленно) } Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 Какие особенности у DDP-протокола? DDP (Distributed Data Protocol) — используется в Meteor для реактивной передачи данных между клиентом и сервером. Поддерживает WebSocket и JSON-формат, обеспечивает автоматическую синхронизацию. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 Почему могут пропадать пользовательские данные при повороте экрана? Пропадание пользовательских данных при повороте экрана в Android-приложениях является распространенной проблемой, связанной с тем, как Android управляет жизненным циклом активности. Когда устройство поворачивается, система уничтожает текущую активность и создает её заново, что приводит к потере данных, если они не были сохранены должным образом. 🚩Причины пропадания данных при повороте экрана 🟠Пересоздание активности 🟠Неправильное управление состоянием 🚩Способы предотвращения потери данных Сохранение состояния с помощью onSaveInstanceState и onRestoreInstanceState class MainActivity : AppCompatActivity() { private var userData: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if (savedInstanceState != null) { userData = savedInstanceState.getString("USER_DATA_KEY") // Восстановите данные в пользовательском интерфейсе } } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putString("USER_DATA_KEY", userData) } override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) userData = savedInstanceState.getString("USER_DATA_KEY") // Восстановите данные в пользовательском интерфейсе } } Использование Retain Fragment. Этот метод сохраняет данные, используя фрагмент, который сохраняет своё состояние при пересоздании активности. class RetainFragment : Fragment() { var userData: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) retainInstance = true } } class MainActivity : AppCompatActivity() { private lateinit var retainFragment: RetainFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val fragmentManager = supportFragmentManager retainFragment = fragmentManager.findFragmentByTag("RETAIN_FRAGMENT") as RetainFragment? ?: RetainFragment().also { fragmentManager.beginTransaction().add(it, "RETAIN_FRAGMENT").commit() } // Используйте данные из RetainFragment val userData = retainFragment.userData } } Использование SavedStateHandle в ViewModel class UserViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { var userData: String? get() = savedStateHandle.get("USER_DATA_KEY") set(value) = savedStateHandle.set("USER_DATA_KEY", value) } class MainActivity : AppCompatActivity() { private lateinit var viewModel: UserViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(UserViewModel::class.java) // Используйте данные из ViewModel val userData = viewModel.userData } } Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Interview Questions
Kotlin | Interview Questions
🔒Открыть пост
и посмотреть медиа
🤔 Можно ли прервать выполнение `forEach`? Нет, forEach не поддерживает инструкции break или continue. Для прерывания используйте цикл for. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Interview Questions
FAQ

Open Kotlin | Interview Questions in Telegram and press the Start button. No separate registration is required.

Yes. The service is designed to be straightforward: open the resource, follow the on-screen instructions and start using it.

No. You can use Kotlin | Interview Questions directly in Telegram unless the resource description says otherwise.

Access depends on the resource. Check the current information in Telegram after opening Kotlin | Interview Questions.

The exact features depend on the resource. Open Kotlin | Interview Questions to see its current functions, content and access conditions.
Subscriber dynamics
+-0.1% last 30 days
Current
2,449
Month ago
2,452
Average growth
+0 / day
Updated
2 days ago

Reviews for channel Kotlin | Interview Questions

Log in to leave a review

Only registered users can share their opinion.

No reviews yet

Be the first to share your impression of this resource!

Similar resources

Loading
Switch to Light Theme
Home Catalog Collections Blog Login