Співбесіда з 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 та зберігатись на девайсі. Яку архітектуру будете використовувати? Як синхронізувати й тестувати застосунок?

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

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

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



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


34 комментария

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

Просто невероятное нагромождение всего, что только вообще может быть рядом с темой программирования. Большая часть вопросов «просто, потому что надо», еще вопросы из разряда «все спрашивают, мы тоже спросим», ну и, конечно же, вопросы про паттерны, солиды, подходы, архитектуры и прочая документальная хрень, которая не показывает ничего, кроме того, что человек ровно перед собесом сидел на вики. А потом дебет с кредитом не сходится, в смысле, на собесе одно, а в проде — г..., ну вы понимаете. И в этом весь замкнутый круг. Люди ищут, что спрашивают на собесах, потом пишут вот такие толмуты, другие смотрят и думают, что это нормально. Не пора ли как-то это заканчивать и превращать собеседования в адекватный процесс, а не цирк с конями и сортировками?

наоборот, в следующий раз я точно вспомню этот момент и не напишу не правильно

Я тут один, хто почувши питання про solid, закінчить співбесіду?

Ну, во-первых, лишнее время на «расскажите заученные из википедии определения», по сути те же вопросы можно проверить в ходе беседы в рамках общего разговора на тему «что и как делал, что не нравилось/нравилось в выбранном подходе».

А еще есть вот такой вот чувак, который очень сильно не любит солид последние лет 5 (или больше). Если интересно, можно ознакомиться с его аргументами. Мне они кажутся все еще спорными и местами манипулятивными, но в качестве критики и как альтернативная точка зрения вполне сойдут.

социальными сетями прибило на тему youtu.be/szyVzYcoNLo

ЗЫ: есть момент за синглтон ))

теми же сетями прибило www.youtube.com/watch?v=z1uTOrDqRfU
ЗЫ: мне этот подход больше по душе, чем «точечные вопросы» которые «100% покажут уровень».

Правда, выступление по твоей теме я стопнул на фразе про то, что atomic modificator генерирует thread safe код.

стопнул на фразе про то, что atomic modificator генерирует thread safe код.

это ты зря фишка же ж изучения сабжа как раз в том чтобы понимать глубину глубин реальности потому что дна нет но это аксиома в контексте а интересны же ж именно детали чтобы заранее иметь в виду и быть готовым

Стоит ли рассматривать этот список как исчерпывающий для собеса? Если человек ответил на все вопросы из раздела

Senior

означает ли это что он тот самый Senior? Или если на часть вопросов ответить не может, означает ли это что он не Senior?

Дякую за підбірку, завжди цікаво глянути, чим живе iOS :)

Одне запитання для мене незрозуміле, можливо хтось з авторів чи читачів внесе ясність:

29.Чи є NSNotificationCenter чистим Observer?

Що таке «чистий» Observer? Ніколи не чув цього терміну. Спробував шукати по «pure/bare observer», але нічого не знайшов.

Також хочу невеличку загальну критику додати.
1. Не перекладайте терміни з технічної документації та API. Ніколи. Ні в статтях ні, тим більше, в реальних інтервью. Це дуже сильно дезорієнтує і подекуди є просто невірним і веде в глухий кут. Наведу пару прикладів зі статті:

20.Де в пам’яті зберігаються екземпляри reference та value типів?

Слово «екземпляр», я здогадуюсь, є перекладом слова instance. Але instance передбачає identity, що є властивістю тільки Reference types, але не Value types, тому питання невірно поставлене.

50.Що таке асинхронне та синхронне виконання? Що з них є послідовним?

Що таке «послідовне» виконання? Я здогадуюсь, що мове йде про serial queue в GCD, але це слово є частиною API і навіть так не перекладається. Чи мове йшла про sequential consistency? Це запитання нечітке.

Чи є замикання посилальним типом?

Тут взалі без коментарів. Я б надовго завис з цим запитанням тільки щоб його розпарсити. Це мені нагадало як на руських сайтах типу хабра роблять недолугі спроби перекласти абсолютно все на вєлікій і пишуть не table view, а «таблічноє прєдставлєніє». Нема ніякого замикання — є слово «closure», яке є терміном з технічної документації і не має перекладатися.

2. Не треба розбивати на категорії Junior, Middle, Senior. По-перше, це дуже довільні категорії — наприклад я бачив тут питання в Junior, які доречніші для Senior і навпаки. По-друге, вони досить сильно перетинаються, навіть видно по дубльованим запитанням. По-третє, є досить пошининою практикою не робити різні запитання для різних рівнів (ба більше, ти не знаєш реальний рівень кандидата до початку інтервью, а тільки робиш припущення), а питати всіх однаково.
Замість цього краще розбивати питання по тематиці: мова, бази даних, мережа, архітектура і т.д. Можна робити зростання рівня складності в рамках теми: бази данних — від основ по просутуного рівня.

80.Які є інструменти для проведення code review?

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

81.Що таке Git Hook? Для чого використовують? Приклад з власної практики?

вот вот пример с власной практики ровно за это ))

82.Як перенести репозиторій з одного сервісу на інший? Як зберегти історію комітів?

...

я ещё не читал следующий вопрос вот сирёзно предвкушаю жжгутЪ ))

84.Як би ви комунікували з клієнтом про підняття мінімальної версії iOS?

не ну норм чо )) ну так угольками на шашлычок ))

86.Назвіть найскладнішу задачу, яку вам доводилося розв’язувати. Як ви це зробили, як прийшли до рішення?

проходил такие д.бильные «интервью»? ))

ЗЫ: тот не ловкий момент когда «знание американского» возносится уже в не обходимость в виду насущности «ухода от особенностей национального отечественного языка» ))

17.Чи є замикання посилальним типом?

Зазубри вікіпедію і пройдеш будь-яку співбесіду. Таке враження що ці питання придумав твій професор по інформатиці для складання іспиту по своєму курсу.
Питання на трійки, на четвірки і на п’ятірку практична задача.

Дякую за запитання.
Цікавий факт, що я ніколи не працював з iOS, але на дуже багато питань можу спокійно відповісти.

8.Чому Singleton ще називають антипатерном?
9.Як реалізувати Singleton у Swift?

Якщо це антипаттерн, для чого знати, як його реалізовувати?

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

А хіба інкапсуляція не створена, щоб бити по руках тим, хто хоче поміняти те, що не має право змінювати?

Нуу инкапсуляция не диктует правило что все свойства должны быть скрыты. Тут больше вопрос в правильном выбранном архитектурном подходе. Можно написать код который будет менять свойство (хранимое) в нескольких местах. Например, какой-то свойство «isShowed: Bool». Если это свойство менять в разных частях приложения и к нему же обращаться, чтобы понять «что же там лежит», то можно наткнуться на проблемы (если есть большие зависимости). Можно запутаться, потом править это, потом выяснить, что твоя правка поломала другой кусок так там нужно чтобы «isShowed» было true, а ты поставил false на пред. экран и так д.

т.е. вся антипатерность синглтона в крайней криворукости его применителей как тактической так и концептуальной а ну ок )) опять же ж повторюсь тут ни чего такого и такая «ситуация» это скорее «новая нормальность» чем на оборот

Все верно :)

«Антипаттерн (англ. anti-pattern) — это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным. В отличие от шаблона проектирования, рассмотрение антипаттерна включает в себя как неправильное решение проблемы с его признаками и последствиями, так и выход из ситуации.»

Singleton может быть написан во вред, либо во благо.
Например:

// Что может приводить к ошибкам:

class Singleton {

static var shared = Singleton()
private init() {}

var isShowed: Bool = false
}

// Что может работать на пользу:

class Singleton {

static var shared = Singleton()
private init() {}

var isShowed: Bool {

return //* calculate isShowed *//
}
}

Кто не знает swift, во втором примере isShowed это get свойство которое не имеет в себе setter-a, соответсвенно избегает ошибок сохранения в «isShowed» с разных точек приложения.

PS — Данный код написан как пример, чтобы передать суть :)

PS — Данный код написан как пример, чтобы передать суть :)

чтобы передать суть чего? криворукости писателя этого кода простите? ну сделайте вашему синглтону 2 интерфейса в 1м ваш isShowered будет read only и в 2м доступный для сохранения и вообще зачем вашему приложению такой стейт в синглтоне? может всё же ж не синглтон виноват?

я говорил место тут проклятое а ты руки руки (к) (тм)

Мы же не обсуждаем вопрос решения конкретной задачи, поэтому на вопрос «зачем моему приложению такой стейт» я отвечать не стану. Это не боевой пример а поэтому названия свойств, типы, количество свойств и суть класса могут отличатся от реальной жизни. :)

Суть этого примера показать почему Singleton является антипаттерном. Причем добавлю, что я подобных примеров в реальных проектах встречал неоднократно.

Ну а что ты скажешь о синглтонах, которые являются частью iOS, например

sharedApplication, standardUserDefaults или defaultManager
? Что у нас здесь — антипаттерность и криворукость разработчиков Apple или что-то другое? Вопрос о Singleton не зря включён в вопросы по iOS, ой не зря.

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

Мы обсуждаем почем он является антипаттерном и какие проблемы может за собой потянуть если его написать неграмотно. Перечитай еще раз переписку. :)

Антипаттерн потому что «Singleton» это один объект всего жизненного цикла приложения и ты можешь изменить данные с любых точек, что может привести к разным проблемам и конфузам.

это какой-то новый уровень программистской логики )) я уже не пишу даже «отечественной» потому что есть ещё 4+ млрд индоафропакистана

... т.е. singleton специально придуман для того чтобы

это один объект всего жизненного цикла приложения и ты можешь изменить данные с любых точек

и тут оппа и это же ж есть причиной «антипаттерн» ну т.е. нам нужен singleton но это антипаттерн потому что он singleton

но это я так скорее ворчу потому как этот «уровень» это скорее реальность наши дни чем на оборот ну селяви ничего личного просто бизнес ))

Дал ответ выше :)
Нуу чтобы «новый» не сказал бы. Singleton со своими проблемами существует уже давно.

Singleton со своими проблемами существует уже давно.

синглтон да но новые поколения якобы «программистов» таки всё больше новодел ))

ещё раз по тому же ж синглтон существует для того чтобы распределить единый объект на все точки доступа к этому объекту всё

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

... и просто глупость но повторюсь второе как раз скорее нормально «наши дни» и таки имеет смысл быть готовому именно к этому увы селяви и «общая сумма разума на планете есть величина постоянная» (к) (тм)

ещё раз по тому же ж синглтон существует для того чтобы распределить единый объект на все точки доступа к этому объекту всё

Да, так и есть. Никто и не говорит, что у него другое предназначение. :) Распределить единый объект на все точки приложения можно по-разному. В этом и заключается его антипаттерность.

"Антипаттерн (англ. anti-pattern) — это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным

Забавно, що у джуна запитують:

Що таке SwiftUI?

А у мідла запитують:

Чи цікавились SwiftUI та Combine?

Тобто мідл міг навіть не цікавитись тим, про що повинен розповісти джун :)

Та ладно, це так, жарти. А загалом дуже корисний, інформативний список. Кожне запитання могло б стати темою для нової технічної статті. Буде звідки брати теми :)

Присоединяйтесь к iOS Open Engineering Guild Ukraine в телеграмме
t.me/ios_guild_ukraine

Рекомендую еще на медиуме, топ 50 iOS вопросов и ответов, и там около 5 частей,
все актуальны

4. Що таке реактивне програмування?

Це програмування сидячи на палаючому стулi пiсля питання

12. Розкажіть про алгоритми пошуку та сортування.

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