Приуэт! Давно ничего не писал)
Это вопросы для собесов, по которым я сам готовлюсь. Список обновляется и улучшается.
Также будут посты с ответами, по каждому из вопросов.
Вопросы я составляю так, чтобы можно было сразу копипастнуть Гуглу или ЧатГопоте(ChatGPT) и получить более подробный ответ =)
Android
- Расскажи про основные компоненты Android приложения
- Жизненный цикл Activity. Какой порядок вызова методов жизненного цикла для двух Activity?
- Отличия жизненного цикла Fragment-a от жизненного цикла Activity
- В каких случаях View уничтожается, а Fragment живет? Зачем это может быть нужно?
- saveInstanceState зачем нужен, как и где используется? После чего и до чего вызывается onSaveInstanceState? (- После Android P после onStop, иначе до onDestroy)
- Смена конфигурации. Как и где обрабатывать? Куда сохраняется этот самый стейт в системе?
- onDestroy когда будет вызван? (не всегда, когда приложение смахнули)
- onRestart когда будет вызван? (активити пересоздалось, гаранитировано с андроид)
- Методы жизненного цикла View, какие есть, зачем нужны?
- Состояния View, как лучше реализовать?
- В каких случаях onLayout два раза вызывается?
- onMeasure View, какие параметры в него приходят?
- ContentProvider, что такое, зачем нужен?
- BroadcastReceiver, что такое, зачем нужен? Можно ли отправить интент только внутри приложения? (LocalBroadcastManager)
- Можно ли сделать приложение например только с BroadcastReciever-ом? Или только с ContentProvider-ом?
- Какой компонент Android-е запускается первым? (Content Provider. Инит на ранней стадии, ресуры, и все такое)
- Какие компоненты реагируют на смену конфигурации? (все)
- Сервисы. Что такое, для чего нужны, какие бывают?
- Чем Animation отличается от Animator-а?
- Context в Android-е. Какие бывают, чем отличаются?
- ANR в Android-е, как он появляется под капотом? (хэндлер чекает юай, прогоняет через ворк менеджер (все приложения))
- Какие классы отвечают за работу с ресурсами в Android-е (AssetManager -> Resources -> ContextThemeWrapper). Чем отличаются?
- Как обычно работаешь с ресурсами? Используешь ли аттрибуты? Приходилось ли реализовывать смену темы приложения?
- Что такое таск в Android-е? Как задать поведение Activity (task affinity, launchmod)
- RV DiffUtils — зачем нужен и как используется?
- WorkManager — зачем нужен и как используется?
- Как выгружается приложение в Android-е? (как выгружается процесс)
- Handler, Looper, MessageQueue, Message — что такое, как работают? Использовал ли когда-нибудь напрямую?
- IPC. Межпроцессное взаимодействие, AIDL
- Приоритетность процессов в андроиде
- Расскажи про порядок запуска приложения. Что такое Zygote, что у нее внутри?
- Отличия ART от Dalvik
- Расскажи что такое apk, что в него входит. (манифест, декс, нативные либы)
- Расскажи про структуру manifest файла, что в нем обязательно прописывать?
Kotlin
- Зачем нужны data class-ы в Kotlin? Чем отличаются от обычных классов?
- Участвуют ли в генерации методов data class поля из body? Можно ли выпилить из генерации поле из конструктора?
- Можно ли наследоваться от data class-а? Почему?
- Можно использовать var поля в data class-е? Что будет, если использовать data class с var полем, например, в качестве ключа хэшмапы?
- Что такое object? Потокобезопасен ли он? Какие еще есть реализации синглтона?
- Что такое inline функции, зачем нужны? crossinline, noinline, ограничения crossinline (non-local returns), reified
- Ковариантность, инвариантность в Kotlin-е. Чем отличается от Java?
- Sequence в Kotlin-е. Зачем нужны, как работают? Какой ближайший аналог в Java? (стримы) Чем от них отличаются?
- Sealed class в Kotlin-е — что такое, зачем нужны? Можно ли наследовать один от другого?
- Что такое Nothing в Kotlin-е, зачем нужен?
- init {} в Kotlin это аналог чего в Java?
- Делегаты в котлине, какие бывают, приходилось ли пользоваться и зачем?
- Extension в котлине, как работают? Можно ли сделать extension к интерфейсу? typealias? Функциональному типу?
- Какая польза от typealias? Во что он компилируется?
- Kotlin Contracts зачем нужны? Где использовать?
Coroutines
- Как работают внутри, чем отличаются от тредов?
- Что такое CoroutineScope? CoroutineScope vs CoroutineContext зачем он нужен? (чтобы построить иерархию Job-ов джобы наследуют контекст скоупа (но могу модифицировать))
- Dispatchers
- Coroutine Context — сет из контекс элементов: Dispatcher, Job, Error Handler, Name
- CoroutineScope vs CoroutineContext (джобы наследуют контекст скоупа (но могу модифицировать))
- Контракт между джобами в иерархии: (Парент джоба не закончится, пока не закончатся все чайлды. Отмена парента отменит всех чайлдов. Отмена чайлда не отменяет парента и других чайлдов)
- Что такое Supervisor Job? (не кэнселит другие джобы, если одна сломалась)
- Можно похэндлить эксепшен в корутине через try-catch. Что произойдет, если этого не сделать? try-catch, а когда CoroutineException Handler?
- Основные билдеры корутин? Разница между launch и async
- Как работают suspend функции?
- На каком слое лучше получить результат от suspend функции?
- Можно ли на корутинах получить дедлок?
- Горячие и холодные источники данных — что это такое, зачем нужны? пример
Java, JVM, JMM
- Object в Java. Что внутри? Сколько памяти занимает?
- hashCode() и equals(). Какой у них контракт? Как нужно их переопределять? Где они используются и как?
- Модель памяти в Java? Heap, Stack. Как хранятся static объекты?
- Если два потока выполняют один и тот же метод, будет ли между ними шариться переменная из метода?
- ClassLoader в Java. Какие бывают? Какие отрабатывают на старте Android приложения?
- Чем процесс от потока отличается? Какое взаимоотношение процессов с потоками?
- Сколько может быть процессов в Android приложении? Сколько потоков?
- Как получить утечку памяти в Android-е?
- Garbage Collector. Как работает, какие бывают?
- GC root-ы
- Какой GC в ART?
- Бывают ли в Android-е stop-the-world паузы?
- Расскажи про поколения памяти при сборке мусора
- Как GC понимает, что надо переместить объект из Eden в Old?
- Заколлектятся ли две стронг ссылки друг на друга? В каком случае не заколлектятся?
- Что такое jni-reference?
- Расскажи про типы ссылок в Java
- Как передаются объекты в методы? Что случится с объектом, который мы передали в метод и занулили параметр?
- Что такое StringPool? Почему предпочтительнее пароли передавать в CharSequence вместо String?
- Чем отличаются StringBuffer от StringBuilder? Когда использовать StringBuilder?
Collections
- Основные интерфейсы коллекций в Java — какие знаешь
- Какую структуру данных получим, если в котлине написать listOf()? В чем отличия ArrayList и LinkedList? Сложность добавления в каждый из них? Сложность удаления из середины?
- Что за структуру данных в котлине мы получим если напишем mapOf()? Почему именно Linked? Как работает хэшмап? сложность добавления, удаления?
- Почему может или не может быть налл ключом в хэшмапе, хэшсете?
- Тримап, зачем нужен, как работает? механизмы балансировки
- Complexity по памяти и по времени — какие вспомнишь навскидку с примерами.
- Какая сложность у вложенной итерации по коллекции? если вложенность x3?
- Как оценить сложность произвольного алгоритма по времени и по памяти? logN, nlogN, N^2, N
Concurrency
- У класса Object есть методы: wait(), notify(), notifyAll(). Для чего они? Как они работают? Какое обязательное условия для их использования?
- Что такое монитор в Java, как их можно реализовать? Как он реализован по умолчанию?
- Что такое Race condition?
- Расскажи DeadLock, LiveLock, Starvation, SplitBrain
- Какие знаешь механизмы реализации Concurrency? Semaphore, CountDownLatch — что такое, зачем нужны, какие бывают?
- Как потоки в себе хранят данные, как к себе обращаются?
- Как сделать так, чтобы поток не кэшировал данные? Что делает volatile?
- Что делает synchronized?
- Как из HashMap-а сделать потокобезопасный HashMap?
- Что такое атомарные операции? Какие механизмы их реализации можешь перечислить? Атомарны ли операции присваивания?
Architecture, general topics
- SOLID. Примеры на все
- Принципы ООП
- Dependency Injection. Сервис локейшен против ДИ
- Зависимости через композицию или агрегацию? В конструктор или филды?
- Какой принцип нарушает инъекция прямо в поля? (Нарушает сингл респосибилити — инжект в абстрактный класс)
- Композиция
- Аггрегация
- Что такое скоуп?
- Паттерны проектирования, навскидку группы с парой примеров в каждой (является ли апплай билдером? Нет)
- Почему синглтон антипаттерн?
- Три способа создания синглтон? Какой из них тред сейф? все
- Какие бывают тесты? Какие писал, на чем? TDD?
- MVP, MVI (UDF*), MVVM — что из себя представляют, какие использвал, чем они отличаются?
- Нужно заходить в приложение по пин-коду, но он никуда не отправляется и должен храниться на устройстве. Как его нужно хранить?
- Как ты понимаешь CLEAN?
- Многомодульная архитектура. Работал ли с ней, если да, то как делили модуля
- в каком модуле будет DI конфиг?
- Код ревью. Как проходит типовой кейс, на что обращаешь внимание в первую очередь, на что во вторую?
RxJava
- Какие операторы map ты знаешь? чем они отличаются?
- Если сделать flatMap в 2 запроса ретрофита — последовательно ли они выполнятся? На каком пуле работает ретрофит адаптпер рх? (ни на каком)
- Какие пулы есть в рх?
- Observable.zip — надо ли указывать потоки? (на рандодмном в зависимости от того, кто последний заэмитил элемент)
- Понятие Rx контракта — что это и зачем?
- Может ли 2 ошибки придти в onError?
- Что такое Backpressure?
- Горячие и холодные обзерваблы — что это такое, зачем нужны?
- Subject-ы в rx — что такое и пользовался ли? Какие бывают и чем отличаются? Какие горячие, какие холодные?
- На что влияют методы subscribeOn и observeOn?
- Что делать, если надо передать null в обзервабле?