Изменения от Главреда ГитЖС | Changes of GitJS Glavred
This commit is contained in:
2
0000
2
0000
@@ -2,4 +2,4 @@ BO iOS
|
|||||||
0.1.0
|
0.1.0
|
||||||
https://git.opengamestudio.org/kornerr/BOnPOCbI-OTBETbI-iOS
|
https://git.opengamestudio.org/kornerr/BOnPOCbI-OTBETbI-iOS
|
||||||
|
|
||||||
/общие.md
|
/кратко.md
|
||||||
200
кратко.md
Normal file
200
кратко.md
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
# Общие
|
||||||
|
|
||||||
|
|
||||||
|
## Жизненный цикл разработки системы / System development lifecycle (SDLC)
|
||||||
|
|
||||||
|
Фазы:
|
||||||
|
|
||||||
|
* планирование системы
|
||||||
|
* анализ системы
|
||||||
|
* дизайн системы
|
||||||
|
* разработка, внедрение, развёртывание
|
||||||
|
* опытная эксплуатация и интеграция
|
||||||
|
* поддержка системы
|
||||||
|
|
||||||
|
|
||||||
|
## Методологии разработки
|
||||||
|
|
||||||
|
* Водопад / Waterfall
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
|
||||||
|
## Что такое optional?
|
||||||
|
|
||||||
|
* Optional представляет собой две возможности: либо значение есть (его можно "раскрыть"), либо значения нет (nil).
|
||||||
|
* Реализован как enum с наличием значения и его отсутствием, можно написать самостоятельно при желании
|
||||||
|
|
||||||
|
|
||||||
|
## Что такое retain cycle?
|
||||||
|
|
||||||
|
* Это ситуация, когда два (или более) объекта ссылаются друг на друга сильными ссылками.
|
||||||
|
* Из-за этого ни один из объектов не будет освобождён первым, поэтому получаем циклическую зависимость.
|
||||||
|
|
||||||
|
|
||||||
|
## Чем различаются 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
|
||||||
|
* приложение в фоне без какого-либо выполнения
|
||||||
|
|
||||||
|
|
||||||
|
## Зачем нужны тесты?
|
||||||
|
|
||||||
|
Позволяют контролировать качество разрабатываемого ПО
|
||||||
|
и как минимум гарантировать прохождение имеющихся тестов.
|
||||||
|
Покрывать тестами в первую очередь нужно ключевую возможность,
|
||||||
|
предоставляемую приложением, например, заказ такси в приложении заказа такси.
|
||||||
|
|
||||||
|
Методологии?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
39
общие.md
39
общие.md
@@ -1,39 +0,0 @@
|
|||||||
# Общие
|
|
||||||
|
|
||||||
|
|
||||||
## Жизненный цикл разработки системы / System development lifecycle (SDLC)
|
|
||||||
|
|
||||||
Фазы:
|
|
||||||
|
|
||||||
* планирование системы
|
|
||||||
* анализ системы
|
|
||||||
* дизайн системы
|
|
||||||
* разработка, внедрение, развёртывание
|
|
||||||
* опытная эксплуатация и интеграция
|
|
||||||
* поддержка системы
|
|
||||||
|
|
||||||
|
|
||||||
## Методологии разработки
|
|
||||||
|
|
||||||
* Водопад / Waterfall
|
|
||||||
* SCRUM
|
|
||||||
|
|
||||||
|
|
||||||
## Что такое ООП и какие его основные принципы?
|
|
||||||
|
|
||||||
ООП - это объектно ориентированное программирование.
|
|
||||||
Программа представлена в виде совокупности объектов,
|
|
||||||
каждый из которых является экземпляром класса.
|
|
||||||
|
|
||||||
* Наследование - это возможность использовать функциональность родительского класса в дочернем
|
|
||||||
* Инкапсуляция - это сокрытие деталей реализации
|
|
||||||
* Полиморфизм - это способность функции работать с данными разных типов
|
|
||||||
|
|
||||||
|
|
||||||
## Шаблоны проектирования
|
|
||||||
|
|
||||||
Шаблоны проектирования представляют собой архитектурные решения для некоторых
|
|
||||||
часто появляющихся задач.
|
|
||||||
Существуют основные, структурные, поведенческие и пораждающие шаблоны.
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user