Android interview deck Flashcards

1
Q

Разница между Object(Java) и Any(Kotlin

A

Any не равно java.lang.Object ; в частности, в нем нет члены, кроме equals(), hashCode() и toString()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие типы исключений бывают в Java и какая между ними разница?

A

В Java есть два типа исключений, checked и unchecked.
Checked исключения, это те, которые должны обрабатываться блоком catch или описываться в сигнатуре метода.
Unchecked могут не обрабатываться и не быть описанными.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Разница между интерфейсами Runnable и Callable в Java?

A

Runnable существует с Java 1.0, но Callable был представлен только в Java 1.5

  • Callable Необходимо реализовать call() метод в то время как Runnable необходимо реализовать run() метод.
  • Callable может вернуть значение, но Runnable не может.
  • Callable Может бросить проверяемое исключение, но Runnable не может.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

В чем разница между «const» и «val»?

A

Оба val и const неизменны.
consts - константы времени компиляции,
Это означает, что их значение должно быть назначено во время компиляции, в отличие от vals, где это может быть сделано во время выполнения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Почему Map не наследуется от Collection?

A

Они не совместимы, т.к. созданы для различных структур данных. Map использует пару ключ-значение.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Пустой конструктор ArrayList<>() с начальной емкостью внутреннего массива равен на?

A

10

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Какие типы объектов Intent и

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Какие типы объектов Intent бывают и какая меду ними разница?

A

Есть два типа объектов 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”)))

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

RxJava в качестве своей основы использует паттерн ______?

A

Observer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Является ли ViewModel заменой onSaveInstanceState()?

A

– Нет. ViewModel и onSaveInstanceState() используются в разных ситуациях.

onSaveInstanceState() предназначен для сохранения небольшого количества данных, которые позволяют восстановить состояние UI в следующих случаях:

  • Остановка процесса приложения для восстановления ресурсов памяти;
  • Изменение конфигурации.

Не следует использовать onSaveInstanceState() для сохранения больших массивов данных.

ViewModel переживает только изменение конфигурации, но уничтожается при остановке процесса. Это делает ViewModel менее универсальным механизмом, чем onSaveInstanceState(), но позволяет сохранять большие объекты во время изменения конфигурации и пересоздания активити.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Какого вида бывают Observable(RxJava)? Когда их использовать?

A

Observable, Single, Maybe, Flowable, Completable

Observable Observer Кол-во эмиссий

Observable Observer Много или ничего
Single SingleObserver Одна эмиссия
Maybe MaybeObserver Одна эмиссия или ничего
Flowable Observer Много или ничего
Completable CompletableObserver Ничего

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

В чем разница между Observable и Flowable?

A

Используйте Observable, когда у вас относительно мало элементов с течением времени (< 1000) и/или существует без риска производителя, перенасыщающего потребителей и, таким образом, вызывающего OOM.

Используйте Flowable, когда у вас относительно большое количество элементов, и вам нужно тщательно контролировать поведение Producer, чтобы избежать истощения ресурсов и/или перегруженности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как работать с Backpressure в RxJava?

A

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. Консьюмер получает только самый последний элемент, созданный продюсером, когда освобождается.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Какие виды стримов существуют в RxJava?

A

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 по умолчанию.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Какие бывают Subjects в RxJava?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Чем отличаются hot и cold Observables в RxJava?

A

В RxJava есть два вида Observable: Hot и Cold.

Cold Observable:
• Не рассылает объекты, пока на него не подписался хотя бы один подписчик;
• Если observable имеет несколько подписчиков, то он будет рассылать всю последовательность объектов каждому подписчику.

Пример cold observable – методы ретрофит-интерфейса. Каждый раз когда вызывается метод subscribe(), выполняется соответствующий запрос на бэкенд и подписчик получает объект-респонс.

Hot Observable:
• Рассылает объекты, когда они появляются, независимо от того есть ли подписчики;
• Каждый новый подписчик получает только новые объекты, а не всю последовательность.

Пример hot observable – observable, рассылающий клик-ивенты на view. Смотрите библиотеку RxBinding.

Подробнее про hot и cold observables.

17
Q

Разница между postValue() и setValue()

A

setValue() - mainThread and changed immediately

postValue() - backgroundThread()