|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- # Общие
-
-
- ## Жизненный цикл разработки системы / System development lifecycle (SDLC)
-
- Фазы:
-
- * планирование системы
- * анализ системы
- * дизайн системы
- * разработка, внедрение, развёртывание
- * опытная эксплуатация и интеграция
- * поддержка системы
-
-
- ## Методологии разработки
-
- * Водопад / Waterfall состоит из следующих шагов:
- * осуществимость / feasibility
- * планирование / planning
- * проектирование / design
- * создание / build
- * проверка / test
- * выпуск / production
- * поддержка / support
- * SCRUM
-
-
- ## Что такое ООП и какие его основные принципы?
-
- ООП - это объектно ориентированное программирование.
- Программа представлена в виде совокупности объектов,
- каждый из которых является экземпляром класса.
-
- * Наследование - это возможность использовать функциональность родительского класса в дочернем
- * Инкапсуляция - это сокрытие деталей реализации
- * Полиморфизм - это способность функции работать с данными разных типов
-
-
- ## Шаблоны проектирования
-
- Шаблоны проектирования представляют собой архитектурные решения для некоторых
- часто появляющихся задач.
- Существуют основные, структурные, поведенческие и пораждающие шаблоны.
-
-
- ## Шаблон одиночки (Singleton)
-
- Один экземпляр класса, глобальная точка доступа.
- Хорошо то, что всегда существует, когда используем.
- Но минус в том, что все использующие его методы прибиты к нему гвоздями,
- так что протестировать не удастся.
-
-
- ## Что такое SOLID?
-
- Это пять принципов ООП, предназначенных для создания более ясных, гибких и поддерживаемых систем.
-
- * Single responsibility
- * каждый модуль/класс/функция должны нести ответственность лишь за одну часть функциональности ПО
- * иначе: у класса должна быть лишь одна причина для изменений
- * Open-closed
- * открыто для расширений, закрыто для модификаций
- * т.е. модули/классы/функции разрешают расширить своё поведение без изменения исходного класса
- * Liskov substitution
- * возможность использовать объекты производных классов вместо родительских без нарушения работоспособности
- * Interface segration
- * клиент не должен завивесть от неиспользуемых им методов
- * такие интерфейсы ещё называют ролевыми
- * Dependency inversion
- * высоуровневые модули не должны зависеть от низкоуровневых: и те, и другие должны зависить от абстракций
- * абстракции не должны зависить от деталей (реализации), детали (реализация) должна зависить от абстракций
-
-
- ## В чём разница между strong и weak?
-
- * Strong - это сильная ссылка, weak - слабая.
- * Сильная ссылка увеличивает счётчик на 1, что не даёт ARC'у очистить используемую память.
- * Когда ссылка удаляется (вместе с родительским объектом), счётчик уменьшается на 1.
- * Если счётчик 0, то объект удаляется ARC'ом.
- * Слабая ссылка никак не влияет на счётчик, поэтому она никак не "удерживает" объект от удаления, на который ссылается.
- * Чаще всего используется для делегатов.
- * Ссылки на optional всегда слабые.
-
-
- ## Что такое ARC?
-
- * Automatic reference counting, автоматический подсчёт ссылок.
- * Расставляет в коде увеличение/уменьшение счётчика для переменных за программиста.
- * Не является Garbage Collector.
- * ARC не обрабатывает случаи retain cycle автоматически, как это делают GC.
-
-
- ## Что такое optional?
-
- * Optional представляет собой две возможности: либо значение есть (его можно "раскрыть"), либо значения нет (nil).
- * Реализован как enum с наличием значения и его отсутствием, можно написать самостоятельно при желании
-
-
- ## Что такое retain cycle?
-
- * Это ситуация, когда два (или более) объекта ссылаются друг на друга сильными ссылками.
- * Из-за этого ни один из объектов не будет освобождён первым, поэтому получаем циклическую зависимость.
-
-
- ## Контроль доступа
-
- * open
- * открытые классы могут наследоваться и в опредляющем их модуле, и вовне
- * открытые члены класса можно переопределить и в определюящем их модуле, и вовне
- * использовать можно где угодно
- * public
- * публичные классы могут наследоваться лишь в определяющем их модуле
- * публичные члены класса можно переопределить лишь в определяющеим их модуле
- * использовать можно где угодно
- * internal
- * использовать можно лишь внутри определяющего модуля
- * fileprivate
- * использовать можно лишь внутри этого файла
- * private
- * использовать можно лишь в пределах области реализации
-
-
- ## Чем различаются struct и class?
-
- * struct - value type, при передаче происходит копия всей структуры
- * class - reference type, при передаче копия лишь указателя
-
-
- ## Array и Dictionary value type или reference type?
-
- Они copy on write, т.е. формально value type, но до изменения они ведут себя как reference type.
-
-
- ## Функция ref type или val type?
-
- Ref type, capture variables
-
-
- ## Многопотоность
-
- Многопоточность - это выполнение нескольких задач одновременно.
-
- Существуют следующие механизмы организации многопоточности:
-
- * GCD
- * распределяет нагрузку на уровне системы
- * Thread
- * позволяет руками создать отдельный поток
- * OperationQueue
- * позволяет поставить одни операции в зависимость от других
- * чтобы выполнить одни после завершения других
- * чуть тяжелее GCD
-
-
- ## Какие существуют способы хранить данные локально на устройстве и чем они различаются?
-
- * Core Data
- * является полноценной базой данных
- * где можно задавать различные связи между объектами и выполнять сложные выборки
- * User Defaults
- * хранит все данные в виде ключа-значения, чаще всего используется для хранения настроек приложения
- * Keychain
- * предоставляет безопасное шифрованное хранилище для чувствительной информации
- * Файлы
-
-
- ## Каков жизненный цикл UIViewController?
-
- * loadView задаёт self.view при создании контролера руками
- * loadViewIfNeeded задаёт self.view, если к этому моменту self.view ещё отсутствует
- * viewDidLoad выполняется после задания self.view, границы self.view ещё неизвестны
- * viewWillAppear выполняется перед показом self.view и добавлением в иерархию отображения, границы заданы, ориентация не задана
- * viewWillLayoutSubviews выполняется перед раскладкой детей, выполняется при каждом изменении рамки и, например, при загрузке новых ячеек в таблицу
- * viewDidLayoutSubviews выполняется после раскладки детей, выполняется при каждом изменении рамки и, например, при загрузке новых ячеек в таблицу
- * viewDidAppear выполняется после отображения self.view и добавления её в иерархию отображения
- * viewWillDisappear выполняется перед скрытием контролера другим контролером
- * viewDidDisappear выполняется после скрытия контролера другим контролером
- * viewWillTransition выполняется при смене ориентации для изменения размера self.view корневого контролера активного окна
- * этот контролер в свою очередь вызывает этот же метод у дочерних контролеров
-
-
- ## Каков жизненный цикл приложения iOS?
-
- * not running
- * приложение не запущено
- * inactive
- * приложение выполняется на переднем плане, но не принимает события и ввод от пользователя
- * active
- * приложение выполняется на переднем плане и принимает ввод от пользователя
- * background
- * приложение выполнется в фоне
- * suspended
- * приложение в фоне без какого-либо выполнения
-
-
- ## Зачем нужны тесты?
-
- Позволяют контролировать качество разрабатываемого ПО
- и как минимум гарантировать прохождение имеющихся тестов.
- Покрывать тестами в первую очередь нужно ключевую возможность,
- предоставляемую приложением, например, заказ такси в приложении заказа такси.
-
- Методологии?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|