版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Node.js前端面试题及详细答案(实战版)一、Node.js基础概念题1.简单说说你对Node.js的理解,它和浏览器JS有什么区别?参考答案:Node.js是一个基于ChromeV8引擎的服务端JavaScript运行环境,采用事件驱动、非阻塞I/O模型,适合开发高并发、轻量级的服务端程序、接口服务、工具脚本、前端工程化工具等。和浏览器JS的核心区别主要有三点:1.运行环境不同:浏览器端JS运行在浏览器内核,提供DOM、BOM、window等浏览器API;Node.js运行在服务端,没有DOM、BOM,提供文件读写、网络请求、进程、路径等服务端API。2.全局对象不同:浏览器全局对象是window;Node.js全局对象是global,现在更推荐使用globalThis统一兼容。3.模块机制不同:浏览器ESModule以import/export为主;Node.js兼容CommonJS(require/module.exports)和ESModule两套规范。4.应用场景不同:浏览器JS负责页面交互、DOM操作;Node.js负责服务端接口、中间层、打包构建、脚本自动化等。2.Node.js的特点有哪些?日常开发中哪些场景用到了这些特点?参考答案:核心特点:单线程、事件驱动、非阻塞I/O、跨平台、轻量高效。1.单线程:主线程只做事件循环,不处理多线程任务,避免了线程锁、线程竞争问题,开发更简单。2.事件驱动:通过事件订阅、回调函数处理任务,有事件触发时才执行对应逻辑,不会空跑占用资源。3.非阻塞I/O:遇到文件读写、网络请求等耗时操作,不会阻塞主线程,先挂起任务,等待操作完成后再回调执行后续逻辑,能够处理大量并发请求。日常场景:前端打包工具(Webpack/Vite)、接口服务、日志脚本、文件批量处理、爬虫、中间层服务都是基于这些特性实现的。3.什么是CommonJS模块规范?和ESModule有什么区别?参考答案:CommonJS是Node.js默认的模块规范,核心是require引入、module.exports导出,主要用于服务端。两者核心区别:1.加载方式:CommonJS是运行时同步加载,运行代码时才加载模块;ESModule是编译时静态解析,打包阶段就能识别模块依赖。2.语法不同:CommonJS使用require()、module.exports;ESModule使用import、export。3.值的特性:CommonJS导出的是值的拷贝,原模块值修改后,引入的模块值不会更新;ESModule导出的是值的引用,原值变化,引入处会同步更新。4.适用场景:CommonJS多用于Node.js旧项目、后端脚本;ESModule是浏览器和Node.js新标准,适配前后端统一开发。二、Node.js核心原理(面试高频)4.详细说说Node.js事件循环机制(EventLoop)参考答案:事件循环是Node.js实现非阻塞异步I/O的核心,本质是不断循环执行任务队列中的回调任务,让单线程可以高效处理异步任务。Node.js事件循环分为6个阶段,按顺序循环执行:1.timers:执行setTimeout、setInterval的回调2.pendingcallbacks:执行延迟的I/O回调3.idle、prepare:系统内部使用,开发无感知4.poll:核心阶段,获取新的I/O事件,执行I/O回调,空闲时会阻塞等待新事件5.check:执行setImmediate回调6.closecallbacks:执行关闭回调,如socket关闭事件微任务优先级(重点):每一个事件循环阶段执行完毕后,会优先清空所有微任务队列,再进入下一个阶段。微任务队列优先级:process.nextTick>Promise.then/catch/finally5.process.nextTick和setTimeout、setImmediate的区别?参考答案:1.process.nextTick:优先级最高,属于微任务,在当前执行栈清空后、事件循环下一阶段开始前立即执行,会优先于所有异步任务执行。滥用会阻塞事件循环,导致I/O任务无法执行。2.setTimeout:属于宏任务,在timers阶段执行,最小延迟默认1ms,实际执行时间受事件循环阻塞影响,无法精准定时。3.setImmediate:属于宏任务,在check阶段执行,专门用于当前轮事件循环结束后立即执行,比setTimeout0ms执行时机更稳定。总结优先级:nextTick>微任务(Promise)>setImmediate>setTimeout6.Node.js单线程有什么优缺点?如何解决单线程短板?参考答案:优点:1.无需处理线程同步、锁竞争,代码逻辑简单,开发成本低;2.没有线程切换开销,轻量高效,适合高并发I/O场景;3.内存占用低,服务稳定性更好。缺点:1.无法利用多核CPU性能;2.单线程一旦遇到耗时同步任务(大量计算、死循环),会阻塞事件循环,导致所有异步任务、接口请求全部卡顿。解决方案:1.使用cluster模块开启多进程,充分利用多核CPU;2.使用worker_threads开启工作线程,处理密集型计算任务,不阻塞主线程;3.拆分耗时任务,将复杂计算抽离为独立服务或脚本;4.优化代码,避免主线程执行同步耗时逻辑。三、文件与网络I/O面试题7.Node.js中fs模块同步、异步、Promise三种用法区别?项目中怎么选择?参考答案:1.fs同步方法(fs.readFileSync):阻塞主线程,执行完成后才会继续往下走,适合初始化配置、脚本执行等一次性、启动阶段的操作,绝对不能用在接口服务的请求逻辑中。2.fs异步回调方法(fs.readFile):非阻塞,通过回调函数获取结果,不会阻塞主线程,但多层文件操作会出现回调地狱,代码可读性差,现在基本不推荐新项目使用。3.mises异步Promise方法:支持async/await,代码简洁、逻辑清晰,非阻塞,是目前项目开发首选方式。项目选型原则:业务接口、动态文件操作全部用mises+async/await;项目启动初始化少量读取配置可用同步方法;废弃回调式fs方法。8.什么是流(Stream)?Node.js常用流有哪些?解决什么问题?参考答案:流是Node.js处理大文件、大数据流的核心机制,核心是分片读取、分片处理,不用一次性将整个文件加载到内存,极大节省内存开销。四大常用流类型:1.可读流Readable:读取数据(读取文件、接口数据流)2.可写流Writable:写入数据(写入文件、响应接口数据)3.双工流Duplex:既可读又可写(TCP连接)4.转换流Transform:读写过程中可以修改数据(压缩、加密、解析数据)解决的核心问题:处理超大文件(视频、日志、压缩包)时,避免内存溢出,实现边读边写、流式传输,提升性能和稳定性。四、异步编程与异常处理9.说说Node.js异步编程的发展历程,以及各自的优缺点参考答案:1.回调函数:最早期方案,简单场景可用,多层嵌套会形成回调地狱,代码难以维护、无法统一异常处理。2.Promise:解决回调地狱,支持链式调用,异常可统一捕获,适合串行、并行异步任务,是现代异步编程基础。3.async/await:基于Promise的语法糖,代码写法接近同步,逻辑清晰、可读性极高,是目前Node.js项目主流写法。4.事件监听:适合持续监听的异步场景,比如文件变化、服务请求、数据流传输。10.Node.js常见异常类型有哪些?如何全局捕获异常,防止服务崩溃?参考答案:常见异常:文件不存在、网络超时、参数错误、内存溢出、未捕获的Promise异常、引用报错等。常用异常捕获方案:1.代码局部捕获:async/await配合try/catch捕获业务异常;Promise使用catch捕获。2.全局捕获未捕获异常:-process.on('uncaughtException'):捕获同步未捕获异常-process.on('unhandledRejection'):捕获未处理的Promise异常3.进程守护:使用PM2守护进程,服务崩溃后自动重启,保证服务可用。注意:全局捕获异常仅用于兜底日志记录,不能替代业务层try/catch,避免隐藏代码bug。五、Web服务与中间层面试题11.原生Node.js如何搭建HTTP服务?简单说下请求响应流程参考答案:通过Node.js内置http模块创建服务,核心流程:1.引入http模块,创建HTTP服务实例;2.监听request请求事件,接收req(请求对象)、res(响应对象);3.通过req获取请求地址、请求方法、参数、请求头;4.通过res设置响应头、状态码,返回响应数据,结束响应;5.监听指定端口和主机,启动服务。原生http适合理解原理,实际项目开发都会使用Express、Koa等框架,简化路由、中间件、参数处理逻辑。12.Express和Koa的核心区别?项目中如何选型?参考答案:1.中间件机制不同:Express是串行回调中间件,基于回调函数,不原生支持async/await;Koa2基于async/await实现,中间件支持洋葱模型,执行顺序更清晰。2.架构轻量化:Koa更精简,只保留核心功能,路由、静态资源等都需要单独引入中间件;Express内置大量常用功能,开箱即用。3.异常处理:Koa可以统一捕获中间件异步异常,处理更优雅;Express异步异常需要手动捕获,容易遗漏。选型:快速开发、传统老项目维护选Express;新项目、追求代码简洁、统一异常处理、中间件可控选Koa2。13.什么是中间件?Koa/Express中间件洋葱模型原理参考答案:中间件本质是处理请求的函数,可以在请求到达路由前、响应返回前做统一处理,比如参数校验、跨域、日志打印、权限校验、异常捕获等。洋葱模型核心逻辑:先进先出、逐层进入、逐层返回。执行顺序:请求进来依次执行中间件的next()之前的代码→执行路由业务逻辑→从最后一个中间件开始,依次执行next()之后的代码,最终返回响应。洋葱模型的优势:可以在请求全链路做统一拦截和后置处理,非常适合做全局通用逻辑封装。六、工程化与性能优化14.Node.js在前端工程化中有哪些应用?参考答案:前端工程化几乎全部基于Node.js实现,核心场景:1.打包构建:Webpack、Vite、Rollup都是基于Node.js运行,实现代码编译、打包、压缩、模块化处理;2.项目脚手架:Vue-CLI、Create-React-App、Vite脚手架,通过Node.js脚本生成项目模板、安装依赖;3.代码规范校验:ESLint、Prettier基于Node.js运行,校验代码格式和语法;4.自动化脚本:自定义打包、部署、文件替换、批量处理静态资源脚本;5.本地服务代理:本地启动dev服务、接口跨域代理、热更新服务。15.Node.js服务常见性能瓶颈及优化方案参考答案:常见瓶颈:事件循环阻塞、内存泄漏、并发过高、文件/数据库I/O缓慢、单线程无法利用多核。优化方案:1.避免阻塞事件循环:主线程不做密集计算、大循环同步任务,耗时任务拆分或交由子线程处理;2.多核利用:使用cluster多进程部署,最大化利用CPU;3.内存优化:及时销毁无用变量、关闭数据流,避免全局缓存无限堆积,定时监控内存占用;4.I/O优化:大文件使用流式读写,避免一次性读取;数据库加缓存、连接池复用;5.服务优化:开启gzip压缩、静态资源缓存、接口限流,使用PM2进程守护;6.代码优化:统一异常捕获,避免服务崩溃,优化异步逻辑,杜绝回调地狱。七、真实面试手写题(高频)16.手写简单的Node.js静态资源服务参考答案:核心思路:通过http启服务,解析请求路径,读取本地静态文件,设置响应头,返回文件内容,处理404、文件读取异常。javascript
consthttp=require('http')
constfs=require('fs/promises')
constpath=require('path')
constserver=http.createServer(async(req,res)=>{
//拼接本地文件路径
constfilePath=path.join(__dirname,req.url==='/'?'/index.html':req.url)
try{
//读取静态文件
constdata=awaitfs.readFile(filePat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025~2026学年甘肃省天水市麦积区北道区新阳乡胡湾小学人教版三年级上册10月月考试卷数学试卷【附答案】
- 2025-2026学年河南省登封市初中数学九年级期末下册高分预测重点试题详细参考解析
- Photoshop中级职业技能考试试题(含详细答案解析)
- PDU项目继续教育学时考核试题(含详细答案解析)
- 相关方安全管理协议签订方案
- 2026年交通法规和安全常识知识考察试题及答案解析
- 船舶木作舾装工安全操作规程
- 2026学年吉林省临江市四年级语文期末自测模拟高频易错题附答案详细答案和解析
- Oracle存储过程期末考试试题及详细参考答案
- Objective-C 基础面试题及详细答案(实战版)
- 血液透析患者皮肤瘙痒的护理
- 《GJB 1032A-2020 电子产品环境应力筛选方法》
- 2026年邮政银行秋招试题及答案
- T/ZSA 256-2024无负极锂金属电池及电池组
- 2026年湖北省教师职称试题(综合实践活动)(附答案)
- 论固定消防设施在扑救高层建筑火灾中的应用培训课件
- 2026新教科版科学六年级上册全套分组演示实验报告(共28个实验可用下料填写实验报告单)
- 2026中国物流行业劳动用工现状及人力资源管理优化报告
- 中小学教师小课题研究申报书模板与填写示例
- 2026年创城知识测试题及答案
- 第49讲带电粒子在组合场中的运动
评论
0/150
提交评论