Программирование
50 вопросов и ответов для собеседования iOS-разработчиков: часть 2
iOS-разработчик Дурул Далканат собрал распространенные вопросы с собеседования iOS-разработчиков и, конечно, дал ответы на них.
26. Что такое фасад (шаблон проектирования)?
Шаблон фасад обеспечивает единый интерфейс для сложной подсистемы. Вместо того, чтобы показывать пользователю набор классов и их API, вы открываете только один простой унифицированный API, делегирующий запросы соответствующим объектам системы.
27. Что такое шаблон декоратор?
Шаблон декоратор динамически добавляет поведение и обязанности к объекту без изменения его кода. Это альтернатива подклассу, где вы изменяете поведение класса, обертывая его другим объектом.
В Objective-C есть две очень распространенные реализации этого шаблона: категория и делегирование. В Swift есть также две очень распространенные реализации этого шаблона: расширения и делегирование.
28. Что такое шаблон адаптер?
Адаптер позволяет классам с несовместимыми интерфейсами работать вместе. Он обертывается вокруг объекта и предоставляет стандартный интерфейс для взаимодействия с этим объектом.
29. Что такое шаблон наблюдатель?
В наблюдателе один объект уведомляет другие объекты о любых изменениях состояния.
Cocoa реализует шаблон наблюдателя двумя способами: уведомлениями и наблюдением за ключевыми значениями (Key-Value Observing, KVO).
30. Что такое шаблон хранитель?
Хранитель сохраняет ваши данные в каком-либо месте, затем внешнее состояние может быть восстановлено без нарушения инкапсуляции; то есть частные данные остаются частными. Одним из специальных применений хранителя в Apple — это архивирование, с другой стороны, iOS использует хранитель как часть State Restoration.
31. Объясните MVC?
- Модель — ответственна за данные домена или уровень доступа к данным. Они управляют данными, классами «Person» или «PersonDataProvider».
- Представление — ответственно за уровень представления (графический интерфейс), в среде iOS — это все с префиксом ‘UI’.
- Контроллер / Представитель / Модель представления — посредник между моделью и представлением, в целом отвечающий за изменения модели, реагируя на действия пользователя в представлении и обновляя представление с изменениями из модели.
32. Объясните MVVM?
Независимое отображение вашего представления и его состояния в UIKit. Модель представления вызывает изменения в модели и обновляет себя, и так как мы имеем связь между моделью и моделью представления, первая обновляется соответствующим образом.
Ваша модель представления фактически возьмет вашу модель, и сможет отформатировать информацию, которая будет отображаться в вашем представлении.
Существует более известная структура под названием RxSwift. Она содержит RxCocoa, которая является реактивными расширениями для Cocoa и CocoaTouch.
33. Сколько различных аннотаций доступно в Objective-C?
- _Null_unspecified — мосты в Swift для неявно-развернутых optional. Это по умолчанию.
- nonnull: значение не будет равно нулю; мосты к регулярной ссылке.
- nullable: значение может быть nil; мосты к optional.
- null_resettable: при чтении значение никогда не будет равным нулю, но вы можете установить его обнулить. Применяется только к свойствам.
34. Какие существуют ограничения JSON/PLIST?
- Ваши объекты создаются, а затем сериализуются на диск.
- Ограниченные варианты использования.
- Мы не можем явно использовать сложные запросы для фильтрации результатов.
- Очень медленная скорость.
- Каждый раз, когда нам что-то нужно, нам нужно либо сериализовать, либо десериализировать его.
- Это не потокобезопасно.
35. Какие существуют ограничения SQLite?
- Нам нужно определять отношения между таблицами.
- Мы должны вручную писать запросы для извлечения данных.
- Нам нужно запросить результаты, а затем сопоставить их с моделями.
- Запросы очень быстрые.
36. Какие преимущества у Realm?
- База данных с открытым исходным кодом.
- Просто внедряется.
- Хранение объектов без копирования.
- Это быстро.
37. Сколько существует API для определения местоположения с эффективной работой аккумулятора?
Их три:
- Significant location changes — местоположение определяется примерно каждые 500 метров (обычно до 1 км)
- Region monitoring — отслеживание событий входа/выхода из круглых областей с радиусом 100 м или более. Region monitoring является наиболее точным API после GPS.
- Visit events — мониторинг посещений, то есть входов или выходов из конкретного места (дома или офиса).
38. Каково главное преимущество Swift?
Несколько главных плюсов Swift:
- опциональные типы, которые предохраняют приложения от сбоев;
- встроенное исправление ошибок;
- замыкающие выражения;
- Swift более быстрый в сравнении с другими языками;
- типобезопасный язык;
- поддержка сопоставления с образцом.
39. Объясните Generic в Swift?
Generic создают код, который не требует особых типов данных. не пропустите статью.
40. Объясните lazy в Swift?
Начальное значение ленивых свойств вычисляется только тогда, когда свойство вызывается в первый раз. Бывают ситуации, когда ленивые свойства оказываются очень удобны разработчикам.
41. Что такое defer?
defer — это ключевое свойство, которое обеспечивает выполнение блока кода, когда остальная текущая область не выполняется.
42. Как передать переменную в качестве ссылки?
Следует упомянуть, что существуют два типа переменных: ссылочные и типы значений. Разница между этими двумя типами заключается в том, что, передавая тип значения, переменная создаст копию своих данных, а переменная ссылочного типа будет просто указывать на исходные данные в памяти.
43. Почему лучше использовать функции высшего порядка?
Функции высшего порядка — это функции, которые берут другую функцию в качестве параметра или возвращают функцию как результат. Swift определяет эти функции как CollectionType.
Самой базовой функцией высшего порядка является filter.
44. Что такое параллелизм?
Параллелизм разделяет пути выполнения вашей программы, чтобы они могли работать одновременно. Основные термины:
- Процесс — экземпляр исполняемого приложения;
- Поток — путь выполнения для кода;
- Многопоточность — несколько потоков или несколько путей выполнения, выполняемых в одно и то же время.
- Параллелизм — выполнение нескольких задач одновременно масштабируемым образом.
- Очереди — это легкие структуры данных, которые управляют объектами в порядке First-in, First-out (FIFO).
- Синхронные и асинхронные задачи.
45. Что такое Grand Central Dispatch (GCD)?
GCD — это библиотека, которая предоставляет низкоуровневый и объектный API для одновременного запуска задач при управлении потоками за кулисами. Терминология:
- Очереди отправки. Очередь отправки отвечает за выполнение задачи в порядке FIFO.
- Серийная очередь отправки. Последовательная очередь отправки запускает задачи по одной.
- Параллельная очередь отправки. В параллельной очереди отправки выполняется столько задач, сколько возможно без ожидания завершения начатых задач.
- Основная очередь отправки. Глобально доступная последовательная очередь, которая выполняет задачи в основном потоке приложения.
46. Читатели-писатели?
Одновременное чтение нескольких потоков, когда должна происходить запись одного потока. Решением проблемы является блокировка чтения-записи, которая позволяет одновременный доступ только для чтения и отдельный доступ для записи. Терминология:
- Состояние гонки возникает, когда два или более потока могут обращаться к общим данным, и они пытаются изменить его одновременно.
- Тупик возникает, когда две или несколько задач ждут завершения других, но этого не происходит.
- Проблема читателей-писателей: одновременное чтение нескольких потоков, в то время как должна происходить запись одного потока.
- Блокировка чтения-записи: такая блокировка позволяет одновременный доступ к общему ресурсу только для чтения, в то время как операции записи должны запрашивать эксклюзивный доступ.
- Блок барьера отправки создает узкое место по типу серии при работе с параллельными очередями.
47. NSOperation — NSOperationQueue — NSBlockOperation?
NSOperation добавляет немного дополнительных расходов по сравнению с GCD, но при его использовании мы можем добавить зависимость между различными операциями и повторное использование, отменить или приостановить их.
NSOperationQueue позволяет создавать пул потоков и использовать его для параллельного выполнения NSOperations. Операционные очереди не являются частью GCD.
NSBlockOperation позволяет создавать NSOperation из одного или нескольких замыкающих выражений. NSBlockOperations может иметь несколько блоков, которые выполняются одновременно.
48. KVC — KVO?
KVC означает кодирование ключевых значений. Это механизм, с помощью которого свойства объекта можно получить с помощью строки во время выполнения, вместо того, чтобы статически знать имена свойств во время разработки.
KVO означает наблюдение за ключевыми значениями и позволяет контроллеру или классу наблюдать за изменением значения свойства. В KVO объект может запросить уведомление о любых изменениях конкретного свойства: когда это свойство изменяет значение, наблюдатель автоматически уведомляется.
49. Объясните методы сопоставления с образцом в Swift?
- Шаблоны кортежей используются для сопоставления значений соответствующих типов кортежей.
- Типовые шаблоны позволяют вам создавать или сопоставлять типы.
- Подстановочные шаблоны сопоставляют, игнорируя любой вид и тип значения.
- Опциональные шаблоны используются для соответствия опциональных значений.
- Шаблоны перечислений сопоставляют существующие типы перечислений.
- Шаблоны выражений позволяют сравнивать данное значение с данным выражением.
50. Какие существуют преимущества Guard?
Есть два больших преимущества guard. Во-первых, это избегание большого числа утверждений if let, встроенных друг в друга. Во-вторых, это быстрый выход из функции, используя break или return.