2024 高级前端面试题之 Node 「精选篇」

该内容主要整理关于 Node 模块的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。

Node模块精选篇

  • 1. package.json版本号规则
  • 2. package.json 与 package-lock.json 的关
  • 3. npm 模块安装机制
  • 4. 模块化的差异 AMD CMD COMMONJS ESMODUL
  • 5. Node 的 Event Loop: 6个阶
  • 6. Koa相关
  • 7. Express、koa实现原理以及对比
  • 8. 请介绍一下 require 的模块加载机制
  • 9. exports.xxx=xxx 和 Module.exports={}有什么区别
  • 10. Node 的异步 I/O
  • 11. V8 的垃圾回收机制
  • 12. Buffer 模块
  • 13. webSocket
  • 14. https
  • 15. 进程通信


1. package.json版本号规则

major.minor.patch

  • 主版本号.次版本号.修补版本号(major.minor.patch)
  • major:新的架构调整,不兼容老版本
  • minor:新增功能,兼容老版本
  • patch:修复bug,兼容老版本

~和^的区别

  • ~ 会匹配最近的小版本依赖包,比如 ~1.2.3 会匹配所有 1.2.x 版本,但是不包括 1.3.0
  • ^ 会匹配最新的大版本依赖包,比如 ^1.2.3 会匹配所有 1.x.x 的包,包括1.3.0,但是不包括2.0.0
  • * 安装最新版本的依赖包,比如 *1.2.3 会匹配 x.x.x

那么该如何选择呢?当然你可以指定特定的版本号,直接写 1.2.3,前面什么前缀都没有,这样固然没问题,但是如果依赖包发布新版本修复了一些小bug,那么需要手动修改 package.json 文件;~^ 则可以解决这个问题

  • 但是需要注意 ^ 版本更新可能比较大,会造成项目代码错误,所以 建议使用 ~ 来标记版本号,这样可以保证项目不会出现大的问题,也能保证包中的小bug可以得到修复
  • 版本号写 *,这意味着安装最新版本的依赖包,但缺点同上,可能会造成版本不兼容,慎用

👇 例子

  • 假设我们中安装了 vue, 当我们运行安装 npm install vue -save 的时候,在项目中的 package.json 的 vue版本是 vue: ^3.0.0, 我们电脑安装的vue版本就是 3.0.0 版本,我们把项目代码提交后,过了一段时间,vue 发布了新版本 3.0.1,这时新来一个同事,从新 git clone 克隆项目,执行 npm install 安装的时候,在他电脑的vue版本就是 3.0.1了,因为^只是锁了主要版本,这样我们电脑中的vue版本就会不一样,从理论上讲(大家都遵循语义版本控制的话),它们应该仍然是兼容的,但也许 bugfix 会影响我们正在使用的功能,而且当使用vue版本 3.0.03.0.1运行时,我们的应用程序会产生不同的结果。
  • 请思考,这样的话,不同人电脑安装的依赖版项目,是不是都有可能不一样,就会导致每个人电脑运行的应用程序产生不同的结果。就会存在bug的隐患。
  • 那么我们在 package.json 上面锁死依赖包的版本号不就可以了? 直接写 vue: 3.0.0 锁死,这样大家安装vue的版本都是3.0.0版本了。
  • 这个想法固然是不错的,但是你只能控制你自己的项目锁死版本号,那你项目中依赖包的依赖包呢?你怎么控制限制别人锁死版本号呢?
  • 为了解决这个不同人电脑安装的所有依赖版本都是一致的,确保项目代码在安装所执行的运行结果都一样,这时 package-lock.json 就应运而生

2. package.json 与 package-lock.json 的关

3. npm 模块安装机制

4. 模块化的差异 AMD CMD COMMONJS ESMODUL

5. Node 的 Event Loop: 6个阶

6. Koa相关

  • koa洋葱模型怎么实
  • 如果中间件中的next()方法报错了怎么
  • co的原理是怎样的

7. Express、koa实现原理以及对比

8. 请介绍一下 require 的模块加载机制

9. exports.xxx=xxx 和 Module.exports={}有什么区别

10. Node 的异步 I/O

  • 请介绍一下 Node 事件循环的流程
  • 在每个 tick 的过程中,如何判断是否有事件需要处理呢
  • 描述一下整个异步 I/O 的流

11. V8 的垃圾回收机制

  • 如何查看 V8 的内存使用情
  • V8 的内存限制是多少,为什么 V8 这样设
  • V8 的内存分代和回收算法请简单讲一讲

12. Buffer 模块

  • 新建 Buffer 会占用 V8 分配的内存
  • Buffer.alloc 和 Buffer.allocUnsafe 的区
  • Buffer 的内存分配机制
  • Buffer 乱码问题

13. webSocket

  • webSocket 与传统的 http 有什么优势
  • webSocket 协议升级简述一下

14. https

  • https 用哪些端口进行通信,这些端口分别有什么用
  • 身份验证过程中会涉及到密钥,对称加密,非对称加密,摘要的概念,请解释一下
  • 为什么需要 CA 机构对证书签名
  • https 验证身份也就是 TSL/SSL 身份验证的过程

15. 进程通信

  • 请简述一下 node 的多进程架构
  • 请问创建子进程的方法有哪些,简单说一下它们的区别
  • 实现一个 node 子进程被杀死,然后自动重启代码的思路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3:中warch监听的几种写法

作用:监视数据的变化(和vue2中的watch作用一致) 特点:vue3中watch只能监视以下四种数据: 1、ref 定义的数据 2、reactive定义的数据 3、函数返回的值(getter函数) 4、前面3个内容的数组 写…

AD24-第三方网表导入PCB

1、文件路径需要纯英文路径 2、生成网表 3、将网表和PCB库放进工程里 4、进行网表添加 5、新建PCB 6、选择显示差异 7、对所有东西进行更新 8、创建工程变更列表 9、执行变更 总结: ①导出适合AD的网表 ②创建工程 (包含网表PCB封装库PCB) …

最近宣布的NIST后量子密码学标准的3个关键要点

当今世界依赖于许多保护措施,即使您没有注意到这一点。从手机和智能技术到网站,从支付交易到城市基础设施,人们经常与之互动的一切,都通过保护和检查技术来保护。量子计算机能够快速轻松地打破这些保护措施,这是政府和…

go语言-字符串处理常用函数

本文介绍go语言处理字符串类型的常见函数。 ## 多行字符串 在 Go 中创建多行字符串非常容易。只需要在你声明或赋值时使用 () 。 str : This is a multiline string. ## 字符串的拼接 go // fmt.Sprintf方式拼接字符串 str1 : "abc" str2 : "def" …

【Qt学习笔记】(一)初识Qt

Qt学习笔记 1 使用Qt Creator 新建项目2 项目代码解释3 创建第一个 Hello World 程序4 关于内存泄漏问题5 Qt 中的对象树6 关于 qDebug()的使用7 使用其他方式创建一个 Hello World 程序(编辑框和按钮方式)8 关于 Qt 中的命名规范…

【Python_PySide6学习笔记(三十二)】无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示

无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示 无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示前言一、无边框窗体设置二、点击任务栏图标显示和隐藏设置三、实现效果无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示 前言 本文介绍基于 …

docker 无法执行systemctl

docker 无法执行systemctl:System has not been booted with systemd as init system (PID 1). Cant operate. Failed to connect to bus: Host is down 背景 System has not been booted with systemd as init system (PID 1). Cant operate. Failed to connect to bus: Hos…

九、图表使用

一、QCharts概述 Qt图表提供了:折线图、样条曲线图、面积图、散点图、条形图、饼图、方块胡须图、蜡烛图、极坐标图。1、QChart介绍 Qt Charts基于Qt的QGraphics View架构,其核心组件是QChartView和QChartQChartView是显示图标的视图,基类为…

【SpringBoot系列】自动装配的魅力:Spring Boot vs 传统Spring

IT行业有哪些证书含金量高? 文章目录 IT行业有哪些证书含金量高?强烈推荐前言区别项目配置:依赖管理:内嵌服务器:开发体验: 实例Spring项目示例:Spring Boot项目示例: 总结强烈推荐专栏集锦写在最后 强烈…

飞致云开源社区月度动态报告(2024年1月)

自2023年6月起,中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)

管理组件状态 一、概述 在应用中,界面通常都是动态的。下图所示,在子目标列表中,当用户点击目标一,目标一会呈现展开状态,再次点击目标一,目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…

elk之基础概念

写在前面 本文一起看下es的基础概念,比较枯燥的内容说,但不看又不行。开始。 1:document 文档,是es搜索存储数据的最小单元,相当于是MySQL的一行记录,但es中是一个json,如下是一个通过logsta…

kuboard-spray 导入离线资源包

下载镜像 # 1. 在一台可以联网的机器上执行 docker pull registry.cn-shanghai.aliyuncs.com/kuboard-spray/kuboard-spray-resource:spray-v2.18.0a-8_k8s-v1.23.9_v1.16-amd64 docker save registry.cn-shanghai.aliyuncs.com/kuboard-spray/kuboard-spray-resource:spray-v…

websocket编写聊天室

【黑马程序员】WebSocket打造在线聊天室【配套资料源码】 总时长 02:45:00 共6P 此文章包含第1p-第p6的内容 简介 温馨提示:现在都是第三方支持聊天,如极光,学这个用于自己项目完全没问题,大项目不建议使用 需求分析 代码

8、应急响应-战前溯源反制主机蜜罐系统HFishHIDSElkeidWazuh

用途:个人学习笔记,欢迎指正 目录 背景: 一、潮源反制-平台部署-蜜罐-Hfish 二、溯源反制-平台部署-HIDS-Wazuh 三、溯源反制-平台部署-HlDS-Elkeid-hub 背景: 攻击者对服务器存在着各种威胁行为,作为安全人员&am…

WebAssembly核心编程[1]:wasm模块实例化的N种方式

当我们在一个Web应用中使用WebAssembly,最终的目的要么是执行wasm模块的入口程序(通过start指令指定的函数),要么是调用其导出的函数,这一切的前提需要创建一个通过WebAssembly.Instance对象表示的wasm模块实例(源代码…

远程教育:低代码在教育技术领域的重塑之力

新冠肺炎大流行对世界各地的行业产生了影响,其中一些行业的影响远远超过其他行业。食品、零售、供应链、娱乐和航空业是受影响最大的行业,为确保不间断运营,这引发了一场数字革命。相信,这种数字化的采用将长期保持下去&#xff0…

STM32—系统定时器

1.SysTick简介 SysTick是一种系统定时器,可以用于实现操作系统、任务调度、时钟管理等功能。它通常集成在微控制器中,并且是硬件实现的,具有高精度和可靠性。 在ARM Cortex-M处理器中,SysTick定时器可以配置为计数器模式或外部时…

力扣hot100 数组中的第K个最大元素 堆 三路划分

Problem: 215. 数组中的第K个最大元素 文章目录 思路复杂度Code 思路 👨‍🏫 参考 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) Code class Solution {public int findKthLargest(int[] nums, int k…

5种改进生产 Web 应用服务器设置的方法

简介 一旦你的应用程序在云服务器环境中运行起来,你可能会想知道如何改进你的服务器环境,使其从“能用”跃升到一个完整的生产环境。本文将帮助你开始规划和实施生产环境,通过在云服务器环境中创建一个“生产环境”的宽泛定义,并…