全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

总结几道关于Node.js的面试问题

什么是error-first的回调方式

Error-first回调方式用来同时传递error和data。将错误作为第一个参数,它就必须先检查看看有没有错误先。另外的参数就用来传递data了。

fs.readFile(filePath, function(err, data) {
 if(err) {
  //处理错误,这里的return很重要,如果发生错误,在此处就会停止了。
  return console.log(err);
 }
 //传递data
 console.log(data);
})

你是如何避免回调地狱的?

  1. 模块化 把回调函数分割成独立的函数
  2. 使用控制流的库,比如async
  3. generators结合Promise
  4. async/await

Promise是什么?

概念不多说了,简单来说就是帮助你更好地处理异步操作的东西。

new Promise((resolve, reject) => {
 setTimeout(() => {
  resolve('result');
 }, 100)
})
 .then(console.log)
 .catch(console.error)

stub是什么? 举个例子?

stub是用来模拟组件/模块行为的东西,它在测试阶段为函数调用提供内部响应。

例子是写文件,但实际上并没有这么做

var fs = require('fs');

var writeFileStub = sinon.stub(fs, 'writeFile', function(path, data, cb) {
 return cb(null)
})

expect(writeFileStub).to.be.called
writeFileStub.restore();

如何保证你的HTTP cookies安全不受XSS攻击

在set-cookieHTTP头部加上这几个信息:

  1. HttpOnly-这个属性用来防止跨站脚本攻击,它不允许cookie被JavaScript代码获取。
  2. secure-这个属性告诉浏览器只有在HTTPS连接时才发送cookie

像这样:Set-Cookit: sid=<cookit-value>; HttpOnly

下面这段代码有什么问题

new Promise((resolve, reject) => {
 throw new Error('error')
}).then(console.log)

then后面没有跟上catch,这样的话如果出错的这段代码还是默默地运行,并不会告诉你哪里出错了。

修改后:

new Promise((resolve, reject) => {
 throw new Error('error')
}).then(console.log).catch(console.error)

如果你正在调试一个大型项目,你不知道哪个Promise可能会有问题,可以使用unhandledRejection。它会打印出所有未经处理的Promise异常

process.on('unhandledRejection', (err) => {
 console.log(err)
})

下面的代码有什么问题?

function checkApiKey(apiKeyFromDb, apiKeyReceived) {
 if (apiKeyFromDb === apiKeyReceived) {
  return true
 }
 return false
}

说实话我刚看到的时候也是一脸懵逼,这有啥问题?不是很正常的一个if else代码吗。

不过这不是普通的if else代码,这是用来比较安全证书的代码,这个时候你不能泄露一丁点的信息,所以确保他们在一定的时间内进行比较。否则的你的应用就可能受到时序攻击了。

什么是时序攻击(timing attacks)?Node.js使用的V8引擎试图从表示层面上优化代码。它一个字符一个字符地比较,一旦找到不符合它就停止比较。

你可以使用cryptiles这个npm模块来解决这个问题

function checkApiKey(apiKeyFromDb, apiKeyReceived) {
 return cryptiles.fixedTimeCimparison(apiKeyFromDb, apiKeyReceived)
}

如何通俗地解释时序攻击(timing attack)?

时序攻击属于侧信道攻击/旁路攻击(Side Channel Attack),侧信道攻击是指利用信道外的信息,比如加解密的速度/加解密时芯片引脚的电压/密文传输的流量和途径等进行攻击的方式,一个词形容就是“旁敲侧击”。

举一个最简单的计时攻击的例子,某个函数负责比较用户输入的密码和存放在系统内密码是否相同,如果该函数是从第一位开始比较,发现不同就立即返回,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。密码破解复杂度成千上万倍甚至百万千万倍的下降。

最简单的防御方法是:“发现错误的时候并不立即返回,而是设一个标志位,直到完全比较完两个字符串再返回”。

时序攻击并非是一种理论攻击方法,OpenSSL、OpenSSH等应用都曾经有时序攻击漏洞,举个实际的例子吧:

下面的代码会输出什么

Promise.reso(1)
 .then((x) => x + 1)
 .then((x) => {throw new Error('My Error')})
 .catch(() => 1)
 .then((x) => x + 1)
 .then((x) => console.log(x))
 .catch(console.error) 
  1. 一个新的Promise被创造出来,它会解析参数1
  2. 解析后的值会被加上1(现在是2),并立即返回了这个2
  3. 解析的值被丢弃,抛出一个异常
  4. 异常被丢弃,新的值1被返回
  5. catch后运行不会停止,在异常处理之前,它继续运行,一个新的,增加了1后的值2被返回
  6. 返回值被打印出来
  7. 这一行不会运行,因为没有异常

总结

以上就是关于Node.js的几道面试题,希望本文的内容对大家能有所帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# Node.js面试题  # nodejs面试题及答案  # nodejs  # 高级面试题  # 通过Nodejs搭建网站简单实现注册登录流程  # 解决Node.js mysql客户端不支持认证协议引发的问题  # NodeJs生成sitemap站点地图的方法示例  # 一些可能会用到的Node.js面试题  # 回调  # 信道  # 有什么  # 这段  # 它就  # 它会  # 最简单  # 这是  # 就会  # 如果你  # 是一种  # 会有  # 加解密  # 放在  # 你是  # 你可以  # 第一个  # 旁敲侧击  # 说了  # 是指 


相关文章: 专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  建站之星安装后如何配置SEO及设计样式?  网站网页制作专业公司,怎样制作自己的网页?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  网站微信制作软件,如何制作微信链接?  Python lxml的etree和ElementTree有什么区别  建站之星免费版是否永久可用?  Swift中switch语句区间和元组模式匹配  如何通过山东自助建站平台快速注册域名?  如何确认建站备案号应放置的具体位置?  太原网站制作公司有哪些,网约车营运证查询官网?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  如何注册花生壳免费域名并搭建个人网站?  如何通过西部建站助手安装IIS服务器?  建站ABC备案流程中有哪些关键注意事项?  如何获取PHP WAP自助建站系统源码?  如何彻底卸载建站之星软件?  如何在腾讯云免费申请建站?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  网站代码制作软件有哪些,如何生成自己网站的代码?  营销式网站制作方案,销售哪个网站招聘效果最好?  建站主机选择指南:服务器配置与SEO优化实战技巧  大同网页,大同瑞慈医院官网?  详解jQuery中基本的动画方法  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  高防服务器租用首荐平台,企业级优惠套餐快速部署  装修招标网站设计制作流程,装修招标流程?  建站之星安装后界面空白如何解决?  深圳网站制作案例,网页的相关名词有哪些?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何在阿里云ECS服务器部署织梦CMS网站?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  定制建站方案优化指南:企业官网开发与建站费用解析  公司门户网站制作流程,华为官网怎么做?  无锡营销型网站制作公司,无锡网选车牌流程?  怀化网站制作公司,怀化新生儿上户网上办理流程?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何在香港免费服务器上快速搭建网站?  c++ stringstream用法详解_c++字符串与数字转换利器  如何彻底删除建站之星生成的Banner?  想学网站制作怎么学,建立一个网站要花费多少?  北京网站制作公司哪家好一点,北京租房网站有哪些?  制作网站的基本流程,设计网站的软件是什么?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  ,南京靠谱的征婚网站?  网页设计网站制作软件,microsoft office哪个可以创建网页?  上海网站制作开发公司,上海买房比较好的网站有哪些?  网站制作的方法有哪些,如何将自己制作的网站发布到网上? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。