За окном весенняя сырость и слякоть, а вот на осеннем Mobius-е на стенде HeadHunter было очень горячо. Первую часть quiz-а мы публиковали, сегодня — публикуем вторую, чтобы вы смогли размять мозги перед будущими конференциями.
Поехали!



Поехали!



Вопрос 1

Ответ
Фотокамера

Пояснения
Вообще Android изначально разрабатывался компанией Android Inc. Создатели планировали, что он будет использован для создания “умных камер”. В 2005 году Google купил Android Inc и изменил вектор применения платформы в сторону мобильных устройств.

«Точно такая же платформа и операционная система, которую мы создавали для камер — стала Android для мобильных телефонов», — говорил сооснователь Android Энди Рубин.

Статистика ответов




Вопрос 2

Ответ
Android Debug Bridge

Пояснения
ADB (Android Debug Bridge) — это инструмент командной строки, осуществляющий выполнение команд на Android устройствах. Это клиент-серверная программа, состоящая из трех компонент:

— клиент, позволяющий отправлять команды;
— демон, выполняющий команды на устройстве;
— сервер, занимающийся управлением коммуникациями между клиентом и демоном.

Статистика ответов




Вопрос 3

Ответ
Android Package

Пояснения
APK (Android Package) — формат архивных исполняемых файлов для Android. Упаковывается инструментом aapt (Android Asset Packaging Tool). Условно работу этой утилиты можно разделить на два этапа:
— Компиляция. На данном этапе идет подготовка ресурсов: генерируется класс R, ресурсы XML переводятся в бинарный формат, производится обработка PNG и пр.
— Упаковка (линкование). Все промежуточные файлы, созданные на этапе компиляции, упаковываются в APK.

Процесс сборки Android приложения в общих чертах приведен в документации.

Статистика ответов




Вопрос 4


Ответ
Agera

Пояснения
Agera — фреймворк для реактивного программирования под Android. В JetPack не входит.

Jetpack — набор библиотек, упрощающих разработку новых приложений под Android.

Slices — UI шаблоны для встраивания в другие приложения.

Android KTX — набор Kotlin extension функций, упрощающих разработку под Android.

Data binding — технология, с помощью которой мы можем автоматически привязывать данные прямо в XML коде.



Статистика ответов




Вопрос 5


Ответ
val hh = 1.

Пояснения
Вопрос был на кругозор языков программирования.
Вариант `hh = 1` можно встретить в Python, `def hh = 1` — в Groovy, а последний вариант — в Java, в которой мы обязаны указывать тип данных.

Статистика ответов




Вопрос 6


Ответ
Remote

Пояснения
Normal — в данную категорию входят разрешения, которые не требуют доступа к конфиденциальным данным пользователя или не влияют на работу других приложений. Система автоматически предоставляет эти разрешения приложению во время установки и пользователи не могут отозвать их.

Signature — автоматически предоставляются приложению системой во время установки, как и normal permissions. Однако разница в том, что не каждое приложение может получить эти разрешения. Для этого необходимо, чтобы оно было подписано тем же сертификатом, что и приложение, которое это разрешение объявило.

Dangerous — в данную категорию входят разрешения, которые требуют доступа к конфиденциальным данным пользователя или могут повлиять на работу других приложений.

Special — это SYSTEM_ALERT_WINDOW и WRITE_SETTINGS.

Документация

Статистика ответов




Вопрос 7


Ответ
Principle Of Least Astonishment

Пояснения
Ох уж эти пять букв.

Single Responsibility Principle (принцип единой ответственности) — класс должен делать что-то одно.
Open Closed Principle (принцип открытости/закрытости) — программные сущности должны быть открыты для расширения, но закрыты для изменения.
Liskov Substitution Principle (принцип подстановки Барбары Лисков) — поведение класса-наследника не должно противоречить поведению, заданному классом-родителем.
Interface Segregation Principle (принцип разделения интерфейса) — программные сущности не должны зависеть от методов, которые они не используют
Dependency Inversion Principle (принцип инверсии зависимостей) — абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

А вот “Principle Of Least Astonishment” не входит в SOLID. Это правило гласит, что если назначение элемента неясно, то его поведение должно быть ожидаемым для пользователя (принцип наименьшего удивления).

Статистика ответов




Вопрос 8


Ответ
Slices

Пояснения
Про Data Binding и Slices мы рассказывали чуть выше. Toast и Snackbar — элементы для нотификации пользователей в Android приложений и не могут быть встроены в другие приложения. Хоть Toast и может после показываться и после сворачивания приложения, в отличие от Slices он никуда не может быть встроен.

Статистика ответов




Вопрос 9


Ответ
64K

Пояснения
Спецификация dex файла ограничивает общее количество методов на которые можно ссылаться до 65 536.
В версиях с Dalvik на борту (эпоха до API 21) для обхода данного ограничения необходимо подключать библиотеку multidex, которая становится частью основного dex файла и управляет доступом к остальным.
В свою очередь ART поддерживает загрузку множества dex файлов “из коробки”. При установке приложения ART сканирует файлы classesN.dex и компилирует их в один .oat файл для дальнейшей инициализации приложения.

Multidex

Статистика ответов




Вопрос 10


Ответ
onPostPause()

Пояснения
onPostCreate() — вызывается после вызова onStart() и onRestoreInstanceState()
onPostResume() — вызывается после вызова onResume()
onResumeFragments() — фрагменториентированная версия метода onResume(). Вызывается внутри onPostResume(), после вызовов onResume() у фрагментов.

Статистика ответов




Вопрос 11


Ответ
Масштабируемая область

Пояснения
9-patch — это обычное .png изображение, в котором края размером в 1px содержат служебную информацию, интерпретируемая графической подсистемой Android следующим образом:
левая и верхняя границы задают область контента, которая будет растягиваться.
правая и нижняя границы задают область в которой будет размещаться контент.

Статистика ответов




Вопрос 12


Ответ
Zygote

Пояснения
Zygote — один из ключевых компонентов любой Android-системы. Он ответственен за инициализацию, старт системных служб, запуск и остановку пользовательских приложений и многие другие задачи. При инициализации Zygote формирует среду исполнения Java-приложений (путем загрузки всех Java-классов фреймворка) и стартует высокоуровневые системные службы (WindowManager, ActivityManager и пр.), после чего уходит в сон. При получении запроса на старт приложения, Zygote копирует сам себя (форкается) и запускает поверх полученной копии виртуальной машины нужное приложение. Такой принцип работы позволяет снизить расход памяти (Linux при форке копирует память в режиме copy-on-write) и ускорить запуск приложения (форк процесса происходит намного быстрее запуска новой виртуальной машины).

Статистика ответов




Вопрос 13


Ответ
Libraries

Пояснения
Уровни Android архитектуры разбирали в предыдущем квизе в 14 вопросе.

Статистика ответов




Вопрос 14


Ответ
Регистровая VM

Пояснения
Существует два основных способа реализации виртуальной машины: стековый (Java, .Net CLR) и регистровый (Lua VM, Dalvik VM). Основная разница между этими двумя подходами заключается в механизме, используемом для записи и получения операндов и результатов выполнения команд.

Стековая VM для хранения операндов использует стек. Операции получают данные из стека, обрабатывают их и заносят результат обратно в стек по правилу LIFO.

Регистровая VM для размещения операндов использует регистры процессора. Инструкции такой VM должны явно содержать адреса (регистры), в которых содержатся операнды.

За счет этой разницы команды в регистровой VM выполняются быстрее аналогичных команд стековой VM, однако они в среднем занимают больше памяти за счет явного указания операндов.

Еще одно преимущество регистровой VM — возможность сохранить вычисленное значение в регистре, что экономит время необходимое для пересчета выражений.

Причины выбора реализации Dalvik VM как регистровой VM (видео или слайды (35,36)

Статистика ответов




Вопрос 15


Ответ
Z

Пояснения
JNI — Java native interface — обеспечивает возможность запуска нативного C/C++ кода из Java, и наоборот.
Чтобы вызвать Java-функцию из C++ кода, нужно правильно описать ее сигнатуру. Пусть мы хотим вызвать функцию:

boolean f(String s)

Тогда в JNI мы сможем получить ссылку на нее следующим образом:

jmethodID myFunc = env->GetMethodID(
activityClass,
"myFunc",
"(Ljava/lang/String;)Z");

Касательно типов при описании сигнатуры: 'B' используется для byte, 'C' — char, 'I' — int.

Type Signature Java Type
Z boolean
B byte
C char
S short
I int
J long
F float
D double
L fully-qualified-class ; fully-qualified-class
[ type type[]
( arg-types ) ret-type method type

(Источник)

Любопытно, что грабли с 'B' и 'Z', видимо, настолько популярны, что в доках к Android четко прописано: «Remember that 'B' is byte and 'Z' is boolean».

Ну что ж, мы запомнили)

Статистика ответов

Комментарии (0)