JS-core-2 Flashcards

1
Q

Purpose and concept of a module/module pattern.

A

Идея и польза модулей в первую очередь в том, что они помогают справляться со сложностью программы. Если мы работаем с проектом на 20 тысяч строк, будет совершенно неудобно хранить весь код в одном файле.

  1. Инкапусляция: Модули позволяют обьединять свазанный код вместе, скрывая детали реалзиации и открывая только то, что необходимо. Это предотвращает загрязнение глобальной области видимости и уменьшает риск конфликтов имен переменных.
  2. Повторное использование: Разделяя код на отдельные модули, мы можем использовать эти модули повторно в разных частях приложения или даже проектах
  3. Поддерживаемость
  4. Управление зависимостями: модули могут явно указывать свои зависимсоти гарантируя, что они загружаются и инициализируются в правильном порядке.

Концепция модуля:

Модуль состоит из
- Приватные данные: переменные и функции, которые доступны извне
- Публичный API: набор функций и переменных, которые доступны для использования другими модулми или частями приложения.

Особенности:
- Всегда «use strict»
- Своя область видимости переменных
- Код в модуле выполняется только один раз при импорте
- Объект import.meta содержит информацию о текущем модуле.
- В модуле «this» не определён
- Модули являются отложенными (deferred)
- Для не-модульных скриптов атрибут async работает только на внешних скриптах. Скрипты с ним запускаются сразу по готовности, они не ждут другие скрипты или HTML-документ.

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

Types of modules (AMD, ES6, CommonJS, UMD).

A

CommonJS - Для подключения зависимостей используется глобальная функция require(), которая принимает первым параметром строку с путем к модулю. Для экспортирования интерфейса модуля мы используем свойство exports объекта module.

AMD (Asynchronous module definition ) — что дословно переводится как «Асинхронное определение модуля», используется с RequireJS. Функция define фактически занимается публикацией модуля. В основном используется в браузерской среде, позволяет загружать модули асинхронно

UMD — Определение универсального модуля, он же гибридный, позволяет поддерживать как и AMD, так и CommonJS, а также глобальные переменные, если другие форматы не поддерживаются.

ES6 модули обеспечивают современный стандарт модулей с поддеркой в большенстве современных браузеров и нода

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

Syntax and common features (export default, named exports, exports as).

A
  1. export default используется для экспорта одного значения или сущности из модуля. Это может быть класс, функция, обьект или примитивное значение.
  2. Именованные экспорты «включают в себя» своё имя. Эта информация является частью модуля, говорит нам, что именно экспортируется. Именованные экспорты вынуждают нас использовать правильное имя при импорте
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Dynamic imports.

A

Динамические импроты позволяют загружать модули асинхронно во время выполнения программы. Это полезно для улучшения производительности приложений, особенно при работе с большими проектами, где нет необходимости загружать все модил сразу. Динамическим импорты реализованы с помощью функции import(), которая возвраащет Promise
Динамический импорт работает в обычных скриптах, он не требует указания script type=”module”.

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

new keyword functionality.

A

Ключевое слово new в JavaScript используется для создания нового экземпляра объекта. Оно привязывает this к новому обьекту, что позволяет в конструкторе устанавливать свойства и методы для этого обьекта

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

Constructor functions and their properties.

A

Функции-конструкторы технически являются обычными функциями. Но есть два соглашения:

-Имя функции-конструктора должно начинаться с большой буквы.
-Функция-конструктор должна выполняться только с помощью оператора “new”.

Обычно конструкторы не имеют оператора return. Их задача – записать все необходимое в this, и это автоматически становится результатом.

Но если return всё же есть, то применяется простое правило:

При вызове return с объектом, вместо this вернётся объект.
При вызове return с примитивным значением, оно проигнорируется.
Другими словами, return с объектом возвращает этот объект, во всех остальных случаях возвращается this.

У конструкторных функций также есть свойство “prototype”, методы и свойства долбавленные в прототайп являеются общими для всех экземпляров, созданных с использованием консруктртора

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

Public, private, and static members in OOP.

A

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

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

Class declaration and syntax.

A

Используется ключевое слово class, за которым следует имя классе. В теле класса могут определяться конструкторы, методы и статические свойства и методы.
Каждый метод, обьявленный в теле классе, автоматически добавляется в протип класса. Это позволяет всем экземплярам класса использовать один и тот же метод, что делает код более эффективным. Также поддерживается наследоование.

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

Differences between class declarations and constructor functions.

A
  1. Разные синтексикс.
  2. Методы внутри класса авоматические добавляются в прототив, что обеспечивает эффективное использование памями и общие методы для всех экземпляров. А конструктраая фукция каждый раз при создании экземпляра создает новую функцию.
  3. Наследование ручками нужно.
  4. Статические методы могут быть добавлены к функции конструктору, но они не могут быть наследовананы или доступны через экземпляр обьектов
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Usage of super().

A

Чтобы унаследовать от класса: class Child extends Parent:
При этом Child.prototype.__proto__ будет равен Parent.prototype, так что методы будут унаследованы.
При переопределении конструктора:
Обязателен вызов конструктора родителя super() в конструкторе Child до обращения к this.
При переопределении другого метода:
Мы можем вызвать super.method() в методе Child для обращения к методу родителя Parent.
Внутренние детали:
Методы запоминают свой объект во внутреннем свойстве [[HomeObject]]. Благодаря этому работает super, он в его прототипе ищет родительские методы.
Поэтому копировать метод, использующий super, между разными объектами небезопасно.

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

Callbacks and IIFE.

A

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

IIFE immediately invoked Function expression - это функция, которая определяется и сразу вызывается. Этот паттерн испольузется для создания локальной области видимости и предотвращения загрязнения глобального пространства имен.
IIFE часто использоватлись для создания модулей до появляется стандарта. Это позволяет инкапсулировать переменные и фунеции избегая их утечек в глобальное пространство имен.

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

Limitations of callbacks (e.g., callback hell).

A

Чем больше вложенных вызовов, тем наш код будет иметь всё большую вложенность, которую сложно поддерживать, особенно если вместо … у нас код, содержащий другие цепочки вызовов, условия и т.д.

Иногда это называют «адом колбэков» или «адской пирамидой колбэков».

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

Function currying and partial functions.

A

Функциональное каррирование: процесс преобразования функции с множеством аргементов в последовательность функций с одним аргументом. В результате каждый раз вызываемся функция с одним аргументом, возвращабщая новую функцию, которая ожидает следующий аргумент

//general
function add(a,b) {
return a+b;
}

///urrying
function curriedAdd(a){
return function(b){
return a+b;
};
}

const add5 = curriedAdd(5);
console.log(add5(3));
console.log(add5(7));

Частичное применений функций - процесс создания новой функции путем фиксии некоторых параметров из оргинальной функции, что позволяет уменьшить колчество аргументов в новой функции

function power(base, exponent){
return Math.pow(base, exponent);
}

const square = power.bind(null, 2);

console.log(square(3));
console.log(square(5));

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

Set/Map and WeakSet/WeakMap.

A

Map – это коллекция, структура данных, работающая по принципу
ключ/значение, как и Object. Но основное отличие от объекта в том, что Map
позволяет использовать ключи любого типа.
Объект Set – это особый вид коллекции: «множество» значений (без ключей),
своего рода массив, где каждое значение может появляться только один раз.

Методы и свойства:

new Map() – создаёт коллекцию.
map.set(key, value) – записывает по ключу key значение value.
map.get(key) – возвращает значение по ключу или undefined, если ключ key отсутствует.
map.has(key) – возвращает true, если ключ key присутствует в коллекции, иначе false.
map.delete(key) – удаляет элемент (пару «ключ/значение») по ключу key.
map.clear() – очищает коллекцию от всех элементов.
map.size – возвращает текущее количество элементов.

map.keys() – возвращает итерируемый объект по ключам,
map.values() – возвращает итерируемый объект по значениям,
map.entries() – возвращает итерируемый объект по парам вида [ключ, значение], этот вариант используется по умолчанию в for..of.

Объект Set – это особый вид коллекции: «множество» значений (без ключей), где каждое значение может появляться только один раз.

Его основные методы это:

new Set(iterable) – создаёт Set, и если в качестве аргумента был предоставлен итерируемый объект (обычно это массив), то копирует его значения в новый Set.
set.add(value) – добавляет значение (если оно уже есть, то ничего не делает), возвращает тот же объект set.
set.delete(value) – удаляет значение, возвращает true, если value было в множестве на момент вызова, иначе false.
set.has(value) – возвращает true, если значение присутствует в множестве, иначе false.
set.clear() – удаляет все имеющиеся значения.
set.size – возвращает количество элементов в множестве.

Первое его отличие от Map в том, что ключи в WeakMap должны быть объектами, а не примитивными значениями:Теперь, если мы используем объект в качестве ключа и если больше нет ссылок на этот объект, то он будет удалён из памяти (и из объекта WeakMap) автоматически.
В WeakMap присутствуют только следующие методы:

weakMap.get(key)
weakMap.set(key, value)
weakMap.delete(key)
weakMap.has(key)

WeakMap и WeakSet используются как вспомогательные структуры данных в дополнение к «основному» месту хранения объекта. Если объект удаляется из основного хранилища и нигде не используется, кроме как в качестве ключа в WeakMap или в WeakSet, то он будет удалён автоматически.

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

Error handling techniques including try..catch.

A

Синтаксис «try…catch» работает только для ошибок возникающих во время выполнения кода

В js есть синтаксическая конструкция try..catch, которая позволяет «ловить»
ошибки и вместо падения делать что-то более осмысленное. Сначала выполняется код
внутри блока try {…}. Если в нём нет ошибок, то блок catch(err) игнорируется:
выполнение доходит до конца try и потом далее, полностью пропуская catch.
Если же в нём возникает ошибка, то выполнение try прерывается, и поток
управления переходит в начало catch(err). Переменная err (можно использовать любое
имя) содержит объект ошибки с подробной информацией о произошедшем.
Блок finaly вызовется независимо от того произошла ошибка или нет.

Когда возникает ошибка, JavaScript генерирует объект, содержащий её детали. Затем этот объект передаётся как аргумент в блок catch:

Для всех встроенных ошибок этот объект имеет два основных свойства:

name
Имя ошибки. Например, для неопределённой переменной это “ReferenceError”.
message
Текстовое сообщение о деталях ошибки.

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

Understanding and implementing custom errors.

A

Мы можем также генерировать собственные ошибки, используя оператор throw. Аргументом throw может быть что угодно, но обычно это объект ошибки, наследуемый от встроенного класса Erro

Мы можем наследовать свои классы ошибок от Error и других встроенных классов ошибок, но нужно позаботиться о свойстве name и не забыть вызвать super.
Мы можем использовать instanceof для проверки типа ошибок. Это также работает с наследованием. Но иногда у нас объект ошибки, возникшей в сторонней библиотеке, и нет простого способа получить класс. Тогда для проверки типа ошибки можно использовать свойство name.

17
Q

Differences between setTimeout and requestAnimationFrame.

A

setTimeout - это функция таймера общего назначения, подходящая для отложенного выполнения кода, в то время как requestAnimationFrame специально разработана для создания плавной анимации путем синхронизации с циклом перерисовки браузера. Для анимации и визуальных обновлений предпочтительнее использовать requestAnimationFrame из-за его преимуществ в производительности и более плавных результатов. Для других временных операций, где не требуется точная синхронизация с циклом перерисовки браузера, более подходящим является setTimeout.

18
Q

Using Fetch and understanding XMLHTTPRequest.

A

Fetch современный интерфейс для выполнения сетевых запросов, который возвращает промисы и поддерживает асинхронные операции.
XMLHTTPRequest - это старый способ для выполнения запросов, у которого сложный синтаксис, использует события для обработки ошибок и ответов onload /onerror
Но он поддерживает и синхронные и асинхронные запросы, но синхронные, конечно не рекомендуется использовать из-за блокировки основного потока.

19
Q

Differences between HTTP and HTTPS.

A

В чем разница между HTTP и HTTPS?
Протокол передачи гипертекста (HTTP) – это протокол или набор правил взаимодействия между клиентом и сервером. Когда вы посещаете веб-сайт, ваш браузер отправляет HTTP-запрос на веб-сервер, который отправляет HTTP-ответ. Веб-сервер и ваш браузер обмениваются данными в виде обычного текста. Вкратце, протокол HTTP – это базовая технология, обеспечивающая сетевую связь. Как следует из названия, защищенный протокол передачи гипертекста (HTTPS) является более безопасной версией или расширением HTTP. При использовании HTTPS браузер и сервер устанавливают безопасное зашифрованное соединение перед передачей данных. HTTP передает незашифрованные данные, что означает, что информация, отправленная из браузера, может быть перехвачена и прочитана третьими лицами. Этот процесс не идеален, поэтому он был расширен до HTTPS, чтобы повысить уровень безопасности взаимодействия. HTTPS объединяет HTTP-запросы и ответы с технологиями SSL и TLS.

Веб-сайты HTTPS должны получить сертификат SSL/TLS от независимого центра сертификации (CA). Эти веб-сайты передают сертификат браузеру, а затем обмениваются данными для установления доверия. Также SSL-сертификат содержит криптографическую информацию, поэтому сервер и веб-браузеры могут обмениваться зашифрованными данными. Процесс работает следующим образом.

Вы открываете веб-сайт HTTPS, введя формат URL-адреса https:// в адресной строке браузера.
Браузер пытается проверить подлинность сайта, запросив SSL-сертификат сервера.
В ответ сервер отправляет сертификат SSL, содержащий открытый ключ.
SSL-сертификат веб-сайта подтверждает личность сервера. Как только браузер удовлетворен, он использует открытый ключ для шифрования и отправки сообщения, содержащего секретный ключ сеанса.
Веб-сервер использует свой закрытый ключ для расшифровки сообщения и получения ключа сеанса. Затем он шифрует сеансовый ключ и отправляет подтверждающее сообщение в браузер.
Теперь и браузер, и веб-сервер переходят на использование одного и того же сеансового ключа для безопасного обмена сообщениями.

20
Q

Understanding HTTP methods, headers, responses, and status codes.

A

Заголовки HTTP (англ. HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару параметр-значение. Формат заголовков соответствует общему формату заголовков текстовых сетевых сообщений ARPA (см. RFC 822). Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.

Примеры заголовков:

Server: Apache/2.2.11 (Win32) PHP/5.3.0
Last-Modified: Sat, 16 Jan 2010 21:16:42 GMT
Content-Type: text/plain; charset=windows-1251
Content-Language: ru
В примере выше каждая строка представляет собой один заголовок. При этом то, что находится до двоеточия, называется именем (англ. name), а что после него — значением (англ. value).

Все заголовки разделяются на четыре основных группы:

General Headers («Основные заголовки») — могут включаться в любое сообщение клиента и сервера;
Request Headers («Заголовки запроса») — используются только в запросах клиента;
Response Headers («Заголовки ответа») — только для ответов от сервера;
Entity Headers («Заголовки сущности») — сопровождают каждую сущность сообщения.

HTTP Responses:
HTTP responses are sent by the server in response to a client’s request. They contain the requested data along with metadata like status codes and headers.

The basic structure of an HTTP response includes:

Status Line: Contains the HTTP version, status code, and reason phrase.
Headers: Key-value pairs providing metadata about the response.
Body: Optional content sent by the server.

21
Q

Concepts of RESTful APIs.

A

RESTful APIs (Representational State Transfer APIs) are a type of web service architecture based on REST principles. These principles were first introduced by Roy Fielding in his doctoral dissertation in 2000. RESTful APIs are designed to be simple, lightweight, and scalable, making them popular for building distributed systems and web applications. Here are the key concepts of RESTful APIs:

Client-Server Architecture: RESTful APIs follow a client-server architecture where the client and server are separate and communicate over HTTP (or HTTPS). This separation of concerns allows for easier scalability and maintenance of the system.

Statelessness: RESTful APIs are stateless, meaning that each request from the client to the server must contain all the information necessary to understand and fulfill that request. The server does not store any client state between requests. This makes RESTful APIs highly scalable and easy to cache.

Uniform Interface: RESTful APIs have a uniform interface that simplifies communication between clients and servers. This interface is based on four main principles:

Resource Identification: Resources are identified by URIs (Uniform Resource Identifiers), which are unique identifiers for each resource.
Resource Manipulation through Representations: Clients interact with resources through representations, such as JSON or XML, which contain the resource’s state.
Self-Descriptive Messages: Each message sent between the client and server should include metadata that describes how to process the message.
Hypermedia as the Engine of Application State (HATEOAS): Clients interact with resources by following hyperlinks embedded in representations. This allows for discovery of resources and actions available on those resources.
CRUD Operations: RESTful APIs typically support the four basic CRUD (Create, Read, Update, Delete) operations on resources using HTTP methods:

GET: Retrieves the representation of a resource.
POST: Creates a new resource.
PUT: Updates an existing resource with a new representation.
DELETE: Deletes a resource.
State Transfer: RESTful APIs transfer the state of resources between the client and server using representations. Representations can be in various formats such as JSON, XML, HTML, or plain text, based on the client’s and server’s requirements.

Layered System: RESTful APIs are often designed as a layered system, where each layer has a specific responsibility and interacts only with adjacent layers. This separation of concerns improves scalability, flexibility, and security.

Cacheability: RESTful APIs support caching to improve performance and reduce server load. Responses can be cached at various levels, including the client, intermediary servers (e.g., proxies), and the server itself, using HTTP caching mechanisms.

Stateless Communication: RESTful APIs do not maintain any client state on the server between requests. This means that each request from the client to the server must contain all the necessary information to fulfill the request, making the system more scalable and easier to manage.

Overall, RESTful APIs provide a flexible and standardized approach to building web services, allowing for interoperability between different systems and technologies. They have become the de facto standard for building modern web applications and integrating disparate systems over the internet.

22
Q

Test-driven development (TDD) and behavior-driven development (BDD).

A

TDD (Test Driven Development) — Разработка на основе тестов.
BDD (Behavior Driven Development) — Разработка на основе поведения. техника
разработки, при котором рассматривается
не результат выполнения какого-либо
модуля, а та работка, которую он
выполняет. Этот принцип можно
рассматривать как продолжение TDD.БDD интересно тем, что тесты к нему
пишутся с помощью сценариев.
* Сценарии – описание функциональности
метода, написанное на естественном языке
по определенному шаблону

23
Q

Test Pyramid.

A

модульное тестирование (юнит);

интеграционное тестирование;

системное тестирования;

End to end

24
Q

Authentication mechanisms (JWT, OAuth).

A

OAuth vs. JWT: Key Differences
Here are some differences between OAuth and JWT:

Main function: OAuth is used for authorization, while JWT is used for authentication and exchanging information.
Security: OAuth is a secure way to manage authorization flows, while JWT is a lightweight and self-contained token. It does not provide security on its own, but can be secure as part of a well designed authentication system.
Statefulness: JWT is stateless, meaning it doesn’t rely on an external source to validate claims. JWT does not require a centralized server or database to store the tokens. OAuth is stateful, meaning it requires a connection to the authorization server to obtain and verify tokens.
Applications: JWT is suitable for stateless applications. OAuth maintains a session state on the server.
Tokens: JWT is a token that contains claims about the user or client. OAuth uses a unique token to grant access to the user’s resources. OAuth tokens are security tokens granted by IDP that can only be validated by that same OAuth token provider. You can use JWT as another kind of OAuth token. OAuth is commonly used for enabling single sign-on (SSO), allowing users to access multiple applications using the same credentials.

25
Q

Agile, Scrum, Kanban, and Waterfall methodologies.

A

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

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

Управление проектами в Agile разделяют на этапы и устанавливают сроки к задачам. Это делает работу над продуктом наглядной и прозрачной, что хорошо сказывается на общей продуктивности команды.

Сотрудники группируются в небольшие команды (количество человек напрямую зависит от продукта и сложности его реализации). Работники сами решают, как разрабатывать продукт: какие задачи взять в работу, в каком порядке, какой задать темп, какие инструменты использовать и т.д.

Scrum — фреймворк для Agile-управления проектами. Каждый проект разбивается на небольшие итерации продолжительностью от 1 до 4 недель — спринты. Если спринт уже начат, то в него не должно вноситься изменений — не получится добавить новые задачи в текущий спринт.

Kanban — это способ управления рабочим процессом, основанный на визуализации целей, задач и прогресса.

Если Scrum-команда разбивает проекты по времени, то команда, которая работает по Kanban-методу, разбивает проекты на этапы рабочего процесса с помощью канбан-доски.

Каждый столбец такой доски представляет этапы работы, которые проходит задача на пути к завершению. Например:

«В плане»,
«В работе»,
«Готово».

26
Q

Project estimation techniques.

A

Top-down estimation in action
If your team has a deadline to complete a project within one calendar year, you’ll take the one year timeline and divide the project into different parts with key milestones in-between
Bottom-up estimation is the opposite of top-down estimation. Instead of knowing how long the project will take and then dividing it up into smaller tasks, bottom-up estimation looks at how long each smaller task will take and adds them together to estimate the final project deadline.
Three-point estimation can make a bottom-up estimation more accurate. This technique takes the average of three different variations of a bottom-up estimation: the most optimistic timeline, the most pessimistic timeline, and the most likely timeline to come up with the final time estimate for the project.

Analogous estimates look at past projects and identify specific details that are similar to the current project.
Parametric estimation uses historical data from past projects to estimate any part of a project including resources, budget, equipment, and project timeline
This estimation method is entirely based on the experience of the project manager.

27
Q

Familiarity with Creational, Structural, and Behavioral Design Patterns.

A

Creational patternsemphasize the automatic creation of objects within code, rather than requiring you to instantiate objects directly: Factory, Signleton, Builder, Abstract Factory, Prototype

Structural patternsfocus on the composition of classes and objects. By usinginheritanceandinterfaces, these patterns allow objects to be composed in a manner that provides new functionality: Adapter, Bridge, Decorator, Facade, Proxy

Behavioral patternsare concerned with communication and assignmentbetweenobjects: Memento, iterator, Observer, Strategy

28
Q

SOLID principles and design patterns in project contexts.

A

S - Single Responsibility Principle - принцип единственной ответственности. Каждый класс должен иметь только одну зону ответственности.

O - Open closed Principle - принцип открытости-закрытости. Классы должны быть открыты для расширения, но закрыты для изменения.

L - Liskov substitution Principle - принцип подстановки Барбары Лисков. Должна быть возможность вместо базового (родительского) типа (класса) подставить любой его подтип (класс-наследник), при этом работа программы не должна измениться.

I - Interface Segregation Principle - принцип разделения интерфейсов. Данный принцип обозначает, что не нужно заставлять клиента (класс) реализовывать интерфейс, который не имеет к нему отношения.

D - Dependency Inversion Principle - принцип инверсии зависимостей. Модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те, и другие должны зависеть от абстракции. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.