Вопросы на собеседовании для Junior Android-разработчика

Milad Bonakdar
Автор
Подготовьтесь к Junior Android-собеседованию с вопросами по Kotlin, lifecycle, Jetpack Compose, Room, сети и корутинам.
Введение
На собеседовании Junior Android-разработчика обычно проверяют, можете ли вы практично объяснить Kotlin, жизненные циклы Android, состояние в Compose, локальное хранение, сетевые запросы и корутины. Сильный ответ связывает тему с небольшой надежной app: правильно хранить UI state, не блокировать главный поток, безопасно сохранять данные и понятно обрабатывать ошибки.
Используйте это руководство, чтобы отработать короткие ответы, а затем привяжите каждую тему к проекту из резюме или портфолио. Todo-приложение, погодная app или экран с API помогут звучать конкретно, а не как при пересказе заученного текста.
Основы Kotlin (6 вопросов)
1. В чем разница между val и var в Kotlin?
Ответ:
val: Объявляет неизменяемую (только для чтения) переменную. После присвоения ее значение нельзя изменить.var: Объявляет изменяемую переменную. Ее значение можно изменить после инициализации.- Рекомендация: Используйте
valпо умолчанию для безопасности. Используйтеvarтолько тогда, когда вам нужно переназначить значение.
Распространенность: Очень часто Сложность: Легко
2. Объясните Nullable типы и оператор Safe Call в Kotlin.
Ответ: Система типов Kotlin различает nullable и non-nullable типы, чтобы предотвратить исключения NullPointerException.
- Nullable тип: Добавьте
?после типа:String? - Safe Call (
?.): Вызывает метод, только если объект не равен null - Elvis Operator (
?:): Предоставляет значение по умолчанию, если null - Not-null Assertion (
!!): Выбрасывает исключение, если null (используйте умеренно)
Распространенность: Очень часто Сложность: Легко
3. В чем разница между class и data class в Kotlin?
Ответ:
- Обычный класс: Стандартное определение класса
- Data Class: Автоматически генерирует полезные методы для хранения данных
equals()иhashCode()toString()- Функция
copy() - Функции
componentN()для деструктуризации
Распространенность: Очень часто Сложность: Легко
4. Что такое Lambda-выражения и Higher-order функции в Kotlin?
Ответ:
- Lambda: Анонимная функция, которая может быть передана как значение
- Higher-order функция: Функция, которая принимает функции в качестве параметров или возвращает функцию
Распространенность: Очень часто Сложность: Средняя
5. Объясните Extension Functions в Kotlin.
Ответ: Extension Functions позволяют добавлять новые функции к существующим классам без изменения их исходного кода.
Распространенность: Часто Сложность: Легко
6. В чем разница между == и === в Kotlin?
Ответ:
==: Структурное равенство (сравнивает значения с использованиемequals())===: Ссылочное равенство (сравнивает ссылки в памяти)
Распространенность: Часто Сложность: Легко
Компоненты Android (5 вопросов)
7. Что такое Activity и объясните ее жизненный цикл.
Ответ: Activity представляет собой один экран с пользовательским интерфейсом. У него есть четко определенный жизненный цикл:
onCreate(): Activity создается. Инициализируйте UI, установите content view.onStart(): Activity становится видимой.onResume(): Activity находится на переднем плане и интерактивна.onPause(): Activity теряет фокус (другая activity выходит на передний план).onStop(): Activity больше не видна.onDestroy(): Activity уничтожается.
Распространенность: Очень часто Сложность: Легко
8. В чем разница между Activity и Fragment?
Ответ:
- Activity: Представляет собой полный экран. Точка входа для взаимодействия с пользователем. Имеет свой собственный жизненный цикл.
- Fragment: Многократно используемая часть UI внутри Activity. В одной activity может существовать несколько фрагментов. Имеет свой собственный жизненный цикл, связанный с хост-activity.
- Преимущества Fragment:
- Возможность повторного использования в разных activity
- Модульные компоненты UI
- Поддержка планшетов (многопанельные макеты)
- Интеграция компонента Navigation
Распространенность: Очень часто Сложность: Легко
9. Что такое Intent и какие у него типы?
Ответ: Intent - это объект обмена сообщениями, используемый для запроса действия от другого компонента приложения.
- Explicit Intent: Указывает точный компонент для запуска (по имени класса)
- Implicit Intent: Объявляет общее действие, и система находит подходящий компонент
Распространенность: Очень часто Сложность: Легко
10. Что такое Service в Android?
Ответ: Service - это компонент, который работает в фоновом режиме для выполнения длительных операций без пользовательского интерфейса.
- Типы:
- Foreground Service: Выполняет заметные операции (музыкальный проигрыватель). Отображает уведомление.
- Background Service: Выполняет операции, не заметные напрямую пользователем.
- Bound Service: Позволяет компонентам привязываться к нему и взаимодействовать.
Распространенность: Часто Сложность: Средняя
11. Что такое BroadcastReceiver?
Ответ: BroadcastReceiver - это компонент, который реагирует на широковещательные объявления системы.
- Сценарии использования: Низкий уровень заряда батареи, изменения сетевого подключения, получение SMS, завершение загрузки
- Регистрация:
- Статическая: В AndroidManifest.xml (ограничена в новых версиях Android)
- Динамическая: В коде (предпочтительнее)
Распространенность: Часто Сложность: Легко
UI Development (4 вопроса)
12. В чем разница между LinearLayout, RelativeLayout и ConstraintLayout?
Ответ:
- LinearLayout: Располагает дочерние элементы в один ряд или столбец. Простой, но может привести к вложенным макетам.
- RelativeLayout: Располагает дочерние элементы относительно друг друга или родителя. Более гибкий, но сложный.
- ConstraintLayout: Современный, гибкий макет. Плоская иерархия представлений. Рекомендуется для сложных UI.
Распространенность: Очень часто Сложность: Легко
13. Что такое RecyclerView и как он работает?
Ответ: RecyclerView - это эффективный виджет для отображения больших списков путем переработки views.
- Компоненты:
- Adapter: Связывает данные с views
- ViewHolder: Хранит ссылки на views (избегает вызовов
findViewById) - LayoutManager: Располагает элементы (Linear, Grid, Staggered)
Распространенность: Очень часто Сложность: Средняя
14. Что такое Jetpack Compose?
Ответ: Jetpack Compose - это современный декларативный UI toolkit для Android.
- Декларативный: Описывает, как должен выглядеть UI, а не как его строить
- Преимущества: Меньше кода, интуитивно понятный, мощный, ускоряет разработку
- Composable Functions: Строительные блоки Compose UI
Распространенность: Очень часто Сложность: Легко
15. В чем разница между match_parent и wrap_content?
Ответ: Это параметры макета, которые определяют размеры view:
match_parent: View расширяется, чтобы заполнить размер родителяwrap_content: View устанавливает размер в соответствии со своим содержимым- Fixed Size: Определенное значение dp (например,
100dp)
Распространенность: Очень часто Сложность: Легко
Data & Networking (5 вопросов)
16. Как сделать сетевой запрос в Android?
Ответ:
Используйте библиотеки, такие как Retrofit или OkHttp, для работы с сетью. Избегайте прямого использования HttpURLConnection.
Распространенность: Очень часто Сложность: Средняя
17. Что такое Room и как его использовать?
Ответ: Room - это уровень абстракции над SQLite для упрощения доступа к базе данных.
- Компоненты:
- Entity: Представляет таблицу
- DAO (Data Access Object): Определяет операции с базой данных
- Database: Держатель базы данных
Распространенность: Очень часто Сложность: Средняя
18. Что такое SharedPreferences?
Ответ: SharedPreferences хранит небольшие объемы примитивных данных в виде пар ключ-значение.
- Сценарии использования: Пользовательские настройки, предпочтения, простые флаги
- Не для: Больших данных, сложных объектов (используйте Room вместо этого)
Распространенность: Очень часто Сложность: Легко
19. В чем разница между apply() и commit() в SharedPreferences?
Ответ: Оба сохраняют изменения в SharedPreferences, но различаются по поведению:
apply(): Асинхронный. Возвращается немедленно. Изменения записываются на диск в фоновом режиме. Нет возвращаемого значения.commit(): Синхронный. Блокирует, пока изменения не будут записаны. Возвращает boolean (успех/неудача).- Рекомендация: Используйте
apply(), если вам не нужно возвращаемое значение.
Распространенность: Часто Сложность: Легко
20. Что такое Coroutines в Kotlin?
Ответ: Coroutines предоставляют способ написания асинхронного кода последовательно, что упрощает чтение и поддержку.
- Преимущества: Легковесность, структурированная конкурентность, обработка исключений
- Основные концепции:
suspend: Функция, которая может быть приостановлена и возобновленаlaunch: Запускает корутину (fire and forget)async: Запускает корутину и возвращает результат- Dispatchers: Контролируют, в каком потоке выполняется корутина
Распространенность: Очень часто Сложность: Средняя


