Node.js 面试题及答案(实战版).docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Node.js面试题及答案(实战版)

一、基础核心题(10道)

1.说说Node.js的事件循环机制,和浏览器的有什么区别?

答案:

Node.js的事件循环是基于libuv实现的,核心是“非阻塞I/O”的调度机制,流程分为6个阶段(按顺序):

timers:执行setTimeout/setInterval回调

pendingcallbacks:处理上一轮未完成的I/O回调(如TCP错误)

idle,prepare:内部准备阶段(忽略)

poll:核心阶段,等待新的I/O事件,执行I/O回调(如fs、网络请求),若没有回调会阻塞在此

check:执行setImmediate回调

closecallbacks:执行关闭回调(如socket.on(close))

和浏览器的区别:

浏览器事件循环分宏任务(script、setTimeout)和微任务(Promise.then),微任务优先级高于宏任务

Node.js在v11+后和浏览器一致(同一轮宏任务执行完立即清微任务),v11前是“某阶段所有宏任务执行完,再清该阶段的微任务”

Node.js有setImmediate,浏览器没有;浏览器有requestAnimationFrame,Node.js没有

2.什么是回调地狱?怎么解决?

答案:

回调地狱是多层异步操作嵌套(如fs.readFile里套fs.writeFile),导致代码可读性差、维护困难的问题。

解决方式(按实战优先级排序):

Promise封装:将异步操作转为Promise对象,用.then()链式调用

functionreadFilePromise(path){

returnnewPromise((resolve,reject)={

fs.readFile(path,utf8,(err,data)=err?reject(err):resolve(data));

});

}

readFilePromise(./a.txt).then(data=readFilePromise(data)).then(console.log);

async/await:语法糖,让异步代码看起来像同步,最常用

asyncfunctionreadFiles(){

constdata1=awaitreadFilePromise(./a.txt);

constdata2=awaitreadFilePromise(data1);

console.log(data2);

}

事件发布订阅(EventEmitter):适合多模块通信场景

第三方库(如async.js):老项目可能用,新项目优先async/await

3.Node.js的模块系统是什么?CommonJS和ESModule的区别?

答案:

Node.js默认用CommonJS模块系统(require/module.exports),v14.13+支持ESModule(import/export),需在package.json设type:module。

核心区别:

特性

CommonJS

ESModule

加载时机

运行时加载(动态)

编译时加载(静态)

导出方式

module.exports/exports

export/exportdefault

导入方式

require()

import

路径要求

可省略.js/.json

必须写完整后缀(如.js)

顶层this

module.exports

undefined

循环依赖处理

浅拷贝导出对象

生成只读引用

实战注意:

require缓存:第一次加载后缓存,后续require直接取缓存,修改导出对象的属性会影响所有导入处

ESModule的import是只读的,不能修改导入的变量(如import{a}from./b,a不能重新赋值)

4.说说Buffer的作用和常用方法?

答案:

Buffer是Node.js特有的二进制数据处理模块,用于处理TCP流、文件I/O等场景(因为JavaScript本身不能直接操作二进制)。

常用方法:

创建:Buffer.alloc(10)(安全分配,初始化0)、Buffer.from(abc)(从字符串/数组创建)

转换:buf.toString(utf8)(二进制转字符串)、Buffer.from(str,base64)(Base64转Buffer)

操作:buf.slice(0,2)(截取,注意是浅拷贝)、b

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档