答案: Node.js 是一个基于 Chrome 的 V8 JavaScript 引擎构建的运行时环境,允许开发者在服务器端运行 JavaScript 代码。它专为构建可扩展的网络应用程序而设计,并支持非阻塞、事件驱动的架构。
答案:JavaScript 是一种在浏览器中运行的编程语言。
Node.js 是一个运行环境,允许 JavaScript 在服务器端运行。
答案:事件驱动编程是一种编程范例,其中程序的流程由用户操作、传感器输出或来自其他程序的消息等事件决定。在 Node.js 中,事件驱动编程是使用事件发射器和侦听器处理异步操作的核心。
答案: process.nextTick() 安排回调在当前操作完成后、事件循环继续之前执行。
setImmediate() 安排在 I/O 事件之后将回调放置在事件循环中。
答案: Node.js 使用单线程、非阻塞 I/O 模型和事件驱动架构。它利用回调、Promise 和 async/await 来处理异步操作,确保服务器可以同时处理多个请求,而不会阻塞主线程。
答案: 流是 Node.js 中的对象,可让您以块的形式读取或写入数据。它们用于通过以更小的、可管理的块的形式处理大量数据,从而减少内存使用。有四种类型的流:
可读(例如,fs.createReadStream())
可写(例如,fs.createWriteStream())
双工(可读可写)
变换(一种双工流,其输出是输入的变换)
答案:同步代码是阻塞的;它会等待每个操作完成,然后再进行下一个操作。
异步代码是非阻塞的;它允许程序继续执行,而无需等待操作完成(通过回调、promise 或 async/await 处理)。
答案: Express.js 中的中间件函数是在请求-响应周期中执行的函数。他们可以在将控制权传递给下一个中间件功能之前修改请求、响应或执行某些逻辑。常见类型包括:
应用程序级中间件:绑定到express()的实例
路由器级中间件:绑定到express.Router()
的实例
错误处理中间件
*答案:* 事件循环负责处理 Node.js 中的异步回调。它持续监视调用堆栈、任务队列和 I/O 操作。当调用堆栈为空时,它会处理事件队列中的任务,通过推迟繁重的操作来确保非阻塞 I/O。
答案: cluster 模块允许 Node.js 创建共享同一服务器端口的子进程(worker)。这有助于负载平衡并通过运行多个 Node.js 实例同时处理更多请求来充分利用多核系统。
答案: require() 是 CommonJS 模块系统的一部分,并且是同步的。它用于加载 ES6 之前的 Node.js 版本中的模块。
import 是 ES6 模块系统的一部分,它与 JavaScript 的本机模块系统配合使用,支持 tree-shaking 和静态分析。它用于带有 ECMAScript 模块的较新版本的 Node.js。
答案:错误处理可以通过多种方式完成:
使用错误优先模式的回调 (callback(err, result))
使用带有 .catch() 的 Promise 来处理被拒绝的 Promise
使用带有 async/await 的 try...catch 块
在 Express.js 中使用中间件处理错误
答案: package.json 是 Node.js 项目中的清单文件,其中包含有关项目及其依赖项的元数据。它定义了项目的名称、版本、主入口点、脚本、依赖项、devDependency 和其他配置。
*答案:* fs.readFile() 将整个文件读取到内存中,然后使用文件内容执行回调。
fs.createReadStream() 以块的形式读取文件,这使得大文件的内存效率更高,因为它流式传输数据而不是一次性加载全部数据。