前端,通过面试去学习,nodejs

本文介绍了Node.js的基础知识,包括它是一个基于Chrome V8引擎的JavaScript运行环境,用于构建高性能的网络应用。讲解了非阻塞异步I/O、事件驱动模型、HTTP模块创建后台服务器、FS模块进行文件操作、Path模块处理路径以及NPM包管理工具的使用。此外,还提到了Express和MongoDB的结合使用,并分享了一个详细的Node.js零基础教程链接。
摘要由CSDN通过智能技术生成

nodejs


最近的面试中,nodejs有被问到,面试前临时现补一些比如http模块,path模块,非阻塞异步I/O,高性能等等知识点
其实工作中一直没怎么涉及nodejs作为服务端或者中间件开发,所以了解的不是很深入,现在前端细分的话,传统的web开发工程师、可视化开发工程师、nodejs工程师、配置架构工程师,要会的东西着实有点多,当然大佬们可以全部都会

之前有看一篇博客学习nodejs作为服务端开发结合mongodb数据库,博主讲的很细,我觉得挺好的,一共十一篇,包括最终的demo也有提供,地址是nodejs零基础详细教程


nodejs

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
其实node.js就是一个可以在服务器端运行 javascript的环境而已 – 运行环境
Node.js遵守CommonJS规范

阻塞和非阻塞

这里就得要涉及到同步和异步的概念,
同步:我们js代码是从上往下执行的,上一条代码没执行完成,不执行下一条代码就是同步。
异步:在上面代码执行的时候,下面代码也可以同时执行。
那么阻塞就是同步的状态表示,而非阻塞就是异步的状态表示。

  • 实现异步有两种方式
    – 回调函数:监听到某个事件活动后,再执行别的代码,这种情况不影响后续代码执行,属于异步
    – 定时器:setTimeout 和 setInterval
npm

全称 node package manager吧,node包管理工具

  • npm作用:
    – 允许用户从NPM服务器下载别人编写的第三方包到本地使用。npm install
    – 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
    – 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。npm publish
    常用命令
    node install、npm i、npm install -g --save
    npm uninstall 包名

  • 之前写过一篇npm包发布流程笔记 npm包发布教程以及安装使用

path

nodejs内置path模块
path提供的方法参考这篇文章整理 Nodejs path模块

fs文件操作模块

node自带文件操作模块 fs

var fs = require("fs"); //node 内置模块可直接引入  fs:文件系统操作模块
fs.readFile("./a.txt","utf-8",function(err,data){  //读取文件
    if(err) throw err;//抛出异常
    //读取的后续操作可写在这里
    fs.writeFile("./b.txt",data,function(err){  //写入文件
        if(err) throw err;
    })
});
//创建文件夹
fs.mkdir("c",function(err){  //创建 c 文件
    if(err) throw err;
})
//修改文件、文件夹名称
fs.rename("c","d",function(err){  //将c 文件夹名字 改为  d
    if(err) throw err;
})
http模块,创建后台服务器

node自带创建服务的模块 http,使用时只需要直接引入即可

//首先引入http模块
//然后调用createServer方法创建服务,里面只有一个参数(回调函数:表示请求发生的时候需要执行的代码【回到函数有两个参数,1、请求信息,2、相应信息】)
//最后需要添加端口监听listen(自定义端口号,这里我们常规使用3000)
var http = require("http");
http.createServer(function(request,response){
    console.log("request going"); //当浏览器访问的时候,在控制台回打印此消息
    response.end("haha");//表示请求结束,将结果返回给浏览器
}).listen(3000);
node.js事件机制

node.js是单线程,但是通过事件和回调支持并发,可以实现非常高的性能,node.js所有的API都是通过异步调用

  • node.js的事件模型
    – Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。
    – 当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。
    这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)
    – 在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。
    在这里插入图片描述
异步IO操作

我们前面讲的文件读取的方式是一次性全部读取,当文件过大的时候,一次性读取不仅缓慢,而且影响用户体验,那么怎么实现分步读取呢,这就得使用到异步IO的操作,像水流一样流出一段取得一段

var fs = require("fs");
var  data = "";  //声明一个空字符串来存读取的数据
var rs = fs.createReadStream("a.txt");
rs.setEncoding("utf-8");
//监听当有数据流入的时候
rs.on("data",function(chunc){
    data += chunc;       //将读取的数据拼接到data上。
    console.log("..."); //读的过程中,我们打印三个点。
});
rs.on("end",function(){
    console.log("没有数据了")
});

代码中,使用 reateReadStream创建读取流对象,在对象上使用on监听“data”读取数据的事件,每读取一段数据,就会触发这个事件,当读取完毕, 就会触发“end”事件。

express mongodb

参考博客
node.js零基础详细教程(5):express 、 路由
node.js零基础详细教程(6):mongodb数据库操作 以及导入导出
node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装
node.js零基础详细教程(7.5):mongo可视化工具webstorm插件、nodejs自动重启模块Node Supervisor(修改nodejs后不用再手动命令行启动服务了)

nodejs面试题

Nodejs 面试题

未完待续,持续补充…

Node.js前端面试中经常被提及,以下是一些常见的面试问题和回答: 1. 你对Node.js的理解是什么? Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,可以用于构建高性能、可扩展的网络应用程序。它使用单线程和非阻塞I/O模型,适用于处理并发的I/O密集型任务。 2. Node.js的优点和缺点是什么? Node.js的优点包括高性能、可扩展性、异步编程模型、丰富的包管理器等。缺点包括CPU计算能力受限、单线程可能导致阻塞等。 3. Node.js适用于哪些应用场景? Node.js适用于需要处理大量并发的I/O操作,例如实时聊天应用、实时数据推送、物联网、代理服务器等。 4. Node.js有哪些全局对象? 例如,`process`对象用于访问进程相关信息,`fs`模块用于文件系统操作,`Buffer`用于处理二进制数据,`stream`模块用于处理流数据等。 5. process对象在Node.js中的作用是什么? process对象提供了许多方法和属性,用于管理Node.js进程,例如获取命令行参数、设置环境变量、退出进程等。 6. fs模块在Node.js中的作用是什么? fs模块用于处理文件系统操作,例如读取文件、写入文件、删除文件、创建目录等。 7. Buffer在Node.js中的作用是什么? Buffer用于处理二进制数据,例如在网络传输中,可以使用Buffer来读取和写入数据。 8. stream在Node.js中的作用是什么? Stream模块用于处理流数据,可以在读取和写入大型数据时提供高效的内存管理。 9. Node.js文件查找的优先级和require方式的文件查找策略是什么? Node.js文件查找的优先级是先查找缓存,然后查找内置模块,再查找文件模块或文件夹中的package.json,最后查找index.js或index.json。require方式的文件查找策略是先查找node_modules文件夹中的模块,然后逐级向上查找。 10. 中间件是什么概念? 中间件是位于客户端和服务器之间的一个处理请求和响应的环节,可以对请求和响应进行处理和转换。 11. 如何实现JWT鉴权机制? JWT鉴权机制可以通过在服务端生成一个带有用户信息和签名的令牌,并在客户端将令牌存储起来。每次请求时,客户端将令牌发送给服务端,服务端校验令牌的合法性并解析用户信息。 12. 如何设计分页功能,前后端如何交互? 分页功能可以通过在服务端查询数据时设置偏移量和限制数量来实现,客户端可以向服务端发送包含页码和每页数量的请求参数。服务端根据请求参数计算出偏移量和限制数量,从数据库中获取相应的数据返回给客户端。 13. Node.js性能监控和优化可以通过使用性能分析工具和调优技术来实现,例如使用Node.js内置的`profiler`模块进行性能分析,使用缓存和异步编程模型来提高性能,使用负载均衡和集群来实现扩展等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [前端面试题之NodeJS系列](https://blog.csdn.net/qq_48701993/article/details/127223784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值