— Value type vs Reference type:
1. Чем отличаются valuetype и referencetype? Расскажи подробнее. 2. Ты упомянул, что value_type может храниться в куче. В каких случаях это происходит? 3. А если это не массив, а что-то ещё? Приведи другие примеры. 4. А переполнение стека — в каких ситуациях это может произойти? Почему тогда объект уйдёт в кучу? 5. А как обстоит дело с generics? Там value_type тоже может уйти в кучу?у?
— Copy-on-write:
1. Что такое механизм copy-on-write? 2. Можно ли реализовать copy-on-write поведение для своей структуры? Если да, то как?
— ARC (Automatic Reference Counting):
1. Что такое ARC и как он работает? 2. Что такое retain_cycle и почему он возникает? 3. Чем отличались MRC и ARC? 4. Расскажи подробнее про типы ссылок: strong, weak, unowned. 5. Как работает weak-ссылка на уровне реализации? Что такое side_table? 6. Как устроен жизненный цикл объекта при ARC? 7. В какой момент освобождается сама таблица (side_table)? 8. У ARC нет garbage_collector. Каким образом тогда реально освобождается память?
— Многопоточность:
1. Что такое serialqueue и concurrentqueue? Чем отличаются вызовы sync и async? 2. Если я кладу задачи в concurrent_queue асинхронно — могу ли я быть уверен, что они начнут выполняться в том же порядке, в котором я их вызвал? 3. Какие основные проблемы многопоточности ты знаешь? 4. Давай подробнее про deadlock: может ли он возникнуть между разными очередями? 5. Какие механизмы синхронизации есть в iOS, чтобы избежать data_race? 6. Можно ли решить datarace просто с помощью serialqueue? 7. Какие есть приоритеты у задач (QoS)? Что они означают?ают?
— Жизненный цикл UIViewController:
1. Назови методы жизненного цикла UIViewController в правильном порядке начиная с init. 2. Что происходит с view в viewDidLoad? Добавлена ли она уже в иерархию? 3. Чем отличается viewWillAppear от viewDidLoad? 4. Для чего был добавлен метод viewIsAppearing и чем он отличается от viewWillAppear? 5. Если свернуть приложение и потом развернуть — какие методы жизненного цикла вызовутся у UIViewController?
— Архитектуры:
1. Что такое паттерн MVVM и как он устроен? 2. Каким образом View взаимодействует с ViewModel? Может ли View напрямую менять state? 3. Какие сложности ты видишь в MVVM? 4. Расскажи про архитектуру VIPER. Какие там компоненты и за что каждый отвечает? 5. Какие плюсы и минусы у VIPER? 6. Как вы решаете проблему избыточности кода в VIPER?
— Паттерны проектирования:
1. С какими паттернами ты работал? 2. Чем отличается фабрика от абстрактной фабрики? 3. В чём разница между фабрикой и билдером? 4. Что для тебя значит «правильная реализация singleton»? 5. Как решить проблему тестирования классов, которые используют singleton? 6. Как у вас реализован DI (dependency injection) в проекте?
— SOLID:
1. Что означают буквы в аббревиатуре SOLID? 2. Приведи пример для каждого принципа. 3. В связке «интерактор — сервис» кто из них является высокоуровневым модулем, а кто низкоуровневым?