Android interview deck Flashcards
Разница между Object(Java) и Any(Kotlin
Any не равно java.lang.Object ; в частности, в нем нет члены, кроме equals(), hashCode() и toString()
Какие типы исключений бывают в Java и какая между ними разница?
В Java есть два типа исключений, checked и unchecked.
Checked исключения, это те, которые должны обрабатываться блоком catch или описываться в сигнатуре метода.
Unchecked могут не обрабатываться и не быть описанными.
Разница между интерфейсами Runnable и Callable в Java?
Runnable существует с Java 1.0, но Callable был представлен только в Java 1.5
- Callable Необходимо реализовать call() метод в то время как Runnable необходимо реализовать run() метод.
- Callable может вернуть значение, но Runnable не может.
- Callable Может бросить проверяемое исключение, но Runnable не может.
В чем разница между «const» и «val»?
Оба val и const неизменны.
consts - константы времени компиляции,
Это означает, что их значение должно быть назначено во время компиляции, в отличие от vals, где это может быть сделано во время выполнения.
Почему Map не наследуется от Collection?
Они не совместимы, т.к. созданы для различных структур данных. Map использует пару ключ-значение.
Пустой конструктор ArrayList<>() с начальной емкостью внутреннего массива равен на?
10
Какие типы объектов Intent и
Какие типы объектов Intent бывают и какая меду ними разница?
Есть два типа объектов Intent : явные(Explicit) и неявные(Implicit).
Explicit intent явно содержит информацию о классе компонента. Например startActivity(Intent(context, MyHomeActivity::class.java))
Implicit intent не содержит информацию о конкретном компоненте. Система использует косвенные атрибуты, такие как action, type и category для выбора стартуемого компонента. startActivity(Intent(Intent.ACTION_CALL, Uri.parse(“tel:$number”)))
RxJava в качестве своей основы использует паттерн ______?
Observer
Является ли ViewModel заменой onSaveInstanceState()?
– Нет. ViewModel и onSaveInstanceState() используются в разных ситуациях.
onSaveInstanceState() предназначен для сохранения небольшого количества данных, которые позволяют восстановить состояние UI в следующих случаях:
- Остановка процесса приложения для восстановления ресурсов памяти;
- Изменение конфигурации.
Не следует использовать onSaveInstanceState() для сохранения больших массивов данных.
ViewModel переживает только изменение конфигурации, но уничтожается при остановке процесса. Это делает ViewModel менее универсальным механизмом, чем onSaveInstanceState(), но позволяет сохранять большие объекты во время изменения конфигурации и пересоздания активити.
Какого вида бывают Observable(RxJava)? Когда их использовать?
Observable, Single, Maybe, Flowable, Completable
Observable Observer Кол-во эмиссий
Observable Observer Много или ничего
Single SingleObserver Одна эмиссия
Maybe MaybeObserver Одна эмиссия или ничего
Flowable Observer Много или ничего
Completable CompletableObserver Ничего
В чем разница между Observable и Flowable?
Используйте Observable, когда у вас относительно мало элементов с течением времени (< 1000) и/или существует без риска производителя, перенасыщающего потребителей и, таким образом, вызывающего OOM.
Используйте Flowable, когда у вас относительно большое количество элементов, и вам нужно тщательно контролировать поведение Producer, чтобы избежать истощения ресурсов и/или перегруженности.
Как работать с Backpressure в RxJava?
Backpressure – это ситуация, когда Rx-продюсер производит больше элементов, чем может обработать консьюмер.
Например Observable создает 1000 элементов в секунду, а Observer обрабатывает 1 элемент в секунду. Observable имеет бесконечный буфер, в который будут добавляться элементы до тех пор, пока не случится OutOfMemoryError.
В случаях когда возможна ситуация backpressure, следует использовать Flowable в качестве Rx-стрима.
Flowable можно создать из Observable методом toFlowable(), который принимает объект типа BackpressureStrategy как параметр.
BackpressureStrategy – это enum, который задает стратегию обработки backpressure. Значения BackpressureStrategy:
• MISSING. Продюсер не имеет стратегию работы с backpressure. В этом случае консьюмер должен решать проблему переполнения. Эта конфигурация полезна в случае, когда обработка backpressure задается операторами onBackpressure…().
Если backpressure не обрабатывается, то будет брошено исключение MissingBackpressureException.
- ERROR. В случае backpressure бросается исключение MissingBackpressureException.
- BUFFER. Все элементы добавляются в буфер, пока не будут обработаны консьюмером.
- DROP. Все новые элементы, которые консьюмер не успевает обработать, удаляются и не доставляются консьюмеру.
- LATEST. Стратегия противоположная Drop. Консьюмер получает только самый последний элемент, созданный продюсером, когда освобождается.
Какие виды стримов существуют в RxJava?
Observable – представляет собой стрим объектов. Подписчики на Observable имеют коллбэки onNext(value), onComplete(), onError(throwable).
onNext() может не вызываться, или вызываться произвольное количество раз.
При завершении стрима вызывается onComplete() или onError().
Single – отправляет объект, который принимается в коллбэке onSuccess(value), или бросает исключение в коллбэк onError(throwable) в случае ошибки.
Completable – не возвращает никакого значения. На подписчиках вызывается onComplete() при удачном завершении или onError(throwable) в случае ошибки.
Maybe – может отработать как Single или как Completable. На подписчиках вызывается один из трех коллбэков: onSuccess(value), onComplete() без какого-либо значения, или onError(throwable). Каждый из коллбэков может быть вызван один раз или не вызван вообще.
Flowable – работает как Observable, но поддерживает backpressure по умолчанию.
Какие бывают Subjects в RxJava?
Subject – это абстрактный класс в RxJava, одновременно расширяющий класс Observable и реализующий интерфейс Observer. Subject – это hot observable.
В RxJava есть следующие реализации Subject:
Publish Subject. Подписчики PublishSubject получают только те элементы, которые отправляются после момента подписки. PublishSubject не кэширует и не рассылает прошлые элементы.
BehaviorSubject отправляет каждому новому подписчику элемент, который был разослан до подписки, и все последующие элементы.
AsyncSubject. Подписчики получают только последний элемент, который был отправлен перед вызовом onComplete().
ReplaySubject. По-умолчанию каждый новый подписчик получает все элементы, которые были отправлены до подписки, и все последующие элементы.
Если ReplaySubject создается фабричным методом createWithSize(size: Int), то подписчики будут получать только заданное количество элементов, отправленных в прошлом.
UnicastSubject работает также как ReplaySubject, но может иметь только одного подписчика. Все последующие подписчики получают onError() с IllegalStateException.