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 | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как определить изменение скорости работы программы после наших действий? 🟠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. Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 В чём измеряется производительность layout? Производительность измеряется в миллисекундах времени отрисовки (measure, layout, draw). Также учитывается количество операций пересчёта и перекомпоновки. В Jetpack Compose оценивается количеством recomposition и snapshot изменений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Зачем нужно разделять отображение и бизнес-логику? Разделение UI и бизнес-логики делает код понятнее, тестируемее и проще в поддержке. Это ключевой принцип чистой архитектуры (Clean Architecture) и паттернов MVP, MVVM, MVI. 🚩Что такое UI и бизнес-логика? Плохой код (UI + логика в Activity) class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val button = findViewById(R.id.button) button.setOnClickListener { val result = fetchData() // ❌ Логика в UI button.text = result } } fun fetchData(): String { return "Данные с сервера" // ❌ Тут должна быть ViewModel } } 🚩Как правильно разделять UI и логику? (MVVM) Разделим код на Activity + ViewModel MainActivity (только UI) class MainActivity : AppCompatActivity() { private val viewModel: MainViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val button = findViewById(R.id.button) viewModel.text.observe(this) { text -> button.text = text // ✅ UI обновляется из ViewModel } button.setOnClickListener { viewModel.loadData() // ✅ Вызываем бизнес-логику } } } MainViewModel (бизнес-логика) class MainViewModel : ViewModel() { private val _text = MutableLiveData() val text: LiveData = _text fun loadData() { _text.value = "Данные с сервера" // ✅ UI не знает, откуда данные } } Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что значит android:exported="true" / "false"? - android:exported="true" — компонент (Activity, Service, Receiver) доступен извне (например, через интенты или deeplinks). - android:exported="false" — компонент может вызываться только внутри приложения. С Android 12 это поле обязательно для всех компонентов с intent-filter. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как сохранить состояние скролла при пересоздании Activity? При пересоздании Activity (например, при повороте экрана) состояние ScrollView или RecyclerView сбрасывается. Чтобы этого избежать, можно сохранить и восстановить позицию скролла. 🟠Использование `onSaveInstanceState()` Android позволяет сохранять данные в Bundle перед уничтожением Activity, а затем восстанавливать их. class MainActivity : AppCompatActivity() { private lateinit var scrollView: ScrollView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) scrollView = findViewById(R.id.scrollView) // Восстанавливаем позицию скролла savedInstanceState?.let { val scrollY = it.getInt("scroll_position", 0) scrollView.post { scrollView.scrollTo(0, scrollY) } } } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putInt("scroll_position", scrollView.scrollY) } } 🟠Для `RecyclerView` У RecyclerView уже есть встроенный механизм сохранения состояния через LinearLayoutManager. class MainActivity : AppCompatActivity() { private lateinit var recyclerView: RecyclerView private lateinit var layoutManager: LinearLayoutManager override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) layoutManager = LinearLayoutManager(this) recyclerView = findViewById(R.id.recyclerView) recyclerView.layoutManager = layoutManager recyclerView.adapter = MyAdapter() // Восстанавливаем позицию скролла savedInstanceState?.let { val scrollPosition = it.getInt("recycler_position", 0) recyclerView.post { layoutManager.scrollToPosition(scrollPosition) } } } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putInt("recycler_position", layoutManager.findFirstVisibleItemPosition()) } } 🟠Использование `android:freezesText` для `EditText` Если EditText находится внутри ScrollView, можно включить android:freezesText="true", чтобы автоматически сохранять данные. Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как преобразовать горячий поток в холодный в RxJava и наоборот? Горячий поток можно симулировать, используя Subject с несколькими подписчиками. Холодный поток можно создать заново или применить defer, чтобы каждый подписчик получал независимый поток. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как в Ретрофите в гет методе поставить атрибут в путь в контретом месте? В Retrofit, чтобы передать значение в определенное место URL-адреса для GET-запроса, нужно использовать аннотацию @Path. Эта аннотация позволяет заменить параметр в строке пути на значение, переданное в метод. 🚩Как работает `@Path`? 1. Внутри аннотации @GET вы указываете строку пути, содержащую плейсхолдеры в фигурных скобках ({}). 2. Аннотация @Path связывает переменную метода с плейсхолдером в URL. 3. Когда метод вызывается, значение переменной подставляется вместо плейсхолдера в URL. Допустим, у вас есть API с эндпоинтом Ссылка скрыта Настраиваем интерфейс Retrofit interface ApiService { @GET("users/{id}/details") suspend fun getUserDetails( @Path("id") userId: String ): Response } Теперь, когда вы вызываете этот метод, вы можете передать значение для id, и Retrofit автоматически подставит его в URL val apiService = retrofit.create(ApiService::class.java) suspend fun fetchUserDetails() { val userId = "123" // Пример значения val response = apiService.getUserDetails(userId) if (response.isSuccessful) { println("User details: ${response.body()}") } else { println("Error: ${response.errorBody()?.string()}") } } 🚩Дополнительные аспекты использования `@Path` 🟠Как работают несколько параметров? Вы можете использовать несколько плейсхолдеров в пути и связать их с несколькими параметрами с помощью @Path. Например: API-эндпоинт Ссылка скрыта Интерфейс Retrofit interface ApiService { @GET("users/{userId}/posts/{postId}") suspend fun getPostDetails( @Path("userId") userId: String, @Path("postId") postId: String ): Response } Вызов метода val response = apiService.getPostDetails("123", "456") // URL: Ссылка скрыта 🟠Что если переменная null или пустая? Если вы передаете null или пустую строку в @Path, это вызовет ошибку, так как Retrofit требует обязательного значения для всех параметров пути. Убедитесь, что передаваемое значение всегда валидно. 🟠Как избежать ошибок при форматировании? Если значение пути может содержать символы, требующие экранирования (например, пробелы, специальные символы), Retrofit автоматически обработает это с помощью кодировки URL. Это делает использование @Path безопасным. @GET("search/{query}") suspend fun search( @Path("query") searchQuery: String ): Response Если вы вызовете метод с поисковым запросом apiService.search("hello world!") // Retrofit закодирует URL: Ссылка скрыта Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Откуда у Handler способность работать с главным потоком? Handler связан с Looper, который обрабатывает очередь сообщений. Главный поток имеет свой Looper, созданный автоматически при запуске приложения, и Handler, связанный с этим Looper, может отправлять сообщения в главный поток. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Kotlin | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Сколько типов инстансов у nothing? Nothing — это специальный bottom type (нижний тип), который означает: Функция никогда не возвращает результат (throw, error()). Код после Nothing недостижим. fun fail(): Nothing { throw IllegalStateException("Ошибка!") // Никогда не возвращает значение } 🚩Почему `Nothing` не имеет инстансов? Все классы в Kotlin могут иметь инстансы (объекты), кроме Nothing. Nothing нельзя создать (instantiate), потому что он не имеет конструктора. Любая переменная типа Nothing просто не существует. val x: Nothing = Nothing() // ❌ Ошибка: у Nothing нет конструктора 🚩Где используется `Nothing`? Используется в throw fun fail(): Nothing = throw IllegalArgumentException("Ошибка") Используется в TODO() fun getData(): String { TODO("Функция ещё не реализована") } Используется в if-else, где один вариант throw fun getValue(x: Int): String { return if (x > 0) "Позитивное число" else throw IllegalArgumentException("Отрицательное!") } Ставь 👍 и забирай 📚 Базу знаний
Kotlin | Вопросы собесов
Динамика подписчиков
+0.0% за 30 дней
Текущие
2,451
Месяц назад
2,450
Средний рост
+0 / день
Обновлено
5 часов назад

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

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

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

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

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

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

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