2024年前端最新53道常见NodeJS基础面试题(附答案)(1),渣本二面阿里受挫

框架相关

原生JS虽能实现绝大部分功能,但要么就是过于繁琐,要么就是存在缺陷,故绝大多数开发者都会首选框架开发方案。现阶段较热门是React、Vue两大框架,两者工作原理上存在共通点,也存在一些不同点,对于校招来说,不需要两个框架都学得特别熟,一般面试官会针对你简历中写的框架进行提问。

在框架方面,生命周期、钩子函数、虚拟DOM这些基本知识是必须要掌握的,在学习的过程可以结合框架的官方文档

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

Vue框架

知识要点:
1. vue-cli工程
2. vue核心知识点
3. vue-router
4. vuex
5. http请求
6. UI样式
7. 常用功能
8. MVVM设计模式

React框架

知识要点:
1. 基本知识
2. React 组件
3. React Redux
4. React 路由

(1) Node .js是一个相对新的开源项目,不太稳定,变化速度快。

(2)不适合CPU密集型应用,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起。

18、npm是什么?

npm是 Node. js中管理和分发包的工具,可用于安装、卸载、发布、查看包等。

19、npm的好处是什么?

通过ηpm,可以安装和管理项目的依赖,还可以指明依赖项的具体版本号。

20、Node. js中导入模块和导入 JavaScript文件在写法上有什么区别?

在 Node. js中要导入模块,直接使用名字导入即可,如下所示:

var express = require(“express”);

要导入 JavaScript文件,需要使用文件的路径,如下所示:

var demo = require(“./demo.js”);

21、npm的作用是什么?

npm是同 Node .js一起安装的包管理工具,能解决 Node. js代码部署上的很多问题。常见的使用场景有以下几种。

(1)允许用户从npm服务器下载别人编写的第三方包到本地。

(2)允许用户从npm服务器下载并安装别人编写的命令行程序到本地。

(3)允许用户将自己编写的包或命令行程序上传到npm服务器供别人使用。

22、什么是 EventEmitter?

EventEmitter是 Node. js中一个实现观察者模式的类,主要功能是订阅和发布消息,用于解决多模块交互而产生的模块之间的耦合问题.

23、如何实现一个 EventEmitter?

可通过3步实现 EventEmitter定义一个子类,通过寄生组合式继承,继承 EventEmitter

父类,代码如下。

var Util= require(‘util’ );

var EventEmitter= require (‘events’ ) .EventEmitter;

function IcktEmitter () {

EventEmitter .apply(this, arguments)

}

Util.inherits(IcktEmitter, EventEmitter);

var ie = new IcktEmitter ( ) ;

ie.on(‘icketang’, function(data){

console.log(‘接收到消息’,data )

})

ie.emit(’ icketang’,‘来自有课网的消息’);

24、EventEmitter有哪些典型应用?

有以下应用。

(1)在模块间传递消息。

(2)在回调函数内外传递消息。

(3)处理流数据,因为流是在 EventEmitter的基础上实现的。

(4)运用观察者模式收发消息的相关应用。

25、如何捕获 EventEmitter的错误事件?

当发布error消息的时候,如果没有注册该事件,应用程序会抛出错误并中断执行。所以要监听error事件,代码如下。

var ie= new IcktEmitter ( );

ie .on('error ', function(err){

conso1e.1og ( ‘接收到错误的信息’,err )

})

ie.emit(’ error’,‘来自ie1的错误消息’);

26、Node. js中的流是什么?

流(Stream)是基于 EventEmitter的数据管理模式,由各种不同的抽象接口组成,主要包括可写、可读、可读写、可转换等类型。

27、使用流有什么好处?

流是非阻塞式数据处理模式,可以提升效率,节省内存,有助于处理管道且可扩展等。

28、流有哪些典型应用?

流在文件读写、网络请求、数据转换、音频、视频等方面有很广泛的应用。

29、如何捕获流的错误事件?

监听error事件,方法与订阅 EventEmitter的error事件相似。

30、有哪些常用 Stream流?分别什么时候使用?

Readable流为可读流,在作为输入数据源时使用;Writable流为可写流,在作为输岀源时使用;Duplex流为可读写流,它作为输岀源被写入,同时又作为输入源被后面的流读出。

Transform流和 Duplex流一样,都是双向流,区别是 Transfrom流只需要实现一个函数 _transfrom( chunk, encoding, callback);而 Duplex流需要分别实现_read(size )函数和_write( chunk, encoding, callback )函数。

31、如何实现一个 Writable流?

实现 Writable流分成3步

(1)引入 Writable模块。

(2)继承 Writable模块。

(3)实现 _write(chunk, encoding, callback )写入函数。

代码如下。

//引入 Writable模块

var Writable= require(‘stream’).Writable;

var Util = require(‘util’);

//继承 Writable模块

function IcktWritable( ) {

Writable. apply(this, arguments ) ;

}

Util.inherits ( IcktWritable, Writable ) ;

//实现 write函数

IcktWritable. prototype. _write = function ( data, encoding, callback ) {

console.log (‘被写入的数据是:’ ,data. toString ( ) )

callback ( )

}

var iw= new IcktWritable ( ) ;

for (var i=0;i< 5 ;i++ ) {

iw. write(‘有课网’+i,'utf8")

}

iw,end(‘学技能就上有课网’ );

32、内置的fs模块架构由哪几部分组成?

fs模块主要由下面几部分组成。

(1) POSIX文件 Wrapper,对应操作系统的原生文件操作。

(2)文件流,fs. createReadStream和 fs.createWriteStrean。

(3)同步文件读写, fs.readFileSync和fs.writeFileSync。

(4)异步文件读写, fs.readFile和fs.writeFile。

33、读写一个文件有多少种方法?

总体来说,有4种方法。

(1) POSIX式底层读写。

(2)流式读写。

(3)同步文件读写。

(4)异步文件读写。

34、如何读取JSON配置文件?

主要有两种方式。第一种是利用 Node. js内置的 require( data.json!)机制,直接得到 Javascript对象;

第二种是读入文件内容,然后用JSON. parse( content)转换成 JavaScript对象。

二者的区别是,对于第一种方式,如果多个模块都加载了同一个JSON文件,那么其中一个改变了 JavaScript对象,其他也跟着改变,这是由 Node.js模块的缓存机制造成的,缓存中只有一个 JavaScript模块对象;

第二种方式则可以随意改变加载后的JavaScript变量,而且各模块互不影响,因为它们都是独立的,存储的是多个 JavaScript对象。

35、fs.watch和 fs.watchFile有什么区别?

二者主要用来监听文件变动,fs.watch利用操作系统原生机制来监听,可能不适用网络文件系统;fs. watchFile则定期检查文件状态变更,适用于网络文件系统,但是与fs.watch相比有些慢,因为它不采用实时机制。

36、为什么需要子进程?

Node. js是异步非阻塞的,这对高并发非常有效。可是我们还有其他一些常用的需求,比如和操作系统 shell命令交互,调用可执行文件,创建子进程,进行阻塞式访问或高CPU计算等,子进程就是为满足这些需求而产生的。顾名思义,子进程就是把 Node. js阻塞的工作交给子进程去做。

37、exec、 execFile、 spawn和fork都是做什么用的?

它们的作用分别如下。

exec可以用操作系统原生的方式执行各种命令,如管道 cat ab. txt |  grep hello。

execFile用于执行一个文件。

spawn负责在流式和操作系统之间进行交互。

fork负责在两个 Node. js程序( JavaScript)之间进行交互。

38、如何实现一个简单的命令行交互程序?

实现代码如下。

var cp = require (’ child process );

//执行指令

var child= cp .spawn(‘echo’, ['hello, ‘’] );

// child.stdout是输入流, process. stdout是输出流

//子进程的输出流作为当前程序的输入流,然后重定向到当前程序的控制器输出

child. stdout. pipe(process. stdout)

39、两个 Node. js程序之间如何交互?

通过fork实现父子程序之间的交互。子程序用 process.on、 process. send访问父程序,父程序用 child.on、 child.send访问子程序。

关于 parent. JS的示例代码如下。

var cp = require (’ child_process’ ) ;

var child= cp.fork (‘./child. js’ );

child .on(‘message’, function(msg){

console.1og(‘子程序发送的数据:’,msg )

})

child.send ( ‘来自父程序发送的数据’ )

关于 child .js的示例代码如下。

process .on ( ‘message’ , function(msg){

conso1e.1og ( '父程序发送的数据: ’ , msg )

process.send ( ‘来自子程序发送的数据’ )

40、如何让一个 JavaScript文件变得像 Linux命令一样可执行?

具体步骤如下。

(1)在文件头部加入#!/ bin/sh

如 icketang40.js

#!/bin/sh

echo’有课网— 技能学习就上有课网;

(2)用 chmod命令把名为 icketang40的 JavaScript文件改为可执行文件。

chmod + x icketang40.js

(3)进入文件目录,在命令行输入 icketang40.js就相当于执行 node icketang40.js

$ ./icketang40.js

执行结果。

41、子进程和进程的 stdin、 stdout、 stderror是样的吗?

概念都是一样的。stdin、 stdout、 stderror分别是输入、输出、错误。三者都是流。区别是在父进程里,子进程的 stdout是输入流, stdin是输出流。

42、async都有哪些常用方法?分别怎么用?

async是一个 JavaScript类库,它的目的是解决 JavaScript中异常流程难以控制的问题。async不仅在 Node. js里适用,还可以用在浏览器中。其常用方法和用法如下。

具体代码如下所示。

var async = require('async ');

var date = Date .now ( );

(1) async. parallel:并行执行完多个函数后,调用结束函数。不用等到前一个函数。执行完再执行下一个函数。

async .parallel ( [

function ( callback ) {

setTimeout (function () {

console. log(‘process one’, Date. now ( ) - date)

callback(null, ‘msg one’)

},2000)

},

function ( callback ){

setTimeout ( function () {

console. log(‘process tow’, Date .now ( ) - date )

callback ( null, ‘msg tow’ )

},1000)

}

], function(err, result){

console. log(err, result, 'done ')

})

(2) async.series:串行执行完多个函数后,调用结束函数。前面一个函数执行完之后,就会立即执行下一个函数。

async .series ( [

function ( callback ) {

setTimeout ( function () {

console. log ( 'process one ', Date. now ( ) - date )

callback ( null, ’ msg one’ )

},2000 )

},

function ( callback ) {

setTimeout ( function () {

console. log ( ‘process tow’, Date. now ( ) - date )

callback ( null, 'msg tow ’ )

},1000 )

}

] , function (err, result ) {

console. log(err, result, ‘done’)

})

(3) async. waterfall:依次执行多个函数,前一个函数的执行结果作为后一个函数执行时的参数。

async .waterfall ( [

function ( callback ) {

setTimeout ( function () {

console. log('process one, Date. now()- date)

callback(null, ‘msg one’)

},2000)

},

function(argl, callback){

setTimeout (function(){

console. log('process tow, Date. now ( ) - date, argl )

callback(null, ‘msg tow’)

},1000)

}

] , function(err, result){

console. log(err, result, 'done ')

})

43、express项目的目录大致是什么结构的?

首先,执行安装 express的指令:npm install express-generator-g。

然后,通过 express指令创建项目:express icketang。

创建的项目目录结构如下。

  • ./app.js  应用核心配置文件(入口文件)

  • ./bin  存放启动项目的脚本文件

  • ./ package.json  存储项目的信息及模块依赖

  • ./public 静态文件(css、js、img等)

  • ./routes 路由文件(MVC中的 contro1ler)

  • ./views 页面文件(jade模板)

44、express常用函数有哪些?

ajax

1)ajax请求的原理/ 手写一个ajax请求?
2)readyState?
3)ajax异步与同步的区别?
4)ajax传递中文用什么方法?

ajax.PNG

前12.PNG

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

},1000)

}

] , function(err, result){

console. log(err, result, 'done ')

})

43、express项目的目录大致是什么结构的?

首先,执行安装 express的指令:npm install express-generator-g。

然后,通过 express指令创建项目:express icketang。

创建的项目目录结构如下。

  • ./app.js  应用核心配置文件(入口文件)

  • ./bin  存放启动项目的脚本文件

  • ./ package.json  存储项目的信息及模块依赖

  • ./public 静态文件(css、js、img等)

  • ./routes 路由文件(MVC中的 contro1ler)

  • ./views 页面文件(jade模板)

44、express常用函数有哪些?

ajax

1)ajax请求的原理/ 手写一个ajax请求?
2)readyState?
3)ajax异步与同步的区别?
4)ajax传递中文用什么方法?

[外链图片转存中…(img-b3OhsvJL-1715575424208)]

[外链图片转存中…(img-9h51KSfj-1715575424209)]

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值