Android Interview Review

@AndroidSobes Yoqdi 2 1 500

Популярные вопросы и ответы с собеседований на Android-разработчика.
Канал для Java-разработчиков @JavaSobes
Связаться с нами @SobesAdmin
https://itsobes.ru
Kanal hududi va tili
Rossiya, Rus tili
Kategoriya
Ta’lim


Muallifga yozish
Kanalning hududi
Rossiya
Kanal tili
Rus tili
Kategoriya
Ta’lim
Indeksga qo‘shilgan
18.03.2019 05:12
reklama
SearcheeBot
Telegram-каналлар оламидаги сизнинг йўлбошчингиз.
Telegram Analytics
TGStat хизмати янгиликларидан бохабар бўлиш учун обуна бўл!
TGStat Bot
Telegram'дан чиқмай туриб каналлар статистикасини олиш
2 873
ta obunachilar
~2.9k
1 ta e’lon qamrovi
~1.6k
kunlik qamrov
~4
ta e’lon haftasiga
102%
ERR %
7.27
iqtibos olish indeksi
Kanalning repost va eslovlari
22 ta kanal eslovlari
3 ta e’lonlar eslovlari
0 ta repostlar
Программист
Продакшн
Clean Code
Новые каналы
Java Interview Review
18 Dec 2019, 18:00
Clean Code
17 Oct 2019, 19:00
Kosmos Time
9 Oct 2019, 12:15
Next Time
9 Oct 2019, 12:15
Android Live 🤖
21 Aug 2019, 11:01
19 Aug 2019, 10:01
Java Interview Review
11 Jul 2019, 19:08
Говнокод
4 Jun 2019, 19:05
Clean Code
19 Apr 2019, 17:00
Coding
15 Apr 2019, 19:00
Java Interview Review
3 Apr 2019, 19:00
IT Юмор
22 Mar 2019, 18:00
Программист
19 Mar 2019, 10:15
Говнокод
11 Mar 2019, 16:02
@AndroidSobes iqtibos olgan kanallari
Java Interview Review
27 Dec 2019, 18:00
Java Interview Review
23 Dec 2019, 18:00
Java Interview Review
17 Dec 2019, 18:01
Java Interview Review
3 Dec 2019, 18:00
Java Interview Review
22 Nov 2019, 18:00
HYPE.TECH
5 Nov 2019, 18:01
Java Interview Review
1 Nov 2019, 18:00
Java Interview Review
8 Oct 2019, 18:00
Java Interview Review
4 Oct 2019, 11:54
Java Interview Review
2 Sep 2019, 18:01
Java Interview Review
27 Aug 2019, 18:01
19 Aug 2019, 10:00
Android Live 🤖
14 Aug 2019, 11:01
Java Interview Review
7 Aug 2019, 18:08
Java Interview Review
31 Jul 2019, 18:01
Java Interview Review
25 Jul 2019, 18:01
Java Interview Review
2 Jul 2019, 18:01
Java Interview Review
20 Jun 2019, 18:01
Java Interview Review
5 Jun 2019, 18:07
Java Interview Review
2 Jun 2019, 18:04
Java Interview Review
6 May 2019, 18:01
Java Interview Review
22 Apr 2019, 19:27
So‘nggi e’lonlar
O‘chirilgan e’lonlar
Eslovlar bilan
Repostlar
Что такое LiveData?

LiveData – это класс, который хранит данные и реализует паттерн Observable. LiveData входит в Android Jetpack.
Преимущество LiveData перед другими реализациями шаблона Observable в том, что LiveData заточена на работу с жизненными циклами Android компонентов, таких как Activity, Fragment и Service.
Для подписки на обновления LiveData используется метод observe(), который принимает объект типа LifecycleOwner и функциональный интерфейс Observer.
Интерфейс LifecycleOwner реализуется классами Android компонентов, например AppCompatActivity, LifecycleService, Fragment.

LiveData доставляет данные только наблюдателям, которые находятся в активном состоянии. Observer входит в активное состояние, когда соответствующий ему lifecycle переходит в состояние STARTED или RESUMED.

LiveData автоматически отписывает наблюдателей, когда их lifecycle переходит в состояние DESTROYED.

#Jetpack
To‘liq o‘qish
Для чего нужен метод Fragment.setRetainInstance()?

Метод setRetainInstance() принимает boolean параметр. По умолчанию значение retainInstance фрагмента – false. 
Если retainInstance выставлен в true, то фрагмент переживает пересоздание хост-активити, например при повороте экрана.

Когда активити пересоздается, фрагмент с retainInstance=true отсоединяется от старой активити и присоединяется к новой. Поэтому при пересоздании активити у фрагмента не вызываются методы onDestroy() и onCreate(), но вызываются onDetach(), onAttach() и onActivityCreated().

setRetainInstance() может быть использован только на фрагментах, не добавленных в backstack.

#Fragment
To‘liq o‘qish
Что такое Spannable?

Spannable – это интерфейс, характеризующий текст, который имеет стилистическую разметку. 
Например с помощью Spannable можно создать текст, часть которого окрашена в иной цвет.

Метод Spannable.setSpan() принимает произвольный объект типа Object, который используется для разметки. Этот метод не бросает исключений. Классы, которые реализуют интерфейс Spannable, должны игнорировать неподдерживаемые объекты разметки.

ForegroundColorSpan – один из примеров класса-разметки. Этот класс используется для изменения цвета текста. 

Документация по Spannable

#View
To‘liq o‘qish
Всех android-разработчиков ждут вечером 19 февраля на онлайн-интенсиве «Упрощаем процесс код ревью с помощью Android Lint». Запишитесь сейчас и получите напоминание в день вебинара: https://otus.pw/A2nk/

На интенсиве вы:
· узнаете, как при помощи статических анализаторов, а именно Android Lint, упростить и ускорить процесс код ревью.
· разберете, как работает Android Lint, как парсить source файлы, что такое AST, PSI и тп.
· займетесь live-кодингом: напишете кастомные lint проверки на частые ошибки, возникающие при написании кода.

Проведет практическое занятие Антон Казаков, руководитель направления Android-разработки в одном из крупных банков и руководитель продвинутого онлайн-курса «Android-разработчик на Kotlin» в Отус.Онлайн-образование.

Подключайтесь 19 февраля, проведите вечер с пользой!
To‘liq o‘qish
В чем разница между Doze Mode и App Standby?

Doze и App Standby введены в Android 6.0 (API level 23). Это функции ОС, которые ограничивают работу приложений в бэкграунде для сохранения заряда батарейки.

Основная разница в том, что Doze Mode – это режим операционной системы, который применяется на все установленные приложения, а App Standby – это состояние конкретного приложения.

Система входит в Doze Mode, когда девайс не используется и не стоит на зарядке. Система периодически выходит из Doze для выполнения отложенных фоновых задач.

Приложение, которое находится в фоне определенный период времени, входит в режим App Standby. Когда девайс ставится на зарядку все приложения выходят из состояния Standby.

Ограничения этих режимов описаны в документации.

#System
To‘liq o‘qish
🇬🇧 Английский для разработчиков 🛠

Кто в международном IT более востребован, чем наши разработчики? Правильно! Наши разработчики, знающие английский.
Посредственный уровень английского - главная причина, почему талантливые специалисты не растут карьерно и по зарплате: будь то вакансия в международной компании или удаленка на западный рынок.

Надо учить английский. Однако репетитор или очередные курсы - это путь в никуда. Абстрактная грамматика, абстрактная лексика никак не помогут карьере в it.

Мы сделали онлайн интенсив для разработчиков. Их ведет преподаватель, ранее работавший продактом в стартапах Силиконовой Долины 🇺🇸

Интенсив поможет:
📌 Начать говорить на рабочие темы (it, разработка). Берем реальные ситуации: job interview, assessment, code review.
📌 Подготовить крутое CV, cover letter, оформить профили. Делаем вместе, привлекаем американских и европейских HR экспертов.
📌 Готовить профессиональный контент и строить личный бренд - на английском.
📌 Пополнить словарный запас - все из области it.

Занятия в группах по 4-5 человек (все разработчики) и очень много личного фидбека.
По результату - сертификат и четкий план построения личного бренда в англоязычной it среде.

Цена - 9 900 руб., но для наших подписчиков есть промо-код, чтобы купить еще дешевле: ITENG8700. Действует до конца недели. Цена адекватная, бессмысленный general english стоит дороже))

Сегодня в 20.00 мск бесплатный открытый урок в формате вебинара. Все подробности в чате - https://t.me/polygled_it.
To‘liq o‘qish
В чем недостатки использования библиотеки Data Binding?

С самого создания Data Binding библиотека подвергалась критике. Некоторые проблемы были решены, но у библиотеки до сих пор плохая репутация.
Разберем недостатки, которые существуют и по сей день:

1) Код в XML
Это основной минус, который является главной фичей. Написание кода в XML плохо тем, что код не тестируем, его неудобно искать и читать, логика перемещается в верстку.
Пример злоупотребления кодом в XML:

android:visibility="@{price > 500 ? View.GONE : View.VISIBLE}"

Хорошей практикой считается не писать логику в лэйаутах, а подписываться на обновления полей ViewModel:

android:visibility="@{viewModel.priceVisibility}"

Код ViewModel:

val priceVisibility = ObservableInt(GONE)

fun updatePrice(price: Int) {
if (price > 500) {
priceVisibility.set(GONE)
} else {
priceVisibility.set(VISIBLE)
}
}

При такой реализации код обновления visibility можно протестировать, но в этом случае можно просто подписаться на обновления поля priceVisibility в Активити или Фрагменте, которые работают с ViewModel и обновлять visibility в коде.

2) Генерация кода
Data Binding генерирует код для связывания XML c data-классами. Кодогенерация иногда ломает инкрементальную сборку, особенно в больших проектах. В этом случае при изменении классов, использующих Data Binding, приходится делать clean build.
Также кодогенерация в целом увеличивает время билда.

3) Проблемы с тулингом
Команда гугла постоянно улучшает поддержку Data Binding в Android Studio. Но бывают случаи, когда ссылки или импорты, сгенерированные библиотекой перестают распознаваться в IDE. Это является частой проблемой больших проектов, использующих DataBinding.

Вывод
Data Binding может быть полезен для маленьких проектов и прототипов, т.к. увеличивает скорость написания кода.
Для больших проектов Data Binding создает больше проблем, чем приносит пользы.
Правильное использование Data Binding ненамного уменьшает количество кода.

Дополнительные материалы: [1], [2], [3].

#Jetpack
To‘liq o‘qish
Какие существуют способы реализации MVVM Android-приложении?

Суть MVVM и главное отличие от MVP в том, что View наблюдает за обновлениями ViewModel, при этом ViewModel не знает ничего о View.
Такое поведение реализуется через паттерн Observable-Observer и/или связывание данных (data binding).

Существуют следующие способы реализации MVVM в Android:

1. Использование Data Binding библиотеки
Эта библиотека помогает связать ViewModel и UI приложения. ViewModel объявляется как источник данных в лэйаутах соответствующих активити или фрагмента. После этого в элементах лэйаута добавляется связывание с полями ViewModel:



Библиотека Data Binding генерирует код, который обеспечивает связывание. При обновлении поля userName, обновится текст в TextView.

2. Использование ViewModel и LiveData
ViewModel (класс Architecture Components) реализован так, что переживает пересоздание активити и фрагментов. При использовании этого класса можно не беспокоиться о сохранении состояния, когда изменяется конфигурация.

LiveData – класс, реализующий паттерн Observable. LiveData принимает как наблюдателей объекты, которые реализуют интерфейс LifecycleOwner, например Activity и Fragment. Благодаря этому LiveData автоматически отписывает подписчиков при вызове onDestroy().
Data Binding может использоваться совместно с ViewModel и LiveData.

3. Кастомная реализация
Существует множество способов реализации связи между View и ViewModel, кроме предоставляемых библиотеками от Google.
Например ViewModel может использовать Observable из RxJava и View будет подписываться на обновления ViewModel так же как ViewModel подписывается на обновления Model.
Кастомная реализация добавляет больше гибкости, но нужно самому заботиться о сохранении состояния.

#Architecture
To‘liq o‘qish
Что такое MVVM?

MVVM (Model-View-ViewModel) – это шаблон проектирования. Так же как и MVP, MVVM используется для разработки пользовательского интерфейса и разделяет ответственность за бизнес логику и логику отображения.

MVVM состоит из следующих частей:

• Model представляет собой данные, которые необходимо показать пользователю. В большинстве Android-приложений моделью выступает слой, отвечающий за получение данных с бэкэнда.

• View – это класс, отвечающий за отображение данных. В Android-приложениях View – это обычно Activity или Fragment.

• ViewModel – класс, который соединяет View и Model. ViewModel подписана на обновления Model, а View подписана на обновления ViewModel. При этом ViewModel не имеет явной сслыки на View. Подписки реализуются через паттерн Observer.

ViewModel представляет собой маппинг данных, которые отображаются на View.
Допустим, пользователь вводит текст в поле ввода сообщения в приложении-мессенджере и нажимает "Отправить". View изменяет ViewModel. ViewModel выставляет атрибут isMessageRead в значение false и обновляет Model. В нашем примере Model – это абстракция для слоя взаимодействия с бэкендом. Обновление модели значит отправка запроса с введенным сообщением.

Далее собеседник читает сообщение. Model обновляется по сети (например приходит сигнал по сокет-соединению). ViewModel получает оповещение об обновлении Model и обновляет себя, меняя значение атрибута isMessageRead на true. View наблюдает обновление ViewModel и отрисовывает изменение.

#Architecture
To‘liq o‘qish
О карьерном пути Андроид-разработчика:

https://goobar.io/2020/01/13/android-developer-career-paths/

#пятница
Назовите минусы MVP (2/2)

Продолжим список классических проблем MVP:

• Раздутый интерфейс View
Если экран имеет много элементов и состояний, это приводит к тому, что в интерфейс View добавляется слишком много методов. Presenter будет использовать каждый метод для обновления маленькой части UI экрана.
Эта проблема решается разбиением экрана на несколько MVP компонентов, но иногда сложно найти правильный trade off.

• Сложно сохранять состояние
В правильной реализации MVP состояние хранится в Model. Пользователь делает действие → Presenter получает обновленную Model → Presenter обновляет View. Пользователь поворачивает экран → View пересоздается → Presenter инициализируется → Model возвращает закэшированные данные → Presenter обновляет View в том же состоянии.

В реальности помимо состояния бизнес модели существует состояние View. Например текст, введенный в EditText, но не отправленный на бэкенд, или состояние кастомной View (элемента UI, а не интерфейса MVP).
Если эти данные хранить в Model, то мы получаем раздутую модель, заботящуюся не о бизнес логике, а о логике отображения.
Если сохранять в Presenter, то нужно реализовать логику совмещения состояния View и состояния Model при инициализации. Дополнительно View должна обрабатывать метод onSaveInstanceState().

Существует множество подходов к решению этой проблемы, что фрагментирует MVP как паттерн и только увеличивает количество споров о том, какой способ реализации правильный.

#Architecture
To‘liq o‘qish
Назовите минусы MVP (1/2)

Проблемы классической реализации MVP в Android-приложении:

• Циклическая зависимость между View и Presenter

В MVP View хранит ссылку на Presenter, а Presenter ссылается на View. Это не так страшно, т.к. Presenter не знает о конкретном классе, реализующем интерфейс View, но факт остается фактом.
Из-за того, что Presenter ссылается на View, время его жизни должно не превышать время жизни View. Presenter обязан остановить все асинхронные операции, до перехода Activity или Fragment в состояние destroyed.
Это приводит нас ко второй проблеме.

• Presenter предоставляет методы для обработки жизненного цикла View

В хорошей реализации MVP Presenter не имеет методов жизненного цикла, таких как onStart()/onStop(). Вместо этого создаются методы типа init() для загрузки и отображения данных и unsubscribe() для отписки от асинхронных вызовов.
При такой реализации Presenter не знает о жизненном цикле, но View должна сама заботиться о вызове этих методов. Если View не вызовет unsubscribe() до отработки метода onDestroy(), то это может привести к утечке Activity.

#Architecture
To‘liq o‘qish
Что нужно знать о структурах данных Android-разработчику перед интервью:

https://blog.mindorks.com/android-developer-should-know-these-data-structures-for-next-interview

#пятница
Что такое MVP?

MVP (Model-View-Presenter) – это шаблон проектирования, который используется для разработки пользовательского интерфейса в приложении.
MVP разделяет ответственность за бизнес логику и логику отображения.

MVP состоит из следующих частей:

• Model представляет собой данные, которые необходимо показать пользователю. В большинстве Android-приложений моделью выступает слой, отвечающий за получение данных с бэкэнда.

• View – это класс, отвечающий за отображение данных. В Android-приложениях View – это обычно Activity или Fragment.
Кроме того View слушает пользовательские ивенты и делегирует их обработку в Presenter.
Например View может иметь такой код:
loginButton.setOnClickListener { presenter.onLoginClicked() }

• Presenter – это класс, который имеет ссылки и на View, и на Model, и расположен между ними. Presenter отвечает за обработку ивентов, приходящих из View, получение данных из Model и обновление View c полученными данными.
В Android-приложениях хорошей практикой считается делать Presenter независимым от Android SDK. Другими словами Presenter не имеет доступа к Android классам напрямую и может быть использован в plain java приложении.

Подробнее о MVP

#Architecture
To‘liq o‘qish
Что такое Android Jetpack?

Android Jetpack – это набор библиотек и инструментов, созданный командой Google для упрощения разработки под Android.

Проект Jetpack анонсирован в 2018 году. Jetpack-библиотеки используют пакет androidx.*. Support-библиотеки также стали частью Jetpack.

Библиотеки, входящие в Jetpack логически разделены на четыре вида:

1. Foundation – базовые библиотеки, которые помогают уменьшить бойлерплейт код. Сюда входят AppCompat, Android KTX, Test.

2. Architecture Components – это библиотеки, используемые для построения архитектуры приложения. Среди них LiveData, ViewModel, Room, WorkManager.

3. Behavior – библиотеки-врапперы для функциональности, предоставляемой Android SDK. Созданы для улучшения стандартного Android API: Permissions, Notifications, CameraX.

4. UI – компоненты, помогающие работать с фрагментами, лэйаутами и анимацией. Среди прочих сюда входит Jetpack Compose.

#Jetpack
To‘liq o‘qish
Android Interview Review 30 Dec 2019, 18:01
1. #Service
2. #System
3. #ContentResolver
4. #Application
5. #State
6. #Collections
7. #Build
8. #SharedPreferences
9. #Fragment
10. #Parcelable
11. #Intent
12. #Lifecycle
13. #Permissions
14. #Kotlin
15. #Components
16. #Activity
17. #AndroidManifest
18. #View
19. #Intents
20. #BroadcastReceiver
21. #RxJava
22. #ContentProvider
23. #OS
24. #Jetpack
25. #Architecture

Тренировочные собеседования: @MockInterviewReviewBot

Обратная связь: @SobesAdmin

Web-версия: itsobes.ru
To‘liq o‘qish
Android Interview Review 30 Dec 2019, 18:01
Дорогие друзья, поздравляем вас с наступающим Новым Годом! Желаем каждому из вас найти в следующем году работу мечты и надеемся, что наш канал вам в этом поможет.

Редакция нашего канала уходит на новогодние каникулы. А для вас мы подготовили топ 5 постов и навигацию по темам канала.

Помните, лучший способ поздравить канал – поделиться ссылкой с друзьями. Или дать фидбэк в бота обратной связи @AndroidSobesBot.

С наступающим!
To‘liq o‘qish
Android Interview Review 27 Dec 2019, 18:00
Что такое Consumer Proguard?

Proguard удаляет весь неиспользуемый код подключенных библиотек, а также классы и методы, которые используются через Reflection.

Если для своего приложения разработчик может написать Proguard-правила, сохраняющие такие классы, то для библиотеки это возможно сделать, только исследовав ее исходный код. Это довольно сложная задача, поэтому создание правил ложится на разработчиков библиотек.

Если библиотека распространяется в формате jar, то разработчики часто документируют Proguard-правила. Пользователям библиотеки достаточно скопировать их в конфигурационный файл своего проекта.

Если же библиотека поставляется в формате aar, то разработчики библиотеки могут запаковать Proguard-правила в aar-пакет.

Для этого в gradle-файле библиотеки используется проперти consumerProguardFiles, которая принимает файл с правилами Proguard.

В этом случае пользователям библиотеки не надо ничего делать. При сборке приложения Gradle автоматически проверяет все aar-библиотеки на наличие consumer proguard файлов и мержит их с конфигурационным файлом проекта.

#Build
To‘liq o‘qish