Изменения от Главреда ГитЖС | Changes of GitJS Glavred

This commit is contained in:
Главред | Glavred
2021-02-28 14:11:05 +03:00
parent 28fe2def8b
commit d677ace797
3 changed files with 201 additions and 40 deletions

2
0000
View File

@@ -2,4 +2,4 @@ BO iOS
0.1.0
https://git.opengamestudio.org/kornerr/BOnPOCbI-OTBETbI-iOS
/общие.md
/кратко.md

200
кратко.md Normal file
View 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
* приложение в фоне без какого-либо выполнения
## Зачем нужны тесты?
Позволяют контролировать качество разрабатываемого ПО
и как минимум гарантировать прохождение имеющихся тестов.
Покрывать тестами в первую очередь нужно ключевую возможность,
предоставляемую приложением, например, заказ такси в приложении заказа такси.
Методологии?

View File

@@ -1,39 +0,0 @@
# Общие
## Жизненный цикл разработки системы / System development lifecycle (SDLC)
Фазы:
* планирование системы
* анализ системы
* дизайн системы
* разработка, внедрение, развёртывание
* опытная эксплуатация и интеграция
* поддержка системы
## Методологии разработки
* Водопад / Waterfall
* SCRUM
## Что такое ООП и какие его основные принципы?
ООП - это объектно ориентированное программирование.
Программа представлена в виде совокупности объектов,
каждый из которых является экземпляром класса.
* Наследование - это возможность использовать функциональность родительского класса в дочернем
* Инкапсуляция - это сокрытие деталей реализации
* Полиморфизм - это способность функции работать с данными разных типов
## Шаблоны проектирования
Шаблоны проектирования представляют собой архитектурные решения для некоторых
часто появляющихся задач.
Существуют основные, структурные, поведенческие и пораждающие шаблоны.