文章图片
Node.js面试题解析:从本质上讲,Node.js 是使用 Chrome 的 V8 JavaScript 引擎作为平台构建的 JS 运行时。Node.js 因其轻量级和高效而广受欢迎,这主要是由于其事件驱动和非阻塞 I/O 模型。Node.js 以性能为主要关注点,负责将 JavaScript 代码处理成本地机器代码,然后你的计算机可以使用它来执行这些过程。尽管它基于谷歌 Chrome 和其他基于铬的浏览器(Vivaldi、Brave 和 Opera)中使用的 V8 引擎,但它并不在浏览器本身中运行。在开发过程中,引擎中添加了文件系统 API、HTTP 库和 OS 实用程序方法等各种功能,以便 Node.js 可以作为程序在计算机上执行。问题:在 Node.js 中如何处理“子线程”?
答:从本质上讲,Node.js 是一个单线程进程。此外,它不会向开发人员公开任何子线程和线程管理模式。但是,子线程可能会在 Node.js 中的各种进程中生成,其中之一是异步 I/O。尽管通过这些进程产生的子线程在后台运行,但它们不会阻塞主代码或执行任何应用程序代码。但是,如果你需要在由 Node.js 提供支持的应用程序中支持线程,则可以使用多种工具。问题:请说明 Angular JS 和 Node.js 之间的一些差异。
答:Node.js面试题和答案合集 - 以下是 Angular JS 和 Node.js 之间的一些区别
Angular JS | Node.js |
Angular JS 是用 TypeScript 编写的 | Node.js 是用多种语言编写的,例如 C、C++ 和 JavaScript |
在创建高度交互的网页时是理想的 | 它适用于小型项目和应用 |
它是一个用于Web 应用程序开发的开源框架 | 它是一个基于多平台的运行时环境 |
用于为客户端创建单页应用程序 | 用于创建服务器端网络应用程序 |
帮助将应用程序拆分为模型-视图-控制器 (MVC) 组件 | 帮助生成数据库查询 |
适合开发实时应用 | 它适用于需要更快和高度可扩展的东西的情况 |
Angular 本身就是一个 Web 应用程序框架 | Node.js 有很多框架,包括 Express.js、Partial.js 等等 |
回答:
- 复杂的单页应用程序: Node.js 非常适合创建性质复杂的单页应用程序,例如在线绘图工具、邮件解决方案和社交网络。这些类型的应用程序仅限于一页,用户体验类似于桌面应用程序的用户体验。由于 Node.js 的异步数据流发生在后端,因此可以在这里使用它。
- 实时应用程序 (RTA):我们在日常生活中使用大量实时应用程序。例如,Google Docs、Slack、Skype、WhatsApp 等等。Node.js 的事件 API、WebSockets 和异步数据流可以确保服务器运行无故障,这将立即更新数据。
- 聊天室:这可能属于 RTA,但由于即时消息和聊天已成为顶级实时应用程序模型之一,因此需要特别关注。如果你的产品在这个领域,你正在寻找诸如轻量级、高流量容量和大量数据流等要求。所有这些要求都可以使用 Node.js 和后端的一些JavaScript 框架来满足。上述网络套接字在聊天室环境中接收和发送消息时派上用场。
- 基于浏览器的游戏:上述聊天室也可以集成到基于浏览器的游戏中,其中 Node.js 是一个完美的选择。将 Node.js 技术与 HTML5 甚至 JS 工具相结合,将帮助你创建基于浏览器的实时游戏。
- 数据流应用程序:另一种 Node.js 完美的应用程序是数据流应用程序。这些应用程序的主要卖点是它们可以在卸载阶段处理数据。通过这种方式,虽然可以预先下载某些部分以保持连接,并且可以在必要时下载其他部分。在这种情况下,Node.js 流应用程序处理音频和视频数据。
- 具象状态传输 (REST) 应用程序编程接口 (API):由于超文本传输??协议 (HTTP) 的广泛使用,基于 REST 的 API 在构建现代商业软件架构中占有关键地位。Node.js 生态系统的 Express.js 框架可以帮助构建快速、轻便的 REST API。
- 服务器端 Web 应用程序:虽然 Node.js 及其框架可以帮助创建服务器端 Web 应用程序,但应该注意的是,不应期望 CPU 密集型操作。
- 命令行工具: Node.js 庞大的生态系统是构建命令行工具的一个优势,网上有各种教程可以帮助你构建自己的 CLT。
答:事件驱动编程方法深刻地使用事件来触发各种功能。在这种情况下,事件可以是任何事件,例如按下键或单击鼠标按钮。每当发生事件时,都会按照“发布-订阅”模式执行已向元素注册的回调函数。由于这种编程方法,Node.js 比其他类似技术更快。问题:在 Node.js 的上下文中,什么是 REPL?
答:在 Node.js 的上下文中,REPL 是读取、评估、打印和循环。REPL 是一种计算机环境(类似于 Windows 控制台或 Linux shell),其中输入的任何命令都会得到系统响应的输出。默认情况下,REPL 环境与 Node.js 捆绑在一起,它执行以下任务:
- 读取:读取用户的输入并将其转换为 JavaScript 数据结构,最后将其存储在内存中
- Eval:它接收数据结构并对其进行评估
- 打印:它打印最终输出
- 循环:它循环提供的命令,直到按 CTRL + C 两次
答:在 Node.js 中,测试金字塔是一个图表,它解释了项目的富有成效的开发所需的单元测试、集成测试和端到端测试的比例。测试金字塔的组成部分如下:
- 单元测试:他们单独测试代码的各个单元。它们很快,你可能会执行很多这些测试
- 集成测试:他们测试不同单元之间的集成。
- 端到端 (E2E) 测试:他们测试整个系统,从用户界面到数据存储,然后返回。
Node.js面试题解析: Libuv是Node.js的一个支持库,用于异步输入/输出。虽然它最初是为 Node.js 开发的,但现在它见证了其他系统的实践,如 Luvit、Julia、Pyuv 等。Libuv 的一些特点是:
- 文件系统事件
- 子进程
- 支持全功能事件循环
- 异步 TCP 和 UDP 套接字
答:尽管 Node.js 可以帮助创建服务器端应用程序,但 CPU 激励应用程序并不是 Node.js 的强项。占用大量 CPU 的操作为阻塞传入请求铺平了道路,并将线程推入危急情况。问题:Express JS 包的目的是什么?
答: 常见的Node.js面试题有哪些 - ExpressJS 建立在 Node.js 之上,是一个 JS 框架,用于管理服务器端应用程序中路由和服务器之间的信息流。轻量级、灵活且具有多种相关功能,适用于移动和 Web 应用程序开发。问题:Node.js 与 Javascript 之间的主要区别是什么?回答:
Node.js | JavaScript |
跨平台开源 JS 运行时引擎。 | 一种基于 OOPS 概念的高级脚本语言。 |
代码可以在浏览器之外运行。 | 代码只能在浏览器中运行。 |
在服务器端使用。 | 在客户端使用。 |
没有添加 HTML 标签的能力。 | 可以添加 HTML 标签。 |
只能在 Google Chrome 的 V8 引擎上运行。 | 可以在任何浏览器上运行。 |
用 C++ 和 JavaScript 编写。 | 用 C++ 编写的 ECMA 脚本的升级版本。 |
- 易于学习和巨大的社区支持。
- 易于扩展和高性能。
- 具有扩展支持的高度可扩展性。
- 全栈 JavaScript。
- 缓存机制使网页加载速度更快。
- 非阻塞 I/O 系统。
{
id: '.',
exports: {},
parent: null,
filename: '/modtest.js',
loaded: false,
children: [
],
paths:
[
'/node_modules',
'/Users/node_modules',
'/Users/mycomp/projects/node_modules',
'/node_modules'
]
}
请注意,exports 属性为空,现在如果我们将代码应用于此属性,它将成为模块的导出。如果我们需要另一个文件中的模块,那将是导出属性值:
module.exports.stringProperty = "Hello, welcome";
console.log(module);
{
id: '.',
exports: { stringProperty: 'Hello, welcome' }
...
}
问题:Node.js 中的 Reactor 模式是什么?答:是 Node.js 中非阻塞 I/O 操作的概念。通过这种模式,我们获得了每个 I/O 操作的处理程序(或回调函数)。每个 I/O 请求都被提交给一个多路分解器,该多路分解器处理并发性并对请求/事件进行排队。Reactor 模式由资源、事件通知器/解复用器、事件循环、事件队列、请求处理程序组成。问题:解释 Node.js 的 LTS 版本答: LTS 或长期支持适用于 Node.js 项目长期支持和维护的发布行。LTS 有两种类型:
- Active,即主动维护和升级,以及
- 接近生产线末端并维持一小段时间的维护生产线。
- 特定于 Node.js 的遗留 API。
- 实现 Web 浏览器使用的 WHATWG URL 标准的较新 API。
[
code language="javascript"]
fs.readFile('/root/text.txt', func(err, data){
console.log(data);
});
console.log("This is displayed first");
[
/code]
在这里,readFile 操作需要一些时间;但是,下一个console.log 不会被阻止。操作完成后,将显示数据。问题:Node.js 中的 spawn() 和 fork() 方法的主要区别是什么?回答:
Spawn | Fork |
旨在运行系统命令。 | spawn() 的一个特殊实例,它运行一个新的 V8 实例。 |
在节点进程内不执行任何其他代码。 | 可以创建在同一个 Node 代码库上运行的多个工作程序。 |
child_process.spawn(command[, args][, options]) 使用给定的命令创建一个新进程。 | 使用 spawn() 创建子进程的特殊情况。child_process.fork(modulePath[, args][, options]) |
在父进程和子进程之间创建流接口(二进制格式的数据缓冲)。 | 在父进程和子进程之间创建通信(消息)通道。 |
对于数据流(读/写)等连续操作更有用,例如,将图像/文件从 spawn 进程流式传输到父进程。 | 对于消息传递更有用,例如 JSON 或 XML 数据消息传递。 |
let execseq = function() {
setImmediate(() => console.log("immediate"));
process.nextTick(() => console.log("nextTick"));
console.log("event loop");
}
这将执行“事件循环”,然后是“nextTick”,然后是“立即”。问题:解释一下 Node.js 和 Ajax 的区别?答: Ajax 是一种客户端技术,用于在不刷新页面内容的情况下更新页面内容。Node.js 是用于开发服务器软件的服务器端 JavaScript。此外,Node.js 是一个成熟的开发环境,而 Ajax 仅用于获取数据或运行脚本。问题:请说明必须将 Express 的“应用程序”和“服务器”分开的原因。答:如果我们将应用程序和服务器功能分开,可以将代码分成多个模块,从而减少模块之间的依赖关系。每个模块将执行单个任务。另外,由于逻辑分离,我们可以避免重复代码。问题:解释 setImmediate() 与 setTimeout() 之间的区别。答:虽然立即这个词有点误导,但回调只发生在 I/O 事件回调之后,当我们调用 setImmediate() 时。setTimeout() 用于设置执行一次性回调的延迟(以毫秒为单位)。如果我们执行,
setImmediate(function() {
console.log('setImmediate')
})
setTimeout(function() {
console.log('setTimeout')
}, 0)
我们将获得输出为“setTimeOut”,然后是“setImmediate”。问题:列出并解释 Node.js 的流行模块?Node.js面试题解析: Node.js 的核心模块是:
http | 包括用于创建 Node.js http 服务器的类、方法和事件。 |
URL | 包含用于 URL 解析和解析的方法。 |
querystring | 处理查询字符串。 |
path | 包含处理文件路径的方法。 |
FS | 由处理文件 I/O 的类、方法和事件组成。 |
util | util 模块包含对开发人员有用的实用函数。 |
var readStream = fs.createReadStream('data.txt');
readStream.on('data', function(chunk) {
data += chunk;
});
写入流的示例:
var writeStream = fs.createWriteStream('dataout.txt');
writeStream.write(data,'UTF8');
writeStream.end();
问题:Node.js 中的加密是什么?它是如何使用的?答: Node.js面试题和答案合集 - Node.js 中的crypto 模块用于密码学,即包括一组用于open SSL 的hash、HMAC、sign、decipher、cipher 和verify 函数的包装器。以下是使用密码进行加密的示例:
const crypto = require('crypto');
const cipher = crypto.createCipher('usrnm', 'pwdd');
var encryptd = cipher.update('Welcome to hackr', 'utf8', 'hex');
encryptd += cipher.final('hex');
console.log(encryptd);
让我们使用 decipher 解密上面的内容,看看我们是否得到相同的文本:
const crypto = require('crypto');
const decipher = crypto.createDecipher('usrnm', 'pwdd');
var encryptd = '<
enter the previous output-encrypted code here>';
var decryptd = decipher.update(encryptd, 'hex', 'utf8');
decryptd += decipher.final('utf8');
console.log(decryptd);
问题:解释一下Node.js中DNS模块的使用?答: 常见的Node.js面试题有哪些 - DNS 模块用于解析名称。它由操作系统提供,也用于实际的 DNS 查找。使用此模块,DNS 服务器将域/子域转换为 IP 地址,因此不需要记住 IP 地址。问题:解释Node.js的安全机制?答:一些机制是:
- 授权码:我们可以使用授权码来保护 Node.js。这样,任何想要访问 Node.js 的第三方都会通过资源提供者网络的 GET 请求。
- 认证模块:认证模块就像过滤器,它扫描 Node.js 的库以识别是否存在任何第三方代码。可以使用认证检测任何黑客行为。
- Curated Screening register:这是一个质量控制系统,所有包(代码和软件)都经过检查以确保其安全。此扫描有助于消除未经验证或不可靠的库进入你的应用程序。
- 定期更新:下载最新版本的 Node.js 将防止潜在的黑客和攻击。
- 异步/非阻塞:这些请求不等待服务器响应。它们继续处理下一个请求,一旦收到响应,它们就会收到相同的响应。
- 同步/阻塞:这些是阻塞任何其他请求的请求。请求完成后,才会处理下一个请求。
答: Node.js 的长期支持或 LTS 版本/发行版是接收所有关键修复、性能提升和安全更新的发行版。这些版本获得至少 1.5 年的支持,并专注于应用程序的安全性和稳定性。问题:解释 Node.js 中 assert 的工作原理
答: Assert 用于在 Node.js 中编写测试。仅当正在运行的任何测试用例失败时才提供反馈。为了测试不变量,该模块为你提供了一组断言测试。它在 Node.js 内部使用,但如果你使用 require ('assert') 代码,你也可以在其他应用程序中使用它。问题:什么是回调地狱?
答:在 Node.js 中,回调地狱也被称为末日金字塔。由密集嵌套、不可读和不可管理的回调引起,使代码更难阅读和调试。这是由于异步逻辑执行不当造成的。问题:Node.js 中的存根是什么?
答:存根是用于刺激组件行为的程序或函数。存根在测试用例期间提供函数的答案。问题:什么是事件循环?
答:所有异步回调都由 Node.js 中的事件循环处理。它是 Node.js 中非阻塞输入/输出的基础,使其成为环境中最重要的特性之一。由于 Node.js 是事件驱动的,因此可以将侦听器附加到事件上,以便在事件发生时由前者执行回调。Node.js 执行事件循环,然后继续执行其余代码,无需等待输出。一旦整个操作达到高潮,它就会接收输出并执行回调函数。一旦它收到响应,函数就会一一执行。问题:Node.js 中的流是什么?它的种类有哪些?
答:在 Node.js 中,流是类似于字符串和数组的数据集合。此外,流是你可以连续读取源数据或写入目标数据的对象。这些流对于读取和处理大量信息特别有用。Node.js 中有四种类型的流,它们是:
- 可读:用于从源读取大量数据
- Writeable : 用于将数据写入目的地
- 双工:用于读写
- Transform:用于数据修改的双工流
答: Node.js 提供了一个定时器模块,包含多个函数,用于在特定时间段后执行代码。此模块中提供的一些功能是:
- process.nextTick:该函数调度一个回调函数,该函数需要在事件循环的下一次迭代中调用
- setTimeout/clearTimeout:此函数在指定的时间量(以毫秒为单位)之后安排代码执行
- setImmediate/clearImmediate:此函数在现有事件循环周期结束时执行代码
- setInterval/clearInterval:该函数用于多次执行一段代码
答: process.nextTick() 和 setImmediate() 都是 Timers 模块的函数,但不同之处在于它们的执行方式。
- process.nextTick() 函数等待动作的执行,直到事件循环中的下一次传递或事件循环结束时,然后只调用回调函数。
- setImmediate() 函数用于在事件循环的下一个循环中执行回调方法,将其返回到事件循环以执行输入/输出操作。
答: readFile 和 createReadStream 都是 Node.js 提供的读取和执行文件的方式。readFile 进程是完全缓冲的,只有当完整的文件进入缓冲区并且可以读取时才返回响应。此过程是高度内存密集型的,并且在文件很大的情况下可能会变慢。createReadStream 过程被部分缓冲,将整个过程视为一系列事件。在这个过程中,整个文件被分割成块,这些块被处理,然后作为一个连续的响应单独发送。与 readFile 不同,createReadStream 在读取和处理大文件时很有效。问题:Node.js 是否提供调试器?
答: Node.js 提供了内置的 TCP 协议和调试客户端。如果要调试文件,可以在要调试的 JS 文件名称前使用以下参数。
node debug [
script.js | -e “script” | :]
问题:描述 Node.js 中的退出代码。
答: Node.js 中的退出代码是一组用于完成进程的特定代码,也可以包括全局对象。Node.js 中的一些退出代码是:
- 内部 JavaScript 评估失败
- 致命错误
- 内部异常处理程序运行时失败
- 没用过
- 未捕获的致命异常
答:常见的Node.js面试题有哪些 - 当任何Node.js项目处于生产阶段时,Node.js提倡使用NODE_ENV变量来标记它的原则。当 NODE-ENV 设置为生产时,你的应用程序将以比平时快 2 到 3 倍的速度执行。该变量还提高了项目开发阶段的判断力。问题:Node.js 中的事件发射器是什么?
答: Node.js 有一个 EventEmitter 类,它保存所有可以发出事件的对象。这些对象拥有一个名为 eventEmitter.on() 的函数,使用该函数可以将多个函数附加到对象发出的事件。每当 EventEmitter 类中的对象抛出事件时,都会同步调用所有附加到 vent 的函数。问题:什么是 Punycode?
答: Punycode 可以定义为 Node.js 中的一种编码语法,它有助于将 Unicode 字符串转换为 ASCII。这是因为主机名只能理解 ASCII 代码而不是 Unicode。虽然它在最近版本的默认包中捆绑在一起,但你可以使用以下代码在以前的版本中使用它:
punycode = require('punycode') ;
问题:解释 JIT 的概念并强调它与 Node.js 的关系。
答: JIT 或即时编译器通过将字节码(由可解释的指令组成)转换为指令来将字节码(由可解释的指令组成)发送到处理器。一旦你完成了程序的编写部分,源语言语句被编译器编译成字节码,而不是类似于目标硬件平台处理器的携带数据的代码。Node.js 采用了 JIT 编译,在很大程度上提高了代码执行速度。它获取源代码并在运行时将其转换为机器代码。通过这种方式,定期调用的函数被编译为机器代码,从而提高代码执行的整体速度。问题:Node.js 中为什么要使用buffer类?
Node.js面试题解析:在 Node.js 中,缓冲区类以类似于整数数组的方式存储原始数据。但是,它会与分配在 V8 堆之外的原始内存转储通信。Buffer 类是一个全局类,可以在应用程序中访问,而无需导入缓冲区模块。它主要用于纯 JavaScript 代码不与二进制数据协调。问题:Node.js 中的 fork() 和 spawn() 方法有什么区别?
答:Node.js面试题和答案合集 - 在 Node.js 中,spawn() 使用可用的命令集启动一个新进程。这不会生成新的 V8 实例,只有节点模块的单个副本在处理器上处于活动状态。当你的子进程向节点返回大量数据时,可以使用此方法。另一方面,fork() 是 spawn() 的一个特例,它生成一个新的 V8 引擎实例。通过这种方法,多个worker 可以在一个节点代码库上运行多个任务。问题:说明编写 Express JS 应用程序的步骤。
答:常见的Node.js面试题有哪些 - 要设置一个 ExpressJs 应用程序,你需要按照以下步骤操作:
- 使用项目名称创建文件夹
- 在文件夹内创建一个名为 package.json 的文件
- 在命令提示符下运行“npm install”命令以安装包文件中存在的库\
- 创建一个名为 server.js 的文件
- 在包含名为 index.js 的文件夹的包中创建“路由器”文件
- 应用程序是在包含 index.html 文件的包中创建的
推荐阅读
- 2022年要使用的7种最佳数据分析工具合集
- 如何在App Store上传WatchOS应用(分步指南)
- 最值得使用的10个最佳Java框架合集
- 如何在iOS上制作OTP视图(详细实现指南)
- 如何制作Chrome扩展(实现分步指南)
- 微服务面试题有哪些(50大面试题和答案合集)
- 雨林木风Ghost win7旗舰版设置系统下载
- 深度技术Ghost win7 sp1系统装机版64位自制步骤
- Ghost win7原版镜像32位系统旗舰版下载