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

Пропонуємо перелік технічних питань, що стануть у пригоді на співбесіді на посаду iOS Developer. Для зручності ми розділили їх за рівнями та тематикою.

Крім того, запрошуємо ознайомитися з іншими статтями рубрики.

Junior

Загальне

1.Назвіть основні принципи ООП.
2.Що таке спадкування, інкапсуляція, абстракція, поліморфізм? Наведіть приклади (бажано з власного досвіду).
3.Які знаєте базові структури даних?
4.Що таке протокол?
5.Яка різниця між класом і структурою?
6.Як перевірити роботу програми в умовах поганого інтернету?
7.Що таке Closure?
8.Що таке race-condition?
9.Що таке клієнт-серверна архітектура? У ролі кого в цій архітектурі найчастіше виступає мобільний застосунок?
10.Що таке MVC? Які є альтернативи?

iOS-розробка

11.Що таке iOS Application Lifecycle (життєвий цикл iOS-застосунку)? У яких станах може перебувати застосунок у своєму життєвому циклі? Як у ньому відображаються переходи між різними станами?
12.Які патерни розробки використовуєте у повсякденній практиці?
13.Які приклади використання патернів у iOS SDK?
14.Що таке Singleton? Приклад з iOS SDK?
15.Що таке Delegate? Приклад з iOS SDK?
16.Що таке Observer? Приклад з iOS SDK?
17.У чому різниця між структурами та enum даних у Swift та Obj-C?
18.До яких типів (за доступом) належать класи, структури та перелічувані типи?
19.У чому полягає різниця між доступами до класів і структур?
20.Де в пам’яті зберігаються екземпляри reference та value типів?
21.Чим відрізняються екземпляри, створені як var, від екземплярів, створених як let?
22.Чим відрізняється if let від guard let? Які є інструменти control flow у Swift?
23.Що таке storyboards і xibs/nibs? Для чого їх використовують?
24.Які знаєте засоби локального збереження даних?
25.Розкажіть про Memory management у Swift: ARC та атрибути.
26.Яка різниця між escaping і non-escaping замиканнями?
27.Що таке lazy var?
28.Що означає ключове слово «extension» у мові Swift? Для чого використовується?
29.Що таке функція (метод)? Як створити функцію у Swift? У чому різниця між private і public функціями?

Типи даних, колекції та структури даних

30.Які є колекції в мові Swift? Яка між ними різниця? Наведіть приклади.
31.Розкажіть про структури даних у Swift.
32.Що означає тип Any в мові Swift? Що означає тип AnyObject? В чому різниця між ними? Де використовуються? Наведіть приклади.
33.Що таке protocol у Swift? Для чого використовується?
34.Що таке optional у Swift? Чим відрізняються опціональні типи від неопціональних? Як привести один тип до іншого?
35.Що таке force unwrap?
36.Які є особливості enum у Swift?
37.Що таке асоційовані значення?
38.Назвіть головні класи/типи для роботи з колекціями (Objective-C/Swift).
39.Розкажіть про основи роботи з СУБД, їхні головні елементи, базові команди запитів.

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

40.Що таке Core Data/Realm? Чи вони відрізняються від СУБД?
41.Які є види Persistent Storage в iOS? Коли який краще використовувати?
42.Як здійснюється читання/запис текстового (.txt) файлу в iOS?
43.Як зберегти/зчитати вміст об’єкта за допомогою Encodable та Decodable?
44.Що таке .plist файл? Які типи даних можна зберігати у такому файлі?
45.Що таке UserDefaults? Як зберегти/зчитати значення з UserDefaults?

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

46.Розкажіть про мережеві запити та серіалізацію даних.
47.Що таке JSON, XML?
48.Що таке REST?

Асинхронність

49.Що таке багатопотоковість (Multithreading) та конкурентність (Concurrency)?
50.Що таке асинхронне та синхронне виконання? Що з них є послідовним?
51.Які є інструменти виконання завдань на декількох потоках в iOS?
52.Що таке GCD? Як запустити завдання у фоновому потоці за допомогою GCD?
53.Що таке NSOperationQueue?
54.Що таке async/await? (Swift 5.5)

Управління пам’яттю

55.Яка модель роботи з пам’яттю в iOS?
56.Розкажіть про основи підрахунку посилань на об’єкти в роботі пам’яті.
57.У чому відмінність між MRC та ARC?
58.Опишіть ситуації, в яких з’являється reference cycles, розкажіть про запобігання.

UI

59.Які UI-фреймворки доступні в iOS SDK? Чим вони відрізняються?
60.Що таке SwiftUI? Що таке модифікатор? Яким типом даних є View?
61.Що таке UIKit? Що таке Auto Layout? З чого вони складаються?
62.Який життєвий цикл UIViewController?
63.Порівняйте frame vs bounds.

Інше

64.Що таке система контролю версій? Які СКВ вам ще відомі та використовуються на практиці?
65.Що таке Git? Що таке push, pull, fetch? Для чого потрібен .gitignore файл?
66.Що таке dependency manager? Які доводилося використовувати на практиці?
67.Що таке CocoaPods? Як ініціювати проєкт для використання CocoaPods?
68.Що таке Swift Package Manager?
69.Що таке podfile? Що туди записується? Що таке podspec?
70.Які особливості запуску проєкту з використанням CocoaPods?
71.Що таке Continuous Integration?
72.Що таке TestFlight?

Middle

Загальне

1.Як ви розумієте SOLID?
2.У чому переваги та недоліки ООП, якщо порівнювати з POP?
3.Наведіть приклади патернів, які використовуються в iOS SDK?
4.Що ви знаєте про REST? Що таке RESTful API?
5.Що таке HTTP? Які методи запитів HTTP ви знаєте? Для чого їх використовують?
6.Що таке TDD? Для чого потрібні unit- і UI-тести? Як писати тести в iOS-проєкт?
7.Які знаєте патерни GoF? Розкажіть про їхнє практичне використання.
8.Чому Singleton ще називають антипатерном?
9.Як реалізувати Singleton у Swift?
10.Опишіть різницю в архітектурних підходах MVC, MVP, MVVM, VIPER.
11.Опишіть цикл роботи Push Notifications.
12.Розкажіть про алгоритми пошуку та сортування.
13.Які патерни проєктування знаєте? Окрім часто використовуваних в iOS-розробці.
14.Що таке рекурсія? Як правильно використовувати? Наведіть приклади.

iOS-розробка

15.Що таке AutoreleasePool?
16.Які є базові механізми синхронізації (Mutex, Semaphore, etc.)?
17.Чи є замикання посилальним типом?
18.Яка різниця між open і public рівнями доступу?
19.Яка різниця між weak і unowned посиланнями?
20.Які види closure існують, що вони позначають і де застосовуються?
21.Порівняйте за швидкістю читання/запису/пошуку колекції у Swift.
22.Які обмеження накладає використання associated type в протоколах?
23.Що таке Runloop? Яку роль виконує Runloop в iOS?
24.MVP та MVVM: переваги та недоліки використання перед MVC.
25.Де варто зберігати певний тип даних (Keychain, DB, UD, .plist)?
26.Чи цікавились SwiftUI та Combine?
27.Розкажіть, як влаштовано Memory management у Swift: ARC, stack&heap.
28.Чи є попередній досвід з Objective-C? Чи можете порівняти Swift з іншими мовами?
29.Чи є NSNotificationCenter чистим Observer?
30.Що таке Abstract Factory? Приклад з iOS SDK?
31.Що таке Factory Method? Приклад з iOS SDK?
32.У чому різниця між Abstract Factory та Factory Method?
33.Що буде, якщо додати в Set два об’єкти з однаковим hash?
34.Як реалізовуються http-запити в iOS? Що таке URLSession? Які типи URLSession існують в iOS?
35.Чи користувались сторонніми бібліотеками? Що таке Alamofire/AFNetworking? Які переваги та недоліки, якщо порівнювати зі звичайними URLSession?
36.Що таке KVO/KVC? Для чого використовують? Розкажіть, як вони пов’язані з поняттям «property».
37.Яка різниця між Foreground Active та Inactive станами?
38.Що може бути прикладом Foreground Inactive стану?
39.Що таке Background стан? Чи це те саме, що Background Thread? У чому різниця?
40.Що таке Optional? Чи є це повноцінним типом даних? Яким саме?
41.Що потрібно використати для func-структури, щоб вона могла змінювати значення?
42.Які є три основні типи колекцій у Swift та Obj-C? Чим вони відрізняються?
43.Які з них є швидшими за доступом? За внесенням змін?
44.Які нові можливості Swift 5+ використовуєте?

Управління пам’яттю

45.Розкажіть про роботу з пам’яттю в iOS. Що таке ARC? В чому різниця між heap & stack пам’яттю? Коли використовують кожну з них?
46.Що таке купа і стек? Відмінності, принцип роботи.
47.Як працює підрахунок посилань на об’єкти?
48.Розкажіть про тестування memory leaks за допомогою Xcode.
49.Що таке і коли трапляються Race condition, deadlock?

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

50.Як здійснюється парсинг JSON в iOS? Що таке Codable/Decodable?
51.Опишіть принципи роботи з сокетами.
52.Що використовуєте для мережевих запитів: URLSession чи сторонні бібліотеки? Які переваги кожного з підходів?

Асинхронність

53.Що таке багатопотоковість і в чому його призначення? Які є варіанти для реалізації? Розкажіть про реалізацію багатопотоковості в iOS. Що таке GCD? NSOperation? NSThread? Pthread?
54.Яка технологія лежить в основі NSOperationQueue?
55.Чи може бути реалізована багатопотоковість на одноядерному процесорі?
56.Які є можливості (властивості) базової імплементації Operation?
57.Що таке Quality of Service? Де використовується? Які є рівні QoS?
58.Які є типові задачі, що потребують багатопотоковості чи конкурентного виконання?

Робота з даними

59.Які основні елементи Core Data?
60.Де можуть зберігатися дані з Core Data? Які типи міграцій існують у Core Data?
61.Для чого потрібен та як працює NSFetchedResultsController в Core Data?
62.Як використовувати Core Data в багатопотоковому середовищі?
63.Що таке Realm? Чим відрізняється від Core Data? Чи підтримується multithreading?
64.Що таке SQLite?

Тестування

65.Для чого потрібні unit-тести?
66.Які переваги та недоліки використання unit-тестів?
67.З яких трьох логічних блоків складається unit-тест?
68.В чому різниця між концептами Stub та Mock?

UI

69.Яким чином можна імплементувати складну кастомну анімацію при переході з екрана на екран?
70.Якою мінімальною кількістю constraints можна задати положення View на екрані?
71.Що таке segue? В якому методі обробляються результати таких переходів?
72.Що таке Auto Layout? Констрейнти та їхній пріоритет, contentHuggingPriority та contentCompressionResistance. Які переваги та недоліки використання UIStackView?
73.Як побудувати інтерфейс кодом?
74.Яка різниця між CALayer vs UIView? Для чого потрібен CALayer?

Інше

75.Що таке CI/CD? Як і для яких потреб розгортати?
76.Чим відрізняється merge від rebase? Як вирішувати конфлікти об’єднання у Git?
77.З якими Git-сервісами доводилося працювати? Чим вони відрізняються?
78.Що таке GitFlow? Які основні гілки у цьому підході? Як вносяться правки в release?
79.Що таке code review? Які бувають види?
80.Що таке CocoaPods/Carthage/SPM? Для чого використовуються?
81.Що потрібно налаштувати, щоб не завантажувати pod’и в репозиторій?
82.Як створити локальну версію pod’а?
83.Як налаштувати job у Jenkins?
85.Які задачі можна вирішувати за допомогою fastlane?
86.Як налаштувати fastlane для автоматичного завантаження збірок на TestFlight?
87.Що таке GitHub Actions? Де безпосередньо виконуються збірки проєктів?
88.Що таке App Store Connect? Для чого використовується в iOS-розробці?
89.Що потрібно, щоб створити новий застосунок та поширити його через AC?
90.Що таке bundle identifier, provisioning profile, development certificate?
91.Як завантажити нову збірку програми? Зарелізити її? Додати іконку для застосунку?

Senior

Загальне

1.Як ви розумієте SOLID?
2.Які ще практики, крім ООП, використовували (FRP тощо)?
3.Що таке слабозв’язаний код? Чим він кращий від сильнозв’язаного коду? Як би ви досягали слабшої зв’язності коду? Розкажіть про закон Деметри.
4.Що таке реактивне програмування?
5.Що таке Future/Promise?
6.Які scalable архітектурні підходи знаєте?
7.Які типи мобільних архітектур ви знаєте?
8.Які критерії при виборі архітектури застосунку?
9.Як працює async/await? Опишіть суть патерну Actor.
10.Що таке VIPER? Схема взаємодії компонентів? У чому її відміність від архітектур MVVM, MVC, MVP?
11.Що таке Clean Swift? Які компоненти? Чим відрізняється від VIPER?
12.Інші архітектурні патерни? Переваги та недоліки? Приклади імплементації?
13.Що таке Big O нотація складності алгоритмів? Наведіть приклади.
14.Чи є досвід створення podspec?
15.Які інструменти відлагодження в Xcode використовуєте?
16.Що збільшує час компіляції програми?
17.Як прискорити час запуску програми?
18.Що таке DispatchGroup? Для чого використовується? Наведіть приклади з практики.
19.Що ви знаєте про фреймворк Combine? Які відмінності відзначите в порівнянні з Rx.
20.Як довго застосунок може перебувати у Background стані? Як це можна змінити?
21.Які існують Background режими? Як їх залучити? Як вони працюють?
22.Які зміни відбулися в iOS 13 і 14 з погляду життєвого циклу застосунку?
23.Чи берете участь в open source проєктах? Якщо так, який був ваш останній pull request?

iOS-розробка

24.Розкажіть про комбінування ObjC коду з мовою Swift в рамках одного проєкту. Чи це можливо? Що потрібно для цього зробити?
25.Розкажіть про комбінування C++ коду з мовою Swift в рамках одного проєкту. Чи це можливо? Що потрібно для цього зробити?
26.Розкажіть про реалізацію роутингу/переходів між екранами застосунку? Які підходи ви знаєте/практикуєте?
27.Що таке bitcode? Яка його роль?
28.Порівняйте GCD та OperationQueue. Які переваги та недоліки?
29.Що таке Threads Explosion? Які є засоби запобігання?
30.Чим відрізняється відправка повідомлення в Obj-C від виклику функції у Swift?
31.Що таке CADisplayLink? Чи використовували CADisplayLink для побудови анімації?
32.Що таке Offscreen Rendering Path? Які негативні наслідки? Які є методи запобігання?
33.Для чого потрібні content hugging та compression resistance priority?
34.Що таке map та чим відрізняються flatMap і compactMap?
35.Що таке generic? Чи є можливість використати їх в Obj-C?
36.Як створити publisher у Swift? Як отримати значення на певному потоці?
37.Які переваги та недоліки має Swift?
38.Що таке Conditional conformance?
39.Наведіть приклади можливих проблем і обмежень використання associated type.
40.Що таке Method Swizzling?
41.Що використовуєте для мережевих запитів: URLSession чи сторонні бібліотеки? Які переваги кожного з підходів?
42.Де і як налаштовують In-App Purchase? Як створити групу програм (спільний контейнер)?

Управління пам’яттю

43.Розкажіть про Memory managment у Swift: Copy-on-Write та його імплементацію.
44.Що таке objc runtime? Диспетчеризація виконання методів, dispatch table, Method Swizzling?
45.Як реалізовано value types «під капотом»?
46.Як працює AutoreleasePool?
47.Навіщо потрібен NSRunLoop, як він працює в контексті thread?

Робота з даними/мережею

48.Що використовуєте для мережевих запитів: URLSession чи сторонні бібліотеки? Які переваги кожного з підходів?
49.Яким чином краще імплементувати сховище даних у разі великої кількості вхідних та вихідних серійних даних (дані з UI, мережі)?
50.Як імплементувати скрол-стрічку з комірками, в яких програється відео (на кшталт стрічки в YouTube-аплікації)?
51.Що потрібно реалізувати для власного менеджера SQLite?
52.Що таке FMDB? Як він працює? Чим відрізняється від Core Data чи Realm?
53.Що таке WebSocket? Розкажіть про його реалізації в мові Swift під iOS. У чому різниця між реалізацією звичайних http-запитів і роботи через сокет?

Тестування

54.Що таке TDD? Розкажіть про плюси та мінуси з особистого досвіду.
55.Опишіть досвід організації інтеграційних тестів.
56.Розкажіть про UI/Unit/Snapshot тести.
57.У застосунку немає жодних тестів. Як розставляються пріоритети, які види тестів почнете писати насамперед?

Асинхронність

58.Як синхронізувати доступ до змінної в багатопотоковому середовищі?
59.Що таке Semaphore? Як використовують семафори для керування завданнями?
60.Які ще є інструменти для керування виконанням завдань на різних потоках?
61.Розкажіть про багатопотоковість в iOS. DispatchGroup та DispatchSemaphore, NSOperation.
62.Порівняйте GCD та NSOperationQueue. Які переваги та недоліки?
63.Що таке Threads Explosion? Які є засоби запобігання?

UI

64.Чи можливо мати width/height для frame, відмінний від bounds?
65.Що таке CADisplayLink? Чи використовували CADisplayLink для побудови анімації?
66.Що таке Offscreen Rendering Path? Які негативні наслідки? Які є методи запобігання?
67.Які засоби профайлингу використовували? Наведіть приклади.
68.Яка різниця між layoutIfNeeded() та setNeedsLayout()?
69.Для чого потрібні content hugging та compression resistance priority?
70.Responder chain в UIKit. Базовий клас UIResponder. Як touch event потрапляє на конкретний в’ю?
71.На UIView є GestureRecognizer. Що спрацює раніше — action у GestureRecognizer чи touchesBegan в UIView?
72.Які UI-операції можна зробити не з головного потоку?
73.Перерахуйте найважчі операції для рендеру UI.
74.На якому потоці відбувається анімація? Чому анімації не блокують UI, якщо всі оновлення UI відбуваються на головному потоці?
75.Як виявити причини UI-помилок (швидкість роботи, відповідність дизайну)?
76.Умовна компіляція у Swift. Що це і для чого використовують?
77.Чи можливо динамічно змінювати елементи launch storyboard? Чому?
78.Що таке Auto Layout? Чи може застосунок мати більше ніж одну сцену? Яким чином?
79.Порівняйте layoutSubviews, setNeedsLayout та layoutIfNeeded.

Інше

80.Які є інструменти для проведення code review?
81.Що таке Git Hook? Для чого використовують? Приклад з власної практики?
82.Як перенести репозиторій з одного сервісу на інший? Як зберегти історію комітів?
83.Які CI/CD системи ви знаєте? Які інструменти надає Apple?
84.Як би ви комунікували з клієнтом про підняття мінімальної версії iOS?
85.З якими засобами керування залежностями маєте досвід роботи?
86.Назвіть найскладнішу задачу, яку вам доводилося розв’язувати. Як ви це зробили, як прийшли до рішення?

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

87.Спроєктуйте застосунок для покупок, в якому є список продуктів та кошик. Стани екранів повинні синхронізуватись, дані мають надійти по API та зберігатись на девайсі. Яку архітектуру будете використовувати? Як синхронізувати й тестувати застосунок?

Дякуємо за цю статтю Костянтину Білику, Алексу Голубу, Костянтину, Ользі Луцик, Олександру Кулику, Руслану Кузьміну, Артему Великому, Олександру Жучінському, Денису Румянцеву, Максиму Сабадишину, Дмитру Шульженку, Олексію Гуріну, Андрію Мамченку, Андрію Коновальському, Сергію Бутенку, Євгену Пєтєлєву, Павлу Дмітрієву.

Похожие статьи:
Привет! Я Сергей Могилевский, QA Engineer в NIX и спикер NIXMultiConf. Уже пять лет занимаюсь тестированием, последние три года групплид и два года...
Время: Вт. Чт. Сб. 18.30-21.30 Brain Academy — первая в Украине комплексная система подготовки сертифицированных программистов и тестировщиков...
За результатами поданих за ІV квартал 2022 року спрощених декларацій із ПДВ, платники податку задекларували майже $52,1 млн (або 1,9 млрд...
Мало хто знає, що вже майже рік у Києві працює R&D-офіс NVIDIA. У 2019-му компанія поглинула розробника телекомунікаційного обладнання...
С 29 по 31 июля приглашаем всех в Одессу на 7-ю конференцию WebCamp, которая посвящена технологиям веб-разработки, управлению...
Яндекс.Метрика