Senior soft · март 2025

Тех собес на middle-senior IOS Разработчик в Senior soft

middle-senior Тех собес 23 вопроса 7 задач
1

Общие вопросы о кандидате

1. Расскажи про свой опыт: чем занимался на последнем месте работы, с какими интересными кейсами сталкивался, какими технологиями владеешь?

2. Какие технологии использовал? Писал ли на SwiftUI?

3. Использовали ли вы реактивное программирование?

2

Computer Science

4. Какова средняя алгоритмическая сложность быстрой сортировки (QuickSort)?

5. По какому принципу работает быстрая сортировка?

6. Какова алгоритмическая сложность поиска элемента в уже отсортированном массиве?

7. Может ли сложность поиска быть равна O(1)?

3

UIKit / UI

8. Какие методы участвуют в процессе layout UIView?

9. Если используем констрейнты и авто-лайаут — какие методы задействованы?

10. Что нужно сделать, чтобы frame и bounds не были равны?

11. В каком методе жизненного цикла UIViewController раньше всего будут известны размеры view?

4

Память и ARC

12. Расскажи кратко, как работает Automatic Reference Counting (ARC)?

13. Что такое autorelease и autorelease pool?

14. Как работает механизм copy-on-write?

15. Можем ли мы сами реализовать механизм copy-on-write?

16. Что такое indirect enum?

17. Что такое side table?

5

Многопоточность / GCD / OperationQueue

18. Какие бывают очереди в GCD?

19. Какую задачу решает dispatch_barrier?

20. Какие расширения предоставляет OperationQueue по сравнению с GCD?

6

Архитектура и паттерны

21. Чем хорош паттерн Singleton?

22. Почему многие считают его плохим?

23. Так ли он действительно плох? В каких случаях его стоит использовать?

7

Задача

Практика

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)
        }
    }
}