1. Что такое "ад обратных вызовов" и как его избежать?

Причина ада обратных вызовов в том, что люди пытаются написать JavaScript таким образом, чтобы выполнение происходило визуально сверху вниз.

  1. Не вкладывать функции. Дайте им имена и разместите их на верхнем уровне вашей программы.
  2. Используйте поднятие функций в своих интересах, чтобы перемещать функции вниз
  3. Обрабатывайте каждую ошибку в каждом из ваших обратных вызовов. В этом вам поможет линтер типа стандартный.
  4. Создавайте многократно используемые функции и размещайте их в модуле, чтобы уменьшить когнитивную нагрузку, необходимую для понимания вашего кода. Подобное разделение кода на небольшие фрагменты также помогает обрабатывать ошибки, писать тесты, вынуждает вас создавать стабильный и документированный общедоступный API для вашего кода и помогает при рефакторинге.

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

Использованная литература:

2. Что такое «заглушки» в Node.js?

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

Чтобы включить его в рабочий процесс:

Заглушки

  • Настройка — определите саму заглушку, какой объект в программе вы заглушаете и как
  • Упражнение — запустите функцию, которую хотите протестировать.
  • Проверить – проверить заготовку на наличие значений, которые прошли через нее, чтобы они соответствовали ожиданиям.
  • Teardown — при необходимости очистить. например, заглушки времени обычно глобальны, вам нужно вернуть контроль

3. Что такое «потоки» в Node.JS?

Поток — это абстрактный интерфейс для работы с потоковыми данными в Node.js. Модуль stream предоставляет API для реализации потокового интерфейса.

Node.js предоставляет множество потоковых объектов. Например, запрос к HTTP-серверу и process.stdout являются экземплярами потока.

Потоки могут быть доступны для чтения, записи или и того, и другого. Все потоки являются экземплярами EventEmitter.

Чтобы получить доступ к модулю stream:

const stream = require('stream');

Модуль stream полезен для создания новых типов экземпляров потока. Обычно нет необходимости использовать модуль stream для потребления потоков.

Использованная литература:

4. Что вы подразумеваете под цепочкой в ​​Node.JS?

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

5. Объясните, что такое «Консоль» в Node.JS?

Модуль console предоставляет простую консоль отладки, похожую на механизм консоли JavaScript, предоставляемый веб-браузерами.

Модуль экспортирует два конкретных компонента:

  • Класс Console с такими методами, как console.log(), console.error() и console.warn(), которые можно использовать для записи в любой поток Node.js.
  • Глобальный экземпляр console настроен на запись в process.stdout и process.stderr. Глобальный console можно использовать без вызова require('console').

Использованная литература:

6. Объясните коды выхода в Node.JS? Перечислите некоторые коды выхода?

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

  • 1 Неустранимое фатальное исключение. Произошло неперехваченное исключение, которое не было обработано доменом или обработчиком события 'uncaughtException'.
  • 2: не используется (зарезервировано Bash для встроенного неправильного использования)
  • 3 Внутренняя ошибка синтаксического анализа JavaScript. Исходный код JavaScript, встроенный в процесс начальной загрузки Node.js, вызвал ошибку синтаксического анализа. Это случается крайне редко и обычно может происходить только во время разработки самого Node.js.
  • 4 Внутренний сбой оценки JavaScript. Исходный код JavaScript, встроенный в процесс начальной загрузки Node.js, не смог вернуть значение функции при оценке. Это случается крайне редко и обычно может происходить только во время разработки самого Node.js.
  • 5 Фатальная ошибка. В версии 8 произошла фатальная неисправимая ошибка. Обычно сообщение печатается в stderr с префиксом FATAL ERROR.
  • 6 Внутренний нефункциональный обработчик исключений: возникло неперехваченное исключение, но функция внутреннего обработчика неустранимых исключений была каким-то образом установлена ​​на нефункцию и не могла быть вызвана.
  • 7 Сбой во время выполнения внутреннего обработчика исключений: возникло необработанное исключение, и функция внутреннего обработчика неустранимых исключений сама выдала ошибку при попытке его обработать. Это может произойти, например, если обработчик 'uncaughtException' или domain.on('error') выдает ошибку.
  • 8: Не используется. В предыдущих версиях Node.js код выхода 8 иногда указывал на неперехваченное исключение.
  • 9 Недопустимый аргумент: либо указан неизвестный параметр, либо параметр, требующий значения, был предоставлен без значения.
  • 10 Внутренний сбой во время выполнения JavaScript: внутренний исходный код JavaScript в процессе начальной загрузки Node.js вызвал ошибку при вызове функции начальной загрузки. Это случается крайне редко и обычно может происходить только во время разработки самого Node.js.
  • 12 Недопустимый аргумент отладки. Были установлены параметры --inspect и/или --inspect-brk, но выбранный номер порта недействителен или недоступен.
  • >128 Выходы по сигналу. Если Node.js получает фатальный сигнал, например SIGKILL или SIGHUP, код выхода будет равен 128 плюс значение кода сигнала. Это стандартная практика POSIX, поскольку коды выхода определяются как 7-битные целые числа, а выходы сигнала устанавливают старший бит, а затем содержат значение кода сигнала. Например, сигнал SIGABRT имеет значение 6, поэтому ожидаемый код выхода будет 128 + 6 или 134.

Использованная литература:

7. В чем разница между кластерным и некластерным индексом?

  • кластеризованный индекс определяет порядок, в котором данные физически хранятся в таблице. Табличные данные могут быть отсортированы единственным образом, поэтому для каждой таблицы может быть только один кластеризованный индекс. В SQL Server ограничение первичного ключа автоматически создает кластеризованный индекс для этого конкретного столбца.
  • Некластеризованный индекс не сортирует физические данные внутри таблицы. Фактически некластеризованный индекс хранится в одном месте, а табличные данные — в другом. Это похоже на учебник, в котором содержание книги расположено в одном месте, а предметный указатель — в другом. Это позволяет использовать более одного некластеризованного индекса для каждой таблицы.

8. Что такое определяемая пользователем функция? Что такое все типы пользовательских функций?

  • Определяемая пользователем функция – это запрограммированная процедура, параметры которой устанавливаются пользователем системы. Определяемые пользователем функции часто рассматриваются как ярлыки программирования, поскольку они определяют функции, которые выполняют определенные задачи в более крупной системе, такой как база данных или программа для работы с электронными таблицами.
  • Может быть 4 разных типа пользовательских-определяемых функций, а именно: Функция без аргументов и без возвращаемого значения. Функция без аргументов и возвращаемого значения. Функция с аргументами и без возвращаемого значения. Функция с аргументами и возвращаемым значением.