# Общие вопросы
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)
```