company_banner

Разбор второго конкурса-квиза по Android со стенда HeadHunter на Mobius 2018 Moscow

    За окном весенняя сырость и слякоть, а вот на осеннем 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».

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

    Статистика ответов
    HeadHunter
    206,81
    HR Digital
    Поделиться публикацией

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

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое