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

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

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

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

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

Android

  1. Расскажи про основные компоненты Android приложения
  2. Жизненный цикл Activity. Какой порядок вызова методов жизненного цикла для двух Activity?
  3. Отличия жизненного цикла Fragment-a от жизненного цикла Activity
  4. В каких случаях View уничтожается, а Fragment живет? Зачем это может быть нужно?
  5. saveInstanceState зачем нужен, как и где используется? После чего и до чего вызывается onSaveInstanceState? (- После Android P после onStop, иначе до onDestroy)
  6. Смена конфигурации. Как и где обрабатывать? Куда сохраняется этот самый стейт в системе?
  7. onDestroy когда будет вызван? (не всегда, когда приложение смахнули)
  8. onRestart когда будет вызван? (активити пересоздалось, гаранитировано с андроид)
  9. Методы жизненного цикла View, какие есть, зачем нужны?
  10. Состояния View, как лучше реализовать?
  11. В каких случаях onLayout два раза вызывается?
  12. onMeasure View, какие параметры в него приходят?
  13. ContentProvider, что такое, зачем нужен?
  14. BroadcastReceiver, что такое, зачем нужен? Можно ли отправить интент только внутри приложения? (LocalBroadcastManager)
  15. Можно ли сделать приложение например только с BroadcastReciever-ом? Или только с ContentProvider-ом?
  16. Какой компонент Android-е запускается первым? (Content Provider. Инит на ранней стадии, ресуры, и все такое)
  17. Какие компоненты реагируют на смену конфигурации? (все)
  18. Сервисы. Что такое, для чего нужны, какие бывают?
  19. Чем Animation отличается от Animator-а?
  20. Context в Android-е. Какие бывают, чем отличаются?
  21. ANR в Android-е, как он появляется под капотом? (хэндлер чекает юай, прогоняет через ворк менеджер (все приложения))
  22. Какие классы отвечают за работу с ресурсами в Android-е (AssetManager -> Resources -> ContextThemeWrapper). Чем отличаются?
  23. Как обычно работаешь с ресурсами? Используешь ли аттрибуты? Приходилось ли реализовывать смену темы приложения?
  24. Что такое таск в Android-е? Как задать поведение Activity (task affinity, launchmod)
  25. RV DiffUtils — зачем нужен и как используется?
  26. WorkManager — зачем нужен и как используется?
  27. Как выгружается приложение в Android-е? (как выгружается процесс)
  28. Handler, Looper, MessageQueue, Message — что такое, как работают? Использовал ли когда-нибудь напрямую?
  29. IPC. Межпроцессное взаимодействие, AIDL
  30. Приоритетность процессов в андроиде
  31. Расскажи про порядок запуска приложения. Что такое Zygote, что у нее внутри?
  32. Отличия ART от Dalvik
  33. Расскажи что такое apk, что в него входит. (манифест, декс, нативные либы)
  34. Расскажи про структуру 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-е. Зачем нужны, как работают? Какой ближайший аналог в Java? (стримы) Чем от них отличаются?
  9. Sealed class в Kotlin-е — что такое, зачем нужны? Можно ли наследовать один от другого?
  10. Что такое Nothing в Kotlin-е, зачем нужен?
  11. init {} в Kotlin это аналог чего в Java? (ничего)
  12. Делегаты в котлине, какие бывают, приходилось ли пользоваться и зачем?
  13. Экстеншены в котлине, как работают? Можно ли сделать extension к интерфейсу? typealias? Функциональному типу?
  14. Какая польза от typealias? Во что он компилируется?
  15. Kotlin Contracts зачем нужны? Где использовать?

Coroutines

  1. Как работают внутри, чем отличаются от тредов?
  2. Что такое CoroutineScope? CoroutineScope vs CoroutineContext зачем он нужен? (чтобы построить иерархию Job-ов джобы наследуют контекст скоупа (но могу модифицировать))
  3. Dispatchers
  4. Coroutine Context — сет из контекс элементов: Dispatcher, Job, Error Handler, Name
  5. CoroutineScope vs CoroutineContext (джобы наследуют контекст скоупа (но могу модифицировать))
  6. Контракт между джобами в иерархии: (Парент джоба не закончится, пока не закончатся все чайлды. Отмена парента отменит всех чайлдов. Отмена чайлда не отменяет парента и других чайлдов)
  7. Что такое Supervisor Job? (не кэнселит другие джобы, если одна сломалась)
  8. Можно похэндлить эксепшен в корутине через try-catch. Что произойдет, если этого не сделать? try-catch, а когда CoroutineException Handler?
  9. Основные билдеры корутин? Разница между launch и async
  10. Как работают suspend функции?
  11. На каком слое лучше получить результат от suspend функции?
  12. Можно ли на корутинах получить дедлок?
  13. Горячие и холодные источники данных — что это такое, зачем нужны? пример

Java, JVM, JMM

  1. Обджект в джаве, что внутри, сколько памяти занимает
  2. hashCode() и equals(). Какой у них контракт? Как нужно их переопределять? Можно ли их не переопределять? Где они используются и как?
  3. Модель памяти в Java? Хип, стэк. Как хранятся static объекты?
  4. Если два потока выполняют один и тот же метод, будет ли между ними шариться переменная из метода?
  5. Кому принадлежит хип? Кому стэк?
  6. Класс лоадеры в джаве, какие бывают? Какие отрабатывают на старте андроид приложения?
  7. Чем процесс от потока отличается? Какое взаимоотношение процессов с потоками
  8. Сколько может быть процессов в Андроид приложении? Сколько потоков?
  9. Как получить утечку памяти в Android-е?
  10. GC. Как работает, какие бывают?
  11. GC руты (объекты тредов, объекты java.lang.Class, локальные переменные, статики, JNI-референсы, Old Gen для Minor GC)
  12. Какой GC в ART?
  13. Бывают ли в Android-е stop-the-world паузы?
  14. Поколения памяти при сборках
  15. Как GC понимает, что надо переместить объект из Eden в Old? В хэдере счетчик. Помимо счетчика там есть еще класс поинтер, монитор и хэшкод
  16. Заколлектятся ли две стронг ссылки друг на друга? В каком случае не заколлектятся? (- jni-ref не заколлектится, это гц рут)
  17. Что такое jni-reference? Работал ли с ними?
  18. Расскажи про типы ссылок в джаве
  19. Как передаются объекты в методы? (по ссылке) Что случится с объектом, который мы передали в метод и занулили параметр?
  20. Что такое StringPool? Почему предпочтительнее пароли передавать в чарсиквенс вместо стрингов? (потому, что они не попадают в стринг пул? они остаются в хипе, а хип кросспроцессный, можно словить дамп памяти и забрать пароль)
  21. Чем отличаются StringBuffer от StringBuilder? Когда используем StringBuilder?

Collections

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

Concurrency

  1. У класса Object есть методы: wait(), notify(), notifyAll(). Для чего они? Как они работают? Какое обязательное условия для их использования (требуют использования synchronized)
  2. Что такое монитор в Java, как их можно реализовать? Как он реализован по умолчанию? (полем в Object)
  3. Что такое race condition?
  4. дед лок, лайв лок, стравейшен, сплит брэйн(?)
  5. Какие знаешь механизмы реализации конкарренси? семафоры, латчи — что такое, зачем нужны, какие бывают?
  6. Как потоки в себе хранят данные, как к себе обращаются?
  7. Как сделать так, чтобы поток не кэшировал данные? Что делает volatile?
  8. Что делает synchronized?
  9. Как из хэшмапа сделать потокобезопасный?
  10. Что такое атомарные операции? какие механизмы их реализации можешь перечислить? Атомарны ли операции присваивания?
  11. ???Врап конкаррентхэшмап
  12. ???Синхронизировать, блокировка
  13. ???Тред локал

Architecture, general topics

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

RxJava

  1. Какие операторы map ты знаешь? чем они отличаются?
  2. Если сделать flatMap в 2 запроса ретрофита — последовательно ли они выполнятся? На каком пуле работает ретрофит адаптпер рх? (ни на каком)
  3. Какие пулы есть в рх?
  4. Observable.zip — надо ли указывать потоки? (на рандодмном в зависимости от того, кто последний заэмитил элемент)
  5. Понятие Rx контракта — что это и зачем?
  6. Может ли 2 ошибки придти в onError?
  7. Что такое Backpressure?
  8. Горячие и холодные обзерваблы — что это такое, зачем нужны?
  9. Subject-ы в rx — что такое и пользовался ли? Какие бывают и чем отличаются? Какие горячие, какие холодные?
  10. На что влияют методы subscribeOn и observeOn?
  11. Что делать, если надо передать null в обзервабле?

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

в

, , , ,

от

Метки: