Skip to content

Latest commit

 

History

History
118 lines (79 loc) · 11.8 KB

JS.md

File metadata and controls

118 lines (79 loc) · 11.8 KB

Вопросы для собеседования по JavaScript (Backend)

Junior

1. Что такое Node.js?

Ответ: Node.js — это среда выполнения для JavaScript на серверной стороне, позволяющая запускать JS-код вне браузера.

2. Что такое событийный цикл (Event Loop) в Node.js?

Ответ: Событийный цикл позволяет Node.js обрабатывать множество операций асинхронно, несмотря на то, что JavaScript является однопоточным языком.

3. Какие основные типы данных в JavaScript?

Ответ: В JavaScript основные типы данных включают Number, String, Boolean, Object, Null(typeof Object), Undefined, Function.

4. Назовите все HTTP методы, которые вам известны

Ответ: К основным методам HTTP относятся: GET (запрос информации), POST (отправка данных), PUT (обновление существующих данных), DELETE (удаление данных), HEAD (запрос информации без тела ответа), OPTIONS (запрос информации о возможностях ресурса), PATCH (частичное обновление данных).

5. Чем отличается PUT от PATCH?

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

6. Можете ли вы описать основное различие методов массивов forEach () и map ()? В каких ситуациях вы предпочли бы один из этих методов другому?

Для того чтобы понять разницу между этими методами — поговорим об особенностях работы каждого из них.

Вот как работает .forEach():

  • Он перебирает элементы массива.
  • Он выполняет переданную ему функцию обратного вызова для каждого элемента массива.
  • Он ничего не возвращает.
const a = [1, 2, 3];
const doubled = a.forEach((num, index) => {
  // Сделать что-то с num и/или с index.
});

// doubled = undefined

Вот краткая характеристика метода .map():

  • Он перебирает элементы массива.
  • Он преобразует каждый элемент исходного массива в элемент нового массива, вызывая переданную ему функцию для каждого элемента исходного массива.
const a = [1, 2, 3];
const doubled = a.map(num => {
  return num * 2;
});

// doubled = [2, 4, 6]

В результате оказывается, что основное различие между .forEach() и .map() заключается в том, что .map() возвращает новый массив. Если вам нужно получить результат преобразования элементов исходного массива, не меняя этот массив, тогда стоит выбрать .map(). Если же нужно просто перебрать элементы массива — тогда можно воспользоваться .forEach().

7. Объясните особенности проверки равенства значений в JavaScript

В JavaScript есть два оператора для проверки равенства величин. Первый — это так называемый оператор строгого равенства. Второй — оператор нестрогого равенства, при использовании которого может производиться преобразование типов проверяемых величин.

  • Оператор строгого равенства (===) проверяет значения на равенство, не выполняя при этом преобразования типов.
  • Оператор нестрогого равенства (==) проверяет значения на равенство, выполняя их приведение к общему типу.
const a = "42";
const b = 42;

a == b;         // true
a === b;        // false

Вот некоторые правила, касающиеся использования различных операторов проверки равенства в JavaScript:

  • Если любое из сравниваемых значений может быть значением true или false — постарайтесь избегать оператора ==. Используйте оператор ===.
  • Используйте оператор === в том случае, если работаете со следующими значениями: 0, "" или [] (пустой массив).
  • Во всех остальных случаях можете безопасно использовать оператор ==. Причём, это не только безопасно, но и способствует упрощению кода и улучшению его читабельности.

Middle

1. Как работают промисы (Promises) в JavaScript?

Ответ: Промисы представляют собой объекты, представляющие завершение или сбой асинхронной операции, и их возможное значение.

2. Что такое RESTful API и как его создать на Node.js?

Ответ: RESTful API - это стиль архитектуры программного обеспечения для создания сетевых приложений. В Node.js для создания RESTful API часто используется Express.js, Nest.js, прочие.

3. Что такое CORS (Cross-Origin Resource Sharing)?

Ответ: CORS (Cross-Origin Resource Sharing) — это механизм, позволяющий или ограничивающий запросы к ресурсам на веб-странице из других доменов отличных от домена исходного ресурса. Это мера безопасности, предотвращающая межсайтовый запрос данных без разрешения сервера.

4. Как работает прототипное наследование в JavaScript?

Ответ: Прототипное наследование в JavaScript позволяет объектам наследовать свойства и методы от других объектов. Прототипы являются центральной частью наследования в JavaScript и используются для расширения функциональности объектов.

Senior

1. Какие инструменты вы бы использовали для мониторинга и профилирования приложений Node.js?

Ответ: Инструменты вроде PM2, Node.js Performance Platform, Datadog могут быть использованы для мониторинга и профилирования приложений Node.js.

2. Как можно оптимизировать производительность Node.js приложения?

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

3. Какие паттерны проектирования часто используются в Node.js?

Ответ: В Node.js часто используются такие паттерны проектирования, как Модуль, Наблюдатель (Observer), Промисы (Promises), Фабрика (Factory), Стратегия (Strategy) и другие. Эти паттерны помогают организовать код более эффективно и обеспечивают лучшую масштабируемость и управляемость приложения.

4. Какие стратегии можно использовать для обработки ошибок в больших Node.js проектах?

В больших Node.js проектах для обработки ошибок можно использовать централизованные обработчики ошибок, логирование, мониторинг исключений, использование промисов и async/await для улучшенного контроля над асинхронными ошибками и создание тестов для обеспечения надёжности кода.

Задачи

Объединение интервалов

Дан массив интервалов, где intervals[i] = [start_i, end_i], каждый интервал представляет собой пару чисел. Напишите функцию, которая объединяет все пересекающиеся интервалы в один и возвращает новый массив объединенных интервалов.

Пример:

Ввод: intervals = [[2,6],[1,7],[8,10],[15,18],[5,9]]

Вывод: [[1,10],[15,18]] Объяснение: Интервалы [1,3] и [2,6] пересекаются, поэтому их можно объединить в [1,6].

Объясните алгоритм и оцените его сложность.