Загрузка данных


S - single responsability (должна быть одна зона ответственности)
O - open/closed существующий рабочий код должен быть закрыт к редактированию и открыт к модификации. Если функция сейчас работает и где-то используется и мы поменяем ее рабочую логику, то везде где она используется всё сломается
L - барбары лисков. Относледованный класс должен быть способен полностью заменить его родителя, то есть все методы и поля должны остаться в исходном виде
I - разделение интерфейсов. если классу нужна лишь часть методов и полей существующего интерфейса, то нужно создать новый интерфейс поменьше, в котором будут как раз только нужные методы и поля
D - dependency inversion - Высокоуровневая бизнес логика не должна зависеть от конкретной реализации, а должна зависеть от абстракций. Например есть стор, в нем должен быть метод получения юзеров, и если следовать этому принципу, то в нем нельзя писать прямо fetch, прописывать url, заголовки какие-то. А нужно создать слой репозитория, в котором как раз будут эти fetch методы находится, а в сторе это будет просто репозиторий.метод()

ООП - подход, при котором приложение моделируется через объекты, эти объекты описаны классами:
1. Инкапсуляция - скрываем внутреннюю реализация, наружу отдаем понятные методы, то есть у них описано что они принимают, что возвращают, например геттеры, сеттеры какие-нибудь
2. Абстракция - скрываем сложные детали реализации, потому что для разработки важно знать только абстрактно что делает тот или иной метод, не важно как это под капотом устроено
3. Наследование - класс может перенять от другого его поведение, то есть поля и методы
4. Полиморфизм - разные реализации можно использовать через один общий контракт. Например есть интерфейс, у него метод getUsers, этот интерфейс по разному реализуют 2 класса, и мы делаем переменную с типом того интерфейса, и можем этой переменной присвоить экземпляры любого из этих 2 классов, потому что у них обоих есть этот метод, несмотря на то, что реализуют они его по разному
Уязвимости:
	1. xss - кросс сайт скриптинг, когда пользовательский ввод попадает в html/dom таким образом, что браузер начинает воспринимать его как исполняемый код. К нам недавно приходили ИБ как раз по этой уязвимости, у нас микрофронтенд принимал сообщения от хоста, и можно было передать так, что они встраивались в dom как html элементы
	2. csrf - это когда злоумышленник заставляет браузер авторизованного пользователя выполнить запрос с другого сайта. Для защиты нужно хранить куки с SameSite=Lax и дополнительно можно использовать csrf токен
	3. clickjacking - помещают наше приложение в свой iframe, пользователь думает что пользуется нашим приложением, а на самом деле вводит свои данные, которые получит злоумышленник. Для защиты нужно в CSP задать frame-ancestors (адреса, на которых разрешенно встраивать это приложение в iframe) и это задается в nginx или бэкенде
	4. Зависимости - пакеты которые импортируются выполняются в коде нашего приложение, если туда написали вредоносный код, то все, нас взломали, поэтому важно следить чтобы использовались только проверенные зависимости актуальных версий
REST - архитектурный стиль построения API. Данные - это ресурсы, у каждого ресурса есть свой url, http методы описывают операции над этими данными. Обычно get - получить, post - создать, put - заменит, patch - изменить, delete - удалить.
Ответы на запросы содержать статусы 100 - информативные, 200 - успешние, 300 - редирект, 400 - ошибки клиента, 500 - ошибки сервера.
Get - кешируется. Get, PUT и DELETE идемпотентны 

У стрелочной функции нет своего контекста this, при объявлении она берет вышестоящий контекст, его нельзя изменить. Нет параметра arguments и нельзя использовать в качестве конструктора в классе

call - вызывает функцию с переданным контекстом, apply - возвращает новую функцию, параметры передаются массивом, bind - озвращает новую функцию, параметры передаются через запятую

typescript минусы - дольше разработка, иллюзия того, что раз не подсвечены ошибки, значит приложение будет выполняться без ошибок, assertion и any дают иллюзию типизации, стоит понимать что по итогу код преобразуется в чистый js, в котором на самом деле типизации нет

http запрос: адрес, метод, версия протокола, заголовки и у некоторых - body. 
http 2.0: передаем данные бинарно вместо текста, несколько запросов в рамках одного tcp соединения, сжатие заголовков

layout (размеры и координаты) - paint (раскрашивается, в том числе картинки) - composite (слои собираются в итоговый кадр и применяются transform, opacity. выполняется графическим процессором)