一、爲何用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)