Собеседование по Android. 250+ вопросов для Junior, Middle, Senior - Блог ITVDN
ITVDN: курсы программирования
Видеокурсы по
программированию

Заказать звонок

Выбери свою IT специальность

Подписка

Заказать звонок

+38 099 757 27 82

Собеседование по Android. 250+ вопросов для Junior, Middle, Senior

advertisement advertisement
  1. Junior

1.1 Базовые вопросы

1.2 Алгоритмы, структуры данных, хранение данных

1.3 Работа с сетью

1.4 Многопоточность, Java Core, RxJava

1.5 Android SDK, Kotlin

1.6 Другое

1.7 Практические задачи

 

  1. Middle

2.1 Базовые вопросы

2.2 Алгоритмы, структуры данных, хранение данных

2.3 Работа с сетью

2.4 Многопоточность, Java Core

2.5 Android SDK

2.6 Kotlin

2.7 RxJava

2.8 Тестирование

2.9 Другое

 

  1. Senior

3.1 Базовые вопросы, архитектура

3.2 Многопоточность

3.3. Java Core, Android SDK, Kotlin


Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 3 ноября 2021 года. Оригинальная версия на украинском языке доступна по ссылке.

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

Это уже десятая статья из рубрики «100+ технических вопросов»; ознакомиться с вопросами для других языков программирования на DOU.ua на украинском языке вы сможете, перейдя по ссылке.

 

Junior

 

Базовые вопросы

1. Назовите основные принципы ООП.

2. Что такое класс? Что такое интерфейс? Какая между ними разница?

3. Назовите базовые типы данных.

4. В чем отличие примитивных типов от объектов?

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

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

7. Чем отличается Java от Kotlin?

 

Ответы на некоторые из этих вопросов вы можете найти в видео курсе Kotlin, а также статье Kotlin vs Java: что лучше для Android-разработки? и вебинаре Структуры данных в Java и Kotlin.

 

Алгоритмы

8. Что такое алгоритм и как выбрать правильный?

9. Что такое сложность алгоритма? Как и с помощью чего её можно вычислить?

10. Что такое нотация big-O?

11. Что такое рекурсия?

12. Какие алгоритмы сортировки вы знаете?

 

Структуры данных

13. Расскажите о таких структурах данных, как List, Set, Map?

14. Какая разница между ArrayList и LinkedList?

 

Ответы на эти вопросы вы найдёте в вебинаре Структуры данных в Java и Kotlin.

 

Хранение данных

15. Как можно хранить данные в Android?

16. Когда следует использовать SharedPreferences?

17. Из каких компонентов состоит библиотека Room?

18. Что такое @PrimaryKey, @Ignore, @Embedded, @TypeConverters в Room?

19. Для чего нужна миграция в базах данных?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе SQLite. Базы данных в Android приложениях (урок 2, урок 3).

 

Работа с сетью

20. Что такое JSON, XML?

21. Какие варианты реализации работы с сервером?

22. Что такое REST?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2), Android Углубленный (урок 9).

 

Многопоточность

23. Что такое процесс?

24. Что такое поток?

25. Для чего используют ключевое слово synchronized?

26. Зачем синхронизировать потоки?

27. Какая разница между синхронным и асинхронным исполнением?

28. Как мы можем создать поток в Java?

29. Что такое deadlock?

30. Какие варианты реализации многопоточности есть в Android?

31. Что такое main thread? Какие операции нужно выполнять на main thread, а какие нельзя делать?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).

 

Java Core

32. Что такое Exceptions? Зачем они нужны?

33. Зачем используют ключевые слова final, finally и finalize?

34. Что такое абстрактный класс? Что такое интерфейс?

35. Что такое анонимный класс? Использовали ли на практике? Для чего?

36. Что такое статический класс (static class)?

37. Что такое enum? Зачем его используют?

38. Можем ли мы сделать конструктор приватным?

39. Какая разница между ключевыми словами throw и throws?

40. Какая разница между Error и Exception?

41. Какая разница между checked и unchecked exception?

42. Что такое Object class и какие методы он имеет?

43. Какие существуют модификаторы доступа для классов? Какая разница между ними?

44. Что такое итератор?

45. Как безопасно удалить элемент из коллекции?

46. Зачем нам переопределять equals() и когда не нужно это делать?

47. Какой должен выполняться контракт при переопределении equals()?

 

Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Базовый (урок 2, урок 4, урок 6, урок 7, урок 8, урок 9).

 

RxJava

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

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

50. Как можно обработать ошибки в RxJava?

51. Какие schedulers знаете в RxJava? Назовите их отличия.

52. Что такое Disposable? Зачем его используют?

53. В чем разница между Hot и Cold Observables? Назовите примеры в RxJava.

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).

 

Android SDK

54. Какие базовые Android-компоненты можете назвать?

55. Что такое ContentProvider?

56. Какие типы Service знаете?

57. Что такое BroadcastReceiver и какие типы существуют?

58. Для чего используют механизм фрагментов?

59. Опишите жизненный цикл Activity.

60. Опишите жизненный цикл Fragment.

61. Есть ли у Fragment контекст? Если да, то как его получить?

62. Чем отличается Fragment от Activity? Зачем выдумали Fragment?

63. Что такое изменение конфигурации? Что происходит с приложением на Android при этом?

64. Что такое Intent? Что такое explicit/implicit Intent?

65. Что такое SharedPreferences?

66. Что такое ANR? Как избегать таких ситуаций?

67. Что такое DataBinding?

68. Что такое LiveData? Какие виды знаете?

69. Как создать ViewModel? Почему создавать ViewModel нужно именно так?

70. Что такое Context и зачем он?

71. Что такое AndroidManifest.xml? Зачем его используют? Что мы можем там декларировать?

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

73. Расскажите, что нужно реализовать, чтобы отобразить список строк в RecyclerView.

74. Объясните паттерн ViewHolder. Для чего он применяется?

75. Что такое DiffUtil?

76. Расскажите о ConstraintLayout.

77. Для чего используют Group, Guideline, Barriers, Chains в ConstraintLayout?

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

79. Что такое WorkManager? Когда используем?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2, урок 4, урок 5, урок 7), Android Углубленный (урок 3, урок 6, урок 9), Android User Interface (урок 3), Создание пользовательских элементов управления в Android (урок 9).

 

Kotlin

80. Как вы понимаете термин Null safety?

81. Что такое nullable и non-nullable типы? Какая разница между val и var?

82. Как задекларировать getter/setter для property?

83. Почему классы Kotlin по умолчанию final?

84. Что такое sealed class?

85. Что такое data classes?

86. Какая разница между sealed class и enum?

87. Почему у Kotlin нет checked exceptions?

88. Что такое Extensions? Использовали ли вы их на практике?

89. Что такое перегрузка операторов (operator overloading)? Зачем нужен этот механизм?

90. Как работают примитивы в Kotlin?

91. Расскажите об объекте Unit в Kotlin.

92. Расскажите об объекте Any в Kotlin.

93. Как создать Singleton объект в Kotlin?

94. Что такое companion object?

95. Чем отличается const val от val?

96. Какие знаете модификаторы доступа?

97. Что означает модификатор lateinit?

98. Coroutines – что это за механизм? Использовали ли его на практике?

99. Зачем нужны Coroutines? Чем они лучше обычных тредов?

100. Что такое suspend-функция?

101. Что такое Job?

102. Что такое Dispatcher? Какие есть виды?

102. Что такое Scope?

103. Как писать Java compatible API в Kotlin?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.

 

Другое

104. Расскажите, что такое memory leak. Как избежать?

105. Как бы вы искали memory leak?

106. Расскажите о Dependency injection. Какие варианты реализации в Android?

107. Для чего нужна система контроля версий?

108. Что такое Git?

109. Для чего используем .gitignore-файл?

110. Расскажите о командах push, pull, fetch в Git?

111. Что такое merge и rebase? Какая разница?

112. Что такое CI? Зачем используем?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсах Dependency Injection в Android-разработке, Основы работы с Git.

 

Практические задачи

113. Разверните Linked List. Отпишите о зацикленности в LinkedList или ее отсутствии.

114. Напишите функцию, которая вернет n первых неотъемлемых чисел:

un nMin(items: List<String>, n: Int): List<Int> {
//return n minimal non negative items
}

Пример вызова функции: nMin(listOf("1","-11","-12","22","100","-30",”2”, “5”), 3)

Ожидаемый результат: [1, 22, 100]

115. Что будет выведено в консоль? Объясните результат.

var globalId = 0
data class User(val name: String) {
val id = globalId++
}
fun main(args: Array<String>) {
val user1 = User("User")
val user2 = User("User")
println(user1)
println(user2)
println(user1 == user2)
}

116. Исправьте все ошибки в коде:

class Animal
class Dog: Animal {}

117. Для коллекции items:

val items = listOf(1, -2 ,-3 , 4, 5, 0, 2, -2)

  • Подсчитайте количество отрицательных элементов.
  • Вычислите среднее арифметическое значение отрицательных и неотрицательных чисел.

 

Middle

 

Базовые вопросы

1. Нужно ли придерживаться SOLID-принципов? Почему да/нет?

2. Какие паттерны использовали на практике? Приведите примеры.

3. Опишите паттерны MVP и MVVM. Какие из них использовали? Какой предпочитаете? Знаете ли/использовали другие паттерны?

4. Почему слой Model должен быть отделен от View или Presenter?

5. Что такое инверсия зависимости (dependency inversion)?

6. Объясните пример паттерна Singleton. Где его использовать в Android?

7. Объясните пример паттерна Observer. Где его использовать в Android?

8. Объясните пример паттерна Builder. Где его использовать в Android?

9. Как вы понимаете термин «архитектура приложения»? Зачем это вообще нужно? Почему инженеры пытаются усложнить процесс разработки и тратят время на проектирование архитектуры? Может, лучше сэкономить ресурсы и пойти по простому пути — держать весь код в одном файле?

10. Что такое иммутабельный объект? Для чего его используют? Как сделать иммутабельный объект в Java?

11. MVP vs MVVM – в чем основное отличие?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсах Архитектура Android приложений (урок 1-5), Создание пользовательских элементов управления в Android (урок 4), SOLID принципы в Java.

 

Алгоритмы

12. Есть много алгоритмов сортировки. Возможно ли выбрать один самый быстрый и использовать его повсюду? Почему да/нет?

13. В чем сложность поиска произвольного элемента в ArrayList? В LinkedList?

14. Какие алгоритмы используют в Android/Java коллекциях под капотом?

 

Структуры данных

15. HashMap. Используете ли вы на практике? Если да, то зачем? Как она работает изнутри?

16. Какая разница между HashMap и LinkedHashMap?

17. Что такое бинарное дерево?

 

Сохранение данных

18. Как бы вы реализовали сохранение зашифрованных данных в SharedPreferences? Базу данных?

19. Как реализовать миграцию таблицы, где нужно из non-nullable поля сделать nullable поле?

 

Работа с сетью

20. Расскажите, какие методы можно применить в REST API? Зачем какой нужен?

21. Что можно использовать, кроме REST API, для работы с сервером?

 

Многопоточность

22. Что такое Thread Pool? Каковы его особенности?

23. Что такое Executor/ExecutorService? Какую задачу выполняют и как использовать?

24. Какие есть виды Executor?

25. Какая разница между методами start() и run() в классе Thread?

26. На что указывает ключевое слово synchronized? Какова его основная функция?

27. Модификатор volatile. Приходилось ли использовать? Зачем нужен?

28. Знаете ли вы о таком понятии, как «эффект гонки» (race condition)? Как это предотвратить? Какие механизмы в Java для предотвращения этого?

29. Что такое атомарная операция?

30. Как остановить поток в Java? Можно ли продолжить выполнение потока после его остановки?

31. Знаете ли вы о потокобезопасных коллекциях в Java/Android? Приходилось ли их использовать?

32. Какие стратегии можно применить, чтобы добиться потокобезопасности?

33. Какие варианты реализации потокобезопасности кода есть у Kotlin?

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

35. Что такое Mutex и Monitor? Кто может выступать в роли монитора?

36. Что такое атомарные операции?

37. Почему инкрементация и операции с long не являются атомарными?

38. Какие классы атомарных переменных?

39. Что такое устаревшие данные (stale data)? Как избежать этого эффекта?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).

 

Java Core

40. Механизм Generics. Какую проблему решает?

41. Что такое soft reference, weak reference?

42. Что такое сериализация объекта? Какую проблему она решает? Какие стандартные механизмы у Java?

43. Какой контракт существует между equals() и hashCode()?

44. По вашему мнению, почему строки в Java сделаны иммутабельными?

45. Можем ли мы задекларировать пустой интерфейс? Если да, то зачем?

46. ​​Что такое String pool? Зачем он нужен?

47. Что такое StringBuilder, какую проблему он решает?

48. Что такое Stack в JVM и какие данные там хранятся?

49. Что такое Heap в JVM и какие данные там хранятся?

50. Что такое garbage collector, как он вообще работает? Каковы реализации GC?

 

Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Углубленный (урок 5).

 

Android SDK

51. Назовите основные изменения в версиях Android.

52. Как реализовать IPC в системе Android?

53. Как реализовать отложенную задачу?

54. Что такое Doze Mode?

55. Что такое App Standby mode?

56. Что такое AIDL и зачем он нужен? Какие типы данных поддерживаются?

57. Что такое Multidex?

58. Что такое KeyStore API?

59. Что такое PendingIntent?

60. Как безопасно хранить user-sensitive данные?

61. Какие методы защиты приложения?

62. Что такое SSL/TLS Pinning? Как его реализовать в Android?

63. Что такое ViewBinding?

64. Для чего нужны методы onSaveInstanceState/onRestoreInstanceState? Что такое permissions? Как запросить permissions?

65. Что такое Intent? Что такое Explicit/Implicit Intent? Что такое Sticky Intent, Pending Intent?

66. Какие типы данных мы можем положить в Bundle?

67. В чем разница между Serializable и Parcelable?

68. Если фрагмент для работы нуждается во входных данных, каким образом будет правильно передать их фрагменту?

69. Что такое ViewModel? Какие ее свойства?

70. Объясните работу ViewModel с Jetpack. Что такое ViewModelProviders, ViewModelProvider.Factory?

71. Что такое LiveData? Зачем её используете?

72. Какая связь между LiveData и LifecycleOwner?

73. Приведите пример LifecycleOwner?

74. Что такое Looper?

75. Использовали ли HaMeR фреймворк (Handler/Message/Runnable)? Для чего он?

76. Какую информацию содержит контекст? Какие типы контекста знаете?

77. Для чего используют Content Provider?

78. Что такое Data Binding? Что такое View?

79. Преимущества Fragments против View?

80. Как работает Content Provider?

81. Какая разница между Single Activity и Multiple Activity?

82. Какие виды Context знаете? Где какой использовать?

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

84. Зачем LocalBroadcastManager?

85. Для чего нужен MotionLayout?

86. Опишите, как реализовать анимацию в MotionLayout.

87. Как можно обнаружить проблемы в скорости UI и устранить их?

88. Расскажите о вариантах реализации custom view.

89. Что делают методы onMeasure, onLayout, onDraw во View?

90. Как воплотить анимацию при переходе между Activity-фрагментами?

91. Когда необходимо использовать foreground service вместо service?

92. Когда использовать workmanager, а когда service?

93. Есть ли у workmanager лимиты для выполнения работы?

94. Расскажите о Jetpack Compose. Зачем придумали основной принцип работы, как устроено?

95. Что такое WakeLock?

96. Что такое AlarmManager? Какие особенности работы?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 4, урок 7), Android Углубленный (урок 6, урок 8), Создание пользовательских элементов управления в Android (урок 9).

 

Kotlin

97. Чем отличается работа с Exceptions в Kotlin и Java?

98. Что такое платформенные типы?

99. Что такое нелокальный return?

100. Для чего нужны reified generics?

101. Какая разница между Unit, Any, Nothing?

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

103. Что такое inline-модификатор? Noinline?

104. Какая разница между crossinline и noinline?

105. Какие типы конструкторов вы знаете?

106. Что такое Flow? Что такое SharedFlow?

107. В чем разница методов run, let, apply, also, with, use?

108. Что произойдет, если в классе переопределить метод hashCode следующим образом: override fun hashCode(): Int = Random.nextInt()? А если так: override fun hashCode(): Int = 1?

109. Расскажите о Flow. В чем разница между Hot и Cold Flow?

110. Что такое деструктурирующее объявление? Что нужно сделать, чтобы иметь возможность использовать его для своего класса? Какие проблемы могут возникнуть с таким объявлением?

111. Для чего использовать data class? Почему нельзя работать с обычным классом?

112. Приведите пример делегатов в Kotlin?

113. Как реализовать кастомный делегат?

114. Объясните, как работает suspen-функция? Что такое continuation?

115. Как обрабатывать ошибки в Coroutines?

116. Что такое SupervisorJob и когда применяется?

117. Как остановить/отменить Coroutines?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.

 

RxJava

118. В чем разница между flatMap(), concatMap(), switchMap()?

119. Какие Subjects вы знаете в RxJava, чем отличаются от Observable?

120. Чем отличается Observable от Flowable?

121. Что такое backpreassure? Какие стратегии есть для решения?

122. Что такое Single, Maybe, Completable?

123. Какие варианты обработки ошибок есть, кроме onError?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).

 

Тестирование

124. На какие группы можно поделить тесты (Unit (JUnit) и Instrumental или UI Tests (espresso))?

125. Чем отличаются Unit и UI тесты (контекст)?

126. Расскажите, какие библиотеки использовали для mock?

127. Как тестировать DB?

128. Как “замокать” network layer в инструментальных тестах?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе Unit тестирование для Android разработчиков.

 

Другое

129. Расскажите, с какими DI-фреймворками работали.

130. Расскажите о Dagger Hilt.

 

Senior

 

Базовые вопросы

1. Расскажите о функциях высшего порядка. Когда они нужны?

2. Опишите, как происходит процесс деплоя Android-приложения.

3. Расскажите о многомодульной архитектуре. Зачем используют и когда ее нет смысла использовать?

4. Вам нужно написать простое приложение для работы с рецептами (несложное, имеет экран списка, поиска и детали). Оно должно работать с определенным API для получения/модификации вашего списка рецептов и хранить его локально в БД для отображения, если интернета нет. Опишите, как бы вы создавали приложение такого типа? Из каких уровней оно бы состояло, каково предназначение каждого уровня? Представьте, что в этом приложении необходимо добавить возможность изменять основную картинку рецепта (т. е. получать новые данные из галереи/камеры и загружать их на сервер через API) и это реализовано на экране с подробным описанием рецепта. Вам пришел запрос сделать такой же функционал и на экране список рецептов. Как вы это сделаете?

 

Архитектура

5. Как организовать CI/CD для Android-проектов?

6. Различия архитектурных подходов в Android. Какие и когда лучше использовать?

7. Как вы понимаете Clean Architecture?

8. Опишите основные отличия между MVC/MVP и MVVM. Как MVVM стал одним из рекомендованных паттернов?

 

Ответы на некоторые из этих вопросов вы найдете в видео курсе Архитектура Android приложений.

 

Многопоточность

9. Какие еще знаете механизмы синхронизации данных, кроме synchronized?

10. Что такое переключение контекста (context-switching), когда речь идет о многопоточности?

11. Что мы понимаем, когда говорим о «честной» блокировке (fair lock)?

 

Java Core

12. Если бы пришлось имплементировать иммутабельный класс на Java, как бы вы это сделали?

13. Что такое Java Memory Model?

14. Сравните принципы композиции и наследования (Composition vs Inheritance).

 

Android SDK

15. ViewModel сохраняет свое состояние при повороте экрана? Как это возможно? Можете ли предложить, как сделать такой механизм?

16. Android Architecture Components. Что из этого приходилось применять на практике? Какие задачи решали?

17. Приходилось ли исследовать «утечки» памяти? Какие инструменты использовали для этого?

18. Представьте, что у вас есть экран со списком товаров. Во время скроллинга вы замечаете, что рендеринг не плавный, в логах много фреймов скипается и вообще-то экран тормозит. Что будете делать, чтобы улучшить ситуацию?

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

20. Приведите пример применения GoF-паттернов в Android SDK.

 

Kotlin

21. Опишите взаимодействие кода Kotlin и Java.

22. Что изменилось в обработке ошибок в Kotlin, если сравнить с Java?

23. Что такое делегированные характеристики (Delegated properties)?

 

Благодарим за эту статью Виктора Чистякова, Михаила Дьяченко, Влада Тищенко, Александра Романишина, Андрея Люшенка, Дмитрия Пашко, Вячеслава Сергеева, Антона Козленка, Артема Грищука, Евгения Трощия, Романа Белоконя, Константина Красильникова, Сергея Харченка, Андрея Друка, Виктора Косенко.

КОММЕНТАРИИ И ОБСУЖДЕНИЯ
advertisement advertisement

Покупай подпискус доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

Стартовый
  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
59.99 $
Оформить подписку
Базовый
  • Все видеокурсы на 6 месяцев
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
89.99 $
Оформить подписку
Премиум
  • Все видеокурсы на 1 год
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин
169.99 $
Оформить подписку
Notification success