Собеседование разработчика — сложное интервью, в котором надо продемонстрировать все навыки. Какие специфические знания могут понадобиться iOS-разработчику? Первая часть статьи с 25 темами!
1. Как настроить Live Rendering?
Атрибут @IBDesignable позволяет Interface Builder обновлять конкретные элементы.
2. Чем отличаются синхронная и асинхронная задача?
Синхронная: ждет, пока задача завершится. Асинхронная: завершает задачу в фоновом режиме и уведомляет вас о завершении.
3. Что такое b-деревья?
Это поисковые деревья, которые предоставляют упорядоченное хранилище ключевых значений с отличными характеристиками производительности. Каждый узел хранит отсортированный массив своих собственных элементов и другой массив для своих дочерних элементов.
4. Что такое объект NSError?
Существует три части объекта NSError: домен, код ошибки и словарь с пользовательской информацией. Домен — это строка, которая идентифицирует, к какой категории относится эта ошибка.
5. Что такое Enum?
Enum — это тип, который в основном содержит группу связанных значений.
6. Что такое ограничивающий параллелепипед?
Ограничивающий параллелепипед — это термин, используемый в геометрии; он означает наименьшую меру (площадь или объем), в пределах которой находится набор точек.
7. Почему мы не используем strong для enum в Objective-C?
Поскольку enum не являются объектами, мы не указываем здесь strong или weak.
8. Что такое @synthesize в Objective-C?
Synthesize генерирует методы getter и setter для вашего свойства.
9. Что такое @dynamic в Objective-C?
Мы используем dynamic для подклассов NSManagedObject. @dynamic сообщает компилятору, что геттер и сеттеры реализованы где-то в другом месте.
10. Почему мы используем synchronized?
Synchronized гарантирует, что только один поток может выполнять этот код в блоке в любой момент времени.
11. В чем разница strong, weak, read only и copy?
Собеседование разработчика может быть посвящено и таким вопросам.
Атрибуты свойства strong, weak, assign определяют, как будет управляться память для этого свойства.
Strong означает, что в сгенерированном сеттере счетчик ссылок на присваиваемый объект будет увеличен и ссылка на него будет поддерживаться в течение жизни объекта.
Weak означает, что мы указываем на объект, но не увеличиваем счетчик ссылок. Он часто используется при создании родительских-дочерних отношений. Родитель имеет сильную ссылку на ребенка, но ребенок имеет только слабую ссылку на родителя.
Read only — мы можем установить свойство изначально, но затем его нельзя будет изменить.
Copy означает, что мы копируем значение объекта при его создании. Также предотвращает изменение его значения.
Больше подробностей вы можете узнать здесь.
12. Что такое Dynamic Dispatch?
Dynamic Dispatch — это процесс выбора реализации полиморфной операции, которая является методом или функцией для вызова во время выполнения. Это происходит, когда мы хотим вызывать наши методы как метод объекта. Swift по умолчанию не выполняет Dynamic Dispatch.
13. Что такое покрытие кода?
Покрытие кода — это метрика, которая помогает нам измерять ценность наших юнит-тестов.
14. Что такое обработчик завершения?
Обработчики завершения очень удобны, когда наше приложение вызывает API, и нам нужно что-то сделать, когда эта задача будет выполнена: например, обновить пользовательский интерфейс, чтобы отобразить данные из вызова API. Обработчики завершения можно найти в API Apple, например, dataTaskWithRequest, и они могут быть очень полезными в вашем коде.
Обработчик завершения принимает код с тремя аргументами: (NSData?, NSURLResponse?, NSError?), который ничего не возвращает: void. Это означает завершение.
Обработчики завершения должны быть помечены @escaping, так как они выполняются после выполнения функции.
15. Как определить место юзабилити в дизайне?
Собеседование разработчика это не только код. Могут быть и вопросы о других направлениях разработки. Место юзабилити в дизайне можно определить так.
Для этого нужно разбить процесс дизайна на четыре шага:
- Думайте, как пользователь, а потом создавайте UX.
- Помните, что пользователи — это люди, а не их демографические данные.
- При продвижении приложения подумайте обо всех ситуациях, в которых оно будет полезно.
- Продолжайте работать над удобством приложения даже после запуска.
16. В чем разница между рамкой и границами (frame и bound)?
Границы в UIView — это прямоугольник, имеющий местоположение (x, y) и размер (ширина, высота) относительно собственной системы координат (0,0).
Рамка в UIView это прямоугольник, имеющий местоположение (x, y) и размер (высота, ширина) относительно элемента, в котором он содержится.
17. Что такое Responder Chain?
Responder Chain — это иерархия объектов, которые могут ответить на полученные события.
18. Что такое регулярные выражения?
Регулярные выражения — это специальные строки-шаблоны, которые описывают, как искать в строке.
19. Что такое перегрузка операторов?
Перегрузка операторов позволяет нам изменять взаимодействие существующих операторов с существующими типами.
20. Что такое TVMLKit?
TVMLKit — это связь между TVML, JavaScript и нативным tvOS-приложением.
21. Какие ограничения существуют у платформы tvOS?
Во-первых, tvOS не поддерживает браузеры, и поэтому вы не сможете использовать WebKit или другой веб-механизм рендеринга. Это означает, что ваше приложение совсем не сможет ссылаться на веб-браузер, включая веб-ссылки, OAuth или сайты социальных сетей.
Во-вторых, приложения tvOS не могут явно использовать локальное хранилище. При запуске продукта устройства поставляются с жестким диском либо на 32 ГБ, либо на 64 ГБ, но приложениям не разрешается напрямую сохранять файлы на устройство.
Бандл tvOS-приложения не может превышать 4 ГБ.
22. Что такое функции?
Функции позволяют нам группировать серии утверждений, чтобы выполнить какое-либо задание. Как только функция будет создана, её можно использовать в коде снова и снова. Если вы находите повторяющиеся утверждения в коде, функция может стать средством от этого повторения.
Совет: хорошие функции принимают входные данные и возвращают выходные. Плохие функции устанавливают общие переменные и полагаются в работе на другие функции.
23. Что такое ABI?
ABI (двоичные интерфейсы приложения) важны, когда речь идет о приложениях, которые используют внешние библиотеки. Если программа создана для использования определенной библиотеки, и эта библиотека будет позже обновлена, то вам надо будет перекомпилировать это приложение (а с точки зрения конечного пользователя у вас вообще может не быть исходника). Если обновленная библиотека использует один и тот же ABI, то ваша программа не будет нуждаться в изменении.
24. Почему шаблон проектирования очень важен?
Шаблоны проектирования — это повторно используемые решения для распространенных проблем в создании приложений. Эти шаблоны созданы, чтобы помочь вам писать простой код, который можно будет использовать снова и снова. Самые распространенные шаблоны проектирования Cocoa:
- порождающий — одиночка (Singleton);
- структурные — декоратор (Decorator), адаптер (Adapter), фасад (Facade);
- поведенческие — наблюдатель (Observer) и хранитель (Memento).
25. Что такое одиночка (Singleton)?
Такой шаблон проектирования гарантирует, что для данного класса существует только один экземпляр и что для этого экземпляра есть глобальная точка доступа. Обычно он использует ленивую загрузку для создания единственного экземпляра, когда это необходимо в первый раз.
Продолжение про собеседование разработчика читайте в следующей статье!
50 вопросов и ответов для собеседования iOS-разработчиков: часть 2