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

news/2025/3/16 2:26:33/

该内容主要整理关于 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.ppmy.cn/news/1340721.html

相关文章

Springboot-前后端分离——第三篇(三层架构与控制反转(IOC)-依赖注入(DI)的学习)

本篇主要对ControllerServiceDAO三层结构以及控制反转(IOC)与DI(依赖注入)进行总结。 目录 一、三层架构: Controller/Service/DAO简介: 二、控制反转(IOC)-依赖注入(DI): 概念介绍: DOC与…

宝塔控制面板配置SSL证书实现网站HTTPS

宝塔安装SSL证书提前申请好SSL证书,如果还没有,先去Gworg里面申请,一般几分钟就可以下来,申请地址:首页-Gworg官方店-淘宝网 一、登录邮箱下载:Gworg证书文件目录 ,都会有以下五个文件夹。宝塔…

Redis -- list列表

只有克服了情感的波动,才能专心致志地追求事业的成功 目录 列表 list命令 lpush lpushx rpush rpushx lrange lpop rpop lindex linsert llen lrem ltrim 阻塞命令 小结 列表 列表相当于 数组或者顺序表。 列表类型是用来存储多个有序的字符串&…

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法 引言 在应用开发过程中,将应用程序上传到 App Store Connect 是一个关键的环节。本文将探讨几种常见的 IPA 文件上传方法,包括 Xcode、Application Loader、altool、Appuploader以及Transport…

GMS测试Checklistfail---M37+M56+M58+无负一屏

问题: 1.M37 测试Fail ,"Nearby Share" 在edit菜单中,("Nearby Share" 需要on the first or second page); 2.M56 测试Fail, 无"monochrome icons”; 3.M58 测试Fail, "Scan QR Code"置灰(已更新所以apk…

数学建模 - 线性规划入门:Gurobi + python

在工程管理、经济管理、科学研究、军事作战训练及日常生产生活等众多领域中,人们常常会遇到各种优化问题。例如,在生产经营中,我们总是希望制定最优的生产计划,充分利用已有的人力、物力资源,获得最大的经济效益&#…

2024 IC FPGA 岗位 校招面试记录

引言 各位看到这篇文章时,24届校招招聘已经渐进尾声了。 在这里记录一下自己所有面试(除了时间过短或者没啥干货的一些研究所外,如中电55所(南京),航天804所(上海))的经…

使用Python的Turtle模块简单绘制烟花效果

import turtle import random# 初始化屏幕 screen turtle.Screen() screen.bgcolor("black") screen.title("烟花模拟")# 创建一个Turtle来绘制烟花 firework turtle.Turtle() firework.hideturtle() firework.speed(0) # 设置绘图速度为最快# 绘制烟花…