AndroidQuiz — weekly digest(10.05.2020)

Ilia Pavlovskii
8 min readMay 10, 2020

AndroidQuiz — это телеграм канал с викторинами по Android(Java/Kotlin) тематике. На этом канале Вы сможете закрепить свои знания в языке программирования и платформе, а также узнать что-нибудь новое). Подробнее здесь.

В данном топике будет разбор задач за неделю(03.05.2020–10.05.2020).

1. Какого модификатора доступа нет в Kotlin?

a) internal
b) protected
c) package private
d) private

Правильный ответ
c ) package private.
Разработчики мотивируют это тем, что в реальности, package private в java не реализует инкапсуляцию в полной мере. Вы легко можете создать свой пакет с тем же пакетом и переиспользовать его. Источник.

2. Можно ли унаследоваться от класса String?

a) Да
b) Нет

Правильный ответ
b) Нет.
String — имутабельный класс. Источник

3. Можно ли создать Android приложение без Activity?

a) Да
b) Нет

Правильный ответ
a) Да.
Да, можно. Именно так и работают сервисные приложения(клавиатура, Google Play Services). Источник.

4. Что будет выведено в лог?

a) Код не скомпилируется
b) Create;Start;Stop;Destroy;
c) Create;Destroy;
d) Пустая строка

Правильный ответ
с) Create;Destroy;
Активити вызывает команду finish() в перегруженном методе onCreate(). Так как активити не видна для пользователя и в очереди лежит команда на уничтожение — методы onStart/onStop не будут вызваны. Пример.

5. Что будет выведено в терминал?

a) 2
b) 123
c) 12
d) 13

Правильный ответ
с) 12
Инлайн функция принимает лямбда выражение как аргумент. В этом случае, return будет относится не к лямбда блоку, а ко всей функции. Пример.

6. Что будет выведено в консоль?

a) false
b) true
c) Ошибка компиляции
d) Пустая строка

Правильный ответ
b) true
CharSequence?.isNullOrEmpty(): Boolean
— это декларация метода из стандартной библиотеки. В данном случае строка нулевая, метод вернет значение true. Источник.

7. Какой результат выполнения операции?

a) false
b) true
c) Ошибка компиляции
d) Пустая строка

Правильный ответ
b) true
В этом примере без сюрпризов — equals(он же ==) отработает как и ожидается. Источник.

8. Что будет выведено в терминал?

a) Ошибка компиляции
b) 12
c) 123
d) 2

Правильный ответ
a) Ошибка компиляции
Crossinline
запрещает нелокальные возвраты в лямбде, передаваемые встроенной функции. Источник.

9. В каком потоке будут выполняться инструкции Handler?

a) Всегда в main
b) В новом потоке
c) В котором был создан Handler
d) В произвольном

Правильный ответ
c) В котором был создан Handler
Handler
создает передает задачи в MessageQueue с ключем Looper того потока, на котором он был создан. Источник.

10. Какой сладостью был назван Android 6?

a) Oreo
b) Nougat
c) Marshmallow
d) Lollipop

Правильный ответ
c) Marshmallow
Marshmallow. Источник.

11. Что будет выведено на экран?

a) 123ok
b) 12ok
c) 12
d) ok12

Правильный ответ
c) 12
forEach
— inline extension функция, которая дает возможность локального возврата. Пример.

12. Какой результат будет выведен на экран?

a) Ошибка компиляции
b) C
c) Пустая строка
d) A)

Правильный ответ
c) Пустая строка
И в этом примере без подводных камней. Кейс с объектом C не указан, значит он не будет отарботан. Пример.

13. Какой colorPrimary цвет будет у AppTheme.AndroidQuiz.Light?

a) red
b) green
c) blue
d) Не определен

Правильный ответ
b) green
AppTheme.AndroidQuiz.Light —
тема использует как dot notation(AppTheme.AndroidQuiz) так и явное наследование от AppTheme. В этом случае будет отработано явное наследование по причине механики приоритетов. Источник.

14. Есть ли какие-либо лимиты для данных передаваемых через Bundle?

a) 500 Kb
b) 1 Mb
c) Нет никаких ограничений
d) 10 Mb

Правильный ответ
b) 1mb
Один мегабайт — такой лимит для объектов передаваемых через Bundle. Источник.

15. Будет ли выполнен инфлейт у textView?

a) Да
b) Нет
c) Зависит от версии Android

Правильный ответ
a) Да
Этот вопрос на знание разницы между View с visibility=gone и ViewStub? Виджеты с невидимым состоянием все-равно будут подвержены инфлейту, в отличии от ViewStub. Источник.

16. Какой из перечисленных типов нельзя объявить как custom attribute?

a) string
b) flag
c) enum
d) drawable

Правильный ответ
d) drawable
Drawable
относится к типу reference. Источник.

17. За что отвечает флаг android:exported для activity в манифесте?

a) Открывает доступ к intent-filters системе
b) Определяет, может ли активити быть запущено компонентами других приложение
c) Разрешает экспортировать данные из этого активити в файловую систему
d) Может ли пользователь использовать эту активити до разблокировки устройства

Правильный ответ
b) Определяет, может ли активити быть запущено компонентами других приложение
Здесь без комментариев, сразу ссылка на документацию.

18. Можно ли запустить активити без установления корневого вью(setContentView)?

a) Да
b) Нет
c) Если установлен флаг launchMode=”singleTop”
d) Только с версии API 23

Правильный ответ
a) Да
Это возможно. А на бэкграунде будет splash темы с которой запускается эта Activity. Источник.

19. Пазлер от Антона Кекса: Какой получим результат?

a) John
b) Jaan
c) Ни один из вариантов
d) Ошибка компиляции

Правильный ответ
c) Ни один из вариантов
В этом примере мы попадем в западню бесконечного цикла, так как name в рамках условного оператора будет вызывать себя же(поле задекларированное в классе). Источник.

20. Какой получим результат?

a) 1
b) 2
c) null
d) Ошибка компиляцци

Правильный ответ
b) 2
Про эту ошибку рассказывал Marcin Moskala в книге Effective Kotlin(глава Readability). Функция расширения .let вернет результат null который и будет перехвачен элвис оператором. Пример.

21. Какой тип лицензии является предпочтительным для AOSP?

a) Apache 2.0
b) MIT
c) GNU 3.0
d) GPLv2

Правильный ответ
a) Apache 2.0
Android Open Source Project — предпочитает использовать лицензию Apache 2.0. Скорее всего покажется, что вопрос на знания, но при наличии вариантов ответа — на него можно будет ответить довольно легко. Ну а если вы не ленились заглянуть в исходники Android кода, то вероятно обратили внимание на копирайт в классах. Источник.

22. В каком потоке выполняет свои задачи Service?

a) Main
b) Новый поток
c) В произвольном
d) Отдельный пул потоков Services

Правильный ответ
a) Main
Классический вопрос для собеседования — Main. Источник.

23. Можно ли избавиться от overdraw удалением лишних определений background в верстке?

a) Да
b) Нет, компилятор сам это делает
c) Нет, minifyEnabled=true сделает это за вас
d) До API 26 - поможет

Правильный ответ
a) Да
Признаюсь честно, сам узнал об этом недавно, пройдя курс оптимизации на Udacity. В этом вопросе определимся с тем, что же такое overdraw? Overdraw — понятие перерисовки и показывает то, что один и тот же пиксель перерисовывается несколько раз в одном кадре. И ответ на этот вопрос лежит в самом главном источнике для Android разработчиков — документация.

24. Какая из перечисленных библиотек не является ORM для SQLite?

a) Room
b) ORMLite
c) Realm
d) DBFlow

Правильный ответ
с) Realm
Как заявляют разработчики, Realm — это объектно-ориентированная база данных, которая является альтернативой SQLite. Источник.

25. Какой тип данных нельзя сохранить в SharedPreferences?

a) Boolean
b) String
c) List<String>
d) Set<String>

Правильный ответ
с) List<String>
Этот факт очень меня опечалил, но так оно и есть, мы не можем сохранить список, а множество можем( Источник.

26. Что из перечисленного не является extension функцией стандартной библиотеки kotlin?

a) run
b) apply
c) also
d) with

Правильный ответ
d) with <T, R> with(receiver: T, block: T.() -> R): R — это декларация метода with, он единственный из этого списка который требует передачу аргумента как основу преобразования. Источник.

27. Какой результирующий класс у функции TODO() из стандартной библиотеки?

a) Any
b) Unit
c) Nothing
d) TODO() не является функцией

Правильный ответ
c) Nothing
fun TODO(): Nothing = throw NotImplementedError()
— вот так вот выглядит функция TODO из стандартной библиотеки. Nothing — дает нам понять то, что метод никогда ничего не вернет. Источник.

28. Можно ли выложить в Google Play приложение с флагом android:testOnly=true у Application в манифесте?

a) Да
b) Нет
c) Нет такого флага
d) После API 25

Правильный ответ
b) Нет
Этот флаг автоматически устанавливает AndroidStudio когда мы нажимаем кнопочку Run и application с таким флагом может быть установлен на аппарат только через ADB. Источник.

29. Какой результат будет выведен?

a) Пустая строка
b) 1
c) ClassCastException
d) Ошибка компиляции

Правильный ответ
с) ClassCastException
listOf<Int>() == EmptyList
— иммутабельная коллекция. Пример.

30. Можно ли таким образом отложить инфлейт большой вью и ускорить процесс загрузки всей активити?

a) Ошибка компиляции - неизвестный аргумент в конструкторе
b) Да, все легально
c) Нет, на втором запуске onStart будет NullPointerException
d) Нет, ViewStub просто переключает visibility state, инфлейт будет всегда

Правильный ответ
с) Нет, на втором запуске onStart будет NullPointerException
ViewStub
“разворачивает” свое содержимое и не может быть заинфлейчен дважды. Источник.

31. Что из перечисленного не является блоком комментария?

a) // Comment
b) /* Comment */
c) /** Comment */
d) /* Main comment /* Nested comment */ and ends here. */

Правильный ответ
с) /** Comment */
Правильный вариант является блоком документации, все остальные относятся к комментариям. Источник.

32. Что из предложенного гарантированно будет компилироваться в примитив?

a) var a: Int = 123
b) var a: Int? = 123
c) var a: Integer = 123
d) Ничего из перечисленного

Правильный ответ
a) var a: Int = 123
Вы можете проверить это взглянув на байт код. Или же посмотрите это видео здесь подробно описан этот аспект.

33. После заливки bundle(.aab) приложения в маркет(GooglePlay), как будет выглядеть процесс обновления у пользователя?

a) Скачается весь бандл, распакует и установит только необходимое. Ненужные ресурсы будут удалены.
b) Скачается весь бандл, распакует и установит только необходимое.
c) Процесс идентичен установке APK файла.
d) Скачаются только необходимые для вашего телефона ресурсы.

Правильный ответ
d) Скачаются только необходимые для вашего телефона ресурсы.
Это одна из основаных фишек бандлов. Источник.

34. JUnit4. В чем разница между аннотациями @Before и @BeforeClass?

a) Нет никакой разницы
b) @Before вызывается перед каждым тестом, @BeforeClass перед запуском тестового класса
c) @Before вызывается после каждого теста, @BeforeClass после работы тестового класса
d) @BeforeClass - устаревшая аннотация

Правильный ответ
b) @Before вызывается перед каждым тестом, @BeforeClass перед запуском тестового класса
Без комментариев и сразу на источник.

35. Какой процесс изображен на данной схеме?

a) Старт любой Activity
b) Старт Explicit Activity
c) Старт Implicit Activity
d) Старт Activity по action

Правильный ответ
c) Старт Implicit Activity
Именно из-за того что Implicit Activity будет перенаправляться на поиск возможных вариаций в систему, разработчики платформы рекомендуют использовать Explicit Activity навигацию внутри приложения, так как она будет вызвана незамедлительно. Источник.

--

--