Содержание статьи...
Заголовок статьи
Автор: Иван Иванов
Дата публикации: 2023-10-30
Назовите 3 любых метода функции
Функция-объект. Методы и свойства есть у объектов. В целом это говорит, что мы можем к методу функции обращаться через точку, как и к свойству объекта.
const person = { // объект
firstname: ‘James’,
lastname: ‘Murray’,
showFullName: function(){
return this.firstname + ‘ ‘ + this.lastname;
}
}
function getSkills(s1, s2){ // функция, которую хотим связать с объектом
console.log(this.showFullName() +’ has skills: ‘+s1+’, ‘+s2);
}
let personSkills = getSkills.bind(person);
//Вызываем метод bind у копии нашей функции, где аргумент будет объект. Теперь personSkills - новая функция, которая при вызове устанавливает в качестве контекста выполнения this предоставленное значение.
personSkills(‘HTML/CSS’, ‘JavaScript’);
// Вызываем новую функцию, теперь в функции getSkills, this - объект person
//или 2-м способом, указав параметры вызова функции сразу
let personSkills = getSkills.bind(person, ‘HTML/CSS’, ‘JavaScript’);
personSkills();
// Можно так же связать другой this c копией функции:
const newObj = { firstname: ‘Tim’,
lastname: ‘Tock’,
showFullName: function(){
return this.firstname + ‘ ‘ + this.lastname;
}}
let personSkills2 = getSkills.bind(newObj );
// создали новую функцию и передали другой объект
personSkills2 (‘React\Redux’, ‘TypeScript’);
// this присваивается один раз, по этому мы не можем переприсваивать дальше с помощью bind его. Это касается одной и той же функции, например, personSkills . Мы не можем вот так по цепочке переприсвоить -
let personSkills = getSkills.bind(person).bind(person2).bind(person3)
getSkills.call(person, ‘PHP’, ‘Python’); //James Murray has skills: PHP, Python
// мы вызвали у нашей функции метод call, передали объект-person в качестве this и два аргумента, которые принимает наша функция.
В отличие от bind(), call() не копирует функцию. Он позволяет передавать объект в качестве this и любые аргументы, а затем немедленно вызывает функцию.
Что такое рекурсия?
Рекурсия - функция, которая вызывает внутри себя себя же. Рекурсия должна иметь внутри себя условия- ограничения, иначе вызов функции будет бесконечен.
чем отличает == от ===?
Оператор == сравнивает на равенство, а вот === — на идентичность.
Тройное равенство не приводит два значения к одному типу.
false == 0 - true /псевдоложь (‘‘,0,false,[])
true == 1 - true
false ===0 - false / не идентичны типы
true == 1 - false
При сравнении строки с числом, JS попытается строку преобразовать в число - ‘01’ == 1 - true (1==1)
Boolean - проверяет на булевое знаяение:
let a = 0; - 0=false
alert( Boolean(a) ); // false
let b = “0”; - “0”-непустая строка = true
alert( Boolean(b) ); // true
alert(a == b); // true! - JS попытается преобразовать строку в число, а значит 0==0 - true. При строгом равенстве будет false, тк разные типы данных.
null == undefined - true
null === undefined - false
При использовании математических операторов и других операторов сравнения < > <= >=: значения null/undefined преобразуются к числам: null становится 0, а undefined – NaN.
Зачем нужен и у кого он есть метод addEventListener?
addEventListener позволяет повесить обработчик событий на ДОМ-элемент. Событие наступает тогда, когда происходит клик мыши по элементу, нажимает на определенную клавишу, наводит на элемент. Обработчик - функция, которая вызовется в момент события.
Есть метод onClick, он позволяет повесить обработчик события, если мы попытаемся повесить второй обработчик с таким же событием на элемент, то у элемента теперь будет более новый обработчик события. Таким образом, onClick позволяет повесить только один обработчик на событие.
Метод addEventListener позволяет добавлять несколько обработчиков на одно событие одного элемента, например:
function handler1() {
alert(‘Спасибо!’);
};
function handler2() {
alert(‘Спасибо ещё раз!’);
}
elem.onclick = () => alert(“Привет”);
elem.addEventListener(“click”, handler1); // Спасибо!
elem.addEventListener(“click”, handler2); // Спасибо ещё раз!
Очищать обработчики событий важно, потому что каждый обработчик занимает место в памяти и выполняется всякий раз, когда срабатывает событие. Если не убирать неиспользуемые обработчики событий, то можно столкнуться с неожиданным поведением. Например, один из старых обработчиков будет мешать всплытию события наверх, и другой обработчик не будет работать.
👇
Хорошим тоном считается убирать обработчик сразу же, как он перестал быть нужен.
Всегда сохраняйте функцию-обработчик в переменную чтобы позже убрать обработчик. !!!!!
const handleMouseClick = (event) =>{
//обязательно в переменную или если это функция - Function Declaration, то в removeEventListener записываем имя функции, как и переменную
console.log(‘Вы нажали на элемент:’, event.target)
}
window.addEventListener(‘click’, handleMouseClick, true)
// Ничего не передаем в опциях в третьем аргументе
window.removeEventListener(‘click’, handleMouseClick)
Что такое NodeJS?
Node.js — не отдельный язык программирования, а платформа для использования JavaScript на стороне сервера для веб-страниц и веб-приложений, а также для программ командной строки.
С помощью Node.js реализуется парадигма «JavaScript для всего». Она предполагает использование одного языка программирования для разработки веб-приложений вместо применения разных языков для работы над фронтендом и бэкендом.
В Node.js используется асинхронное программирование, те позволяет продолжить обработку других задач, не дожидаясь завершения передачи данных.
Имеет пакетный менеджер NPM, который содержит множество библиотек.
Что такое замовызывающаяся функция?
Обычно она не имеет названия:
(просто засунули в переменную, чтобы получить результат из return)
const data = (function(){
let a = 100
let b = 90
})()
И нужна, чтобы ограничить области видимости. И теперь переменные а и b в глобальной области видимости недоступны, чтобы их поменять.
Ну и если хотим выкинуть наружу из функции какие-то данные, то return.
Расшифруйте аббревиатуру БЭМ
Это методология, разработал Яндекс.
БЭМ (Блок, Элемент, Модификатор) — компонентный подход к веб-разработке. Принцип - разделение интерфейса на независимые блоки.
Он позволяет легко и быстро разрабатывать интерфейсы любой сложности и повторно использовать существующий код, избегая «Copy-Paste».
Блок - Функционально независимый компонент страницы, который может быть повторно использован. В HTML блоки представлены атрибутом class.
Название блока характеризует смысл («что это?» — «меню»: menu, «кнопка»: button)
Элемент - Составная часть блока, которая не может использоваться в отрыве от него.
Название элемента характеризует смысл («что это?» — «пункт»: item, «текст»: text)
Элемент — всегда часть блока, а не другого элемента. Это означает, что в названии элементов нельзя прописывать иерархию вида block__elem1__elem2. Только block__elem1 и block__elem2
Модификатор - Cущность, определяющая внешний вид, состояние или поведение блока либо элемента.
Название модификатора характеризует внешний вид («какой размер?», «какая тема?»
состояние («чем отличается от прочих?» — «отключен» и поведение («как ведет себя?», «как взаимодействует с пользователем?» — «направление»
Согласно принципу REST API задокументируй еndPoint , удаляющий конкретный репозиторий конкретного пользователя
Мы должны знать куда слать - это URL,
какой тип запроса - type,
что в ответе будет - response: статус запроса - status
Дополнительно:
POST(создать новый репозиторий)-‘<базовый>/users/:id/repozitories/'
Сначала базовый url, потом список юзеров, потом находим определенного юзера по id, затем заходим в список его репозиториев и уже создаем новый репозиторий</базовый>
GET(получить конкретный репозиторий) - ‘<базовый>/users/:id/repozitories/rep-:id'</базовый>
Маршрут (Route - роут) — это «имя», которое отсылает работу API к определенным эндпоинтам. Если упростить, то можно сказать, что маршрут - это URL к которому можно обратиться разными HTTP методами. Маршрут может иметь несколько эндпоинтов.
Эндпоинт (Endpoint - конечная точка) — это само обращение к маршруту отдельным HTTP методом. Эндпоинт выполняют конкретную задачу, принимают параметры и возвращают данные Клиенту.
http://example.com/wp-json/wp/v2/posts/123:
Здесь wp/v2/posts/123 — это маршрут, а /wp-json — это базовый путь самого REST API.
Этот маршрут имеет 3 эндпоинта:
GET — запускает метод get_item() и возвращает данные поста Клиенту.
PUT|PATCH|POST — запускает метод update_item(), обновляет данные и возвращает их Клиенту.
DELETE — запускает метод delete_item(), удаляет пост и возвращает только что удаленные данные Клиенту.
Найти отличие между HTTP1 и HTTP2
Семантика осталась прежней, все основные понятия остались такими же: заголовки, методы, url-адрес.
Изменяет лишь способ упаковки данных и способ передачи запроса и ответа.
1.Способ упаковки:
https://habr.com/ru/articles/739166/
В чем отличия HTTP1, HTTP2 , HTTP3
Что такое DNS и как он работает?
DNS (Domain name system) — это система, которая позволяет писать человекопонятным языком названия сайтов(incubator.ru - доменное имя) в поисковую строку браузера, а браузеру находить нужный сайт и отображать его.
DNS занимается тем, что преобразует названия сайтов — доменные имена(incubator.ru), которые вводят в поисковую строку браузера в IP-адреса конкретных серверов. Если бы не было DNS, вам бы пришлось запоминать IP-адреса нужных вам ресурсов и вводить их вручную в браузер.
Сведения о доменах(incubator.ru) и их связи с IP-адресами находятся в распределенной базе данных, которая хранится на DNS-серверах, образующих иерархию.
Когда вы вводите запрос в поисковую строку браузера, например, 1cloud.ru — браузер сначала проверит наличие DNS-записи на вашем локальном компьютере в файле hosts, если там нет нужного адреса, запрос направляется дальше — на локальный DNS-сервер интернет-провайдера пользователя, если и там записи нет, запрос уходит выше на сервера географических зон.
Как только нужная DNS-запись найдена, браузер получает IP-адрес, на который посылает запрос. В ответ приходит web-страница.
Получается, что DNS-запрос поднимается от локальных хранилищ данных до самого верхнего уровня, это быстрее, чем делать запрос сначала к корневому DNS-серверу и идти вниз.
Локальный DNS-сервер(локальное хранилище) опрашивает DNS-сервера второго, верхнего и корневого уровней, а не браузер! Он находит сведения о домене, возвращает их браузеру и записывает данные в кеш на 24 часа. В итоге при следующем обращении к этому сайту, он просто вернет данные из кеша и сайт загрузится быстрее.
Что такое CDN (Content Delivery Network)?
это группа особым образом настроенных серверов, расположенных в разных геоточках. Серверы выступают в качестве узлов, которые позволяют быстро загружать контент ближайшим пользователям.
Таким образом, разветвленная сеть CDN с расположенными неподалеку серверами позволяет значительно сократить время загрузки удаленных сайтов.
То есть, когда на московский сайт заходит посетитель из Сахалина или Хабаровска, то контент будет загружаться не из Москвы, а из Владивостока. Естественно, это положительно скажется на скорости загрузки сайта.
CDN может отдавать любой статический контент: картинки, видео, JS-скрипты и многое другое. Кэшированием контента управляет администратор. Он может настроить принудительную загрузку контента на CDN-сервера, разбить контент на категории и назначить приоритетность кэширования, задать время жизни кэша и многое другое.
Итог: делаются копии загрузившеегося контента по всем таким серверам и уже с ближайшего сервера отправляется контент до пользователя.
Что такое Event Loop?
Это бесконечный цикл, в котором движок JavaScript ожидает задачи, исполняет их и снова ожидает появления новых.
Общий алгоритм движка:
-Пока есть задачи: выполнить их, начиная с самой старой.
-Бездействовать до появления новой задачи, а затем перейти к пункту 1.
Задачи поступают на выполнение – движок выполняет их – затем ожидает новые задачи (во время ожидания практически не нагружая процессор компьютера).
Может так случиться, что задача поступает, когда движок занят чем-то другим, тогда она ставится в очередь.
Очередь, которую формируют такие задачи, называют «очередью макрозадач» .
Макрозадачи - setTimeout, eventListener и т.д.
Например, когда движок занят выполнением скрипта-
, пользователь может передвинуть мышь, тем самым вызвав появление события mousemove, или может истечь таймер, установленный setTimeout, и т.п. Эти задачи формируют очередь.
Задачи из очереди исполняются по правилу «первым пришёл – первым ушёл». Когда браузер заканчивает выполнение скрипта, он обрабатывает событие mousemove, затем выполняет обработчик, заданный setTimeout, и так далее.
Пример, подсветка синтаксиса - трудоемкая задача для движка, особенно, если текста много. Пока он занят выполнением, то он не сможет обрабатывать пользовательские события, связанные с DOM.
Т.е. пользователь нажмет на кнопку, но ничего не произойдет, будет подвисание, тк движок продолжает обрабатывать старую задачу.
Избежать этого поможет setTimeout, таким образом разобьем задачу на несколько простых. Например, задать подсветку для первых сто страниц, а затем запланировать setTimeout с нулевой задержкой для разметки следующих сто страниц. Если произойдет пользовательские событие, то оно встанет в очередь после задачи с первыми сто страницами и выполнится по ее завершению, затем будет выполнятся следующие сто страниц.
Дополнительно: помним, в браузере есть минимальная задержка в 4 миллисекунды при множестве вложенных вызовов setTimeout. Даже если мы указываем задержку 0, на самом деле она будет равна 4 мс (или чуть больше). Поэтому чем раньше мы запланируем выполнение – тем быстрее выполнится код.
Микрозадачи:
Микрозадачи приходят только из кода. Обычно они создаются промисами: выполнение обработчика .then/catch/finally становится микрозадачей. Микрозадачи также используются «под капотом» await, т.к. это форма обработки промиса.
Сразу после каждой макрозадачи движок исполняет все задачи из очереди микрозадач перед тем, как выполнить следующую макрозадачу или отобразить изменения на странице, или сделать что-то ещё.
Все микрозадачи завершаются до обработки каких-либо событий или очереди рендеринга, или перехода к другой макрозадаче.
Например:
setTimeout(() => alert(“timeout”)); - 3 т.к. макрозадача
Promise.resolve()
.then(() => alert(“promise”)); -2 . т.к. здесь .then
alert(“code”); - 1 т.к. синхронный код
Какой здесь будет порядок?
-code появляется первым, т.к. это обычный синхронный вызов.
-promise появляется вторым, потому что .then проходит через очередь микрозадач и выполняется после текущего синхронного кода.
-timeout появляется последним, потому что это макрозадача.
Итого: полный алгоритм
1.Выбрать и исполнить старейшую задачу из очереди мАкрозадач (например, «script»).
Принцип - первый зашел-первый вышел.
Так же есть еще одна очередь помимо макро и микрозадач, это очередь рендера, она состоит из
–requestAnimationFrame
–style
–layot
–paint
–composite
На этих этапах браузер пересчитывает стили, как расположить элементы, их размеры, применение цвета, фона и т.д.
Если сравнивать очередь макрозадач и очередь рендера, то в приоритете будет очередь рендера, например:
очередь макро | очередь рендера
макро2 | рендер 2
макро1 | рендер 1
Если после макро1 собралась очередь из рендера, то они(рендер 1 и рендер 2) выполнятся ПЕРЕД макро2. Если же в момент выполнения очереди рендера присоединится еще один - рендер3, то он уже будет выполнятся после выполнения макро2, НО перед выполнением макро3, если такая появится.
Приоритеты:
1 - микротаски, выполняется вся очередь микротасок перед выполнением макротаски и очереди рендера. Если вовремя выполнения микротасок приходят еще, то они продолжатся выполнятся, пока очередь не опустошится.
2 - очередь рендера, выполняются перед макротасками и после выполнения всей очередь микротасок. Если во время выполнения этой очереди приходят еще новые рендеры, то они откладываются на следующее выполнение перед следующей макротаской.
3 - очередь макротасок.
Важно!!! Если приходит синхронная операция, то она прерывает все очереди и выполнится в Стеке вызова мгновенно, даже если в это время выполнялась очередь микротасок.
Создание промиса - new Promise - та же синхронная операция, а уже обработка промиса, например, .then - это уже ассинхронщина(микротаска)
Такой цикл состоит из:
–Call Stack(стек вызовов), где действует правило “Первый зашел-первый вышел”. Туда попадают синхронные операции.
–Queue(очередь), куда попадают ассинхронные операции, там выполняются. И далее=>
–Callback queue(очередь обратного вызова), куда попадают выполненные ассинхронные операции и ждут свой очереди, пока все синхронные операции не уйдут и Call Stack не очистится, чтобы попасть в Call Stack, отработать и выйти оттуда.
Пример1: здесь рассм-ся с ассинх. операциями
console.log(‘a’) - зашел-вышел
setTimeout(()=>console.log(‘d’)) -попал в Queue
console.log(‘b’) - зашел-вышел
console.log(‘c’) - зашел-вышел
Пример2: здесь синхронные операции
function a(){} - пятый зашел и вышел
function b(){ a() }- четвертый зашел и остался
function c(){ b() }- третий зашел и остался
function d(){ c() } - второй зашел и остался
function e(){ d() } - первый зашел и остался
e()
Call Stack будет таким:
function a() последний зашел-первый вышел
function b()
function c()
function d()
function e() первый зашел-последний вышел =>
Почему? Потому что для выполнения ему необходимо дождаться выполнение функции d() и т.д. для выполнения функции d() необходимо выполнение функции c()
Что такое git?
Git — это система контроля версиями.
Git позволяет разработчикам создавать репозитории, в которых хранятся файлы проекта и история их изменений.
Каждый разработчик может клонировать репозиторий на своем компьютере и работать над проектом независимо. Можно вносить изменения в файлы, добавлять новые файлы, удалять или изменять существующие.
Git имеет возможность ветвления и слияния. Разработчики могут создавать отдельные ветки, чтобы работать над кодом, не затрагивая основную ветку проекта. После завершения работы ветки могут быть объединены с основной веткой, чтобы внести внесенные изменения.
Чем отличается localStorage от sessionStorage?
localStorage и sessionStorage - объекты-хранилища, позволяющие хранить пары ключ/значение в браузере. Они имеют методы, как и другие объекты:
setItem(key, value) – сохранить пару ключ/значение.
getItem(key) – получить данные по ключу key.
removeItem(key) – удалить данные с ключом key.
clear() – удалить всё.
key(index) – получить ключ на заданной позиции.
length – количество элементов в хранилище.
Local Storage - даже после перезапуска браузера (до ручной очистки данных браузера или до установленной даты)
Пример: токен пользователя
Session Storage -сохраняются после обновления страницы, но не после закрытия/открытия вкладки. Существует только в рамках текущей вкладки браузера. Другая вкладка с той же страницей будет иметь другое хранилище.
Пример может быть банковские транзакции, пополнение форм
Чем отличается Function Declaration от Function expression?
Во-первых, синтаксис: как отличить их друг от друга в коде.
Function Declaration: функция объявляется отдельной конструкцией «function…» в основном потоке кода.
Function Expression: функция, созданная внутри другого выражения или синтаксической конструкции. В данном случае функция создаётся в правой части «выражения присваивания» =:
Function Expression(функ.выражение) создаётся, когда выполнение доходит до него, и затем уже может использоваться.
После того, как поток выполнения достигнет правой части выражения присваивания let sum = function… – с этого момента, функция считается созданной и может быть использована (присвоена переменной, вызвана и т.д. ).
Function Declaration может быть вызвана раньше, чем она объявлена.
Другими словами, когда движок JavaScript готовится выполнять скрипт или блок кода, прежде всего он ищет в нём Function Declaration и создаёт все такие функции. Можно считать этот процесс «стадией инициализации».
И только после того, как все объявления Function Declaration будут обработаны, продолжится выполнение.
В результате функции, созданные как Function Declaration, могут быть вызваны раньше своих определений.
Речь идет о “всплытии” (hoisting):
При использовании Function Declaration, объявление функции поднимается вверх текущего контекста выполнения кода.
Это означает, что функцию можно вызывать до того, как она фактически была объявлена в коде.
example();
// Работает, потому что Function Declaration поднимается вверх
function example() {
console.log(“Hello, World!”);
}
В случае Function Expression, переменная example поднимается вверх, но само присваивание (и объявление функции) остается на месте в коде. Поэтому, если вы попытаетесь вызвать функцию до строки с присваиванием, вы получите ошибку.
// Не работает, потому что присваивание (и объявление функции) ещё не произошло
example();
var example = function() {
console.log(“Hello, World!”);
};
typeof NaN
typeof undefined
typeof null
typeof Bigint
typeof []
typeof Function(){}
оператор “нулевого слияния” (??)
typeof NaN = number / сравниваем NaN = NaN только через isNaN(NaN)
typeof undefined = undefined
typeof null = object
typeof Bigint = bigint
typeof [] = object
typeof Function(){} = function
оператор “нулевого слияния” (??), который позволяет выбрать первое из определенных значений (не равных null или undefined).
var myValue = null;
var result = myValue ?? “default”;
console.log(result); // “default”
Методы строк?
.toUpperCase()
.toLowerCase()
.length
str.indexOf(substr, pos) - ищет подстроку substr в строке str, начиная с позиции pos, и возвращает позицию, на которой располагается совпадение, либо -1 при отсутствии совпадений.
str.lastIndexOf(substr, position), который ищет с конца строки к её началу
str.includes(substr, pos) возвращает true, если в строке str есть подстрока substr, либо false, если нет.
str.startsWith(substr) и str.endsWith(substr) проверяют, соответственно, начинается ли и заканчивается ли строка определённой строкой
str.slice(start [, end]) - возвращает часть строки от start до (не включая) end.
.split - на массив
Что такое семантические теги?
Что такое семантические элементы?
Что такое не семантические элементы?
Что такое семантические элементы?
Это теги, которые предназначены для того, чтобы компьютерные программы (поисковые системы, сборщики информации, речевые браузеры и т. д.) понимали, какой тип информации заложен в данных тегах. Проще говоря, это как таблички в супермаркетах, которые указывают, где и какой находится отдел.
<header> <nav> <footer> <aside>
Что такое семантические элементы?
<form>, <table> и <article> – это семантические элементы: они четко определяют свое содержание.
Что такое не семантические элементы?
<div> и <span> являются не семантическими элементами. Они ничего не говорят нам об их содержании.
Теги помогают быстрее обрабатывать код поисковым роботам, вследствие чего у вашего сайта больше шансов попасть на первые страницы Google, Yandex и т.д.
</span></div></article></table></form></aside></footer></nav></header>
В чем разница протоколов HTTP и HTTPS?
И еще - вообще для чего нужен https , если на сайте не требуется вводить какие-то личные данные и тп?
«HTTP, или Hyper Text Transfer Protocol, — это протокол передачи гипертекстовой разметки(HTML), которая используется для передачи данных в интернете».
Протокол или интернет-протокол — это набор процедур или правил, позволяющих электронным устройствам взаимодействовать между собой.
(гипертекстовоя разметка - это HTML(HyperText Markup Language) ), язык гипертекстовой разметки текста. Он нужен, чтобы размещать на веб-странице элементы: текст, картинки, таблицы и видео. HTML как бы выстраивает визуальный фундамент сайта)
Когда мы набрали запрос и нажали ввод, браузер отправил этот запрос на веб-сервер.На веб-сервере хранятся статьи в виде картинок, HTML-документов, файлов с CSS-стилями и JavaScript-файлами. Также на веб-сервере установлено ПО, которое понимает HTTP-протокол.
Веб-сервер принимает запрос, обрабатывает, определяет, какие файлы отправить, и отдает их в ответ. Браузер принимает эти данные, интерпретирует и показывает нам в «человеческом» виде.
Каждое действие в блоге, например, переход по ссылке на статью, — это новый запрос серверу и новый ответ.
HTTPS — это не совсем протокол. Это расширение HTTP-протокола — объединение двух протоколов: HTTP и TLS.
Протокол TLS (Transport Layer Security) — криптографический. Это значит, что они позволяют шифровать данные, в нашем случае те, что передаются между браузером и сервером. Расшифровать эти данные могут только сервер и браузер, для всех остальных это будет набор нечитаемых символов.
Как работает шифрование:
У ресурса/сайта, поддерживающего HTTPS, есть TLS-сертификат, который выдается центром сертификации. Если у ресурса в адресной строке есть зеленый замок, соединение с ним защищено.
Посмотреть информацию о сертификате и его подлинности можно, нажав на значок.
TLS-сертификат — это подтверждение, что ресурс настоящий. Но могут быть исключения: сертификат может быть выдан легитимным центром на фишинговый сайт.
Браузер проверяет данные по своим спискам доверенных центров (список есть в каждом браузере), проверяет совпадение CN с доменным именем, даты выпуска и срока окончания сертификата, отсутствие в CRL, поддерживаемые алгоритмы, наличие издателя в списке доверенных корневых сертификатов и в списке доверенных издателей. В случае проблем на любой из этих проверок сертификат считается невалидным.
Если все хорошо, то браузер считает ресурс безопасным: они выбирают алгоритм шифрования, обмениваются ключом шифрования и потом данными по протоколу HTTP.
Сейчас в браузерах работает HSTS — HTTP Strict Transport Security. Это защитный механизм браузера, который принудительно переводит соединение из HTTP в HTTPS или обрывает HTTP-соединение.
Чаще всего ресурс на HTTP браузер просто не откроет, а выведет предупреждение. Например, в браузере Google Chrome незащищенные ресурсы блокируются еще с 2020 года.
Стандарт задают поисковики и веб-браузеры. Сейчас без зеленого значка у сайта в адресной строке к ресурсу не будет доверия у пользователей, если он вообще откроется в браузере. Поисковики настоятельно рекомендуют переходить на HTTPS. Например, Яндекс открыто сообщает о том, что сайты, не использующие сертификаты, будут ниже в поисковой выдаче.
И еще - вообще для чего нужен https , если на сайте не требуется вводить какие-то личные данные и тп?
Для того, чтобы в response-в ответ от сервера не дополнили какими-то неправильными данными.Например, реклама
Что такое WebSoket?
Это протокол.
Протокол или интернет-протокол — это набор процедур или правил, позволяющих электронным устройствам взаимодействовать между собой.
Какие протоколы бывают :
HTTP, HTTPS
WebSoket, WWS
FTP,«File Transfer Protocol»позволяют пересылать файлы с одного устройства (например, компьютера Mac, Windows или Linux ) на другое.
SMTP, Simple Mail Transfer Protocol простой протокол связи, применяемый с целью пересылки электронных писем с сервера отправителя на сервер получателя.
POP3 Post Office Protocol почтовый протокол, с помощью которого загружаются сообщения на почтовый клиент с удаленного сервера.
Пишется протокол в адресной строке вначале доменного имени.
Зачему нужны разные протоколы? Разные программы взаимодействуют между собой через разные протоколы.
Сервер по запросу отправляет ответ HTTP.
При таком протоколе как бы выглядела переписка:
человек отправляет сообщение оно уходит на сервер, и чтобы получить сообщение другому человеку, ему нужно отправлять так же запрос на сервер, чтобы получить это сообщение.
WebSoket: Реактивно реагирует что происходит на сервере. Сервер тоже отправляет запросы клиенту. У HTTP тоже есть по аналогии, но WebSoket популярнее.
Как это работает?
Клиент создает канал к серверу и по этому каналу могут оба они делают запросы-реквесты друг другу. Например, нам отправляют личное сообщение, сервер это увидел и по каналу мгновенно отправляет его нам.
try catch finally
try - выполняется код
catch - если в процессе выполнения кода возникнет ошибка, то попадем сюда. Здесь мы можем как-то проанализировать ошибку.
finally - если нет ошибок , то попадаем сюда
И далее уже вниз идем по коду дальше.
Можно обойтись и без finally , просто прописываем необходимый код, который нужно проверить в try , пишем дополнительно catch и уже дальше пойдет выполняться код ниже, если нет ошибок.
Но в некоторых случаях finally нужен, например сёркл(крутилка при загрузки), если нет ошибок, то ее нужно убрать, если возникнет ошибка, ее так же нужно убрать. То есть если возникнет ошибка, то мы в код ниже не попадем, а нам нужно убрать крутилку. По этому finally и нужен.
Для чего нужен Promise.all?
Promise.all([промис, промис, промис])
Если нам нужно запустить множество промисов параллельно и дождаться пока они все выполнятся. Например, загрузить несколько файлов одновременно и обработать результат , когда он готов. Придут данные так же по порядку, по которому мы прописывали промисы, даже если кто-то из них выполнится раньше другого.
.all - это метода класса промис, принимает массив промисов, вернет метод промис тогда, когда все промисы заресолвятся(resolve-выполнится тогда, когда завершилось успешно и получили результат, противоположно этому - rejected)
Передаем массив других промисов
Назовите минимум 3 метода жизненного цикла классовой компоненты?
Каждый компонент React проходит несколько стадий в процессе своей жизни:
он создается,
затем добавляется в DOM,
получает пропсы,
и, наконец, удаляется из дерева.
Этот процесс называют жизненным циклом компонента (Component Lifecycle).
React предоставляет набор методов, которые позволяют встроиться в этот процесс. Например, запуск часов логичнее всего сделать сразу после их отрисовки.
1 этап: Монтирование (Mounting):
Появление в HTML\рождение компоненты.
Если компонента отрисовалась\появилась в DOM, то произошел этот цикл.
Эти методы вызываются по порядку во время создания объекта и вставки его в DOM.
constructor()
static getDerivedStateFromProps()
render()
componentDidMount()
Как мы можем написать функцию, чтобы она сработала сразу же после рождения компоненты?
Можно использовать useEffect().
useEffect(()=>{ }, [ ]) - первый аргумент - коллбэк, который сработает, второй аргумент - зависимость, если он пустой, то наш коллбэк сработает 1 раз при рождении компоненты.
Что как правило происходит на стадии рождения?
Общение с бэкендом - если мы хотим сделать запрос на бэкенд, взять какие-то данные, например, список пользователей. Это самое лучше, что может происходить при рождении компоненты. Происходит это в useEffect().
2 этап: Обновление\появление (Updating)
Обновление может происходить при изменении свойств или состояния. Эти методы вызываются по порядку во время перерисовки:
static getDerivedStateFromProps()
shouldComponentUpdate()
render()
getSnapshotBeforeUpdate()
componentDidUpdate()
Что заставляет компоненту обновляться?
Изменение пропсов и изменение стейта.
Здесь опять же помогает это отследить useEffect().
useEffect(()=>{ }, [ ]) - первый аргумент - коллбэк, который сработает, если произошли изменения, второй аргумент - зависимость, там лежит стейт\пропсы, которые будут отслеживаться, произошли ли в них изменения, если да, то выполнится коллбэк. Если приходящие пропсы изменились, то произойдет перерисовка.
Внимание, этот useEffect первый раз вызовется при рождении компоненты, и далее будет вызываться тогда, когда произойдут изменения в стейте!
3 этап: Удаление или демонтирование (Unmounting)
Он вызывается во время удаления компонента из DOM.
Один метод:
componentWillUnmount()
Нередко в приложении возникает необходимость подисывается на различные ресурсы, а после окончания работы и отписываться от них. В этом случае мы можем использовать специальную форму хука useEffect():
useEffect(() => {
// код подписки на ресурс
unmountBtn.addEventListener(“click”, unmount);
return () => {
// код отписки от ресурса
unmountBtn.removeEventListener(“click”, unmount);
};
});
В начале функции хука идет подписка на ресурс, а далее оператор return возвращает функцию, которая выполняет отписку от ресурса.
Что такое PWA?
«Progressive Web Application» — прогрессивное веб-приложение.
Технология в web-разработке, которая визуально и функционально трансформирует сайт в приложение (мобильное приложение в браузере)»
По сути, это «прокачанная» копия веб-сайта, размещенная на устройстве пользователя и не требующая отдельной разработки для iOS или Android.
PWA — это сайты с расширенной функциональностью, которая позволяет им быть похожими на нативные мобильные приложения.
Работают эти приложения так же, как и обычные мобильные приложения: показывают Push-уведомления, работают в автономном офлайн-режиме, сохраняют данные локально. По внешнему виду они ничем не отличаются от нативных приложений и могут размещать иконку на рабочем столе (домашнем экране) для быстрого запуска.
PWA, как обычные сайты, размещаются на доменах с https-шифрованием. Таким образом поддерживается уникальность приложений, поскольку не бывает двух одинаковых доменов.
{description}
Автор: Иван Иванов
Дата публикации: 2023-10-30
Содержание статьи...