什么是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的几道面试题,希望本文的内容对大家能有所帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍关于mysql init_connect的几个要点总结,包括了关于mysql init_connect的几个要点总结的使用技巧和注意事项,需要的朋友参考一下 init_connect的作用 init_connect通常用于:当一个连接进来时,做一些操作,比如设置autocommit为0,比如记录当前连接的ip来源和用户等信息到一个新表里,当做登陆日志信息 使用init_connect
本文向大家介绍7道关于JS this的面试题,你能答对几个,包括了7道关于JS this的面试题,你能答对几个的使用技巧和注意事项,需要的朋友参考一下 前言 在 JavaScript 中,this 是函数调用上下文。正是由于 this 的行为很复杂,所以在 JavaScript 面试中,总是会问到有关 this 的问题。 做好的准备面试的方法是练习,所以本文针对 this 关键字整理了 7 个有
我目前正在尝试用cubey地形制作一个基本游戏,类似于Minecraft classic。我的第一个问题: 如何在VBO中存储多维数据集列表,然后在更改该数据时重新生成该列表?我当前呈现的立方体如下所示: 我知道我需要使用和来修改VBO,但是如何存储多维数据集并在需要时删除它们?我应该使用ArrayList吗?另外,有人告诉我,我渲染立方体的方式是错误的,因为每个人都说我只渲染一个具有新坐标的立方
8月30日面试芯原算法 虽然明明知道自己菜得根本通过不了面试,但第一次面试还是紧张得不行,我一个啥也不会的菜鸡也不知道怎么就通过笔试了,面试前疯狂抱佛脚 面试官是一个很年轻的小哥哥,像是毕业没几年,自我介绍完,聊了几句看出来我啥技能都不会,就问了一些很简单的问题: 1,为什么选择成都? 2,Python和c的区别? 3,最有成就感的一个项目经历? 4,课题的创新点? 5,图像处理算法?传统的图像处
2023年6月8日奇安信前端面试(一面):1h30min 下午4点(面试官人很好,第一次遇见女性面试官,在自我介绍之前讲述了面试流程,我回答不上的或者有遗漏的会给我补充上,会不断的引导,讲解前端方面的知识,面试官声音很甜,哈哈哈,前20多分钟的录音没有记录下来,所以从后面开始,前面其实也是项目中的一些问题,面试官说一面主要是考察基础知识) 1、项目中登录具体实现以及为什么使用cookie来存储不使
一.最终成绩 1月31日至2月24日,经过25天的实习求职,最终获得五份offer,分别为: 龙湖冠寓运营实习生,base杭州; 科大讯飞商务实习生,base北京; 百度市场营销实习生,base北京; 京东运营提升实习生(京东工业),base北京; 京东家具整合营销实习生,base北京; 最终选择的岗位为京东运营提升实习生,3月1日入职。之所以没选百度是因为offer发晚了,已经确定去京东了,而且