Співбесіда з Android. 250+ запитань для Junior, Middle, Senior

Якщо ви готуєтесь до співбесіди з Android — чи проходити, чи проводити — можливо, цей перелік питань стане вам у пригоді. Редакція DOU поцікавилася у розробників, які проводять технічні інтерв’ю в компанії в Україні, про що вони запитують кандидатів.

Це вже десята стаття з рубрики «100+ технічних питань», пропонуємо ознайомитись і з питаннями для інших мов програмування.

Junior

Базові питання

1.Назвіть основні принципи ООП.
2.Що таке клас? Що таке інтерфейс? Яка між ними різниця?
3.Назвіть базові типи даних.
4.У чому відмінність примітивних типів від об’єктів?
5.Яка різниця між абстрактним класом та інтерфейсом?
6.Що таке патерни проєктування? Які патерни ви знаєте?
7.Чим відрізняється Java від Kotlin?

Алгоритми

8.Що таке алгоритм і як вибрати правильний?
9.Що таке складність алгоритму? Як і за допомогою чого її можна вирахувати?
10.Що таке нотація big-O?
11.Що таке рекурсія?
12.Які алгоритми сортування ви знаєте?

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

13.Розкажіть про такі структури даних, як List, Set, Map?
14.Яка різниця між ArrayList та LinkedList?

Зберігання даних

15.Як можна зберігати дані в Android?
16.Коли варто використовувати SharedPreferences?
17.З яких компонентів складається бібліотека Room?
18.Що таке @PrimaryKey, @Ignore, @Embedded, @TypeConverters в Room?
19.Для чого потрібна міграція в базах даних?

Робота з мережею

20.Що таке JSON, XML?
21.Які є варіанти реалізації роботи із сервером?
22.Що таке REST?

Багатопотоковість

23.Що таке процес?
24.Що таке потік?
25.Для чого використовують ключове слово synchronized?
26.Навіщо синхронізувати потоки?
27.Яка різниця між синхронним і асинхронним виконанням?
28.Як ми можемо створити потік у Java?
29.Що таке deadlock?
30.Які варіанти реалізації багатопотоковості є в Android?
31.Що таке main thread? Які операції потрібно виконувати на main thread, які не можна виконувати?

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()?

RxJava

48.У чому різниця між map() і flatMap() в RxJava?
49.Коли використовуєте observeOn() і коли subscribeOn()?
50.Як можна обробити помилки в RxJava?
51.Які schedulers знаєте в RxJava? Назвіть їхні відмінності.
52.Що таке Disposable? Для чого його використовують?
53.У чому різниця між Hot і Cold Observables? Назвіть приклади в RxJava.

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? Коли використовуємо?

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?

Інше

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? Для чого використовуємо?

Практичні завдання

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 — в чому основна відмінність?

Алгоритми

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)? Як уникнути цього ефекту?

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?

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 Binding?
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? Які особливості роботи?

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?

RxJava

118.У чому різниця між flatMap(), concatMap(), switchMap()?
119.Які Subjects ви знаєте в RxJava, чим відрізняються від Observable?
120.Чим відрізняється Observable від Flowable?
121.Що таке backpreassure? Які стратегії є для вирішення?
122.Що таке Single, Maybe, Completable?
123.Які варіанти обробки помилок є, окрім onError?

Тестування

124.На які групи можна поділити тести (Unit (JUnit) і Instrumental або UI Tests (espresso))?
125.Чим відрізняються Unit і UI тести (контекст)?
126.Розкажіть, які бібліотеки використовували для mock?
127.Як тестувати DB?
128.Як замокати network layer в інструментальних тестах?

Інше

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 став одним з рекомендованих патернів?

Багатопотоковість

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)?


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

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

👍НравитсяПонравилось16
В избранноеВ избранном13
Подписаться на тему «Android»
LinkedIn



Підписуйтесь: Soundcloud | Google Podcast | YouTube


14 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

прочитав список вопросов на джуна понял всю правдивость услышанной когда-то фразы «джун это синьор без опыта» )))

Имхо на джуна достаточно просто посадить человека перед компом задавать вопросы и смотреть что он гуглит. а не это вот все...

7.Чим відрізняється Java від Kotlin?

а что так тоже можно было? ))

Отвратительный сет вопросов на уровени Junior и Senior.

1. Senior плохо отображает ownership, а тех вопросы хотят отобразить знания кор Java, которые мидл повторил перед собеседованием и стал сеньйором? Туда же «трендовые» вопросы.
2. Спрашивать «а как работают аннотации в библиотеке х» или «поясните за RxJava» — это просто признак непрофессионализма и красный флаг для кандидата. Компания и/или команда должна вырастить кадра с Джуна, а не докапываться до знания библиотек, которые устаревают быстрее чем стынет чай в моей чашке.
3. Проблем-солвинг появляется лишь хоть какой-то на уровне мидл. Ага, то есть, джунов мы оцениваем по умению отвечать на теорию, а не по умению мыслить, see no evil.
4. «Як ви розумієте Clean Architecture.». Тут чисто ремарка — забыть как странный сон и взять пару интересных takeaway-ев.
5. Про то «что такое алгоритмы и как выбрать правильный» — просто промолчу. В ту же топку «нужно ли использовать солид».

В целом, я не хочу обидеть авторов, они потратили свое время на то чтобы написать свои вопросы. Авторы вопросов так же имеют полное право из задавать. Но вы так же должны понимать, что подобного уровня контент будет выдаваться в поиске, и планка Junior в этом списке — неоправданно завышена. Если цель была отпугнуть новичков от сферы — то у вас получилось. Ну и то, что часть вопросов требует вычитки — отдельный вопрос, который можно задать автору поста.

Сет такой же как и остальные из этой серии на доу. Такое ощущение что их 1 человек пишет)

Ну проходил несколько собеседований ну джуна Андроида. И как раз именно такие вопросы и задают. Так что претензия больше к тем, кто задаёт вопросы, а не к тому, кто собрал эту компиляцию.

Увы, это лишь усугубляет ситуацию на рынке. Джун посмотрит на таких «зажравшихся» сеньйоров/мидлов, испугается, и уйдет в закат/Flutter. И правильно ведь сделает, ведь задача интервьювера на тех секции — самоутвердиться за счёт кандидата и повышать свой job security, говоря своему работодателю, что все вокруг самозванцы, а он — Дартаньян.

Опять таки, Джуна нужно растить самому, а не взять готового со знанием тех. рыночка и платить $500-800.

Ну в некоторых фирмах как раз пытаются растить сами. В том же ЕПАМе, многие другие тоже предлагают курсы, которые по факту отбор на Джуна

Тут чисто ремарка — забыть как странный сон и взять пару интересных takeaway-ев.

А почему нужно забыть и что такое takeaway. Спрашиваю, потому что действительно интересно.

Любая книга передает личные мысли автора и его тараканы. Clean Architecture толкуют не правильно. Я сам этим грешил, к слову. Основная моя мысль о CLA — научитесь разделять логику по слоям. Всё! А вот интерфейс/абстракция на каждый чих — это уже слишком.

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

Не стоит слепо идти по data source/repo/interactor/presenter/ui, а можете ему и следовать, у каждого же своя голова на плечах. Пишите так, чтоб вам было удобно это поддерживать и тестировать. В конце концов, платят нам не за слои абстракции, а за предсказываемость в разработке. Я не пропагандирую не думать об архитектуре, наоборот, думайте о ней. Но думайте исходя из задачи, расширяемости и комфорта.

Я как человек который пытается перейти с 1С на андроид, не могу не согласиться. Потому что иногда кажется, что действительно делают слишком сложно потому что «а вдруг нужно будет расширять и тестировать»

как человек который пытается перейти с 1С на андроид

это наверное сурово поделись ощущениями как оно вообще в ощущениях?

как человек который пытается перейти

no. try not. do. or do not. there is no try. (к) (тм)

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

Подписаться на комментарии