fbpx

Blog

Вопросы RxJava на собеседовании

Несмотря на то, что Kotlin Coroutines и Flow потихоньку перетягивают одеяло, всё-таки на многих больших проектах всё также используется RxJava. Если у вас сложное приложение, то задачи выходят за рамки обычного сценария: сходить в сеть и отобразить данные. И тут в дело вступают различные операторы RxJava — как раз то, почему Rx ещё долго не будет заменён на мой взгляд. В данной статье приведены вопросы от простого к сложному, которые могут ввести в ступор даже продвинутых пользователей RxJava.

Как создать Observable?

Несмотря на простоту, многих такой вопрос вводит в ступор и некоторые начинают говорить про Retrofit — то, что нужно подписаться и всё. На самом деле этот вопрос намного глубже и есть много разных способов. В ответе на данный вопрос нужно проговорить про такие методы как Observable.onCreate() – не забудьте рассказать про emitter, Observable.just(), fromCallable(), fromArray(), fromIterable(). Как видите методов много, каждый из них выполняет свою роль. Было бы неплохо, если вы расскажете про каждый из них и для чего они нужны на примерах.

Как обернуть обычный код в реактивный, так, чтобы можно было подписаться на Observable?

Сделать некую реактивную обёртку бывает удобно, когда вы работает с SDK которое возвращает данные с помощью callback-ов. Ну или работу с кастомной View тоже бывает удобно обернуть. Вопрос, как? Частично, ответы на этот вопрос есть в предыдущем вопросе, а именно можно привести пример работы метода Observable.create().

Объяснить работу оператора zip?

Многие знают что оператор позволяет объединить результат 2-ух Observable. А что если надо объединить 3? А 5? И второй вопрос по этой же теме, а что если один из Observable выполнится с ошибкой?

Что будет, если использовать оператор concat с оператором interval?

Многие уже знают, что оператор concat позволяет объединить события из 2-ух Observable. Этим он отличается от merge. Но не все смогут ответить, что произойдёт, если попытаться объединить два источника событий, один из которых бесконечный — как например interval.

Как реализовать подход offline first через операторы RxJava?

Типичная рабочая задачка — какие операторы можно тут использовать?

Чем отличается repeat от retry ?

Эти операторы помогут вам обработать ошибку или сделать повторный запрос.

Для чего нужен оператор compose?

Какой будет результат выполнения данного кода?

val publishSubject = PublishSubject.create<String>()

publishSubject.onNext("event 1")

val subscriber1 = publishSubject.subscribeBy(
        onNext = {println("subscriber 1 $it")}
)

Если вы ответили, что результат будет subscriber 1 event 1— спешу вас разочаровать.

Все вопросы взяты из реальных практических кейсов, с которыми вы можете столкнуться в реальном проекте, так что, советую погуглить ответы или обратить внимание на продвинутый интенсив по Android-разработке, где вы не только обуздаете RxJava3, но и создадите вместе с наставником свой проект. Подробности тут. Оставляйте комментарии, а также не забудьте подписаться на наш канал

Продвинутый интенсив по Android-разработке, где вы не только обуздаете RxJava3, но и создадите вместе с наставником свой проект. Подробности тут.