什么是error-first的回调方式

Error-first回调方式用来同时传递error和data。将错误作为第一个参数,它就必须先检查看看有没有错误先。另外的参数就用来传递data了。
fs.readFile(filePath, function(err, data) {
if(err) {
//处理错误,这里的return很重要,如果发生错误,在此处就会停止了。
return console.log(err);
}
//传递data
console.log(data);
})
你是如何避免回调地狱的?
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头部加上这几个信息:
像这样: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)
总结
以上就是关于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小时内与您取得联系。