AndroidQuiz — weekly digest (18.05.2020)

Ilia Pavlovskii
8 min readMay 15, 2020

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

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

1. Схема чего изображена?

a) Throttling
b) Debounce
c) Throttling и Debounce это синонимы
d) Ничего из перечисленного

Правильный ответ
a) Throttling
В случае с Debounce, мы бы не досчитались бы предпоследнего X. Источник.

2. Можно ли управлять флагом exported у activity-alias?

a) Да, это одна из фишек псевдонимов
b) Нет, флаг должен быть определен у target activity
c) Нет такого флага у алиасов

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

3. Пазлер от Антона Кекса, какой будет результат?

a) positive;zero;negative
b) positive;zero;
c) ничего
d) positive;negative

Правильный ответ
b) positive;zero;
В kotlin нет else if оператора, вместо этого есть when. Подробности в источнике.

4. Модуль Application — основное приложение которое использует фрагмент из стороннего модуля. Какой текст будет содержать виджет TextView после сборки?

a) AndroidQuiz
b) Module Text
c) Ошибка компиляции
d) Неизвестно

Правильный ответ
a) AndroidQuiz
Модуль приложения переопределит все перекрестные ресурсы смежных модулей. Пример.

5. Marble диаграмма какого из предложенных операторов изображена?

a) merge
b) zip
c) combineLatest
d) join

Правильный ответ
b) zip
Этот вопрос скорее сводится к — Zip vs CombineLatest. Zip “склеивает” элементы “попарно”, тогда как combine latest будет склеивать с последним известным любой новый эммит. Более подробно изучите в источнике и подергайте marble диаграмы.

6. В 2019 году Google презентовал виджет MotionLayout, который упрощает жизнь с анимациями до уровня Flash). А наследником какого Layout он является, что позволило создать нашу жизнь проще?

a) FrameLayout
b) ViewGroup
c) CoordinatorLayout
d) ConstraintLayout

Правильный ответ
d) ConstraintLayout
Именно с выходом ConstraintLayout стало возможно сотворить такое чудо, посредством избавления от излишней вложенности и упрощения координации виджетов. Источник.

7. Многие читали или слышали о книге “Clean Architecture” (Чистая архитектура), из которой и пошло понятие — Clean Architecture. А кто ее автор?

a) Роберто Мартинес
b) Роберт Мартин
c) Джейк Вортон
d) Стивен Макконнелл

Правильный ответ
b) Роберт Мартин
Дядюшка Боб, он же Роберт Мартин. Источник.

8. В феврале 2019 Google презентовали виджет ViewPager2. Какой компонент стал для него основой?

a) RecyclerView
b) Такого компонента не существует
c) ListView
d) ViewPager

Правильный ответ
a) RecyclerView
Думаю что имплементация ViewHolder паттерна в рамках RecyclerView отлично легла в концепт ViewPager2 + реюз. Источник.

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

a) Ошибка компиляции
b) enum(ENUM)
c) ENUM
d) Ничего

Правильный ответ
с) ENUM
Тут вопрос с двойным подвохом. На самом деле, enum не является зарезервированным словом в пространстве имен Kotlin. Имплементация toString у перечислений своя, по-этому будет напечатано имя enumeration. Пример.

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

a) Ошибка компиляции
b) Рантайм ошибка
c) Block1: block
d) Block2: block

Правильный ответ
d) Block2: block
Так как мы имеем имплементации по умолчанию всех лямбда выражений, в случае указанного примера, будет перегружена последняя определенная имплементация — block2. Пример.

11. Какой размер текста будет у TextView?

a) 10sp
b) 16sp
c) 20sp
d) Ни один из перечисленного

Правильный ответ
с) 20sp
Вспоминаем диаграмму Theme -> Style -> View. В таком приоритете будут применены аттрибуты. Источник.

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

a) 01
b) 10
c) 12
d) 21

Правильный ответ
b) 10
Значение b будет вычеслено при инициализации класса — дальше постинкремент у val a- который вернет предыдущее значение и заинкрементит CONST, таким образом, значение a будет равно 1.

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

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

Правильный ответ
b) b
Коварность вопроса в том, что в данном случае перегруженный оператор invoke() не будет вызван, так как мы имеем публичный конструктор и компилятор отдаст ему приоритет. Однако есть и другая сторона медали, когда выстрел в ногу неизбежен. Источник.

14. Имеем ли мы какие-либо ограничения на получение геолокации пользователя в background режиме после 26 API?

a) Да, 20 раз в час.
b) Да, несколько раз в час.
c) Нет никаких ограничений.
d) Ни один из вариантов

Правильный ответ
b) Да, несколько раз в час.
Несколько раз в час, иначе ваша батарея превратится в тыкву. Источник.

15. Какой будет результат исполнения операции?

a) 11
b) 1Function0<Int>
c) 1Function0<java.lang.Integer>
d) Ошибка компиляции

Правильный ответ
с) 1Function0<java.lang.Integer>
При вызове метода println мы не вызваем исполнение лямбда функции b, значит получим ее деалкарацию. Осталось определиться между 2мя вариантами — декларация лямбд не поддерживает примитивы и будет скомпилировано в объект.

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

a) 10
b) 11
c) 12
d) 13

Правильный ответ
d) 13
Пре-инкремент: сначала увеличиваем значение и возвращаем его обновленное значение — 6. Во втором случае тоже самое — 7. 6+7=13.

17. Какого типа данных нет в kotlin?

a) nullable
b) non-nullable
c) platform type
d) Ни один из вариантов

Правильный ответ
d) Ни один из вариантов
Все варианты верны. Варианты nullable/non-nullable доступны при работе с kotlin. Platform type — тип совместимости при работе с кодом ЯП у которых не предусмотрена null-safety концепция.

18. Можно ли в котлин словить NullPointerException?

a) Да, без проблем
b) Да, при работе с platform type
c) Нет, разработчики уверяют что это невозможно

Правильный ответ
b) Да, при работе с platform type
Да, разработчики уверяют что это невозможно при работе с котлин кодом, но вполне себе возможно когда приходится работать с platform-type объектами.

19. Что из перечисленного появилось в Android Q?

a) Autofill framework
b) Display cutout support(моноброви и шторки)
c) Gesture navigation
d) Picture-in-Picture mode

Правильный ответ
с) Gesture navigation
Жестовая навигация появилась совсем недавно. Источник.

20. Что такое Jetifier?

a) Gradle утилита для ускорения annotation processing-а
b) Обязательный gradle plugin при подключении AndroidX библиотек
c) Утилита для миграции support-based библиотек в AndroidX
d) Новый UI DSL фреймворк для Android.

Правильный ответ
с) Утилита для миграции support-based библиотек вAndroidX
Без комментариев и ссылка сразу на источник.

21. Что будет выведено?

a) abc
b) bc
c) ac
d) cb

Правильный ответ
b) bc
Без сюрпризов, значение anotherValue ленивое и результат будет выведен только при обращении к переменной.

22. Какой из предложенных методов поможет избежать перевода времени на мобильном устройстве, чтобы использовать его как эталон для реализации таймера?

a) System.currentTimeMillis()
b) Calendar.getInstance().timeInMillis
c) SystemClock.elapsedRealtime()
d) Все из предложенных

Правильный ответ
с) SystemClock.elapsedRealtime()
ElapsedRealtime учитывает время от времени последней загрузки системы, что позволит опираться на это значение для имплементации таймера.

23. Можно ли запустить активити с результатом из фрагмента(startActivityForResult)?

a) Да, нет никаких ограничений
b) Да, но нужно вызывать старт от фрагмента, а не от рутовой активити, иначе resultCode не будет преобразован к исходному
c) Нет, нужно стартовать только от активити

Правильный ответ
b) Да, но нужно вызывать старт от фрагмента, а не от рутовой активити, иначе resultCode не будет преобразован к исходному
В противном случае нужно будет самому позаботиться о преобразовании requestCode к необходимому формату.

24. Можно ли передавать аргументы в конструктор фрагмента?

a) Нет, фрагмент может быть задекларирован в верстке и обязателен конструктор по умолчанию
b) Да, нет никаких ограничений
c) Да, если вы переопределили этот фрагмент в FragmentFactory

Правильный ответ
с) Да, если вы переопределили этот фрагмент в FragmentFactory
А - до недавнего времени это был правильный ответ на этот вопрос, но с недавних времен это необязательно, можно определить способ инициализации фрагмента через системный FragmentFactory.

25. В каком году была начата разработка Android?

a) 2003
b) 2005
c) 2008
d) 2010

Правильный ответ
a) 2003
Компания Android Inc. была основана в октябре 2003. В 2005 была куплена компанией Google. В 2008 был выпущен первый публичный релиз. В 2010 был запущен на устройствах линейки Nexus.

26. В пространстве зарезервированных имен Java и Kotlin есть множество лексем. Можно ли в kotlin обойти те лексемы, которые не были предусмотрены в Java?

a) Нет, нужно искать синонимы
b) Да, компилятор сам это поймет
c) Да, если обрамить заразервированную лексему одинарными кавычками и использовать как функцию
d) Да, если обрамить заразервированную лексему двойными кавычками
и использовать как функцию

Правильный ответ
с) Да, если обрамить заразервированную лексему одинарными кавычками
Если мы подключали mockito в свой проект, то вероятно столкнулись с проблемой функции when и ее подменой`when`/whenever — это одни из способов решения проблемы: обрамление лексемы одинарными кавычками или же использование алиаса(синонима).

27. Можно ли в kotlin унаследоваться от data class?

a) Да, нет проблем
b) Да, только нужно обязательно переопределить equals/hashcode
c) Нет, проблемы связанные с имплементацией

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

28. Кто же являтеся разработчиком языка программирования kotlin?

a) Google
b) JetBrains
c) Yandex
d) IntelliJ IDEA

Правильный ответ
b) JetBrains
Да — да и эти ребята базируются в Питере)

29. Пазлер от Антона Кекса. Что будет выведено на экран?

a) hello:x
b) toString:x
c) Ничего
d) Ошибка компиляции

Правильный ответ
a) hello:x
Здесь все довольно очевидно — у переменной типа String вызывают extension function которая возвращает новый String,

30. Пазлер от Антона Кекса. Что будет выведено в терминал?

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

Правильный ответ
a) 21
Это мой любимый пазлер и довольно сложный, на первый взгляд. Здесь стоит обратить внимание на порядок указания переменных и не забывать про приведение типов. Источник.

--

--