53道常见NodeJS基础面试题(附答案),一名毕业三年的女程序媛面试头条经验

//继承 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常用函数有哪些?

常用函数有以下几个

  • express .Router—路由组件

  • app.get—路由定向。

  • app. configure——配置。

  • app.set一设定参数。

  • app.use——使用中间件。

45、express中如何获取路由的参数?

执行的命令如下

/users/:name

使用 req.params.name来获取;使用req.body.username来获得表单传入参数 username;express的路由支持常用通配符有?、+、*、( )。

46、express  response有哪些常用方法?

常用方法有以下几个。

  • res. download( ),弹出文件下载。

  • res.end ( ),结束响应。

  • res.json( ),返回json。

  • res.jsonp( ),返回 jsonp。

  • res .redirect ( ),重定向请求。

  • res .render ( ),渲染模板。

  • res.send ( ),返回多种形式数据。

  • res.sendFile  ( ),返回文件。

  • res.sendStatus( ),返回状态。

47、mongodb有哪些常用优化措施?

常用优化措施如下。

(1)优化预读。

(2)禁用NUMA。

(3)不要记录访问时间等。

48、Redis的主要特点是什么?

主要特点如下。

(1) Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载和使用。

(2) Redis不仅支持简单的键-值类型的数据,同时还提供list、set、zset、hash等数据结构的存储。

(3) Redis支持数据的备份,即主-从模式的数据备份。

49、Nginx和 Apache有什么区别?

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

最后

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

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

理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-bJdmNzFG-1710957128021)]
[外链图片转存中…(img-c9CWFHYo-1710957128021)]
[外链图片转存中…(img-1cA8mklE-1710957128022)]
[外链图片转存中…(img-rJhwRWmF-1710957128023)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-Q5eoiEvP-1710957128023)]

最后

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

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

[外链图片转存中…(img-8W81SGwJ-1710957128024)]

[外链图片转存中…(img-dn4LSCfI-1710957128024)]

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值