(编辑:jimmy 日期: 2024/11/18 浏览:2)
前言
从ECMAScript标准,Node.js语法以及NPM模块角度来看,Node.js的发展让人目不暇接,那么面试题也得与时俱进。
问题
1. 什么是错误优先的回调函数?
错误优先的回调函数(Error-First Callback)用于同时返回错误和数据。第一个参数返回错误,并且验证它是否出错;其他参数用于返回数据。
fs.readFile(filePath, function(err, data) { if (err) { // 处理错误 return console.log(err); } console.log(data); });
2. 如何避免回调地狱?
以下方式可以避免回调地狱:
3. 什么是Promise"htmlcode">
4. 用什么工具保证一致的代码风格?为什么要这样? 团队协作时,保证一致的代码风格是非常重要的,这样团队成员才可以更快地修改代码,而不需要每次去适应新的风格。这些工具可以帮助我们: 5. 什么是Stub"htmlcode">
6. 什么是测试金字塔?举例说明 测试金字塔反映了需要写的单元测试、集成测试以及端到端测试的比例: 测试HTTP接口时应该是这样的: 7. 最喜欢哪个HTTP框架?为什么? 这个问题标准答案。需要描述框架的优缺点,这样可以反映开发者对框架的熟悉程度。 8. Cookies如何防范XSS攻击? XSS(Cross-Site Scripting,跨站脚本攻击)是指攻击者在返回的HTML中插入JavaScript脚本。为了减轻这些攻击,需要在HTTP头部配置set-cookie: 结果应该是这样的: Set-Cookie: sid=; HttpOnly. 使用Express的话,cookie-session默认配置好了。 9. 如何保证依赖的安全性? 编写Node.js应用时,很可能依赖成百上千的模块。例如,使用了Express的话,会直接依赖27个模块。因此,手动检查所有依赖是不现实的。唯一的办法是对依赖进行自动化的安全检查,有这些工具可供选择: 附加题 1. 这段代码有什么问题? then之后没有catch。这样的话,错误会被忽略。可以这样解决问题: 调试一个大型的项目时,可以使用监控unhandledRejection事件来捕获所有未处理的Promise错误: 2. 这段代码有什么问题? 比较密码时,不能泄露任何信息,因此比较必须在固定时间完成。否则,可以使用timing attacks来攻击你的应用。为什么会这样呢"htmlcode">
3. 这段代码的输出是什么? 答案是2,逐行解释如下: 英文: Node.js Interview Questions and Answers (2017 Edition) 译者: Fundebug 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
new Promise((resolve, reject) =>
{
setTimeout(() =>
{
resolve('result');
}, 100)
})
.then(console.log)
.catch(console.error);
var fs = require('fs');
var writeFileStub = sinon.stub(fs, 'writeFile', function(path, data, cb)
{
return cb(null);
});
expect(writeFileStub).to.be.called;
writeFileStub.restore();
new Promise((resolve, reject) =>
{
throw new Error('error')
})
.then(console.log)
new Promise((resolve, reject) =>
{
throw new Error('error')
})
.then(console.log).catch(console.error)
process.on('unhandledRejection', (err) =>
{
console.log(err)
})
function checkApiKey(apiKeyFromDb, apiKeyReceived)
{
if (apiKeyFromDb === apiKeyReceived)
{
return true
}
return false
}
function checkApiKey(apiKeyFromDb, apiKeyReceived)
{
return cryptiles.fixedTimeComparison(apiKeyFromDb, apiKeyReceived)
}
Promise.resolve(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)