Сегодня разбираем Android quiz с конференции для мобильных разработчиков Mobius 2018 Moscow.
Формат был довольно стандартный: 15 вопросов по 4 варианта ответа. Временной лимит 30 секунд на каждый вопрос.
Поехали!
Вопрос 1
Вопрос 2
Вопрос 3
Вопрос 4
Вопрос 5
Вопрос 6
Вопрос 7
Вопрос 8
Вопрос 9
Вопрос 10
Вопрос 11
Вопрос 12
Вопрос 13
Вопрос 14
Вопрос 15
Формат был довольно стандартный: 15 вопросов по 4 варианта ответа. Временной лимит 30 секунд на каждый вопрос.
Поехали!
Вопрос 1
Ответ
Astra boy/Bender
Пояснения
Всем известно, что каждая новая версия Android получает кодовое наименование на тему сладостей и присваиваются они в алфавитном порядке (Cupcake, Donut, Eclair и т.д.).
Однако, первоначально, разработчиками планировалось давать версиям названия, используя вымышленные имена роботов. Поэтому, первые версии Android носили имя Astra boy и Bender. Это были внутренние релизы еще до выпуска безымянной версии 1.0. Однако, по определенным причинам вектор сменился и версию 1.1 было решено назвать Petit Four. Это была первая сладкая версия Android. А уже начиная со следующей версии (Cupcake 1.5), имена начали присваивать соблюдая алфавитный порядок.
Источник
Статистика ответов
Вопрос 2
Ответ
Marshmallow
Пояснения
С выходом API 23 (Marshmallow) в Android ввели новое понятие runtime permissions. Эта фича должна была добавить прозрачности для пользователей к разрешениям выдаваемым приложению. До релиза “зефирки” выдача разрешений происходила в момент установки приложения.
Источник
На заметку, Android содержит в себе более 100 уникальных permissions.
Статистика ответов
Вопрос 3
Ответ
measure()
Пояснения
measure() — вызывается для определения требований к размеру View и всех его дочерних элементов.
onMeasure() — вызывается из measure() для проведения фактической работы по определению размеров View.
onLayout() — вызывается для расположения элемента внутри контейнера
onDraw() — вызывается для отрисовки View контента.
Более подробную информацию по отрисовке View можно найти здесь.
Статистика ответов
Вопрос 4
Ответ
isUserSmell()
Пояснения
В SDK отсутствует метод isUserSmell(). Возможно в будущем, с появлением на устройствах соответствующих датчиков…
Разберем что же делают остальные методы:
isUserMonkey() — метод предназначен для проверки является ли пользователь тестовым в рамках автоматизированного теста monkey.
isUserAGoat() — начиная с API 21, проверяет установлено ли приложение Goat Simulator GoatZ (“Симулятор козла”). На версиях ниже, метод всегда возвращает false. Располагается в классеandroid.os.UserManager
.
isFinalCountdown() — метод открывает клип группы Europa «The Final Countdown». Добавили его в API 26. Расположен в классеandroid.widget.Chronometer
.
Статистика ответов
Вопрос 5
Ответ
private static final int mobius = 2018
Пояснения
Здесь проверялось знание ключевого словаconst
, которое используется для объявленияcompile time constants
. В мире Java это соответствует модификаторамstatic final
.
Статистика ответов
Вопрос 6
Ответ
sdpi
Пояснения
Если xhdpi и mdpi у разработчиков на слуху, то с tvdpi дела обстоят иначе. Популярности оно не снискало, а потому и устройств в категории tvdpi очень и очень мало, но они были. Наиболее известное из них — Nexus 7 (2012).
Источник.
На заметку, tvdpi имеет коэффициент 1.3 относительно mdpi.
Статистика ответов
Вопрос 7
Ответ
Упаковывает все ресурсы и файлы в apk
Пояснения
AAPT (Android Asset Packaging Tool) — Android инструмент для создания .APK файлов.
Условно работу этой утилиты можно разделить на два этапа:
— Компиляция. На данном этапе идет подготовка ресурсов: генерируется класс R, ресурсы XML переводятся в бинарный формат, производится обработка PNG и пр.
— Упаковка (линкование). Все промежуточные файлы, созданные на этапе компиляции, упаковываются в APK.
Что касается остальных вариантов ответа:
— обфускацией кода обычно занимается proguard.
— Java байт-код является результатом работы Java Compiler, который транслирует исходный код в Java байт-код.
— Dalvik байт-код является результатом работы Dalvik Compiler (DX, D8), который транслирует .class (Java байт-код) в .dex (Dalvik байт-код). Исходный код в Dalvik байт-код не транслируется напрямую.
Процесс сборки Android приложения в общих чертах приведен в документации.
Статистика ответов
Вопрос 8
Ответ
RIGHT OUTER JOIN
Пояснения
Из перечисленного не поддерживается RIGHT OUTER JOIN.
Источник.
Статистика ответов
Вопрос 9
Ответ
2x
Пояснения
Name Density ldpi 0.75 mdpi 1 tvdpi 1.3 hdpi 1.5 xhdpi 2 xxhdpi 3 и 2.6 xxxhdpi 4 и 3.5
Статистика ответов
Вопрос 10
Ответ
ART
Пояснения
ART (Android RunTime) — новая среда исполнения DEX байт-кода, пришедшая на смену Dalvik. Наиболее существенным отличием Dalvik от ART является то, что Dalvik основан на JIT (Just-in-Time) компиляции, в то время как ART — на AOT (Ahead-of-Time). В общих чертах это означает, что Dalvik переводит dalvik байт-код в машинный всякий раз во время выполнения приложения, а ART занимается этим один раз, на этапе установки приложения, сохраняя результат в памяти устройства. Это приводит к тому, что на ART происходит более быстрый запуск и выполнение приложений по сравнению с Dalvik, но при этом увеличивается время установки приложения. Помимо этого в ART провели оптимизацию GC, а также добавили ряд функций для улучшения разработки и отладки приложений.
ART и Dalvik
Кроме того, стоит отметить, что ART также включает в себя JIT компилятор, который дополняет AOT. Подробнее об этом здесь.
Статистика ответов
Вопрос 11
Ответ
YAGNI
Пояснения
KISS (Keep It Simple, Stupid) — не усложняй!
DRY (Don’t repeat yourself), DIE (Duplication Is Evil) — не повторяйся!
WTF (количество “чёзана” в секунду) — единица измерения качества кода на ревью.
YAGNI (You aren't gonna need it) — вам это не понадобится!
Статистика ответов
Вопрос 12
Ответ
Application Not Responding
Пояснения
ANR (Application Not Responding) — проблема, возникающая при невозможности основного потока приложения обрабатывать пользовательские события и перерисовывать UI.
В Android за отзывчивостью приложения наблюдают системные сервисыActivityManager
иWindowManager
. Если выполнится одно из нижеперечисленных условий:
— нет реакции на события ввода (touch и key pressed события),
— BroadcastReceiver не завершит выполнение в течение 10 секунд,
то система уведомит пользователя о проблеме, показав соответствующий диалог ANR.
Статистика ответов
Вопрос 13
Ответ
Size & mode
Пояснения
MeasureSpec предназначен для передачи требований к размерам от родителя к дочерним view компонентам. Эти требования составляются по двум измерениям: ширина и высота. Значения по каждому из измерений являются составными: первая часть содержит в себе информацию о доступном пространстве (в пикселях), вторая часть — ограничения на использование доступного пространства. Эти ограничения могут быть следующими:
MeasureSpec.UNSPECIFIED — ограничений нет, view может принимать любой размер, который ей потребуется.
MeasureSpec.EXACTLY — определены точные размеры, view будут даны именно эти границы.
MeasureSpec.AT_MOST — определены максимальные размеры. View может быть настолько большим, насколько хочет, но до указанного размера.
Статистика ответов
Вопрос 14
Ответ
Linux Kernel
Пояснения
Linux Kernel (ядро линукс) — этот слой обеспечивает функционирование системы и отвечает за безопасность, управление памятью, процессами, а также предоставляет сетевой стек и модель драйверов (Display Driver, Camera Driver и другие драйвера).
Libraries (библиотеки) — это промежуточный слой программного обеспечения, предназначенный для обеспечения базового функционала для приложений, таких как поддержку файловых форматов, осуществление кодирования и декодирования информации (например, кодеки), отрисовку графики и многое другое (Surface Manager, Media Framework, SQLite и др.).
Android Runtime — располагается на одном уровне с Libraries. Ключевыми компонентами здесь являются Dalvik VM и ряд библиотек ядра (Core Libraries).
Application Framework — уровень каркаса приложений. Именно через каркасы приложений разработчики получают доступ к API, лежащими ниже уровнем. Сюда входят: ActivityManager, Package Manager, Window Manager и др.
Applications — уровень приложений, как базовых (предустановленных на ОС: браузер, календарь, контакты и пр.), так и установленных пользователем.
На заметку, авторы квиза олдскулы, т.к. в официальной документации слои выделены иным способом: source.android.com/devices/architecture.
Статистика ответов
Вопрос 15
Ответ
invokeabstract
Пояснения
goto — переход к другой инструкции.
invokeinterface — используется для вызова методов интерфейса.
invokestatic — используется для вызова static-методов.
Описание остальных инструкций.
Статистика ответов