Мобильная разработка

Вопросы на собеседовании: Android

15 уроков · 5 разделов · бесплатно, без регистрации

Учебник собран из вопросов, которые реально звучат на Android-собеседованиях — от «расскажите про жизненный цикл Activity» до «как найти лишние рекомпозиции в Compose». Каждый урок разбирает один-три вопроса по одной схеме: что на самом деле хочет услышать интервьюер, развёрнутый ответ с примерами кода на Kotlin, типичные ошибки кандидатов и короткая выжимка, которую можно произнести за полминуты.

Прогрессия идёт от junior к senior: сначала платформа и язык, затем корутины и архитектура, в конце — UI и производительность. Курс пригодится и тем, кто готовится к собеседованию, и тем, кто хочет систематизировать разрозненные знания об Android.

Курс «Вопросы на собеседовании: Android» состоит из 5 разделов и 15 уроков: Основы платформы и жизненный цикл, Kotlin на собеседовании, Корутины и асинхронность, Архитектура приложения и UI и производительность. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Основы платформы и жизненный цикл

    1. Жизненный цикл Activity: onCreate, onStart, onResume и обратно

      Разбор классического вопроса Android-собеседования про жизненный цикл Activity: какие методы, в каком порядке, где регистрировать и освобождать ресурсы.

    2. Поворот экрана и жизненный цикл Fragment

      Что происходит с Activity при повороте экрана, как сохранить состояние через Bundle и ViewModel, чем жизненный цикл Fragment отличается от Activity и что такое viewLifecycleOwner.

    3. Context, Intent и четыре компонента приложения

      Что такое Context в Android и чем Application context отличается от Activity context, explicit и implicit Intent, PendingIntent и четыре компонента приложения — разбор для собеседования.

  2. 2 Kotlin на собеседовании

    1. val, var и настоящая неизменяемость. Extension-функции

      Чем val отличается от immutable в Kotlin, почему List не гарантирует неизменяемость, что такое const val и почему extension-функции не переопределяются — разбор для собеседования.

    2. Null safety: ?., ?:, !!, lateinit и платформенные типы

      Как устроена null safety в Kotlin: операторы ?. и ?:, безопасное приведение as?, lateinit против nullable, платформенные типы из Java и когда NPE всё-таки возможен.

    3. data class, sealed class и scope-функции

      Что генерирует data class и какие у него ловушки, чем sealed class отличается от enum и абстрактного класса, чем различаются let, run, with, apply и also — вопросы Kotlin-собеседования.

  3. 3 Корутины и асинхронность

    1. Зачем корутины вместо потоков и как работает suspend

      Чем корутина отличается от потока, как suspend-функция освобождает поток, что такое Continuation и почему suspend сама по себе не означает выполнение в фоне.

    2. CoroutineScope, структурная конкурентность и Dispatchers

      Что такое CoroutineScope и структурная конкурентность, чем viewModelScope лучше GlobalScope, разница launch и async, coroutineScope и supervisorScope, выбор Dispatchers в Android.

    3. Flow против LiveData, отмена и обработка ошибок

      Чем Flow отличается от LiveData, зачем StateFlow и repeatOnLifecycle, как устроена кооперативная отмена корутин и почему try/catch вокруг launch не ловит исключения.

  4. 4 Архитектура приложения

    1. MVVM против MVI и роль ViewModel

      Чем MVI отличается от MVVM, как ViewModel переживает поворот экрана и почему в ней нельзя хранить Context, зачем SavedStateHandle и как отдавать одноразовые события.

    2. Слои, репозиторий и единый источник истины

      Зачем нужны слои data, domain и presentation, что должен и чего не должен делать Repository, что такое single source of truth и как отдавать результат через Result вместо исключений.

    3. Dependency Injection: Hilt, Dagger и тестируемость

      Зачем нужен Dependency Injection в Android, чем Hilt отличается от Dagger и от Koin, что такое @Binds и @Provides, scope-аннотации и как DI делает код тестируемым.

  5. 5 UI и производительность

    1. Jetpack Compose против View: что спрашивают

      Чем декларативный Compose отличается от императивной системы View, что такое state hoisting, remember и rememberSaveable, зачем LaunchedEffect и как совмещать Compose с XML.

    2. Рекомпозиция и её оптимизация

      Что запускает рекомпозицию в Jetpack Compose, что такое стабильные и нестабильные типы, зачем derivedStateOf и отложенное чтение состояния, как ключи в LazyColumn влияют на производительность.

    3. RecyclerView и DiffUtil, утечки памяти и ANR

      Как работает RecyclerView и зачем DiffUtil вместо notifyDataSetChanged, откуда берутся утечки памяти в Android и как их искать, что такое ANR и чем профилировать приложение.