Общие вопросы о кандидате
1. Расскажи про свой опыт: чем занимался на последнем месте работы, с какими интересными кейсами сталкивался, какими технологиями владеешь?
2. Какие технологии использовал? Писал ли на SwiftUI?
3. Использовали ли вы реактивное программирование?
Computer Science
4. Какова средняя алгоритмическая сложность быстрой сортировки (QuickSort)?
5. По какому принципу работает быстрая сортировка?
6. Какова алгоритмическая сложность поиска элемента в уже отсортированном массиве?
7. Может ли сложность поиска быть равна O(1)?
UIKit / UI
8. Какие методы участвуют в процессе layout UIView?
9. Если используем констрейнты и авто-лайаут — какие методы задействованы?
10. Что нужно сделать, чтобы frame и bounds не были равны?
11. В каком методе жизненного цикла UIViewController раньше всего будут известны размеры view?
Память и ARC
12. Расскажи кратко, как работает Automatic Reference Counting (ARC)?
13. Что такое autorelease и autorelease pool?
14. Как работает механизм copy-on-write?
15. Можем ли мы сами реализовать механизм copy-on-write?
16. Что такое indirect enum?
17. Что такое side table?
Многопоточность / GCD / OperationQueue
18. Какие бывают очереди в GCD?
19. Какую задачу решает dispatch_barrier?
20. Какие расширения предоставляет OperationQueue по сравнению с GCD?
Архитектура и паттерны
21. Чем хорош паттерн Singleton?
22. Почему многие считают его плохим?
23. Так ли он действительно плох? В каких случаях его стоит использовать?
Задача
Практика24. Задача: Провести код-ревью, а потом отрефакторить код.
25. Задача: Ты увидел, что синглтон реализован криво. Как его можно исправить?
26. Задача: Чем плох force unwrap и как лучше обработать такие случаи?
27. Задача: Как правильно обработать ошибку при загрузке данных из URL?
28. Задача: Какую сигнатуру метода лучше использовать, если мы хотим возвращать результат с ошибкой (Result)?
29. Задача: В каких случаях нужно переходить на главный поток при работе с UIImageView?
30. Задача: Какие бывают варианты Quality of Service (QoS) у очередей, и какой подходит для загрузки картинки в ViewController?
import Foundation
class NetworkService {
private init() {}
static private(set) var shared: NetworkService = .init()
func loadData(from url: URL, completion: (Data) -> Void) {
DispatchQueue.global(qos: .userInteractive).sync {
let data = try! Data(contentsOf: url)
completion(data)
}
}
}
class ShowImageViewController: UIViewController {
var url: URL!
@IBOutlet var imageView: UIImageView
override func viewDidLoad() {
NetworkService.shared.loadData(from: url!) {
imageView.image = UIImage(data: $0)
}
}
}