# Общие вопросы 1. Какие бывают типы данных? 2. Чем отличаются классы и структуры? 3. Отличие Reference type от Value type? 4. Что такое Optional в Swift? Как его создать? Для чего используется? 5. Жизненный цикл приложения? (Not running, Inactive, Active, Background, Suspended) 6. Что такое замыкания и где их можно использовать? Какой у них тип? 7. Что такое захват переменных в замыкании? Как оно работает? 8. Что такое убегающие (escaping closures)? 9. Что такое делегат и как они работают в iOS? 10. Как работают push нотификации? 11. let vs var? 12. typealias? Создание своего собственного типа? 14. Что такое enum и для чего используются? 15. Что определяет ключевое слово final перед определением class? 16. Closure – Value или Reference Type? 17. Как разворачивается Optional? 18. Indirect enum что это? ##### didSet: didSet: [7] didSet: [7, 2] deinit ``` import UIKit final class MyArray { var array: [Int] = [] { didSet { print("didSet: \(array)") } } init(_ array: [Int]) { self.array = array } deinit { print("deinit") array = [4] } } var array: MyArray? = MyArray([5]) array?.array = [7] array?.array.append(2) array = nil ``` ##### 5 7 4 ``` import UIKit var array = [5,7,4] for index in array { print("\(index)") array = [1,9,6] } ``` ##### Volvo BMW ```` import UIKit struct Car { var name: String } var car1 = Car(name: "Volvo") let car2 = car1 car1.name = "BMW" print("\(car2.name)") print("\(car1.name)") ```` ##### Cannot assign to property: 'model2' is a 'let' constant ``` import UIKit enum ModelType { case unknown case quad case triangle } struct Model { var type: ModelType = .unknown } var model1 = Model() model1.type = .quad let model2 = Model() model2.type = .triangle ``` # Память 1. Чем отличается ARC от MRC? 2. Как использовать self внутри блоков? Приведите пример retain cycle в блоке? 3. Как работает сборщик мусора в iOS? 4. Отличие weak от unowned? 5. Что такое Retain Cycle? Каким образом исправляется проблема Retain Cycle? 6. Чем отличается стек от кучи? # UIKit 1. Чем отличается UIView от CALayer? 2. Чем отличаются bounds и frame? Меняется ли размер frame при повороте? 3. Когда bounds будет отлично от нуля? 4. Как работает UITableView? 5. Разница между points и pixels? 6. Что такое Autolayout и как он работает? 7. Жизненный цикл ViewController? (load view, viewDidLoad, viewWillAppear, viewWillLayoutSubviews, viewDidLayoutSubviews, viewDidAppear, viewWillDissapear, viewDidDissapear) 8. Что означают IBOutlet и IBAction, для чего они нужны, и что значат для препроцессора? 9. Что можно сделать если клавиатура при появлении скрывает важную часть интерфейса? 10. Что такое StotyBoard? В чем разница между xib и nib файлами? 11. Что такое UIStackView? 12. В чем разница CollectionViews & TableViews? 13. Расскажите о методе hitTest? 14. Как работает UIGestureRecognizer? # Сети 1. Какие бывают протоколы передачи данных? 2. Что такое REST API? Как он работает? 3. Чем отличается HEAD, POST, GET, PUT, DELETE? 4. Отличие JSON от XML? Когда и где лучше использовать то или другое? 5. Что такое сокет? Чем отличается TCP от UDP? # База данных и данные 1. Какие бд Вы знаете? (Realm, SQLIte, Core Data) 2. Какие типы хранилищ поддерживает CoreData? (XML, SQLite, In-Memory, Binary) 3. Что такое Keychain? 4. В каких случаях лучше использовать SQLite, а в каких Core Data? 5. Что такое коллизия хеш-функции? 6. Как работает Copy-on-Write? С какими типами данных работает данныпо умолчанию только с массивами и словарями 7. Что такое миграция базы данных? # Многопоточность 1. Что такое поток и процесс? Чем отличаются? 2. Что такое GCD и NSOperation? Чем отличаются? 3. Когда лучше использовать GCD, а когда NSOperationQueue? 4. Что такое DeadLock? 5. Какие бывают очереди в Swift? Их отличие? 6. Что такое QoS (Quality of Service, уровень сервиса или обслуживания)? Какие бывают и где используются? (User Interactive, User Initiated, Utility, Background; Default — приоритет размещен между User Initiated и Utility) 7. Синхронность и асинхронность. Привести пример 8. Зачем использовать synchronized? 9. Что такое DispatchGroup? 10. Что такое Runloop и как они работают? 11. Как многопоточность работает с UIKit? 12. Можно ли отменить операцию на выполнении? ##### Негарантированно 200-202 ``` import Foundation var count = 0 let group = DispatchGroup() group.enter() DispatchQueue.global(qos: .default).async { for _ in 0...100 { count += 1 } group.leave() } group.enter() DispatchQueue.global(qos: .background).async { for _ in 0...100 { count += 1 } group.leave() } group.wait() print(count) ``` ##### Deadlock ``` DispatchQueue.main.sync { print("Say hello") } ``` ##### 1 2 4 3 ``` let block: (()->Void)? = { print("4") } DispatchQueue.global().sync { DispatchQueue.global().async { print("2") } print("1") DispatchQueue.global().async { print("3") } } block?() ``` ##### 8 6 5 1 4 2 9 ``` import Foundation func callMe() { print("6") DispatchQueue.global().async { print("1") DispatchQueue.main.sync { print("2") } print("9") } print("5") } print("8") callMe() print("4") ``` # Тестирование 1. Что такое Unit-тесты и как они работают? 2. Как тестировать UI приложения? 3. Чем отличается Mock от Stub. (mock - имитация поведения, stub - вводные данные) # Дополнительно 1. Как работают push-уведомления? 2. Какие Вы знаете паттерны? (Observer, Singleton, Responder chain, Factory) 3. Отличие архитектур MVC, MVVM, MVP, VIPER? 4. В чем разница между SVN и Git? 5. Что такое Bridge Header? Как использовать Objective-C код в Swift проекте? 6. NSCoding, archiving для чего используются? 7. Что такое ленивая загрузка? 8. Что такое Generics? 9. Что такое профилировщик, какие бывают. Какие использовали? ##### 1 ``` func update() -> Int { var value = 1 defer { value = 0 } return value } let value = update() print(value) ```