前端面试题-nodejs

1.什么是nodejs,它与传统的网页服务器有什么不同?

**是什么?**nodejs是基于Chrome V8引擎的JavaScript运行环境,它可以使JavaScript代码在服务器上运行。

**有什么不同?**第一,nodejs采用事件驱动、非阻塞式I/O模型,让其轻量且高效。nodejs在处理大量并发连接时,能够保持高效的性能,因为它不会每个连接都创建新的线程,而是使用单线程处理请求。这种模式降低了系统的开销,提高了整体的吞吐量。第二,nodejs是单线程的,这避免了多线程编程中的一些问题,比如线程间的数据同步和线程管理开销。第三,nodejs具有强大的包管理器npm,这有利于开发者安装和管理第三方模块。

2.nodejs的事件驱动和非阻塞I/O模型是如何工作的?

**事件驱动:**nodejs采用事件驱动的编程模式,它通过事件来触发回调函数。当web服务器接收到一个请求时,不会立即处理,而是将请求放到事件队列中。主线程会不断监听事件队列,有新事件触发,就会执行相应的回调函数来处理请求。这可以使nodejs同时处理多个请求。

非阻塞I/O:nodejs使用非阻塞I/O模型,该模型不会每个请求都创建一个新的线程或开启新的事件。相反,当服务器接收到一个请求时,它会立即返回并继续处理其他请求。对于需要执行I/O的操作,如读写文件、网络请求等,nodejs会将其放到一个线程池中进行异步处理。这样,主线程可以继续监听事件队列,而不需要等待I/O操作完成、当I/O操作完成,它会通过事件触发相应的回调函数来处理。

3.nodejs中如何进行错误处理?

1.使用try-catch语句来捕获和处理错误

javascript 复制代码
try {
//可能抛出异常的代码
}catch(err){
//处理错误的代码
}

2.使用回调函数

nodejs的部分API都可以接受回调函数作为最后一个参数,用来处理错误。

javascript 复制代码
fs.readFile('/c:/files/a.txt',function(err,data){
    if(err){
        //处理错误
    }else{
        //处理数据
    }
}

3.使用Promise

javascript 复制代码
getData().then(res => {
    //处理数据
}).catch(err => {
    //处理错误
})

4.async/await

async/await是Promise的语法糖,使异步代码看起来像同步代码

javascript 复制代码
async function fn(){
    try{
       const data = await getData()
    }catch(err){
      //处理错误
    }
}
4.nodejs中事件循环执行流程?

nodejs的事件循环是其核心之一,用于处理非阻塞I/O操作和实现异步编程。事件循环是nodejs单线程特性的关键,事件循环使nodejs能够高效的处理大量的并发请求。

工作原理:

  1. 初始化:nodejs开始运行时,会初始化事件循环。在初始化过程中,nodejs会创建一些必要的对象和主线程。
  2. 主线程:负责监听事件队列,并执行相应的回调函数。
  3. 循环体:事件循环的主体是一个循环,不断的从事件队列中取出事件并执行相应的回调函数。
  4. I/O轮询:在每个事件循环中,首先会执行I/0轮询,检查是否有新的I/O事件,如果有就将事件放到事件队列中。
  5. 定时器阶段:处理定时器的回调函数,如setTimeout、setInterval
  6. 检查阶段:检查当前事件是否与某个定时器的触发时间相等,如果相等就会执行对应的回调函数。
  7. 关闭事件回调阶段:处理所有的关闭事件的回调函数u,如文件扫描符关闭时触发的函数。
  8. 微任务队列:在事件循环迭代结束后,nodejs会检查微任务队列是否有待处理的任务,如果有就将这些任务放到微任务队列中,在下次事件循环开始时执行微任务队列。
  9. 重定当前时间:每个事件循环结束后,当前时间会被重新设定。
  10. 持续循环。
5.请解释一下Node.js的集群化工作模式?

nodejs的集群化工作模式是利用多核CPU和提升服务器性能的方法。因为nodejs是单线程的,它只能利用一个CPU核心进行工作,所以为了更好的利用多核CPU,nodejs提供了集群模块来创建多个子进程,每个子进程运行在独立的线程上,并独立的处理请求。

在集群化工作模式中,主进程负责管理所有的子进程,子进程可以接收和相应客户端请求,并独立的进行处理。

集群化的工作模式,可以提高服务器的吞吐量和响应能力。同时由于每个子进程都是独立的,它们之间不会共享内存或状态,因此可以提高应用程序的稳定性和安全性。

.....持续更新中

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学3 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端