Разбор конкурса-квиза по Android со стенда hh.ru на Mobius 2019 Moscow
7–8 декабря отгремела конференция для мобильных разработчиков Mobius 2019 Moscow. Доклады прочитаны, гости накормлены, призы разыграны, и вот перед вами разбор самых интересных вопросов из трех quiz«ов со стенда hh.ru.
Вопрос 1
Какую физическую величину измеряет датчик света в смартфоне?
Вопрос 2
Главный вопрос, который решает JMM
Что прочитает конкретный read в многопоточной программе?
На вопрос «Как правильно писать многопоточные программы» JMM, к сожалению, не отвечает, но дает нам информацию о том, как устроена модель памяти в Java, чтобы мы могли сами принимать правильные решения.
«Что запишет конкретный write в многопоточной программе?» не является правильным ответом, потому что, обычно нас, как программистов, интересует результат этой записи.
«Быть или не быть» — отрывок из знаменитого монолога шекспировского Гамлета и, кто бы мог подумать, не имеет никакого отношения к многопоточным программам.
Остается последний вариант — «Что прочитает конкретный read в многопоточной программе», который и является правильным ответом.
На тему JMM рекомендуем посмотреть доклад Алексея Шипилева «Прагматичный JMM»
Вопрос 3
Результатом выполнения следующего блока кода будет …
Observable.create { emitter ->
try {
throw Exception("whoa")
} finally {
emitter.onNext(1)
}
}.subscribe { print("onNext $it + ") }
onNext 1 + OnErrorNotImplementedException
Внутри функции create мы вызываем блок try-finally, в котором бросаем исключение Exception («whoa»). Так как блок catch отсутствует, исключение должно прервать выполнение цепочки, и управление передается в обработчик onError интерфейса Observer, куда и должно было попасть Exception («whoa»). Но здесь есть два важных момента.
Первый: у нас есть блок finally, который должен обязательно выполнится. В нем мы отправляем строку «onNext 1» в обработчик onNext, который выводит эту строку в консоль с добавлением символа »+».
И второй: в функции subscribe обработчик onError не определен, поэтому RxJava бросает исключение «io.reactivex.exceptions.OnErrorNotImplementedException», и оно тоже выводится в консоль. Таким образом мы и получаем строку «onNext 1 + OnErrorNotImplementedException».
Вопрос 4
Какую версию android из перечисленных используют меньше всего пользователей согласно developer.android.com?
Lollipop 5.0
Вопрос 5
Какая из библиотек на самом деле НЕ имеет в названии цифры 2?
Последняя версия Room — 2.2.2. Но в названии библиотеки цифры 2 нет.
Camera2
ViewPager2
Retrofit2
Вопрос 6
Какого типа будет результат выражения в Kotlin?
mutableListOf() + mutableListOf()
Ответ неочевидный, с первого взгляда логично, что результатом будет MutableList. Мы сами только недавно заметили такую особенность стандартной библиотеки Kotlin. Разбираемся почему именно так.
В Kotlin над коллекциями можно выполнять бинарные операции используя синтаксис a + b, что транслируется в a.plus (b). Метод plus для MutableList из исходников Kotlin:
public operator fun Collection.plus(elements: Array): List {
..
}
То есть возвращаемый тип List
Вопрос 7
Какого фреймворка для UI тестирования Android приложений НЕ существует?
Espresso — библиотека от Google. Была выпущена в далеком 2013. Имеет многословный синтаксис, эту проблему вызвалась решить Kakao
Kakao предоставляет удобный синтаксис для написания UI используя Kotlin DSL и Espresso, позволяет использовать паттерн Page Object.
Kaspresso пошла еще дальше и решает проблемы флэкающих тестов, логирования, использования adb, работы с OS Android, создания скриншотов. Статья с полным обзором Kaspresso
Mokko — не существует
Вопрос 8
Что за режим наложения PorterDuff.Mode изображен на картинке?
Source over
PorterDuff.Mode названный в честь Томаса Портера и Тома Даффа, написавших в 1984 г. статью «Compositing Digital Images», в рамках которой были представлены 12 операций наложение одного изображение на другое. PorterDuff.Mode как раз и позволяет получить результаты этих 12 операций.
Вопрос 9
Как выглядит стандартный DatePickerDialog на Android 10?
1 из Android 4.4
2 из Android 6.0 и выше
3 из Android 5.0
4 — излюбленный предмет интерьера в российских офисах и новогодний подарок мечты — настенный календарь
Вопрос 10
Первый android-смартфон Google выпущенный в сотрудничестве с производителями телефонов
Google Nexus — серия смартфонов от Google и партнеров-производителей.
Nexus G1 не существует, но можно было спутать с первый android-смартфоном T-Mobile G1 или HTC Dream.
Nexus One производила также HTC. Смартфон работал под управлением Android 2.1.
Galaxy Nexus третий смартфон серии Nexus, разработанный совместно Google и Samsung.
Nexus 11 pro не существует.
Вопрос 11
Как согласно документации расшифровывается сокращение wtf в системе логирования Android (Log.wtf ())?
What a terrible failure!
Документация log.wtf
Wrestling Takedown Federation — 10-й эпизод 13-го сезона сериала «South Park».
Также wtf является аббревиатурой в интернет-сленге, расшифровка которой противоречит правилам habr, но вы и так все прекрасно знаете.
Вопрос 12
Какая последняя версия Appcompat?
С выходом AndroidX гугл разделил support-библиотеки и добавил новый пакет androidx, запустив новый отсчет с 1. Это означает, что последняя версия Appcompat теперь лежит в androidx.appcompat: appcompat и имеет последнюю версию 1.1.0.
В пакете com.android.support: appcompat-v7 библиотека обновилась только до версия 28.0.0. А версии 29.0.0 RC и 29.0.0 так и не вышли.
Вопрос 13
Именно так называют логотип Android сотрудники Google Android Team
Вопрос 14
Какого раздела нет в приложении hh для соискателей?
Автопоиски
В конце 2018 был произведен большой редизайн приложения. И «автопоиски» были переименованы в «подписки на поиск». То есть на текущий момент раздела с названием «автопоиски» нет.
Вопрос 15
Символ Android — зеленый робот. Автором логотипа принято считать Ирину Блок. Что послужило для нее вдохновением?
Изображение человека на двери уборной
«In the end, she took inspiration from a distinctly human source: the pictograms of the universal man and woman that often appear on restroom doors.» The New York Times
Разбор квиза произвел наш разработчик Георгий Рябых georgyR