1) Как остановить или выйти с Node.js приложения?

Используя метод exit  глобального объекта process, - process.exit(1). Хотя в официальной документации так делать не рекомендуется .  https://nodejs.org/api/process.html#process_process_exit_code, потому что process.exit() закроет приложение, несмотря на события что находятся в цикле событий. Для корректного  выхода из Node.js используете следующий синтаксис:
process.exitCode = 1;
Для остановки выполнения приложения из терминала используйте комбинацию ctrl-с.

2) Как установить переменные среды (environment variables) ?

Перед запуском приложения можно указать переменные среды, используя следующий синтаксис:
NODE_ENV=production PORT=3000 $ [runtime] [program_name]

Переданные значения будут находится в переменной process.env

3) Как использовать async/await в Node.js ?

Начиная с версии Node.js  7.6.0  async / await доступен по умолчанию. В более старых версиях необходимо указать опцию -harmony-async-await. Если вы используете typescript, задайте для свойства "target" значение "es6" в tsconfig.json и код будет автоматически преобразован в es6 совместимый.

4) Как получить переменные строки(query string) запроса в Express.js обработчике?

Query string хранятся в объекте req.query в формате ключ-значение. Кроме того, можно извлечь params запроса из любого URI, используя стандартный пакет "url".
import * as url from "url";
const queryParams=url.parse("https://stackoverflow.com/search?query=nodejs")
console.log(queryParams.query)// nodejs

5) Как проверит какая версия Node.js установлена?
 
Используя команду -v или -version.
$ node -v
v8.1.4

6) Как закрыть  сокетное соединений в модуле "net"?

Метод net.createConnection() возвращает объект Socket, в нем есть метод destroy(), он реализует корректное закрытие сокета.

7) Напишите простой веб-сервер для хостинга html файлов.
import * as connect from 'connect';
import * as  serveStatic from 'serve-static';
connect().use(serveStatic(__dirname)).listen(process.argv[3]?process.argv[3]:3000, function(){
    console.log(`Server running on ${process.argv[3]?process.argv[3]:3000}`);
});

8) Почему использование операций блокирующих/синхронных является плохой практикой в Node.js?

Node.js однопоточен, поэтому одна синхронная операция может блокировать цикл событий, а все остальные будут остановлены. Представьте, что вы обслуживаете http-запросы и  получили запрос на чтение файла и начинаете читать этот файл-пока вы не её не завершите , вы не сможете больше обрабатывать запрос. Такая практика может работать в разработке, но не в производстве. К счастью, node предоставляет синхронный и асинхронный API, например readFile и readFileSync.

9) Что такое стиль Continuation-passing (CPS)? Почему он так популярен в Node.js?

CPS-это стиль, когда функция не возвращает результат выполнения напрямую, а возвращает результат переданной как  параметр функции обратного вызова. Как вы уже знаете, асинхронное программирование является ключевым принципом в JS, поэтому, естественно, оно широко используется в Node. Например, для операций ввода-вывода, таких как чтение/запись файлов. Но у CPS есть одна серьезная проблема, очень легко можно столкнутся с проблемой callback hell.

10) Как создать модуль?

Сначала создайте файл 'lib.js', далее добавите выражение module.exports. Если вы пишите на  TypeScript используйте import/export.
var exports=module.exports={};
exports.someFunc=function someFunc() {
  console.log(`Node is awesome!`)
}
// another file
const utils=require('./lib.js');
utils.someFunc();

11) В чем разница между setTimeout vs process.nexttick и setImmediate?

setImmediate(cb) выполняет callback перед остальными событиями в очереди, по этому оно выполнится раньше setTimeout(fn,0). process.nextTick() будет обработан выполнения текущего события, не смотря на состояния фазы очереди событий(event loop).
setTimeout(()=>console.log('setTimeout'),0)
setImmediate(()=>console.log('setImmediate'))
process.nextTick(()=>console.log('nextTick'))
// will print nextTick setTimeout setImmediate

12) За что отвечает модуль cluster? Как он помогает масштабировать приложения Node.js?

Модуль cluster - это встроенный модуль, который предоставляет утилиты для разветвления вашего однопоточного приложения и позволяет полностью использовать мощность многоядерной системы. С помощью этого модуля можно создавать неограниченное количество дочерних процессов, кроме того доступна связь через IPC.

13) Как управлять зависимостями проекта?

Зависимости проекта управляются с помощью package.json файла. Существует два основных менеджера пакетов: NPM и Yarn. Чтобы добавить некоторую зависимость просто запустите команду npm install "moment", после чего вы можете импортировать эту утилиту в свой код. Также в пакете.файл json вы можете указать зависимости нужные только вовремя разработки, чтобы добавить как можно меньше накладных расходов в продакшене, для этого добавить опцию --save-dev вариант при установке модуля.

14) Как скопировать файл в Node.js?
 
Самый элегантный способ использовать методы createReadStream & createWriteStream, или пакет 'fs-extra' , что обеспечивает много полезных функций, не доступных в стандартном модуле 'fs'.
const fs = require('fs');
fs.createReadStream('dbDump.zip').pipe(fs.createWriteStream('dbDumpCopy.zip'));
const fs = require('fs-extra')

fs.copy('dbDump.zip', 'dbDumpCopy.zip')
  .then(() => console.log('File was successfully copied!'))
  .catch(err =>console.error)

15) Как включить gzip  сжатие для HTTP-сервера ?

Для  Express.js фреймворка, доступен пакет "compression" .
import * as compression  from 'compression'
import * as express from 'express';
const app = express();
function shouldCompress (req, res) {
  if (req.headers['x-no-compression']) {
    return false
  }
  return compression.filter(req, res)
}
app.use(compression({filter: shouldCompress}))

16) How to hash string with md5 function?
 
Используя модуль "crypto".
let message = "I love node and express.js";
const crypto = require('crypto');
let hashed=crypto.createHash('md5').update(message).digest("hex");

17) Напишите функцию, которая загружает изображение из URL?
import * as fs from 'fs';
import * as request from'request';

function downloadImage(uri, filename){
  return new Promise((resolve,reject)=>{
    request.head(uri, function(err, result, body){
      if(err){
        return reject(err);
      }
      request(uri).pipe(fs.createWriteStream(filename)).on('close',()=> resolve());
    });
  })
}

downloadImage('https://docs.npmjs.com/images/npm.svg', 'npm-logo.svg').then(()=>console.log('Images saved.')).catch(er=>console.error);


18) Что такое потоки в Node.js?

Stream - это концепция, впервые представлена в UNIX для передачи данных из одной программы в другую в операциях ввода-вывода. Эта функция помогает сделать программы более независимыми и конкретными, следовательно, комбинирование нескольких программ становятся проще. Еще одна интересная особенность, что поток позволяет обрабатывать большие файлы, которые не помещаются целиком в оперативной памяти. Реализовать такую функциональность в Node.js использует модуль 'stream'. Существует 4 типа потоков: чтения(readable),записи(writable),дуплекс(duplex),преобразования(transform). Потоки могут работать с объектами класса Buffer или строковыми данными. Пример writable потоков: http-запросы,TCP-сокеты.

19) Как кодировать/раскодировать Base64 кодировку?

Используя метод  toString класса Buffer,  any data can be encoded: image,text, binary data.
let base64Data=Buffer.from("I love JS!").toString('base64'); //SSBsb3ZlIEpTIQ==
let decodedData=Buffer.from(base64Data, 'base64').toString('utf8'); // I love JS!

20) Как запускать задания cron в Node.js?

Для запуска простого задания cron можно использовать setInterval, для более сложных интервалов следует использовать внешнюю библиотеку 'node-cron', она поддерживает формат GNU crontab .
import * as cron from 'node-cron';
cron.schedule('5 8 * * Sun', function(){
  console.log('Running every sunday');
});

21) Как автоматически перезапустить сервер при сбое или перезагрузке системы?

Чтобы автоматически перезапустить сервер после перезагрузке системы используйте Linux утилиту  'upstart' . Чтобы автоматически перезапустить сервер после сбоя используйте forever или pm2.