Frontend Flashcards

1
Q

React Reconciliation

A

Реакт проходится по всем рендер функциям и строит дерево элементов. Если это последующий рендер, то строится следующее дерево, которое сравнивается с текущим. При сравнении, если элемент поменялся на другой, то реакт не смотрит дальше и пересоздает дерево на этом месте. Компоненты делают unmount. Реакт на основании разницы деревьев строит список операций, что удалить, добавить или обновить и совершает их в дом.

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

JSX

A

Это синтаксис элементов реакта. Он транспайлится в JS, а потом рендерится в DOM. Под капотом используется React.createElement.

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

SSR

A

Позволяет отрендерить страницу на стороне сервера, что помогает поисковикам проще индексировать страницу. После загрузки страницы в браузере, запускается JS и страница дальше работает как SPA. Этот процесс называется hydration.

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

Provider & Context

A

Бывает необходимо иметь доступ к данным во всем дереве компонентов (стор в редаксе). Это можно сделать с помощью context в реакте. Для этого мы создаем провайдер, который добавляет нужные данные в контекст.

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

В чому особливість Redux?

A

Redux — бібліотека для централізованого керування станом у додатках. Щоб внести зміни, потрібно тригернути екшн; редюсер — чиста функція, яка змінює частину стейту на основі екшена, а селектор дозволяє отримати потрібну частину даних зі стейту.

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

React Synthetic Events

A

Синтетичні події повторюють нативні події браузера, але водночас мають єдиний інтерфейс для всіх браузерів.

Реакт обробляє івенти в кореневому компоненті. По одному на кожний тип події, додаючи обробники для кожного елементу і додаючи відповідні target і currentTarget.

Коли ми натискаємо на кнопку, спочатку спрацьовує фаза capture: обробники цієї фази виконуються від батьків до нащадків. Потім іде фаза bubbling (спливання), під час якої звичайні обробники спрацьовують від нащадків до батьків. Лише подія focus не спливає.

Метод e.stopPropagation() зупиняє подальше проходження події по обробниках.

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

Web worker

A

Позволяет запускать долгий синхронный код в отдельном потоке. Главные поток и воркер могут обмениваться сообщениями, через onmessage и postmessage. Есть еще shared worker, с ним нужно работать через объект port (специальный объект для коммуникации). У него нет доступа к DOM.

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

Service worker

A

Service Worker дозволяє кешувати ресурси сайту і працювати офлайн. Функціонально він схожий на проксі-сервер, що дає можливість модифікувати запити та відповіді, підміняючи їх даними з кешу. З його допомогою можна створювати PWA, а також обробляти push notifications.

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

IndexDB

A

Асинхронная NoSQL база, поддерживает транзакции, индексы. Хранит пары ключ, значение.

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

HTML <script async … />

A

Позволяет начать грузить JS асинхронно не блокируя дальнейший рендеринг. Скрипт будет запущен, как только будет загружен, даже до полной загрузки страницы. Порядок запуска не гарантирован.

Если его нет, то скрипт будет загружен и запущен в том месте где он указан и только потом продолжится рендеринг.

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

HTML <script defer … />

A

Позволяет начать грузить JS асинхронно не блокируя дальнейший рендеринг.Гарантирует порядок запуска скриптов. Запускает скрипты когда уже вся страница отрендерилась.

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

What is the difference between authentification and authorization?

A

Authentication - the process of provinguser’s identity to the system or simply login.

Authorization - the process of providing permissions toresources inside the system.

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

Симметричное и ассиметричное шифрование

A

Симметричное - можно зашифровать и расшифровать 1 ключем.

Ассиметричное - публичным ключем можно зашифровать, приватным ключем можно расшифровать.

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

HTTPS

A
  1. Браузер и сервер делают handshake, если сертификат валидный, генерирует сеансовый ключ, шифрует его публичным ключем и отправляет серверу.
  2. Безопасно переданный сеансовый ключ используется браузером для шифрования и сервером для расшифровки. Это быстрее, чем использовать приватный/публичный ключи.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

JWT

A

Имеет структуру header.payload.signature. В хедере хранится алгоритм и тип. В пейлоде публичные данные о пользователе. Подпись нужна для проверки валидности. Все данные закодированны с помощью base64url и их может прочитать кто угодно.

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

Какие уязвимости может иметь веб приложение?

A
  • Лучше избегать регулярок в запросе, так как можно написать регулярку, которая положит приложение и базу.
  • Стоит защитить поля ввода от XSS атак, экранируя спецсимволы.
  • Нужно включить заголовки связанные с безопасностью. Они позволить защититься от общеизвестных атак.Для этого достаточно подключить пакет helmet.
  • Стоит включить httpOnly для cookies. Чтобы с браузера нельзя было их подменить.
  • Нужно проверить свои npm пакеты. Не делают ли они чего-то вредного.
  • Защита от DDoS. Ограничить колличество запросов по времени с одного ip.
  • Не стоит error stack возвращать вместе с ошибкой реквеста. Достаточно её просто логировать.
17
Q

Сookies

A

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

18
Q

Как работает WebSocket?

A

Он работает через TCP протокол. Данные могут передаваться в обе стороны. В самом начале происходит обмен через http, с помощью специальных заголовков, дальше все идет через протокол websocket. Сервер может решить, устанавливать связь или нет. При скейлинге бекенда нужен дополнительный брокер для работы.

19
Q

Чи може script в <head /> виконати дії з dom?

A
  • Може виконати якщо додати defer, тоді він виконається після повного завантаження DOM.
  • Можна додати колбек DOMContentLoaded, всередині нього можна вже працювати з DOM.
  • Перемістити в кінець body.
20
Q

В чому мінуси Context і навіщо Redux або стейт у вигляді атомів?

A

При використанні контексту - перерендер усіх компонентів, підписаних на контекст, навіть якщо вони використовують лише частину стану. Redux чи атомарні стейти (Jotai/Recoil) дозволяють локалізувати оновлення стану.

21
Q

Як хуки працюють під капотом? Чому не можна використовувати if для хуків?

A

Під капотом хуки компонента зберігаються у впорядкованому масиві. Потім по hook index викликає кожен з них. If ламає цю систему викликів по індексу.

22
Q

Коли треба використовувати useCallback?

A

Якщо функція використовується в useEffect, щоб він не викликався на кожен рендер через зміну посилання.
Якщо використовується React.memo, щоб компонент не ререндерився через зміну посилання на функцію.
Треба уникати зайвого використання useCallback, через те що це навантажує памʼять.

23
Q

Коли треба використовувати useMemo?

A

Щоб уникнути зайвих обчислень на кожен перерендер, або уникнути зміни посилання на результат, коли це не потрібно.

24
Q

Що таке DOM?

A

Document Object Model - це інтерфейс для роботи з HTML в JS. Представляє собою дерево елементів у вигляді вузлів. Браузер парсить HTML і будує DOM дерево. Ми можемо змінювати його стилі, атрибути, контент тощо.

25
Q

Різниця між event.currentTarget та event.target?

A

event.target - елемент до якого привʼязана подія. event.currentTarget - елемент на якому відбулася подія.

26
Q

Web Components

A

Web Components дають можливість створення багаторазових і незалежних компонентів, які працюють у будь-якому фреймворку або без нього.

Shadow DOM забезпечує інкапсуляцію стилів і логіки компонента, вони будуть ізольовані від решти сторінки та не конфліктують із глобальними CSS.

class MyMessage extends HTMLElement {
constructor() {
super();
// Створюємо Shadow DOM з відкритим доступом (можна отримати через element.shadowRoot)
this.attachShadow({ mode: ‘open’ });
this.shadowRoot.innerHTML = `
<p>${this.getAttribute(‘text’) || ‘Привіт!’}</p>
`;
}

static get observedAttributes() {
    return ['text']; // Слідкуємо за змінами атрибуту "text"
}

attributeChangedCallback(name, oldValue, newValue) {
    if (name === 'text') {
        this.shadowRoot.querySelector('p').textContent = newValue;
    }
} }

customElements.define(‘my-message’, MyMessage);

Lit, Stencil або Hybrids бібліотеки спрощують синтаксис, додають реактивність і оптимізують створення Web Components для великих проєктів.