Добавить в корзинуПозвонить
Найти в Дзене
Lyakhov Eugene

Теоретические задачи Node js

1. Вопрос: Что такое Node.js и чем он отличается от JavaScript в браузере?
Ответ: Node.js — это среда выполнения JavaScript, построенная на движке V8 от Google. Она позволяет запускать JavaScript вне браузера, на сервере. Основные отличия: отсутствие DOM и API браузера, наличие модулей для работы с файловой системой, сетью, процессами ОС, а также собственный менеджер пакетов npm. 2. Вопрос: Что такое цикл событий (event loop) в Node.js и как он работает?
Ответ: Цикл событий — это механизм, который позволяет Node.js выполнять неблокирующие операции ввода‑вывода, несмотря на то что JavaScript однопоточен. Он берёт задачи из очереди событий и передаёт их на выполнение движку V8. Операции ввода‑вывода делегируются системному ядру, что позволяет не блокировать основной поток. 3. Вопрос: В чём разница между process.nextTick() и setImmediate()?
Ответ: process.nextTick() ставит callback в начало очереди текущей фазы цикла событий — он выполнится сразу после завершения текущей операции, но пере

1. Вопрос: Что такое Node.js и чем он отличается от JavaScript в браузере?
Ответ: Node.js — это среда выполнения JavaScript, построенная на движке V8 от Google. Она позволяет запускать JavaScript вне браузера, на сервере. Основные отличия: отсутствие DOM и API браузера, наличие модулей для работы с файловой системой, сетью, процессами ОС, а также собственный менеджер пакетов npm.

2. Вопрос: Что такое цикл событий (event loop) в Node.js и как он работает?
Ответ: Цикл событий — это механизм, который позволяет Node.js выполнять неблокирующие операции ввода‑вывода, несмотря на то что JavaScript однопоточен. Он берёт задачи из очереди событий и передаёт их на выполнение движку V8. Операции ввода‑вывода делегируются системному ядру, что позволяет не блокировать основной поток.

3. Вопрос: В чём разница между process.nextTick() и setImmediate()?
Ответ: process.nextTick() ставит callback в начало очереди текущей фазы цикла событий — он выполнится сразу после завершения текущей операции, но перед тем, как цикл перейдёт к следующей фазе. setImmediate() помещает callback в фазу "check" цикла событий, которая наступает после фаз ввода‑вывода. Таким образом, nextTick выполняется раньше, чем setImmediate.

4. Вопрос: Какие глобальные объекты доступны в Node.js?
Ответ: Например: global, __dirname, __filename, process, Buffer, module, exports, require(). В отличие от браузера, в Node.js нет объекта window, но есть global, который является корневым.

5. Вопрос: Для чего используется модуль fs?
Ответ: Модуль fs (file system) предоставляет API для работы с файловой системой: чтение, запись, переименование, удаление файлов и директорий, получение информации о файлах. Он поддерживает как синхронные, так и асинхронные методы.

6. Вопрос: Что такое npm и какую роль он играет в экосистеме Node.js?
Ответ: npm (Node Package Manager) — это стандартный менеджер пакетов для Node.js. Он позволяет устанавливать, обновлять и удалять сторонние библиотеки, управлять зависимостями проекта через файл package.json, а также публиковать собственные пакеты.

7. Вопрос: Объясните понятие "потоки" (streams) в Node.js.
Ответ: Потоки — это абстракция для последовательного чтения или записи данных. Они позволяют обрабатывать большие объёмы информации по частям, не загружая всю память сразу. В Node.js существуют четыре типа потоков: Readable, Writable, Duplex и Transform.

8. Вопрос: Что такое middleware в контексте Express.js? Приведите пример.
Ответ: Middleware — это функции, которые имеют доступ к объектам запроса (req), ответа (res) и следующей функции в цикле обработки (next). Они могут выполнять код, изменять объекты запроса/ответа, завершать обработку или передавать управление дальше. Пример: app.use(express.json()) — парсит JSON тела запроса.

9. Вопрос: Как обрабатывать ошибки в асинхронном коде Node.js?
Ответ: Существует несколько способов: колбэки с первым аргументом-ошибкой (error-first callbacks), промисы (обработка через .catch()), использование try/catch с async/await, а также глобальный обработчик process.on('uncaughtException') и process.on('unhandledRejection').

10. Вопрос: Для чего нужен package-lock.json?
Ответ: Файл package-lock.json фиксирует точные версии всех установленных зависимостей и их вложенных модулей. Это гарантирует, что на любой машине при выполнении npm install будет получено идентичное дерево зависимостей, что устраняет неопределённость версий.

11. Вопрос: Что такое буферы (Buffer) в Node.js?
Ответ: Buffer — это глобальный класс для работы с бинарными данными напрямую в памяти. В отличие от обычных массивов, размер буфера фиксирован и предназначен для работы с потоками данных, файлами, сетевыми пакетами и другими низкоуровневыми операциями.

12. Вопрос: В чём отличие между require() и import?
Ответ: require() используется в CommonJS (стандарт Node.js по умолчанию) — он синхронный и загружает модули во время выполнения. import — это синтаксис ES-модулей (ECMAScript), поддерживаемый в Node.js с версии 12 с флагом --experimental-modules или при использовании расширения .mjs. import может быть асинхронным и анализируется на этапе парсинга.

13. Вопрос: Как создать простой HTTP-сервер на Node.js без сторонних фреймворков?
Ответ: Используя встроенный модуль http:

javascript

const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World');
});
server.listen(3000);

14. Вопрос: Что такое кластеризация (cluster) в Node.js и зачем она нужна?
Ответ: Модуль cluster позволяет создавать дочерние процессы (workers), которые разделяют один порт сервера. Это позволяет использовать все ядра процессора и обеспечивает высокую доступность — при падении одного воркера основной процесс (master) может создать новый.

15. Вопрос: Как работать с переменными окружения в Node.js?
Ответ: Переменные окружения доступны через объект process.env. Например, process.env.PORT. Для удобства часто используют файл .env и библиотеку dotenv, которая загружает переменные из файла в process.env.

16. Вопрос: Какие основные аргументы командной строки можно использовать при запуске Node.js?
Ответ: Например:

  • node --version — версия Node.js;
  • node --eval "code" — выполнить код;
  • node --inspect — запустить с отладчиком;
  • node --max-old-space-size=4096 — ограничить память;
  • node -r module — предзагрузить модуль.

17. Вопрос: Что такое "EventEmitter" и где он применяется?
Ответ: EventEmitter — это класс из модуля events, который позволяет подписываться на события и генерировать их. Многие встроенные объекты Node.js (например, потоки, http-сервер) наследуют от него. Используется для реализации паттерна "наблюдатель".

18. Вопрос: Как обеспечить безопасность Express-приложения?
Ответ: Рекомендации: использовать заголовки безопасности (helmet), валидировать входные данные, экранировать вывод, ограничивать частоту запросов (express-rate-limit), предотвращать внедрение зависимостей (npm audit), работать с куками через флаги httpOnly и secure, не использовать устаревшие версии пакетов.

19. Вопрос: Чем отличается readFile от createReadStream?
Ответ: fs.readFile() читает весь файл в память и передаёт содержимое в колбэк. Для больших файлов это может вызвать проблемы с памятью. fs.createReadStream() создаёт поток, который читает файл по частям (чанкам), что эффективно для больших объёмов данных.

20. Вопрос: Какие типы ошибок бывают в Node.js и как их классифицируют?
Ответ: Можно выделить:

  • Стандартные ошибки JS (SyntaxError, ReferenceError, TypeError);
  • Системные ошибки (операции ОС: ENOENT, EACCES);
  • Ошибки пользовательского кода (перехватываемые исключения);
  • Асинхронные ошибки (необработанные reject'ы);
  • Ошибки утверждений (AssertionError).

21. Вопрос: Что такое REPL в Node.js?
Ответ: REPL (Read-Eval-Print Loop) — это интерактивная среда, в которой можно вводить выражения JavaScript и немедленно видеть результат. Запускается командой node без аргументов. Полезна для быстрого тестирования кода.

22. Вопрос: Как отлаживать Node.js приложение?
Ответ: Можно использовать встроенный отладчик (запуск с флагом --inspect и подключение Chrome DevTools), консольные логи, IDE (например, VS Code) с точками останова, а также сторонние инструменты (ndb, node-inspector).

23. Вопрос: Для чего используется модуль path?
Ответ: Модуль path предоставляет утилиты для работы с путями файловой системы: нормализация, соединение частей пути (path.join), получение расширения (path.extname), имени файла (path.basename), директории (path.dirname) и другие операции, независимые от платформы.

24. Вопрос: В чём разница между exports и module.exports?
Ответ: exports — это ссылка на module.exports. По умолчанию module.exports — пустой объект. Если присвоить exports новое значение, эта ссылка разорвётся, и экспорт не сработает. Правильный способ экспортировать один объект/функцию: module.exports = .... Для добавления свойств можно использовать exports.someProp = ....

25. Вопрос: Какие ограничения у однопоточной модели Node.js и как их обходят?
Ответ: Однопоточность означает, что длительные синхронные операции (например, сложные вычисления) блокируют цикл событий. Обходные пути:

  • Использование асинхронных версий методов;
  • Вынос тяжёлых вычислений в отдельный процесс через child_process.fork() или воркеры (worker_threads);
  • Применение кластеризации для распределения нагрузки.

Страховка на собеседовании

Знание есть, но стресс мешает?
Бесплатное сообщество для прокачки карьеры в IT

Подпишись на https://t.me/IT_Interview_Partner_Bot

Подпишись на
https://t.me/LyakhovEugene