15 个常见的 Node.js 面试问题及答案

article/2025/10/23 21:14:04

俗话说:临阵磨枪,不快也光。对于成功的编程面试来说,准备和知识面一样重要。准备使你有信心参加面试,而不用担心莫名的紧张情绪。如果第一次参加编程面试,这一点尤其重要。

为帮助 Node.js 开发人员更好的面试,列出了 15 个常见的 Node.js 和网络开发相关的面试问题。

在本文中,我们将重点讨论 Node.js 相关问题。但是,请记住 JavaScript 问题在 Node.js 面试中也经常问到,所以准备一些对你来说没什么坏处。
现在,让我们深入了解面试中可能会问到的 Node.js 问题。
1、Node.js与JavaScript有什么不同?
在这里插入图片描述2、什么时候用Node.js?
Node.js 是异步的、事件驱动的、非阻塞的和单线程的,使得它成为开发下面应用程序的完美候选:
实时应用程序,如聊天和提供实时更新的应用程序。
将视频或其他多媒体内容流式传输给大量观众的流式应用程序。
其他 I/O 密集型应用程序,如协作平台。
遵循微服务架构的网络后端。
然而,Node.js 的特性使得它对于其他类型的应用程序来说不是一个理想的选择。执行 CPU 密集型任务的应用程序(如复杂的数学计算)在使用 CPU 时表现不佳,因为 Node.js 是单线程的。
3、EventEmitter做了什么?
Node.js 中任何对象发出的事件都是 EventEmitter 类的实例,就像 http 模块。
所有 EventEmitter 类都可以使用 eventEmitter.on() 函数将事件侦听器附加到事件。然后一旦捕捉到这样的事件,就会同步地逐个调用它的侦听器。

const events = require("events");
const eventEmitter = new events.EventEmitter();
const eventListener = function(){console.log("event triggered");
}
eventEmitter.on("emitted", eventListener);
eventEmitter.emit("emitted");

4、事件循环是什么?
单线程的 Node.js 必须是非阻塞的,以防止线程阻塞在需要很长时间才能完成的任务上,事件循环负责实现这种非阻塞行为,它使用应用程序线程调度挂起的任务。
Node.js 在任务完成时通过回调来处理异步函数返回的响应。与创建任务的事件类似,任务完成后也会发出一个事件。Node.js 将需要处理的事件添加到事件队列。
事件循环对事件队列中的事件进行迭代,并安排何时执行其关联的回调函数。
5、流是什么?
Stream 流是从源读取或写入数据并将其传输到连续流目标的管道。有四种类型:
可读
可写的
可读写
先写入,再读出来
每个流也是一个 EventEmitter。这意味着流对象可以在流上没有数据、流上有可用数据或流中的数据在程序刷新时发出事件。

const fs = require("fs");
const readableStream = fs.createReadStream("test.txt");
let content = "";
readableStream.on("data", (chunk) => {content += chunk;
});
readableStream.on("end", () => {console.log(content);
});

6、ReadFile和createReadStream函数有什么区别?
readFile 函数异步读取文件的全部内容,并存储在内存中,然后再传递给用户。
createReadStream 使用一个可读的流,逐块读取文件,而不是全部存储在内存中。
与 readFile 相比,createReadStream 使用更少的内存和更快的速度来优化文件读取操作。如果文件相当大,用户不必等待很长时间直到读取整个内容,因为读取时会先向用户发送小块内容。

const fs = require("fs");
fs.readFile("test.txt", (err, content) => {console.log(content);
});

7、如何处理Node.js中未捕获的异常?
我们可以在进程级别捕获应用程序中未捕获的异常。为此将侦听器附加到 process 全局对象:

process.on("uncaughtException", (err) => {console.log("exception caught: ", err);
});

8、Node.Js能否充分利用多核处理器?
(默认的)Node.js 应用程序总是单线程的,即使在多核处理器上运行,应用程序也能只使用一个处理器。

但是 Node.js 的核心模块之一 Cluster 支持 Node.js 应用程序开启多核,允许我们创建多个工作进程,这些进程可以在多个内核上并行运行,并共享一个端口来侦听事件。
每个进程使用 IPC 与主线程通信,并根据需要将服务器句柄传递给其他进程。主进程可以侦听端口本身并以循环方式将每个新连接传递给子进程,也可以将端口分配给子进程以便子进程侦听请求。
9、反应堆设计模式是什么?
反应堆设计模式是,Node.js 将回调函数(处理程序)附加到每个 I/O 操作,然后创建请求时将处理程序提交给解复用器。
解复用器收集应用程序中发出的每个 I/O 请求,并将它们作为队列中的事件进行排队。这个队列就是我们所说的事件队列。将事件排队后,解复用器返回应用程序线程的控制。
同时,事件循环遍历事件队列中的每个事件,并调用附加的回调来处理事件响应。
这就是 Node.js 中所使用的反应堆模式。
10、单线程与多线程网络后端相比有哪些好处?
尽管 Node.js 是单线程的,但是大多数用于后端开发的编程语言都提供多线程来处理应用程序操作。
为什么单线程有利于后端开发?
开发人员更容易实现应用程序。我们的应用程序在生产过程中不会突然遇到意外的竞争条件。
单线程应用程序易于扩展。
它们可以毫不延迟地在一个时刻收到的大量用户请求提供服务。相比之下,当流量较大时,多线程后端必须等待线程池中的线程释放,才能为用户请求提供服务。利用 Node.js 的非阻塞特性,用户请求不会在单个线程上挂起太长时间(只有在操作不是 CPU 密集型时)。
11、REPL是什么?
REPL 代表 Read Eval Print Loop,是一个虚拟环境,可以在其中轻松地运行编程语言。Node.js 带有一个内置的 REPL 来运行 JavaScript 代码,类似于我们在浏览器中用来运行 JavaScript 代码的控制台。
要启动 Node.js REPL,只需在命令行上运行 node,然后写一行 JavaScript 代码,就可以在下一行看到它的输出。
12、process.nextTick和setImmediate有什么区别?
传递给 setImmediate 函数的回调将在事件队列上的下一次迭代中执行。
另一方面,回调传递给 process.nextTick 在下一次迭代之前以及程序中当前运行的操作完成之后执行。在应用程序启动时,开始遍历事件队列之前调用它的回调。
因此,回调 process.nextTick 总是在 setImmediate 之前调用。
下面代码段:

setImmediate(() => {console.log("first");
})
process.nextTick(() => {console.log("second");
})
console.log("third");

将按顺序输出:

third
second
first

13、stub什么
测试应用程序时使用 stub,模拟给定组件或模块的行为,你可以将精力集中在要测试的代码部分。通过使用 stub 代替与测试无关的组件,不必担心外部组件会影响结果。

例如,如果正在测试的组件在预期测试的部分之前有一个文件读取操作,则可以使用 stub 来模拟该行为并返回模拟内容,而不用实际读取文件。

在 Node.js 中,我们使用像 Sinon 这样的库来实现(译者注,Sinon 在测试中替换某部分代码,减少测试项编写的复杂度 https://sinonjs.org)。
14、为什么在express中分离“应用程序”和“服务器”是一种好的做法?
通过在 Express 中分离应用程序和服务器,可以将 API 实现与网络相关配置分开。在不执行网络调用的情况下执行 API 测试,保证了更快的测试执行和更好的代码覆盖度量。

要实现这种分离,应该在单独的文件中声明 API 和 server,对应 app.js 和 server.js:

// app.js
const express = require("express");
const app = express();
app.use("/", index);
app.use("/contact", contact);
app.use("/user", user);
module.exports = app;
// server.js
const http = require("http");
const app = require("/app");
app.set('port', process.env.PORT);
const http = http.createServer(app);

15、什么是yarn和npm?为什么要用yarn代替npm呢?
npm 是与 Node.js 自带的默认包管理器,它有一个大型的公共库和私有库,存储在 npm registry 的数据库中(译者注,官方默认中心库 http://registry.npmjs.org/,国内淘宝镜像 http://registry.npm.taobao.org/),用户可以通过 npm 命令行访问该数据库。在 npm 的帮助下,用户可以轻松管理项目中的依赖项。
yarn 也是一个包管理器,为了解决 npm 的一些缺点。yarn 依赖 npm 注册中心为用户提供对包访问。yarn 底层结构基于 npm,如果从 npm 迁移到 yarn,项目结构和工作流不需要大改。
就像之前提到的,在某些情况下,yarn 提供了比 npm 更好的功能。与 npm 不同的是,它会缓存下载的每个包,不必重新下载。
通过校验和验证包的完整性来提供更好的安全性,保证在某个系统上运行的包在任何其他系统中的工作方式完全相同,这就是为什么选择 yarn 而不是 npm 来进行包管理。

总结
在本文中,讨论了 15 个最常见的 Node.js 面试问题,帮助你为下一次面试做准备。知道你可能被问到的问题和答案,面试就不再紧张了。

  • End -

http://chatgpt.dhexx.cn/article/0cG2ZlKC.shtml

相关文章

node.js 详解

目录 一. 初始node.js 1.为什么 JavaScript 可以在浏览器中被执行? 2. node.js 简介 3. node.js 查看是否安装 4. 运行文件 (1).在终端中输入 :node 文件 (2). 终端中的快捷键 二. fs 文件系统模块 1. fs.readFile() 和 fs.readFileSync()&…

轻量级音乐播放器 android,5款顶级Android离线音乐播放器,哪款才是你的菜?

打开左侧栏,Stellio 的功能排列井井有条。你可以选择多样的播放队列,根据专辑、演奏者等属性快速找到想要的歌曲。 重视细节的Stellio 还有睡眠模式、自定义widget 等小功能。难能可贵的是,它还支持Android Wear。 均衡器也是Stellio 的重头戏,拥有12 频段和16 种预设模式。…

Android Studio实现音乐播放器2.0

项目目录 一、引言二、项目概述1、需求分析2、设计分析3、资源文件分析 三、开发环境四、优化设计🌷1、上一首下一首🌾2、控件UI优化🍁3、登录和注册🌴4、数据库设计🌻5、歌手导航栏 五、运行效果六、项目总结七、源码…

Android本地音乐播放器的制作

如何制作android本地的音乐播放器呢&#xff1f;步骤通常是如下&#xff1a; 1.在清单文件AndroidMainFest.xml文件当中添加权限。 <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/>2.需要找到当前module的build.gradle文件当中t…

Android 编程案例-本地音乐播放器源码及使用注意事项

说一下代码在用的时候注意事项以及在运行的时候可能遇到的问题&#xff1a; 首先代码可以在创建相应文件后直接复制&#xff0c;这个案例用到了RecyclerView&#xff0c;所以需要先添加依赖。添加下面两个&#xff1a; implementation ‘com.android.support:recyclerview-v7…

Android开发之本地音乐播放器(二)

此次音乐播放器是针对上一个&#xff1a;https://blog.csdn.net/qq_43433255/article/details/88084420 开发出来的一个功能增强型&#xff0c;基本实现功能为&#xff1a; 通过列表管理SD中的音乐文件。通过seekbar可以显示一首音乐的播放进度。通过seekbar实现音乐播放的进度…

Android音乐播放器源码

转载自&#xff1a;https://blog.csdn.net/xch_yang/article/details/103916201 android开发音乐播放器&#xff0c;能够很好的应用Android基础知识&#xff0c;是个不错的开发选择&#xff0c;部分界面如下 这个项目很好的结合了Android的四大组件知识。其中音乐来源于手机本…

本地音乐播放器+android8.1,APlayer v1.5.6.8-15681 安卓本地音乐播放器 | 智享阁

应用简介 APlayer是一款安卓本地音乐播放器&#xff0c;遵循 Material Design 设计&#xff0c;UI清新简洁、操作简单、功能齐全。 应用特点 首页Tab可配置&#xff0c;最多支持五个,包括歌曲、艺术家、专辑、文件夹、播放列表 专辑、艺术家封面自动补全 支持显示本地和在线歌词…

大作业---Android本地音乐播放器开发知识点19145120

步骤 系列文章前言1. 简述程序、进程、线程的区别和联系。&#xff08;10分&#xff09;2. 什么是UI线程&#xff1f;&#xff1f;什么是工作线程&#xff1f;&#xff08;10分&#xff09;3. 如何定义1个结构良好可控的工作线程&#xff08;源代码说明&#xff09;&#xff1f…

Android入门之本地音乐播放器

功能简介 读取模拟器中音乐文件&#xff1b;列表展示&#xff0c;获取歌曲详细信息&#xff1a;歌名、歌手名、专辑名、专辑封面、播放时间等&#xff1b;基本功能&#xff1a;上下切歌&#xff0c;播放暂停、进度条显示与点击跳转。成品效果图&#xff1a; Mediaplayer基本…

大学生安卓期末设计之本地音乐播放器

作为一个热爱设计交互性产品的男大学生&#xff0c;我真的不太爱听课&#xff0c;所以很多时候&#xff0c;需要一个人学会阅读搜索资料并不停尝试&#xff0c;我希望大家也多多热爱这样持之以恒的尝试。 先看产品的一个模拟机测试效果&#xff08;b站南阳洛信也有视频) 安卓A…

Android本地音乐播放器

UI界面模仿QQ音乐 实现一个简单的本地播放器&#xff0c;功能包括&#xff1a;播放&#xff0c;暂停&#xff0c;上一曲&#xff0c;下一曲&#xff0c;进度条。 功能实现 读取本地音乐 1.创建一个Song类 public class Song {public String song;//歌曲名public String sing…

毕业设计- 基于Android的本地音乐播放器

—— 木叶飞舞之处&#xff0c;火亦生生不息。 项目介绍 本系统支持扫瞄本地音乐播放、暂停、上一首、下一首&#xff0c;点击播放栏跳转到播放页面&#xff0c;可查看当前播放列表&#xff0c;设置播放模式如顺序播放、随机播放&#xff0c;标记为我的喜欢&#xff0c;可以创…

Selenium自动化测试设计模式-PO模式

前言&#xff1a; 在python自动化过程中&#xff0c;Selenium自动化测试中有一个名字常常被提及PageObject&#xff08;思想与面向对象的特性相同&#xff09;&#xff0c;通过PO模式可以大大提高测试用例的维护效率。 不了解po设计模式的可自行百度 面向对象的特性&#xf…

电商项目测试实战(十一)后台业务场景测试设计

后台订单处理业务场景测试设计 流程步骤&#xff1a; 设计测试用例&#xff1a; 第一步&#xff1a;绘制流程图 1、确认业务中的操作 2、分析执行的顺序 3、按照业务方向进行连线 收到前台订单&#xff08;商城->订单->订单列表&#xff09;订单确认发货&#xff0…

电商项目测试实战(十)前台下单业务场景测试设计

前台下单业务场景测试设计 流程步骤&#xff1a; 设计测试用例&#xff1a; 第一步&#xff1a;需求分析 第二步&#xff1a;绘制流程图 1、确定业务中的操作 2、分析执行的顺序 3、按照业务方向进行连线 登录->选购商品->加入购物车->支付->确认订单->等待…

空调测试用例设计

** 空调测试用例设计 ** 界面测试 功能测试 可靠性测试 易用性测试 可维护性测试 兼容性测试 竞品测试 负载压力测试 稳定性测试 文档测试 界面测试&#xff1a; 空调外观的美观性空调外观尺寸是否和设计尺寸一致遥控按钮是否清晰和易懂显示温度及模式的显示屏是否显示设备…

测试场景设计-登录设计

来一波广告&#xff1a;欢迎关注测者说&#xff0c;测试理论知识尽在此处 面试中经常被问到有一个登录页面&#xff0c;你怎么设计测试场景&#xff0c;原来可以做到这么细致。 具体需求&#xff1a; 有一个登陆页面&#xff0c;&#xff08;假如上面有2个textbox,一个提交按钮…

基于微信小程序的大学生心理健康测试设计与实现 .docx

目录 1 绪论 3 1.1 项目开发背景 3 1.2 项目开发意义 3 1.3 项目主要的内容 4 2 相关技术介绍及系统环境开发条件 5 2.1相关技术介绍 5 2.2系统环境开发条件 6 3 系统的需求分析与设计 6 3.1可行性分析 7 3.2需求分析 7 3.2.1系统总体概述 8 3.2.2功能性需求 8 3.2.3非功能性需…

测试设计技术

本文是根据测试架构师修炼之道&#xff08;第二部分 突破&#xff1a;向软件测试架构师的目标迈进&#xff09;整理的&#xff0c;主要分为5个小部分&#xff1a;测试设计四步走、测试设计软技能、设计技术之控制用例粒度、设计技术之自动化测试、设计技术之探索式测试。学习的…