一、为何用Nodejs,它有哪些缺点?前端
事件驱动,经过闭包很容易实现客户端的生命活期。 不用担忧多线程,锁,并行计算的问题 V8引擎速度很是快 对于游戏来讲,写一遍游戏逻辑代码,前端后端通用 固然Nodejs也有一些缺点: nodejs更新很快,可能会出现版本兼容 nodejs还不算成熟,尚未大制做 nodejs不像其余的服务器,对于不一样的连接,不支持进程和线程操做
二、什么是错误优先的回调函数?node
错误优先(Error-first)的回调函数(Error-First Callback)用于同时返回错误和数据。第一个参数返回错误,而且验证它是否出错;其余参数返回数据。 fs.readFile(filePath, function(err, data){ if (err){ // 处理错误 return console.log(err); } console.log(data); });
三、如何避免回调地狱?后端
模块化:将回调函数转换为独立的函数 使用流程控制库,例如[aync] 使用Promise 使用aync/await
四、什么是Promise?服务器
Promise能够帮助咱们更好地处理异步操做。下面的实例中,100ms后会打印result字符串。catch用于错误处理。多个Promise能够连接起来。 new Promise((resolve, reject) =>{ setTimeout(() =>{ resolve('result'); }, 100) }) .then(console.log) .catch(console.error);
五、用什么工具保证一致的代码风格?为何要这样?多线程
团队协做时,保证一致的代码风格是很是重要的,这样团队成员才能够更快地修改代码,而不须要每次去适应新的风格。这些工具能够帮助咱们: [ESLint] (http://eslint.org/) [Standard] (https://standardjs.com/) JSLint JSHint ESLint JSCS推荐
六、什么是stub?举例说明闭包
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接口时应该是这样的: 不少单元测试,分别测试各个模块(依赖须要stub) 较少的集成测试,测试各个模块之间的交互(依赖不能stub) 少许端到端测试,去调用真正地接口(依赖不能stub)