- 18 вопросов для собеседования с Android разработчиком
- Хотите нанять разработчика Android? Если вы сами не являетесь разработчиком Android, или если вы предприниматель или основатель стартапа, который впервые решает заняться подбором ит персонала, знать, о чем спросить, может быть проблемой.
- ziginsider
- У меня было 10 Android собеседований за последние два года. Вот вопросы, которые мне задавали, и уроки которые я извлек.
- Стиль собеседования
- Вопросы на собеседованиях (не упорядочены по сложности)
- Bonus
- Bonus 2
18 вопросов для собеседования с Android разработчиком
Хотите нанять разработчика Android? Если вы сами не являетесь разработчиком Android, или если вы предприниматель или основатель стартапа, который впервые решает заняться подбором ит персонала, знать, о чем спросить, может быть проблемой.
Разработчики Android несут ответственность за разработку и улучшение мобильных приложений на платформе Android. Во время собеседования вы можете сосредоточиться на портфолио ваших кандидатов и прошлом опыте, чтобы определить тех, кто может повысить ценность вашей компании, внедряя инновационные идеи. Вы также можете использовать эти вопросы вместе с заданием, чтобы проверить способность кандидатов писать функциональный код и разрабатывать удобные для пользователя приложения.
Мы поделимся 18 вопросами и ответами на собеседование по Android, которые станут для вашего кандидата хорошей проверкой, а также получим полезное представление об их отношении к разработке Android.
18 вопросов для собеседования с Android разработчиком
1. В чем разница между неявным и явным намерением?
Явное намерение , где вы сообщаете систему, активность или компонент системы, который следует использовать , чтобы реагировать на это намерение. Неявные намерения позволяют вам объявить действие, которое вы хотите выполнить; Затем система Android проверит, какие компоненты зарегистрированы для обработки этого действия.
Здесь вы ищете понимание того, когда следует использовать каждый тип намерения, поскольку в подавляющем большинстве случаев вы будете использовать явные намерения для запуска компонентов в собственном приложении, в то время как неявные намерения чаще всего используются для связи с компоненты из сторонних приложений.
2. Когда следует использовать фрагмент, а не действие?
Это все еще очень обсуждаемая тема, но код, используемый для создания Activity, существенно более сложен, чем код, используемый для создания фрагмента. Старое действие должно быть уничтожено, приостановлено или остановлено, а новое действие должно быть создано. Разработчик должен признать, что лучше всего использовать Activity только тогда, когда вам нужно поменять местами весь экран, и использовать фрагменты повсюду.
Бонусные баллы, если разработчик Android упоминает любой из следующих вариантов использования, в которых вы почти всегда будете использовать фрагмент, а не действие:
- Когда вы работаете с компонентами пользовательского интерфейса или поведением, которое вы собираетесь использовать в нескольких Activity.
- Когда вы используете один из методов навигации, которые тесно связаны с фрагментами, например, прокрутки.
- Когда вашим пользователям будет полезно видеть два разных макета рядом.
- Когда у вас есть данные, которые должны сохраняться при перезапусках Activity (т.е. вам нужно использовать сохраненные фрагменты).
3. Вы заменяете один фрагмент другим — как обеспечить, чтобы пользователь мог вернуться к предыдущему фрагменту, нажав кнопку «Назад»?
Этот вопрос дает представление о том, как разработчик приложения понимает жизненный цикл динамических фрагментов, а также транзакций фрагментов и обратного стека.
Если кнопка «Назад» вернет пользователя к предыдущему фрагменту, тогда вам нужно будет сохранять каждую транзакцию фрагмента в задний стек, вызывая эту транзакцию addToBackStack()перед вами commit().
Разработчик определенно не должен предлагать создавать кнопку «Назад» специально для управления перемещением между фрагментами, но бонусные баллы, если они упоминают, что вы никогда не должны пытаться зафиксировать FragmentTransaction после вызова onSaveInstanceState(), так как это может привести к исключению.
4. Как бы вы могли создать многопоточное приложение для Android без использования класса Thread?
Если вам нужно только переопределить run()метод, а не другие методы Thread, вам следует реализовать Runnable.
В частности, на смотровой для андроида разработчика , демонстрирующего понимание того, что вы должны только расширить из класса , когда вам нужно изменить некоторые из его функциональных возможностей .
5. Что такое пул потоков? И действительно ли это более эффективно, чем использование нескольких отдельных потоков?
ThreadPool состоит из очереди задач и группы рабочих потоков, что позволяет ему запускать несколько параллельных экземпляров задачи.
Здесь вы оцениваете понимание разработчиком приложения того, как многопоточность может улучшить производительность приложения, а также как она может отрицательно повлиять на производительность при неправильном использовании.
Использование ThreadPool более эффективно, чем ожидание выполнения нескольких операций в одном потоке, но оно также помогает избежать значительных накладных расходов на создание и уничтожение потока каждый раз, когда вам требуется рабочий поток.
6. Какая связь между жизненным циклом AsyncTask и жизненным циклом Activity? К каким проблемам это может привести и как их избежать?
AsyncTask не связан с жизненным циклом деятельности , который его содержит. Если Activity уничтожается и создается новый экземпляр Activity, AsyncTask не будет уничтожен. Это может привести к ряду проблем, но основные из них, о которых должен знать разработчик Android:
После завершения AsyncTask он попытается обновить предыдущий экземпляр Activity, что приведет к исключению IllegalArgumentException.
Поскольку AsyncTask поддерживает ссылку на предыдущий экземпляр Activity, это Activity не будет собираться мусором, что приведет к утечке памяти.
Решение состоит в том, чтобы избегать использования AsyncTasks для длительных фоновых задач.
7. Как бы вы могли получить доступ к данным в ContentProvider?
Для начала убедитесь, что у вашего приложения Android есть необходимые разрешения на чтение. Затем получите доступ к объекту ContentResolver, вызвав getContentResolver()объект Context и получив данные, создав запрос с использованием ContentResolver.query().
ContentResolver.query()Метод возвращает курсор, так что вы можете получить данные из каждого столбца с использованием методов управления курсором.
Доступ к данным — одна из задач, которая, скорее всего, заблокирует основной поток, поэтому разработчик должен подчеркнуть важность выполнения запросов к данным в отдельном потоке.
8. В чем разница между Serializable и Parcelable?
Serializable — это стандартный интерфейс Java, который легко интегрировать в ваше приложение, поскольку он не требует никаких методов. Несмотря на простоту реализации, Serializable использует API отражения Java, что делает его медленным процессом, создающим множество временных объектов.
Parcelable оптимизирован для Android, поэтому он быстрее, чем Serializable. Он также полностью настраивается, поэтому вы можете четко указать процесс сериализации, что приведет к уменьшению количества мусорных объектов.
Хотя разработчик может признать, что реализация Parcelable требует дополнительной работы, преимущества в производительности означают, что им следует рекомендовать использовать Parcelable вместо сериализации, где это возможно.
9. Что такое адаптер?
Здесь вы проверяете, понимает ли разработчик Android, что вам нужен дополнительный компонент для подключения AdapterView (например, ListView или GridView) к внешнему источнику данных. Адаптер действует как этот мост, а также отвечает за преобразование каждой записи данных в представление, которое затем можно добавить в AdapterView.
10. Что такое ошибка приложения «Не отвечает» (ANR) и как предотвратить ее появление в своем приложении?
Этот вопрос проверяет, знает ли разработчик о золотом правиле многопоточности в Android: никогда не выполняйте длительные или интенсивные операции с основным потоком.
Диалоговое окно ANR появляется, если ваш пользовательский интерфейс не отвечает более 5 секунд, обычно из-за того, что вы заблокировали основной поток. Чтобы избежать ошибок ANR, вам следует перенести как можно больше работы из основного потока.
11. Опишите процесс создания пользовательских представлений.
Это сложная тема, поэтому вам нужен только общий обзор необходимых шагов. Однако разработчик должен прояснить, что вы всегда должны создавать подкласс View, который больше всего похож на настраиваемый компонент, который вы хотите создать — очень редко вы расширяете класс View.
После расширения класса вам необходимо выполнить следующие шаги:
- Создайте файл res / values / attrs.xml и объявите атрибуты, которые вы хотите использовать в своем пользовательском представлении.
- В своем классе View добавьте метод конструктора, создайте экземпляр объекта Paint и получите свои настраиваемые атрибуты.
- Заменить либо onSizeChanged()или onMeasure().
- Нарисуйте свой вид, переопределив onDraw().
12. Что такое BuildType в Gradle? И для чего это можно использовать?
Типы сборки определяют свойства, которые Gradle использует при создании и упаковке вашего Android-приложения.
Этот вопрос позволяет вам проверить, может ли разработчик различать разновидности продукта, варианты сборки и типы сборки, поскольку это очень похожие концепции, которые часто вызывают путаницу:
Тип сборки определяет, как создается модуль, например, запускается ли ProGuard.
Аромат продукта определяет, что создается , например, какие ресурсы включены в сборку.
Gradle создает вариант сборки для всех возможных комбинаций вкусов и типов сборки вашего проекта.
13. В чем основное различие между ListView и RecyclerView?
Между ListView и RecyclerView есть много различий , но разработчик Android должен знать, в частности, следующее:
- Шаблон ViewHolder не является обязательным в ListView, но он встроен в RecyclerView.
- ListView поддерживает только вертикальную прокрутку, но RecyclerView не ограничивается списками с вертикальной прокруткой.
14. Кратко опишите некоторые способы оптимизации использования представления.
Существует несколько методов, но наиболее эффективными являются следующие:
- Проверка на чрезмерную перегрузку : установите приложение на устройство Android, а затем включите параметр «Обзор отладки графического процессора».
- Сглаживание иерархии представлений : проверьте иерархию представлений с помощью инструмента Android Studio «Просмотр иерархии».
- Измерение времени, необходимого каждому представлению для выполнения этапов измерения, макета и рисования. Вы также можете использовать Hierarchy Viewer, чтобы определить любые части конвейера рендеринга, которые необходимо оптимизировать.
15. Для чего обычно используется Handler?
Вы используете Handler для связи между потоками, чаще всего для передачи действия из фонового потока в основной поток Android.
Этот вопрос позволяет вам проверить, понимает ли разработчик еще одну фундаментальную концепцию многопоточности в Android: вы не можете обновлять пользовательский интерфейс из любого потока, кроме основного.
16. Какие шаги необходимы для создания связанной службы с помощью языка определения интерфейса Android (AIDL)?
Определите интерфейс AIDL в файле .aidl.
Сохраните этот файл в каталоге src / приложения, в котором размещается Activity, и любого другого приложения, которое необходимо привязать к этой службе — последнее особенно важно и часто игнорируется.
Создайте свое приложение. Инструменты Android SDK затем сгенерируют файл интерфейса IBinder в вашем каталоге gen.
Реализуйте этот интерфейс, расширив сгенерированный интерфейс Binder и реализовав методы, унаследованные от файла .aidl.
Расширьте Service и переопределите, onBind()чтобы вернуть вашу реализацию класса-заглушки.
17. В чем разница между onCreate () и onStart ()?
Метод onCreate () вызывается один раз в течение жизненного цикла Activity, либо при запуске приложения, либо когда Activity было уничтожено, а затем воссоздано, например, во время изменения конфигурации.
Метод onStart () вызывается всякий раз, когда Activity становится видимым для пользователя, обычно после onCreate()или onRestart().
18. Когда можно использовать FrameLayout?
Здесь вы хотите понять, что вы всегда должны использовать максимально простой макет для того, чего вы хотите достичь, поскольку FrameLayouts предназначены для содержания одного элемента, что делает их эффективным выбором, когда вам нужно отображать одно представление.
Если вы добавляете несколько представлений в FrameLayout, они складываются друг над другом, поэтому FrameLayouts также полезны, если вам нужны перекрывающиеся представления, например, если вы реализуете наложение или элемент HUD.
Завершите собеседование с разработчиками Android
Технические собеседования и просмотры являются важной частью найма разработчика приложения, будь то разработчик Android, разработчик iOS или любой разработчик мобильных приложений, знакомый с созданием приложений для обеих операционных систем. С помощью этих вопросов для собеседования вы сможете должным образом проверить технические навыки ваших кандидатов в разработке Android, даже если вы не знакомы с этой технологией.
Источник
ziginsider
Перевод статьи 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/
Вопросы на собеседованиях (не упорядочены по сложности)
4.0.3. Ice Cream Sandwich
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?
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. У вас есть большой проект и у вас есть требования к безопасному входу в систему. Как вы будете реализовывать эти требования?
40. Что такое Eventbus?
41. В каком потоке вызывается метод onRecieve() в BroadcastReceiver’е?
42. Как реализовать кастомный BroadcastReceiver?
43. В чем разница между MVC и MVP?
44. Объясните как устроен MVVM?
45. Что означает M в MVP? Ответ … могло бы это быть чем-то еще?
46. Какова цель Content Provider’а?
47. Для чего используется библиотека SQLite?
48. Какие библиотеки вы используете для работы с сетью (networking), загрузки картинок, баз данных?
49. Что вы используете для очень быстрого Sensor, который излучает много показаний за раз в Rx? (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 передаются по ссылке или по значению?
58. Когда вы используете observeOn() и когда subscribeOn()?
Ну, это все что я могу вспомнить на сегодняшний момент. Обычно в большинстве случаев спрашивают ООП, особенности Android и паттерны проетирования.
К счастью, благодаря сообществу Android, существуют ответы на многие из вышеперечисленных вопросов. Не спешите. Потратьте ваше время, чтобы понять основы. Не накидывайтесь сразу на такие вещи как RxJava или Dagger без хорошей основы.
Bonus
Еще парочка вопросов с ответами
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?
6. Версии Android идут под кодовыми номерами. Назовите как можно больше этих имен.
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
Ссылки на аналогичные списки и разговоры о собеседовании:
- https://proglib.io/p/15-android-questions/ —
- http://www.quizful.net/interview/android?page=0
- https://goo.gl/qgry1C
- https://habrahabr.ru/post/199280/
- https://dou.ua/forums/topic/17020/
- https://www.youtube.com/watch?v=igDSTgjhpN4
- http://www.tutorialspoint.com/android/android_questions_answers.htm
- http://www.careerride.com/android-interview-questions.aspx
- https://www.toptal.com/android/interview-questions
- https://intellipaat.com/interview-question/android-interview-questions/
- https://github.com/MindorksOpenSource/android-interview-questions
- https://gist.github.com/lawloretienne/6f7d7d92f72986f5ebd60f226d9044ee
[дополняется по мере сил, возможностей и способностей]
Источник