7-8 декабря отгремела конференция для мобильных разработчиков Mobius 2019 Moscow. Доклады прочитаны, гости накормлены, призы разыграны, и вот перед вами разбор самых интересных вопросов из трех quiz’ов со стенда hh.ru.
Вопрос 1
Какую физическую величину измеряет датчик света в смартфоне?
Люкс
https://developer.android.com/guide/topics/sensors/sensors_environment.html
Единица измерения Illuminance (Освещённость) в СИ — лк (люкс)
Вопрос 2
Главный вопрос, который решает JMM
Что прочитает конкретный read в многопоточной программе?
На вопрос "Как правильно писать многопоточные программы" JMM, к сожалению, не отвечает, но дает нам информацию о том, как устроена модель памяти в Java, чтобы мы могли сами принимать правильные решения.
"Что запишет конкретный write в многопоточной программе?" не является правильным ответом, потому что, обычно нас, как программистов, интересует результат этой записи.
"Быть или не быть" — отрывок из знаменитого монолога шекспировского Гамлета и, кто бы мог подумать, не имеет никакого отношения к многопоточным программам.
Остается последний вариант — "Что прочитает конкретный read в многопоточной программе", который и является правильным ответом.
На тему JMM рекомендуем посмотреть доклад Алексея Шипилева "Прагматичный JMM"
Вопрос 3
Результатом выполнения следующего блока кода будет …
Observable.create<Int> { 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
https://developer.android.com/about/dashboards
Скриншот от 10.12.2019
Вопрос 5
Какая из библиотек на самом деле НЕ имеет в названии цифры 2?
Room2
Последняя версия Room — 2.2.2. Но в названии библиотеки цифры 2 нет.
Camera2
ViewPager2
Retrofit2
Вопрос 6
Какого типа будет результат выражения в Kotlin?
mutableListOf<Any>() + mutableListOf()
List<Any>
Ответ неочевидный, с первого взгляда логично, что результатом будет MutableList. Мы сами только недавно заметили такую особенность стандартной библиотеки Kotlin. Разбираемся почему именно так.
В Kotlin над коллекциями можно выполнять бинарные операции используя синтаксис a + b, что транслируется в a.plus(b). Метод plus для MutableList из исходников Kotlin:
public operator fun <T> Collection<T>.plus(elements: Array<out T>): List<T> {
..
}
То есть возвращаемый тип List<T>, в нашем случае List<Any>. При этом тип второго mutableListOf указывать необязательно, Kotlin сам выведет тип по первому аргументу сложения.
Вопрос 7
Какого фреймворка для UI тестирования Android приложений НЕ существует?
Mokko
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?
2
1 из Android 4.4
2 из Android 6.0 и выше
3 из Android 5.0
4 — излюбленный предмет интерьера в российских офисах и новогодний подарок мечты — настенный календарь
Вопрос 10
Первый android-смартфон Google выпущенный в сотрудничестве с производителями телефонов
Nexus One
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?
1.1.0
С выходом 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
Bugdroid
Вопрос 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