У меня было 10 Android собеседований за последние два года... (перевод)

Теги: Android, Java, Interview


Перевод статьи Mohamed Ibrahim I had 10 Android interviews during the last two years, here’s the questions plus some lessons I’ve learned.

У меня было 10 Android собеседований за последние два года. Вот вопросы, которые мне задавали, и уроки которые я извлек.

Прошло два года с тех пор, как я стал заниматься разработкой на Android. Я был поражен количеством ресурсов для изучения Android, и тем, как сообщество разработчиков делится знаниями и объединяется, чтобы сделать разработку более увлекательной, и тем как постепенно растут требования разработчиков к тестированию кода, его поддержке и удобочитаемости.

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

У меня не было опыта в компьютерных науках, поэтому я решил черпать знания из чтения, прохождения различных руководств, включая, разумеется, материалы на Udacity. Я даже начал проходидь курс на MAL под названием “Основы Android”, и с этого момента началась моя история разработки под Android.

Давайте сначала я расскажу о стилях собеседований в разных компаниях, куда я попадал (названия компаний я обозначил инициалами), а затем перейдем к вопросам, которые мне запомнились.


Стиль собеседования

EP: Мэйнстрим Android разработки и вопросы по Java. - Задачи: экран входа в систему с email и паролем, зарегистрированный пользователь должен автоматически входить в систему, при повторном использовании приложения.

IC: Собеседование в свободной, дружественной форме. Разговор о средствах разработки, технологиях и качестве кода. - Задачи: нет.

SD: Тестирования гибкости кандидата (например, способность переключатся между нативной и гибридной разработкой). - Задачи: сделать игру, в которой предметы только определенного рода собираются в ведро.

AT: Мэйнстрим Android разработки и вопросы по Java. - Задачи: нет.

AR: Мэйнстрим Android разработки и вопросы по Java. - Задачи: нет.

SW: Мэйнстрим Android разработки и вопросы по Java. - Задачи: нет.

RA: Чем больше вы верно отвечаете, тем сложнее вопросы. - Задачи: приложение для фото, в котором изображения хранят метку о погоде.

VN: Чем больше вы верно отвечаете, тем сложнее вопросы. Общение в дружественной форме - Задачи: нет.

IB: Упор на Java. Вопросы становятся сложнее. - Задачи: приложение, которое показывает список авиакомпаний с сервера api.

WM: Java и Android и тестирование гибкости. - Задачи: нет.

Это все. Надеюсь я ничего не забыл. Однако, почему я дал список собеседований в таком виде? Потому что компании разные, некоторым из них нужен Android разработчик чтобы сделать конкретную работу, и сделать ее идеально - это, обычно, большие компании.

Другим может потребоваться разработчик, открытый для новых знаний, который быстро обучается, может работать с разными технологиями (бэкенд, системное администрирование и т.д.) - это могут быть небольшие компании или стартапы. И у каждой компании своя перспектива на вас. Поэтому вам не стоит опираться только на технические детали. Узнайте больше о компании, гляньте ее продукты, перед тем как идти на собеседование. Подготовьте свои вопросы для них, потому что это не одностороннее интервью и никогда не должно быть таким.

Сейчас я приведу список вопросов. Но не стоит просто запоминать ответы на них. Это плохой путь. Необходимо самому прийти к пониманию каждого вопроса. Попробуйте почитать stackoverflow по каждой теме, читайте комменты также, я нахожу этот портал лучшим, для объяснения технических вопросов, потому что каждый из отвечающих хочет сделать это лучше.

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

NB (от переводчика): хорошая статья о темной стороне собеседований https://danluu.com/programmer-moneyball/


Вопросы на собеседованиях (не упорядочены по сложности)

1. Какие последние версии Android? Наиболее важные новые фичи в Marshmallow?

Версии:

4.0.3. Ice Cream Sandwich

4.1. Jelly Bean

4.4. KitKat

5.0. Lollipop

6.0. Marshallow

7.0. Nougat

8.0. Oreo

Marshallow: 1. https://ru.wikipedia.org/wiki/Android_Marshmallow 2. https://4pda.ru/2015/10/05/249631/


2. Какая цель у Activity?

Activity — это компонент приложения, который выдает экран, и с которым пользователи могут взаимодействовать для выполнения каких-либо действий, например набрать номер телефона, сделать фото, отправить письмо или просмотреть карту. Каждой Activity присваивается окно для прорисовки соответствующего пользовательского интерфейса. Обычно окно отображается во весь экран, однако его размер может быть меньше, и оно может размещаться поверх других окон.

Все объекты Activity представляют собой объекты класса android.app.Activity, которая содержит базовую функциональность для всех Activity.


3. Какая цель у Fragment'ов?

Cодержит часть UI в Activity.

Организация приложения на основе нескольких Activity не всегда может быть оптимальной. Мир ОС Android довольно сильно фрагментирован и состоит из многих устройств. И если для мобильных аппаратов с небольшими экранами взаимодействие между разными Activity выглядит довольно неплохо, то на больших экранах - планшетах, телевизорах окна Activity смотрелись бы не очень в силу большого размера экрана. Собственно поэтому и появилась концепция Fragment.

Fragment существует в контексте Activity и имеет свой жизненный цикл, вне Activity обособлено он существовать не может. Каждая Activity может иметь несколько Fragment.


4. Расскажите о жизненном цикле Activity?

См. здесь


5. Расскажите о жизненном цикле Fragment?

См. здесь


6. Вы используете приложение для путешествий, затем нажимаете кнопку настроек, открывается Activity настроек, затем вы кликаете "назад" - что происходит с жизненным циклом Activity настроек и с циклом главного Activity при этом?

ответ:


7. Что вы знаете о Material design?

ответ:


8. Какая разница между абстрактным классом и интерфейсом в Java?


9. Что такое интерфейс в Java?

ответ:


10. Что такое абстрактный класс в Java?

ответ:


11. Почему нельзя создать экземпляр абстрактного класса?

ответ:


12. Какая разница между Dialog и AlertDialog в Android?

ответ:


13. Какая разница между LinearLayout и RelativeLayout?

ответ:


14. Где выше производительность, у LinearLayout или RelativeLayout?

ответ:


15. Возьмем макет контакта с картинкой, именем и номером, как вы реализуете его в XML?

ответ:


16. Что такое Service, с какими потоками он работает?

ответ:


17. Какая разница между Service и IntentService?

ответ:


18. Что такое ANR message? :scream_cat:

ответ:


19. Объясните работу BroadcastReciever и его реализацию.

ответ:


20. Можете ли вы использовать фрагмент без UI? В каких случаях вы бы использовали этот паттерн?

ответ:


21. Расскажите о модификаторах доступа в Java?

ответ:


22. Какая разница между Default и Protected модификаторами в Java?

ответ:


23. Что вы знаете об AsyncTask?

ответ:


24. В чем разница между Parcelable и Serializable? Что лучше? Почему?

ответ:


25. Как получить доступ к переменной в Activity из Fragment'а?

ответ:


26. У вас есть Activity с двумя Fragment'ами, у одного есть кнопка, у другого - TextView, кликая на кнопку, меняется TextView. Как вы реализуете это?

ответ:


27. Как сделать переменную потоко-безопасной?

ответ:


28. Какие стратегии мы можем использовать, чтобы достигнуть потоко-безопасности?

ответ:


29. В чем цель ключевого слова "static" в Java?

ответ:


30. Как можно инициализировать static-переменную в Java?

ответ:


31. Какие паттерны проектирования вы знаете?

ответ:


32. Объясните принцип паттерна проектирования "Строитель"?

ответ:


33. Где вы использовали паттерн "Наблюдатель"?

ответ:


34. Паттерн Singleton, где его использовать в Android?

ответ:


35. В чем разница между LinkedList, ArrayList и Arrays?

ответ:


36. Над каким проектом вы сейчас работаете? Каков ваш рабочий процесс реализации задуманной функциональности?

ответ:


37. Как вы управляетесь с Firebase push notifications?

ответ:


38. Как реализовать Firebase realtime Database?

ответ:


39. У вас есть большой проект и у вас есть требования к безопасному входу в систему. Как вы будете реализовывать эти требования? :grimacing:

ответ:


40. Что такое Eventbus?

ответ: http://greenrobot.org/ru-eventbus/


41. В каком потоке вызывается метод onRecieve() в BroadcastReceiver'е?

ответ:


42. Как реализовать кастомный BroadcastReceiver?

ответ:


43. В чем разница между MVC и MVP?

ответ:


44. Объясните как устроен MVVM?

ответ:


45. Что означает M в MVP? Ответ … могло бы это быть чем-то еще? :confounded:

ответ:


46. Какова цель Content Provider'а?

ответ:


47. Для чего используется библиотека SQLite?

ответ:


48. Какие библиотеки вы используете для работы с сетью (networking), загрузки картинок, баз данных?

ответ:


49. Что вы используете для очень быстрого Sensor, который излучает много показаний за раз в Rx? :disappointed_relieved: (what do you use to handle a very fast Sensor that emit many readings at a time in Rx way?)

ответ:


50. В чем разница между map и flatMap() в Rxjava?

ответ:


51. Как создавать параллельные сетевые запросы в Rxjava?

ответ:


52. Если у вас есть запрос к сети и вы хотите запросить кеш, если сеть выдает ошибку, как это сделать на RxJava? Самое смешное, что я читал об этом в блоге Дэна Лью, затем реализовал это дважды, но не смог ответить на этот вопрос на интервью. Плохие вещи случаются...

ответ:


53. В чем разница между concatMap() и flatMap() в Rxjava?

ответ:


54. Что вам известно об Intents? Какова цель категорий в Intents?

ответ:


55. В чем цель FrameLayout?

ответ:


56. Как сравнить два объекта?

ответ:


57. Переменные в Java передаются по ссылке или по значению?

ответ: http://info.javarush.ru/translation/2014/06/30/%D0%9F%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2-%D0%B2-Java-%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4-.html


58. Когда вы используете observeOn() и когда subscribeOn()?

ответ:

:triumph:

Ну, это все что я могу вспомнить на сегодняшний момент. Обычно в большинстве случаев спрашивают ООП, особенности Android и паттерны проетирования.

К счастью, благодаря сообществу Android, существуют ответы на многие из вышеперечисленных вопросов. Не спешите. Потратьте ваше время, чтобы понять основы. Не накидывайтесь сразу на такие вещи как RxJava или Dagger без хорошей основы.

end.

Bonus

Еще парочка вопросов с ответами :whale:

Основные вопросы:


1. Что такое Android и кем он основан?

Android - это операционная система на основе Linux с открытым исходным кодом. Она была создана Эндрю Рубином и предназначена для мобильных телефонов, планшетов, телевизоров... и т.д.


2. Назовите основные компоненты Android-фреймворка

- Activity - хранит UI и организует взаимодействие пользователя с отдельным экраном смартфона

- Broadcast Receiver - организует отправку сообщений для других приложений или других систем. Это реализуется с помощью подкласса класса BroadcastReceiver и каждое сообщение организуется как Intent-объект

- Service - используется для фоновых операций

- Intent - эта сущность позволяет взаимодействовать разным Activity и организовать механизмы обмена данными

- Resource - хранит строковые и графические ресурсы

- Notification - для диалоговых окон, иконок, уведомлений, звука и всплывающих сообщений

- Content Provider - для обмена данными между приложениями или компонентами внутри одного приложения. Управляет доступом к структурированному набору данных. Он инкапсулирует данные и предоставляет механизмы для определения их безопасности. ContentProvider — это стандартный интерфейс, который соединяет данные в одном процессе с кодом, запущенным в другом процессе.


3. Какие дополнительные компоненты у Android?

- Fragment - содержит часть UI в Activity

- View - элементы UI, которые рисуются на экране, включая кнопки, списки, формы ввода, и т.д.

- Layout - организация иерархии View и взаимного расположения View, и особенностей показа View на экране

- Manifest - конфигурационный файл приложения


4. Какие уведомления доступны в Android и каково их использование?

Snackbars & Toast Notification − отображается как всплывающее сообщение на поверхности окна.

Snackbar содержит одну строку текста, который непосредственно связан с выполняемой операцией. Только одно сообщение за один раз может быть на экране и может содержать только одно действие, которое не может быть "отменить".

Toast используется для системных сообщений. Обычно они отображаются на короткое время (два варианта 3.5 и 2 секунды) внизу экрана (можно настраивать).

Status bar уведомления отображаются в строке состояния.

Dialogue Notification − активное окно с уведомлением.


5. Какие флаги используются при запуске приложения Android?

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP.


6. Версии Android идут под кодовыми номерами. Назовите как можно больше этих имен.

Table 1. Android versions
Code name Version API level
Oreo 8.0 26
Nougat 7.0 – 7.1.1 24 -25
Marshmallow 6.0 23
Lollipop 5.1 22
Lollipop 5.0 21
KitKat 4.4 - 4.4.4 19
Jelly Bean 4.1.x - 4.3.x 16 - 18
Ice Cream Sandwich 4.0.1 - 4.0.4 14 - 15
Honeycomb 3.2.x 13
Honeycomb 3.0 - 3.1 11 - 12
Gingerbread 2.3 - 2.3.7 9-10
Froyo 2.2.x 8
Eclair 2.1 7
Eclair 2.0 - 2.0.1 5 -6
Donut 1.6 4
Cupcake 1.5 3
(no code name) 1.1 2
(no code name) 1.0 1


7. Какие главные преимущества Android?

Android - это ОС c открытым исходным кодом, это означает, что она бесплатна для конечного пользователя. Плата за лицензию, разработку и распространение не взимается. Она поддерживает множество различных технологий включая камеру, bluetooth, wifi и т.д. К томуже она имеет оптимизированную для маломощных устройств виртуальную машину Dalvik.


8. Назовите базу данных, которую использует Android, и расскажите о ней.

Android использует SQLite реляционную базу данных с открытым исходным кодом. Она встроена в Andoid по-умолчанию. Достаточно быстрая и удобная в работе.


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

Shared Preferences - хранит данные в виде приметивов ключ-значение. Класс SharedPreferences организует основную работу, которая позволяет пользователям хранить и получать данные по типу ключ-значение. Shared Preferences можно использовать для хранения таких типов данных как int, float, long, string... Эти данные сохраняются относительно постоянно (если только их не удалить целенаправленно). Больше информации здесь.

Internal Storage - хранит данные в памяти устройства в виде файлов. Файлы, сохраненные для вашего приложения, по-умолчанию приватны, и другое приложение не может получит к ним доступ. Когда пользователь удаляет приложение, файлы, связанные с приложением, также удаляются.

External Storage - хранит данные в общем хранилище. Все приложения имеют доступ к этим данным.

SQLite Database - хранит данные в структурированнов виде в базе данных. Android полностью поддерживает SQLite. Вне приложения база данных недоступна.

Также возможно хранение данных в сети на сервере. Доступ - посредством сетевого соединения. Организация сетевого соединения возможна посредвом пакетов java.net и android.net, но чаще используют готовые библиотеки.


10. Что такое виджеты приложений?

Это миниатюрные представления приложений, которые доступны для демонстрации в других приложениях (таких как Home screen). Больше см. здесь


Bonus 2

Ссылки на аналогичные списки и разговоры о собеседовании:

  1. https://proglib.io/p/15-android-questions/ - :confused:
  2. http://www.quizful.net/interview/android?page=0 :smile:
  3. https://goo.gl/qgry1C
  4. https://habrahabr.ru/post/199280/
  5. https://dou.ua/forums/topic/17020/
  6. https://www.youtube.com/watch?v=igDSTgjhpN4
  7. http://www.tutorialspoint.com/android/android_questions_answers.htm :gb:
  8. http://www.careerride.com/android-interview-questions.aspx :gb:
  9. https://www.toptal.com/android/interview-questions :gb:
  10. https://intellipaat.com/interview-question/android-interview-questions/ :gb:
  11. https://github.com/MindorksOpenSource/android-interview-questions :gb: :thumbsup: :fire:
  12. https://gist.github.com/lawloretienne/6f7d7d92f72986f5ebd60f226d9044ee :gb: :thumbsup: :fire:

[дополняется по мере сил, возможностей и способностей]

22 11 2017

Теги заметки: