Лучшие вопросы по Android и Kotlin, которые вы должны задать разработчикам на собеседовании

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

Если вы заинтересованы в изучении возможностей мобильных приложений Android, в какой-то момент вам нужно будет рассмотреть возможность открытия вакансий разработчика Android .

В этом посте мы подробно рассмотрим вопросы, которые HR-специалисты и технические специалисты обычно задают на собеседованиях разработчикам Android. Этот подробный список поможет вам более эффективно оценить навыки кандидатов.

Нетехнические вопросы для разработчиков Android
Менеджерам по персоналу может быть сложно оценить технические навыки кандидата, поэтому рекрутерам или владельцам бизнеса, не разбирающимся в технологиях, не имеет смысла слишком углубляться в теорию кодирования.

Когда дело доходит до отбора кандидатов, вы можете задать эти вопросы на собеседовании с разработчиком Android .

Вопрос 1. Почему вы ушли с последнего места работы?
Комментарий: этот вопрос помогает отсеять кандидатов с проблемами обязательств, а также узнать, какие характеристики работы важны для разработчика — высокая зарплата разработчика программного обеспечения , гибкий график, сложные задания или насыщенная социальная жизнь.

Вопрос 2. Представьте, что менеджер поручает вам заниматься проектом, требования которого нереалистичны. Как вы будете действовать?
Комментарий: этот вопрос проверяет напористость и коммуникативные навыки кандидата. В идеале кандидат, у которого вы проводите собеседование, должен сказать, что он сообщит о своих опасениях менеджеру, подкрепив свою точку зрения данными и исследованиями.

Вопрос №3. Опишите цель, которую вы достигли в прошлом году.
Комментарий: Задавание подобных вопросов на собеседовании с разработчиком приложений помогает проверить честность и целеустремленность программиста. Если кандидат способен понять свои пределы и поставить достижимые цели, вполне вероятно, что он будет ценным активом и в достижении ваших бизнес-целей.

Вопрос №4. Что ты читаешь?
Комментарий: хотя этот вопрос на собеседовании по Android может показаться неожиданным на собеседовании по разработке программного обеспечения, вопрос о чем-то личном является мощным ледоколом и дает менеджерам по талантам более полное представление о личности кандидата.

Технические вопросы для собеседования по разработке Android
Если кандидат в программисты подходит компании по результатам поведенческого собеседования, пора переходить к оценке технических навыков разработчика. Вот список вопросов по Android , охватывающих различные аспекты разработки Android, которые руководитель технической группы может задать кандидату в программисты.

Вопросы для собеседования с разработчиком Java Android

Вопрос № 1: Опишите типы ссылок Java
Ответ : существует три типа ссылок Java:

  • SoftReference — если GC увидит, что объект доступен только через цепочку softlinks, он удалит его из памяти, если памяти не хватит. SoftReference удобен для кеширования.
  • WeakReference — если GC увидит, что объект доступен только через цепочку слабых звеньев, он удалит его из памяти. WeakHashMap — один из самых распространенных способов реализации WeakReference. Это реализация Map<K,V>, которая хранит ключ, используя слабую ссылку. Как только GC удаляет ключ из памяти, он удаляет всю запись карты.
  • PhantomReference — если GC увидит, что объект доступен только через цепочку фантомных ссылок, объект будет удален из хранилища. У этого типа ссылок есть две особенности. Во-первых, метод get() всегда возвращает null. Вот почему имеет смысл использовать PhantomReference только с ReferenceQueue. Вторая особенность заключается в том, что, в отличие от SoftReference и WeakReference, GC добавит фантомную ссылку в ReferenceQueueue после выполнения get().

Вопрос № 2: В чем разница между классами Volatile/Atomic?

Ответ :
  • Volatile помечает объект как доступный для нескольких ступеней. Класс работает только для атомарных операций. Например, операция приращения не является атомарной, поэтому процесс рухнет .
  • Атомарные классы используют алгоритм сравнения и замены, что означает, что они обновляют значение только в том случае, если ожидаемое и фактическое значения совпадают.

Вопрос №3 : опишите механизм обработчика
Ответ : Обработчик — это механизм, который позволяет работать с очередью сообщений, разделяемой разными потоками. Он привязывается к потоку и работает с его очередью.

Когда кандидат отвечает на вопросы по Android , он должен упомянуть, что обработчики могут помещать сообщения в очередь — при этом они будут рассматриваться как получатели. Когда приходит время, система выбирает сообщение из очереди и отправляет его получателю (т.е. обработчику) для обработки.

Вопрос № 4 : в чем разница между интерфейсами и абстрактными классами?
Ответ : основные отличия между абстрактными классами и интерфейсами следующие:

  • Переменные в интерфейсе по умолчанию final
  • Модификаторы доступа можно использовать в абстрактном классе, интерфейс по умолчанию является общедоступным.
  • Вы можете наследовать несколько интерфейсов, но только один класс

Вопросы по активности

Вопрос № 1 : Опишите жизненный цикл деятельности
Ответ : вот краткий обзор методов, используемых на протяжении всего жизненного цикла:
  • OnCreate() создает представление.
  • OnStart() Activate становится видимым
  • OnResume() Activate становится доступным для ввода пользователем
  • Активация OnPause() видна, но недоступна для ввода пользователем (важно для многооконного режима).
  • Активация OnStop() больше не видна
  • OnDestroy() Activate уничтожается
  • Активация OnRestart() воссоздается, вызывается после уничтожения и перед созданием.

Вопрос №2: Какие методы вызываются при переключении между действиями?
Ответ: методы, используемые для переключения между действиями:
  • onCreate
  • onStart
  • onResume A: (переход)
  • onPause B: onCreate
  • onStart
  • onResume A: onStop B: (обратный переход) onPause A: onRestart
  • onStart
  • onResume B: onStop
  • onDestroy

Вопрос №3. В каких случаях onDestroy() вызывается без onPause() и onStop()?

Ответ : Это происходит, если вы активируете метод finish() перед onStart и onResume.

Вопрос №4. Почему setContentView() помещается в onCreate()
Ответ : Это ресурсоемкая операция, и имеет смысл сделать ее только один раз при создании активации.

Вопрос №5. Назовите и опишите режимы запуска
Ответ : существует четыре основных режима запуска, которые может использовать разработчик приложения.

  • Стандартный При совершении вызова активация создается заново.
  • Активация SingleTop создается заново (в случае, если она не находится в верхней части активационного стопа.
  • Стек SingleTask стирается до тех пор, пока он не будет активирован в верхней части стека.
  • SingleInstance похож на SingleTask по функциям. Однако имейте в виду, что когда вы создаете активацию, она переходит в новый push

Вопрос №6. Как очистить задний стек при создании активации?

Ответ : вот как можно очистить стек при создании активации:
  • Используйте флаг FLAG_ACTIVITY_CLEAR_TOP.
  • Используйте FLAG_ACTIVITY_CLEAR_TASK и FLAG_ACTIVITY_NEW_TASK вместе.

Вопрос №7. Укажите разницу между FLAG_ACTIVITY_CLEAR_TASK и FLAG_ACTIVITY_CLEAR_TOP

Ответ : первый уберёт всё в мешок.

Что касается второго, очистка применяется только к активации, запущенной разработчиком.

Вопрос №8: Какие есть другие способы активировать сохранение объекта, кроме onSaveInstanceState) при пересоздании.
Ответ : чтобы активировать сохранение объекта, разработчики обычно используют onRetainCustomNonConfigurationInstance() и getLastCustomNonConfigurationInstance() из класса FragmentActivity (или AppCompatActivity).

Вопросы, связанные с фрагментами, для разработчиков Android

Вопрос №1: Укажите разницу между commit(), commitNow(), commitAllowingStateLoss() и commitNowAllowingStateLoss()
Ответ : давайте подробнее рассмотрим различия между этими четырьмя методами:

  • Если вы вызываете commit () после onSaveInstanceState () , система вернет IllegalStateException .
  • В этом случае commitAllowingStateLoss () не вызовет исключения, но состояние диспетчера фрагментов может быть потеряно.
  • commit () размещает транзакцию, которую система выполнит, как только основной поток освободится. Вы можете использовать метод executePendingTransactions () для синхронного выполнения зависших транзакций. В качестве альтернативы метод commitNow () выполнит транзакцию сразу, но не поместит ее в задний стек.

Вопросы для собеседования с разработчиком Android-контент-провайдера

Вопрос №1: Зачем вам контент-провайдер?
Ответ : Контент-провайдер разрешает передачу данных между приложениями и процессами. Программисты, работающие с разработчиками программных приложений, часто используют его в сочетании с ContentResolver.

Вопросы разработчика Android: службы

Вопрос №1: Опишите метод startService()
Ответ : метод не реплицирует экземпляры сервиса, а создает для него очередь заданий. Если IntentService просто выполняет все задачи одну за другой, благодаря классу Service у разработчиков есть возможность запускать задачи одновременно в независимых потоках. Создание новых потоков для каждой задачи в методе onStartCommand — это все, что нужно для одновременного выполнения нескольких задач.

Вопрос № 2: Объясните концепцию остановки службы
Ответ : Сервис, созданный с помощью одноименного класса, будет жить до тех пор, пока его принудительно не остановят. Это можно сделать либо откуда-то извне с помощью метода stopService, указав интрасеть, по которой он был запущен, либо внутри самого сервиса с помощью метода stopSelf.

Вопрос № 3: Как вы обновляете поток пользовательского интерфейса с помощью фоновой службы
Ответ : обычно разработчики используют Local Broadcast для обновления потока пользовательского интерфейса.

Вопрос № 1: Опишите разницу между Serializable и Parcelable
Ответ :
Serializable использует отражение, довольно медленный процесс — с другой стороны, разработчику нужно писать меньше кода. В Parcelable разработчик вручную описывает объекты, которые необходимо сериализовать, что, в свою очередь, приводит к увеличению объема кода.

Вопрос № 2: Каковы основные типы намерений?
Ответ. Вот шпаргалка по намерениям Android :
  • Неявный вызов внутренней сети системы, используемый для отправки текстового сообщения или звонка, открытия карточек и т. д.
  • Явный вызов других для активации внутри приложения
  • Sticky Intent, который остается после окончания трансляции. Например, когда разработчик подписывается на ACTION_BATTERY_CHANGED , он отправляет последний Intent. Итак, если вам нужно сохранить текущее состояние батареи, не обязательно вести отслеживание трансляций.
  • Ожидание намерения, которое может быть выполнено в будущем как ваше приложение.

Вопрос №3: Может ли приложение работать, комбинируя разные процессы? Почему это важная функция? Как можно организовать межпроцессорное взаимодействие?

Ответ : среди всех вопросов для интервью с разработчиками давайте разделим ответ на этот на три части, чтобы он давал явный ответ на каждый вопрос.

  • Да, оно может. Есть части приложения (активация, службы, трансляции и поставщики контента), для которых разработчику необходимо указать флаг процесса.
  • Интерпроцессоры позволяют разработчикам получить доступ к большему объему памяти
  • Поскольку каждый процесс живет в отдельном экземпляре Dalvik, обмен информацией затруднен. Вот почему технические команды используют AIDL, намерения, обработчики и мессенджеры.

Kotlin: Вопросы для интервью

Функции

Вопрос № 1: Почему ключевое слово встроено в котел?
Ответ : В Kotlin функции обрабатываются как любые другие значения: их можно передавать в методы и возвращать из них, хранить в переменных или в структурах данных. Для этого Kotlin использует семейство функциональных типов. Затем для работы с лямбдой Kotlin создает объекты, реализующие Function0, Function1 и так далее.

Вопрос № 2: Почему разработчики используют reified?
Ответ : В Java есть такое понятие, как Type Erasure — стирание типов. Короче говоря, это проблема, возникающая при работе с дженериками.

Из-за этого, например, нельзя сделать проверку нового экземпляра ArrayList<String>() типа List<String>: во времена java машина не знает, какие типы данных находятся внутри генератора.

Поскольку Android Kotlin использует время Java, проблема остается: мы не можем проверить, что arrayListOf<String>() является List<String>. Однако использование встроенных функций помогает избежать стирания типов, применяя модификатор reified к генератору: inline fun < reified T> myGenericFunction(value: T): T {…}.

Вопрос № 3: Опишите различия между crossinline и noinline.
Ответ : Поскольку мы встраиваем лямбда-код в место вызова, return, написанный на лямбде, завершит выполнение всей функции, а не лямбды. Когда нам это не нужно, мы можем пометить лямбда-параметр функции как crossinline, что запретит нелокальные циклы. встроенная забавная функция (crossinline nonLocalReturnBlockedLambda: () -> Unit) {…}

Чтобы нанять опытных разработчиков Kotlin , позвольте опытным IT рекрутерам из IT and Digital подобрать первоклассную команду для вашего следующего проекта!

Вопросы для собеседования с разработчиком мобильных приложений Moxy

Вопрос: Какова цель Moxy?
Ответ : Moxy создает $$PresenterBinder, сохраняет хэш-карты с биндерами в MoxyReflector.

RxJava

Вопрос №1: Какие темы есть в RxJava?
Ответ : существует четыре типа субъектов RxJava:
  • Опубликовать тему: выдает все последующие элементы наблюдаемого источника во время подписки.
  • Replay Subject: Выдает все исходные элементы Observable, независимо от того, когда подписчик подписывается.
  • Субъект поведения выдает самый последний созданный элемент и все последующие элементы наблюдаемого источника, когда к нему присоединяется наблюдатель.
  • Async Subject возвращает только последнее значение наблюдаемого источника. Если подписчик хочет получить доступ к содержимому, вы должны вызвать onComplete на дополнительной оболочке.

Вопрос №2: В чем разница между flatMap/switchMap/concatMap/concatMapEager?
Ответ :
  • flatMap не следует порядку полученных значений. Он создает свой собственный наблюдаемый для каждого из переданных ему значений и может идти в любом порядке.
  • switchMap при появлении нового объекта из observable выше отпишется от остальных — получит только последнее из значений.
  • concatMap похож на flatMap, но сохраняет порядок значений. Есть и обратная сторона: concatMap ждет объявления каждого наблюдаемого, прежде чем перейти к следующему.
  • concatMapEager похож на concatMap, но выполняет наблюдаемый код асинхронно.

Нанимайте Android-разработчиков с помощью Кадрового агентства IT and Digital!
Мы - ИТ кадровое агентство, которое поможет вам найти разработчиков за менее чем 2 недели. Свяжитесь с нами уже сегодня, чтобы узнать, как мы можем помочь масштабировать ваш следующий проект. Мы гарантируем поиск самого сильного кандидата, а не самого дорогого. За 10 лет мы закрыли более 5500 вакансий и собрали более 25 команд с нуля. Вы можете ознакомиться с отзывами наших клиентов о нашем рекрутинговом агентстве. Если вам нужны дополнительные референсы, напишите нам в Telegram.
HR Блог для IT рекрутера в Телеграм
Хочешь всегда получать новые статьи, бесплатные материалы и полезные HR лайфхаки! Подписывайся на нас в Telegram! С нами подбор ит персонала становится проще ;)

Расскажите, каких специалистов вы ищете: мы обязательно поможем их найти

работаем 24 на 7