1.为什么要使用Nodejs,它的缺点是什么?事件驱动,很容易通过闭包实现客户端的生命周期。不用担心多线程、锁和并行计算。V8引擎非常快。对于游戏来说,游戏逻辑代码一次编写即可,前后端通用。当然Nodejs也有一些缺点:nodejs更新快,可能会有兼容nodejs的版本。它被认为是成熟的,尚未生产。与其他服务器不同,nodejs不支持针对不同环节的进程和线程操作。2.什么是错误优先回调函数?错误优先回调函数(Error-FirstCallback)用于同时返回错误和数据。第一个参数返回错误,验证失败;其他参数返回数据。fs.readFile(filePath,function(err,data){if(err){//处理错误returnconsole.log(err);}console.log(data);});3.如何避免回调地狱?模块化:使用流控库将回调函数转化为独立的函数,比如[aync]usingPromiseusingaync/await4,什么是Promise?Promise可以帮助我们更好的处理异步操作。在下面的示例中,结果字符串将在100毫秒后打印。catch用于错误处理。可以链接多个Promise。newPromise((resolve,reject)=>{setTimeout(()=>{resolve('result');},100)}).then(console.log).catch(console.error);5、用什么工具保证代码风格一致?为什么?在与团队合作时,确保代码风格一致非常重要,这样团队成员可以更快地修改代码,而不必每次都去适应新的风格。这些工具可以帮助我们:[ESLint](http://eslint.org/)[Standard](https://standardjs.com/)JSLintJSHintESLintJSCSRecommendation6.什么是存根?示例来说明模块存根的行为。测试时,存根可以返回函数调用的模拟结果。比如我们在写文件的时候,其实并不需要真的去写。varfs=require('fs');varwriteFileStub=sinon.stub(fs,'writeFile',function(path,data,cb){returncb(null);});期望(writeFileStub).to.be。称为;writeFileStub.restore();7。什么是测试金字塔?举个例子说明,测试金字塔反映了需要编写的单元测试、集成测试和端到端测试的比例:在测试HTTP接口时,应该是这样的:很多单元测试,分别测试每个module(requiresstub)integrationtestless,测试各个模块之间的交互(dependencycannotstub)少量端到端测试调用真实接口(dependencycannotstub)
