Разное Flashcards

1
Q

WebSocket это

A

Протокол WebSocket. обеспечивает возможность обмена данными между браузером и сервером через постоянное соединение (В отличие от http в котором отправили запрос получили ответ и связь оборвалась)

Клиент и сервер постоянно обмениваются данными

Данные передаются по нему в обоих направлениях в виде «пакетов», без разрыва соединения и дополнительных HTTP-запросов.
WebSocket особенно хорош для сервисов, которые нуждаются в постоянном обмене данными, например онлайн игры, торговые площадки, работающие в реальном времени, и т.д.

let socket = new WebSocket(“ws://javascript.info”);

Когда new WebSocket(url) создан, он тут же сам начинает устанавливать соединение.

Браузер, при помощи специальных заголовков, спрашивает сервер: «Ты поддерживаешь Websocket?» и если сервер отвечает «да», они начинают работать по протоколу WebSocket, который уже не является HTTP.

Если сервер согласен переключиться на WebSocket, то он должен отправить в ответ код 101.

let socket = new WebSocket(“wss://javascript.info/article/websocket/demo/hello”);

socket.onopen = function(e) {
alert(“[open] Соединение установлено”);
alert(“Отправляем данные на сервер”);
socket.send(“Меня зовут Джон”);
};

socket.onmessage = function(event) {
alert([message] Данные получены с сервера: ${event.data});
};

socket.onclose = function(event) {
if (event.wasClean) {
alert([close] Соединение закрыто чисто, код=${event.code} причина=${event.reason});
} else {
// например, сервер убил процесс или сеть недоступна
// обычно в этом случае event.code 1006
alert(‘[close] Соединение прервано’);
}
};

socket.onerror = function(error) {
alert([error]);
};

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

CORS

A

Это механизм на основе HTTP -заголовков, который позволяет серверу указывать любые источники (домен, схему или порт), отличные от его собственного, из которых браузер должен разрешить загрузку ресурсов.

Access-control-allow-origin заголовок header. Если источника нету в заголовке будет ошибка CORS

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Паттерны программирования

Паттерн ‘команда’ дописать

A

Паттерн «Модуль»

Модуль — это самостоятельный фрагмент кода, который можно изменять, не затрагивая другой код проекта. Модули, кроме того, позволяют избегать такого явления, как загрязнение областей видимости, благодаря тому, что они создают отдельные области видимости для объявляемых в них переменных. Модули ES6 хранятся в файлах. Один файл может содержать лишь один модуль.

Паттерн «Синглтон»

Паттерн «Синглтон» или «Одиночка» (Singleton) представляет собой объект, который может существовать лишь в единственном экземпляре. В рамках применения этого паттерна новый экземпляр некоего класса создаётся в том случае, если он пока не создан. Если же экземпляр класса уже существует, то, при попытке обращения к конструктору, возвращается ссылка на соответствующий объект. Последующие вызовы конструктора всегда будут возвращать тот же самый объект.

Паттерн «Фабрика»

Паттерн «Фабрика» может быть использован в том случае, если нужно создавать различные объекты в зависимости от различных условий.
const factory = new VehicleFactory();
const car = factory.createVehicle({
vehicleType: ‘car’,
doors: 4,
color: ‘silver’,
state: ‘Brand New’
});
const truck= factory.createVehicle({
vehicleType: ‘truck’,
doors: 2,
color: ‘white’,
state: ‘used’
});

Паттерн «Декоратор»
Паттерн «Декоратор» (Decorator) используется для расширения функционала объектов без модификации существующих классов или функций-конструкторов. Этот паттерн можно использовать для добавления к объектам неких возможностей без модификации кода, который ответственен за их создание.
function Car(name) {
this.name = name;
// Значение по умолчанию
this.color = ‘White’;
}
// Создание нового объекта, который планируется декорировать
const tesla= new Car(‘Tesla Model 3’);
// Декорирование объекта - добавление нового функционала
tesla.setColor = function(color) {
this.color = color;
}
tesla.setPrice = function(price) {
this.price = price;
}
tesla.setColor(‘black’);
tesla.setPrice(49000);

Те мы изменяем сам созданный обект, добавляем в него новый функционал

Паттерн ‘команда’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Архитектурна веб приложений

Опробовать все

A

Архитектура - набор модулей или компонентов и взаимодействие этих модулей между собой. В хорошей архитектуре удаление модуля/компонента должно быть как можно более простым и безболезненным.
В любой архитектуре нужно следовать принципам
DRY,KISS,SOLID

  1. Классическая архитектура
    https://images.ctfassets.net/htsjgx8vu9xb/7ySWdS4ax45Kl0tlQRiwoz/c3d86eae5758e61a822c1d210e977113/Screenshot_2024-11-07_at_11.21.39.png
  2. Модульная архитектура
    https://images.ctfassets.net/htsjgx8vu9xb/6Q9lGAsnOBu1DXXk55PPMS/5058b84cb61ea48925f9a44eeaff2916/Screenshot_2024-11-07_at_11.55.55.png

https://images.ctfassets.net/htsjgx8vu9xb/6X4Io6xSCvn8nqHhP1y3nt/6ffcda94d0e9d9886a9cf217f43713c0/Screenshot_2024-11-07_at_11.57.25.png

  1. Atomic design
    https://images.ctfassets.net/htsjgx8vu9xb/329eNotJVsz3tyyCnhscDK/f076a294234b8635912e2a810e8b93f3/Screenshot_2024-11-07_at_11.58.31.png
  2. Featured sliced design
    https://images.ctfassets.net/htsjgx8vu9xb/6klRWEJblypN0HUqwrOoO1/72386c8c74279c9fb9e9185c5eba28b8/Screenshot_2024-11-09_at_17.19.19.png
    shared - ui без бизнес логики
    entities - компановка shared компонентов. уже могут иметь бизнес логику
    featured - какая - либо фича бизнес логики. лайк дизлайк кнопка подписаться и тд
    одна featured = одна функциональность
    widget - самостоятельные блоки которые комбинируют низлежащие слои
    pages - страницы, экраны приложения
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Принципы Solid — Что такое принципы разработки Solid

A

SOLID это абревеатура о 5 принципах разработки. (правила, ограничения, наборе каких-то действий). SOLID про то как сделать модули менее связанными и обособленными друг от друга

1.SINGLE RESPONSOBILITY
Принцип единичной ответственности. Каждый модуль или функция должна решает единственную задачу. Не пишем супер функции которые решают все задачи сразу
Плюсы:
выросла читабельность кода
стало проще вносить изменения в код

  1. OPEN CLOSE
    Принцип открытости/закрытости
    Модули, компоненты, функции должны быть открыты для расширения но закрыты для изменения. Изменять существующий код это плохо по такой причине что он уже протестирован, работает и с ним проблем нету.
    Плюсы:
    Нет необходимости в повторном тестировании
    Меньше вероятность допустить ошибку при изменении кода

3.LISKOV SUBSTITUTION
Принцип подстановки Лисков
Наследуемый класс должен дополнять а не замещать поведение базового класса

4.INTERFACE SEGREGATION
Принцип разделения интерфейса
Программые сущности не должны зависить от методов которые они не используют. (слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы программные сущности маленьких интерфейсов знали только о методах, которые необходимы им в работе)
Плюсы
Более предсказуемая работа
Менее связанный код

5.DEPENDENCY INVERTION
Принцип инверсии зависимости
Модули высокого уровня не должны зависеть от модулей более низкого уровня. Иначе программисту придется менять несколько модулей при проблемах в модуле низкого уровня

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Принцип kiss, dry, YAGNI

A

YAGNI
You Aren’t Gonna Need It / Вам это не понадобится
Если вы занимаетесь рефакторингом метода, класса или файла, не бойтесь удалять лишние методы. Даже если раньше они были полезны – теперь они не нужны.

Don’t Repeat Yourself / Не повторяйтесь
Дублирование кода – пустая трата времени и ресурсов. Вам придется поддерживать одну и ту же логику и тестировать код сразу в двух местах, причем если вы измените код в одном месте, его нужно будет изменить и в другом.

KISS
Keep It Simple, Stupid / Будь проще
Применительно к разработке ПО он значит следующее – не придумывайте к задаче более сложного решения, чем ей требуется.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

HTTP. разница http1 и http2

A

HTTP - это протокол для обмена данными.
HTTP - структура:
Обязательные параметры
HTTP Method: GET, POST, PUT, DELETE - что мы хотим сделать с ресурсом (получить, создать, удалить )
Code: 404 Код состояния является
информацией об ответе сервера
URL: /login

HTTP-HEADER:Несут информацию о http запросе, информацию о браузере или о типе устройства, тип контента
Host: ru.wikipedia.org - куда отправляем запрос

HTTP-body:
в боди отправляются какие-то данные

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

CI / CD — Что это и как работает

A

CI/CD расшифровывается как Continuous Integration и Continuous Delivery aka Deployment — то есть непрерывная интеграция и непрерывная доставка.

Что входит в CI
-линтеры (ESLlint, TSLint , Prettier)
-тесты (Jest)
-сборка приложения (webpack, dotenv). проверка билдится ли приложение без ошибок или нет

Перед каждым git коммитов запускаем эти скрипты

Что входит в CD
Автоматический деплоимент и развертывание новых коммитов на сервер

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое middleware

A

MIddlevare - это кокое-то промежуточное звено(промежуточный код), между запросом и функцией, которая должна обработать этот запрос. Этих middlevare может быть сколько угодно.
Пример middleware - middleware для проверки authorization, проверка роли пользователя
Затем запрос доходит до функции обрабатывается и возвращается обратно
https://images.ctfassets.net/htsjgx8vu9xb/2kscZqTNG23F5EOSmRGLUJ/b084b6d224116dfcd01d9a47e58e2512/Screenshot_2024-11-07_at_18.15.01.png

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Метологиям Scrum / Agile / Kanban / Waterfall

A

В Agile можно выделить Scrum и Kanban подход

Agile принципы:
- Конечная цель работы в любой момент может измениться, и это нормально.
- В результате каждого небольшого цикла работы должен получаться готовый продукт, пусть и без некоторых функций
- Новые требования к продукту обязательно должны быть учтены и добавлены в следующих рабочих циклах
- Сроки проекта должны быть гибкими, с запасом на задержки и изменения
- Руководитель должен на протяжении всего цикла принимать деятельное участие в работе команды, а не приходить в начале с требованиями и в конце с ревизией.

Scrum - выполнение проекта разбивается на спринты и в окончании спринта (2-4 недели) получается обновленный проект с обновленной логикой. После выполнения спринта задачи которые не успели и баги отправляются в беглог, смотрят что успели сделать что нет. Общаются с заказчиком и начинают новый спринт.

Kanban - задачи выполняются без спринтов. Таски распределяются между колегами. Все видят процесс выполнения и стадию в которой находится таска.

waterfall - Это наверное про то как в максимально короткий период написать mvp. тестирование переписка старого функционала и его улучшение уходят на задний план

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

ООП

A

ООП
Построено на 3 концепциях. Инкопсуляция, полиморфизм, наследование

Инкапсуляция - сокрытие реализации методов или свойств класса. Если какие-либо методы или свойства класса не должны будут вызываться в созданном методе используем делаем метод или свойство класса private

Наследование - концепция, согласно которой одни классы, называемые родительскими, могут лежать в основе других — дочерних. При этом, дочерние классы перенимают свойства и методы своего родителя.
class Clindren extends Parents {
}

Полиморфизм - переопределение родительских методов в дочерних классах. В результате получаются классы с разной реализацией методов. Те разная логика методов в наследуемых классах

Еще есть композиция и агрегация

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Rest API — Что это

A

REST API - набор правил сообщающий как нужно общаться клиенту с сервером. REST API про семантику, как стоит общаться клиенту с сервером.

API- (aplication programming interface) - интерфейс как стоит общаться с программой

  1. Модель взаимодействия REAST-api это клиент сервер
  2. Каждый раз клиент и сервер общаются как в первый раз. Клиент должен отправить всю информацию , необходимую для выполнения запроса

(3. Серверная система может быть многоуровневой. ТЕ на сервере могут быть дополнительные сервисы, микросервисы)

  1. Единообразный унифицированный интерфейс

для каждой crud операции мы используем правильный http метод(get,post,delete,put)

  1. Может содержать Кеширование
    Может быть осуществленно путем проставления http заголовков
  2. Может быть Версионирование
    Сохранение совместимости ендпоинтов с помощью версирования
    https://images.ctfassets.net/htsjgx8vu9xb/xSfbsmxlbKPGTci75SCGJ/189b7db429a6b00face5a56e4e33c1c8/Screenshot_2024-11-07_at_16.48.53.png
  3. В идеале есть Документация
    документация апи, что ожидается на входе и на выходе. какие хедеры ожидаются
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

SOAP (ПОЩУПАТЬ ЧТО ТАКОЕ)

A

Simple Object Access Protocol

SOAP - протокол обмена структурируемыми сообщениями

Формат данных в soap - XML(SOAP-XML если конкретнее)

есть язык wsdl, и с помощью его описывают эти soap сервисы
https://images.ctfassets.net/htsjgx8vu9xb/3V7LbgiI9uT21gZOiGir8O/0d75f383101f23155a0d6a1275280529/Screenshot_2024-11-07_at_16.55.43.png

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

GRAPHQL

A

GRAPHQL это язык запросов.
С помощью graphql клиент сам выбирает какие даные ему нужны в этом endpoint, все данные не подтягиваются.

В GRAPHQL есть два вида запроса - QUERY(аналог GET), MUTATION(аналог POST).
еще есть subscription - подписка на изменение данных

ПРЕИМУЩЕСТВА -
частичная самодокументация
клиент запрашивает тольно нужный обем данных

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Виды баз данных

A

Реляционные базы данных
Например PostgreSQL. Суть реляционных баз в хранении данных в связанных таблицах.

Документо-ориентированные базы данных
Если вам нужно хранить много файлов/документов и вы не хотите задумываться (до разумных пределов, разумеется) о структуре хранения, иерархии, связях, вам может подойти одна из документо-ориентированных баз данных
Наиболее популярной документо-ориентированной базой данных на текущий момент является MongoDB.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Cookies, флаги

A

Данные которые отправляются между клиентом и сервером.
Обычно применяют для хранения токена, сбора и хранения информации о пользователе

Флаги:
Secure - Если этот флаг установлен, cookie не будет передаваться по HTTP.
HttpOnly - javascript на стороне клиента не сможет получить доступ к cookie.
Domain - Содержит домен или поддомен, на который может быть отправлен файл cookie.
Expires - Используется для определения срока действия cookie.

17
Q

event.target vs event.currentTarget

A

currentTarget - это элемент на который мы прекрепили этот слушатель событий, target - это элемент в котором произошло само событие

18
Q

critical rendering path в браузере

A
  1. Построение dom дерева
    Браузер парсит страницу и формирует dom.
    html что он может быть исполнен по частям. Документ не должен быть загружен полностью для того, чтобы контент начал появляться на странице. CSS и JavaScript, могут блокировать отрисовку страницы.
  2. Построение CSSOM-дерева.
    Это объект, представляющий стили, связанные с DOM. CSS считается «блокирующим обработку ресурсом». Это значит, что Render-дерево не может быть построено без полного разбора CSS .CSS также может являться «блокирующим скрипты», потому что JavaScript-файлы должны дождаться построения CSSOM, прежде чем начать исполняться.

3.JavaScript является блокирующим ресурсом для парсера html.Когда парсер доходит до тега

 он останавливается, забирает файл и запускает его. Поэтому мы обязательно должны поместить его после html разметки. JavaScript можно загружать асинхронно, указав атрибут async, для того, чтобы избежать блокировки парсера.
  1. Создание Render-дерева
    Render-дерево — это совокупность DOM и CSSOM. Это дерево, которое даёт представление о том, что в конечном итоге будет отображено на странице.
  2. Отрисовка
    Наконец, на шаге отрисовки, видимый контент страницы может быть преобразован в пиксели, чтобы появиться на экране.
19
Q

data атрибуты в html

A

это кастомные атрибуты в html тегах. Можно записывать как примитивы так и json.
1. Можно использовать для стилизации элементов:

<div></div>

css:
[data-size=”large”] {
padding: 2rem;
font-size: 125%;
}
2. Для хранения какой-либо информации и ее передачи на сервер.

20
Q

использование trottle and debounce. примеры использования и на какой технологии они построены

A

debounce используется когда мы хотим отложить выполнение какой либо функции на время. например используется для инпута.
trottle используется для выполнения функции раз в определенное время. можем использовать например в event listener

21
Q

webpack module fedaration

A

Module Federation
Это плагин, изначально созданный для webpack и позволяет разделять код на несколько независимых приложений. Это полезно когда у нас есть большое приложение с большим кол-вом зависимостей. И мы хотим разделить его допустим на две команды чтобы разрабатывать код по отдельности.
Можно экспортировать и импортировать зависимости из разных модулей.

22
Q

Виды атак на сайт и их реализация

A
  1. XSS атака (Cross‑site scripting)
    XSS атаки позволяют внедрить вредоносный скрипт.
    Основные виды:
    - Оставить комментарий с тегом скрипт на форуме, в итоге этот скрипт будет выполняться у всех пользователей и позволит украсть их куки.
    - Если ссылка начинается на javascript: то все будет выполнено как script. может быть получено в письме или же на форуме
    <a>click to trigger javascript</a>
    - XSS с картинками. Браузер попробует подгрузить картинку, если картинка не загрузится выполнится onerror скрипт. оставить картинку на форуме или отправить картинку в email.
    <img onerror={()=>} src=”x”>test</a>
    - <iframe src="javascript:…"> — то же самое, что и с гиперссылкой, только ничего не надо кликать, сработает при прогрузке.
    В строке поиска нужно чекать query на санитизация — преобразование определенных символов пользовательской строки в другую кодировку. Например %20,‘ — ' в конце input может закрываться “ и выполняться скрипт

Как защитится ? убрать возможные уязвимости, хранить креды в cookies
с флагами domains со списком доступнух для отправки доменов, и secure для не передачи cookies по http протоколу
Не использовать welcomeUserElement.innerHTML =
а использовать
welcomeUserElement.innerText =

23
Q

Архитектура браузера

A

user interface - часть браузера с которой мы взаимодействуем, какаето верхняя или боковая панель
browser engine - соединительная часть между пользовательским интерфейсом и механизмом рендеринга
browser rendering - тут и получаем страницы в браузере, с которыми можем взаимодействовать
Архитектура движка рендера - загружаются и парсятся html и css отдельно, группируются вместе, отображаются

Что решает движек js
-работа с кучей и стек вызова

Стадии отрисовки в браузере:
- Строится dom
- Строится cssom
- Render tree
- Style calculation - проходимся по селекторам и отпределяет какие стили и к чему необходимо применить
- Layout - делается чертеж страницы, какой элемент куда необходимо применить
- Paint - Рисует из чертежа пиксели
- Composition - работа со слоями (что это хз)

24
Q

кастомные html теги

A
  • Имя кастомного тега должно иметь дефис где-то внутри названия (ни в начале, ни в конце).
  • Кастомные теги не могут быть самозакрывающимися, как например img

С точки зрения семантики, стилей и функционала кастомные html-элементы равноценны тегу span целиком и полностью.
Пример:

<centered-content>
some data
</centered-content>

Еще можем расширять существующий тег кастомным
<button>…</button>

Также можем использовать api для регистрации кастомного тега:

class HTMLMyElement extends HTMLElement {
constructor() {
super()
}

/**
* Срабатывает всякий раз, когда элемент попадает в документ (включая инициализацию).
*/
connectedCallback() { }

/**
* Срабатывает всякий раз, когда элемент удаляется из документа.
*/
disconnectedCallback() { }

static get observedAttributes() {
return [/* массив имён атрибутов */]
}

/**
* Срабатывает всякий раз при изменении одного из атрибутов перечисленных в observedAttributes.
*/
attributeChangedCallback(name, oldValue, newValue) { }
}

/** Регистрация элемента. Без этого ничего толком работать не будет. */
customElements.define(‘my-element’, HTMLMyElement)

25
Q

Что происходит когда пользователь пишет путь в строке браузера

A
  1. Браузер по имени сайта ищет в кеше адрес сервера .
  2. Если адрес сервера в кеше не найден браузер обращается к dns и ищет адрес сервера там.
  3. Браузер устанавливает соединение с сервером через протокол TCP. Это система 3-х рукопожатий.
  4. Браузер отправляет HTTP-запрос, чтобы получить контент c сервера
  5. Сервер обрабатывает запрос и отправляет ответ
  6. Браузер получает данные и происходит critical rendering path
26
Q

async и deffer. тег script

A

async и deffer нужны для асинхронной загрузки скрипта.
- defer не только говорит браузеру «не блокировать рендеринг», он также обеспечивает правильную последовательность выполнения скриптов.
- async. у нас есть несколько скриптов с async, они могут выполняться в любом порядке. То, что первое загрузится – запустится в первую очередь.

27
Q

webpack и vite. в чем разница и что это

A

Webpack и vite это сборщик модулей. Он анализирует модули приложения, создает граф зависимостей, затем собирает модули в правильном порядке в один бандл (bundle)

  1. vite использует esbuild для сборки модулей. написан на go и благодаря этому собирает зависимости в 10 раз быстрее чем webpack
  2. vite обрабатывает исходный код с помощью ESM (нативных модулей). Благодаря этому загружаются только те модули которые используются на этой странице.
28
Q

npm и npx

A

npx подходит когда мы не хотим устанавливать зависимость в глобал, и хотим попробовать какой-то пакет один раз. или это пакет который мы выполняем раз в год
например npx create-react-app

29
Q

interception observer

A

почитать

30
Q
A