Вопросы для Android-собесов

Приуэт! Давно ничего не писал)

Это вопросы для собесов, по которым я сам готовлюсь. Список обновляется и улучшается.

Также будут посты с ответами, по каждому из вопросов.

Вопросы я составляю так, чтобы можно было сразу копипастнуть Гуглу или ЧатГопоте(ChatGPT) и получить более подробный ответ =)

Android

  1. Расскажи про основные компоненты Android приложения
  2. Жизненный цикл Activity. Какой порядок вызова методов жизненного цикла для двух Activity?
  3. Отличия жизненного цикла Fragment-a от жизненного цикла Activity
  4. В каких случаях View уничтожается, а Fragment живет? Зачем это может быть нужно?
  5. Зачем нужен saveInstanceState, как и где используется? После чего и до чего вызывается onSaveInstanceState?
  6. Смена конфигурации. Как и где обрабатывать? Куда сохраняется этот стейт в системе?
  7. onDestroy() когда будет вызван? onRestart() когда будет вызван?
  8. Методы жизненного цикла View, какие есть, зачем нужны?
  9. В каких случаях onLayout() вызывается два раза?
  10. ContentProvider, что такое и зачем нужен?
  11. BroadcastReceiver, что такое и зачем нужен? Можно ли отправить интент только внутри приложения?
  12. Можно ли сделать приложение например только с BroadcastReciever-ом? Или только с ContentProvider-ом?
  13. Какой компонент Android-е запускается первым?
  14. Какие компоненты реагируют на смену конфигурации?
  15. Сервисы. Что такое, для чего нужны, какие бывают?
  16. Чем Animation отличается от Animator-а?
  17. Context в Android-е. Какие бывают, чем отличаются?
  18. ANR в Android-е, как он появляется под капотом?
  19. Какие классы отвечают за работу с ресурсами в Android-е (AssetManager -> Resources -> ContextThemeWrapper). Чем отличаются?
  20. Как обычно работаешь с ресурсами? Используешь ли аттрибуты? Приходилось ли реализовывать смену темы приложения?
  21. Что такое таск в Android-е? Как задать поведение?
  22. WorkManager — зачем нужен и как используется?
  23. Как выгружается приложение(процесс) в Android-е?
  24. Handler, Looper, MessageQueue, Message — что такое, как работают?
  25. IPC. Межпроцессное взаимодействие, AIDL
  26. Приоритетность процессов в андроиде
  27. Расскажи про порядок запуска приложения. Что такое Zygote, что у нее внутри? Отдельная статья про этот процесс
  28. Отличия ART от Dalvik
  29. Расскажи что такое apk, что в него входит
  30. Расскажи про структуру manifest файла, что в нем обязательно прописывать?

Kotlin

  1. Зачем нужны data class-ы в Kotlin? Чем отличаются от обычных классов?
  2. Участвуют ли в генерации методов data class поля из body? Можно ли выпилить из генерации поле из конструктора?
  3. Можно ли наследоваться от data class-а? Почему?
  4. Можно использовать var поля в data class-е? Что будет, если использовать data class с var полем, например, в качестве ключа хэшмапы?
  5. Что такое object? Потокобезопасен ли он? Какие еще есть реализации синглтона?
  6. Что такое inline функции, зачем нужны? crossinline, noinline, ограничения crossinline (non-local returns), reified
  7. Ковариантность, инвариантность в Kotlin-е. Чем отличается от Java?
  8. Sequence в Kotlin-е. Зачем нужны, как работают?
  9. Sealed class в Kotlin-е — что такое, зачем нужны? Можно ли наследовать один от другого? В чем отличие от Sealed interface?
  10. Что такое Nothing в Kotlin-е, зачем нужен?
  11. init{} в Kotlin это аналог чего в Java?
  12. Делегаты в Kotlin-е. Какие бывают, зачем нужны?
  13. Extension в Kotlin-е, как работают «под капотом»? Можно ли сделать extension к интерфейсу?
  14. Какая польза от typealias? Во что он компилируется?
  15. Kotlin Contracts зачем нужны? Где использовать?

Coroutines

  1. Как Coroutine работают внутри, чем отличаются от тредов?
  2. Что такое CoroutineScope? Какие знаешь виды?
  3. Что такое Coroutine Context?
  4. Зачем нужен Job? Что такое SupervisorJob?
  5. Что такое Coroutine Dispatchers? Какие виды есть?
  6. Как работают suspend функции?
  7. Основные билдеры корутин? Разница между launch и async
  8. Расскажи про контракт между Job-ами в иерархии
  9. Как обрабатывать исключения в корутинах? Какие есть методы?
  10. Можно ли на корутинах получить дедлок?

Coroutine Flows

  1. Что такое Flow? Чем отличается от Sequence и Suspend-функции?
  2. Холодные vs горячие потоки — объясни на примерах.
  3. В чём разница между flow { }, StateFlow, SharedFlow и Channel?
  4. Что делает оператор collect? Можно ли вызвать его из обычной функции?
  5. Как отменяется Flow? Что происходит при отмене корутины, в которой идёт collect?

Jetpack Compose

  1. В чём принципиальное отличие Jetpack Compose от View-системы? Как работает рекомпозиция?
  2. Что такое Composable-функция? Какие правила у неё есть (название с заглавной буквы, @Composable, отсутствие возвращаемого значения и т.д.)?
  3. Объясните жизненный цикл Composable-функции. Когда происходит initial composition, recomposition, когда функция уходит из композиции?
  4. Что такое State Hoisting? Почему это ключевая практика в Compose?
  5. В чём разница между remember и rememberSaveable? Когда использовать каждый?
  6. Как работает State и MutableState под капотом? Что такое Snapshot Mutation Policy?
  7. Когда и почему нужно использовать key в LazyColumn/LazyRow? Что будет, если не использовать?
  8. Как работает Side-Effect API? Разница между LaunchedEffect, DisposableEffect, SideEffect, produceState?
  9. Когда LaunchedEffect перезапускается? Как правильно передавать ключи в LaunchedEffect?
  10. Объясните, что такое Recomposition Scope и Smart Recomposition. Как Compose понимает, какие composables перерисовать?
  11. Как избежать ненужных рекомпозиций? Приёмы оптимизации (derivedStateOf, remember { mutableStateOf(…) }, стабильные объекты).
  12. Что делает модификатор .stable и @Stable аннотация? Когда их стоит использовать?
  13. В чём разница между Modifier и Modifier-like объектами? Как работает цепочка модификаторов?
  14. Как правильно работать с ViewModel в Compose? Почему не стоит создавать ViewModel внутри composable?
  15. Как реализовать навигацию в Compose? В чём разница между NavHostController и rememberNavController?

Collections

  1. Основные интерфейсы коллекций в Kotlin-е
  2. Какую структуру данных получим, если в Kotlin-е написать listOf()? В чем отличия ArrayList и LinkedList? Сложность добавления в каждый из них? Сложность удаления из середины?
  3. Что за структуру данных в Kotlin-е мы получим если напишем mapOf()? Почему именно Linked? Как работает хэшмап? сложность добавления, удаления?
  4. Почему может или не может быть налл ключом в хэшмапе, хэшсете?
  5. Тримап, зачем нужен, как работает? механизмы балансировки
  6. Complexity по памяти и по времени — какие вспомнишь навскидку с примерами.
  7. Какая сложность у вложенной итерации по коллекции? если вложенность x3?
  8. Как оценить сложность произвольного алгоритма по времени и по памяти? logN, nlogN, N^2, N

Java, JVM, JMM

  1. Object в Java. Что внутри? Сколько памяти занимает?
  2. hashCode() и equals(). Какой у них контракт? Как нужно их переопределять? Где они используются и как?
  3. Модель памяти в Java? Heap, Stack. Как хранятся static объекты?
  4. Если два потока выполняют один и тот же метод, будет ли между ними шариться переменная из метода?
  5. ClassLoader в Java. Какие бывают? Какие отрабатывают на старте Android приложения?
  6. Чем процесс от потока отличается? Какое взаимоотношение процессов с потоками?
  7. Сколько может быть процессов в Android приложении? Сколько потоков?
  8. Как получить утечку памяти в Android-е?
  9. Garbage Collector. Как работает, какие бывают?
  10. GC root-ы
  11. Какой GC в ART?
  12. Бывают ли в Android-е stop-the-world паузы?
  13. Расскажи про поколения памяти при сборке мусора
  14. Как GC понимает, что надо переместить объект из Eden в Old?
  15. Заколлектятся ли две стронг ссылки друг на друга? В каком случае не заколлектятся?
  16. Что такое jni-reference?
  17. Расскажи про типы ссылок в Java
  18. Как передаются объекты в методы? Что случится с объектом, который мы передали в метод и занулили параметр?
  19. Что такое StringPool? Почему предпочтительнее пароли передавать в CharSequence вместо String?
  20. Чем отличаются StringBuffer от StringBuilder? Когда использовать StringBuilder?

Concurrency

  1. У класса Object есть методы: wait(), notify(), notifyAll(). Для чего они? Как они работают? Какое обязательное условия для их использования?
  2. Что такое монитор в Java, как их можно реализовать? Как он реализован по умолчанию?
  3. Что такое Race condition?
  4. Расскажи DeadLock, LiveLock, Starvation, SplitBrain
  5. Какие знаешь механизмы реализации Concurrency? Semaphore, CountDownLatch — что такое, зачем нужны, какие бывают?
  6. Как потоки в себе хранят данные, как к себе обращаются?
  7. Как сделать так, чтобы поток не кэшировал данные? Что делает volatile?
  8. Что делает synchronized?
  9. Как из HashMap-а сделать потокобезопасный HashMap?
  10. Что такое атомарные операции? Какие механизмы их реализации можешь перечислить? Атомарны ли операции присваивания?

Architecture, general topics

  1. SOLID. Примеры на все
  2. Принципы ООП
  3. Dependency Injection. Сервис локейшен против ДИ
  4. Зависимости через композицию или агрегацию? В конструктор или филды?
  5. Какой принцип нарушает инъекция прямо в поля? (Нарушает сингл респосибилити — инжект в абстрактный класс)
  6. Композиция
  7. Аггрегация
  8. Что такое скоуп?
  9. Паттерны проектирования, навскидку группы с парой примеров в каждой (является ли апплай билдером? Нет)
  10. Почему синглтон антипаттерн?
  11. Три способа создания синглтон? Какой из них тред сейф? все
  12. Какие бывают тесты? Какие писал, на чем? TDD?
  13. MVP, MVI (UDF*), MVVM — что из себя представляют, какие использвал, чем они отличаются?
  14. Нужно заходить в приложение по пин-коду, но он никуда не отправляется и должен храниться на устройстве. Как его нужно хранить?
  15. Как ты понимаешь CLEAN?
  16. Многомодульная архитектура. Работал ли с ней, если да, то как делили модуля
  17. в каком модуле будет DI конфиг?
  18. Код ревью. Как проходит типовой кейс, на что обращаешь внимание в первую очередь, на что во вторую?

Опубликовано

в

, , , ,

от

Метки: