node.js面試筆記

一、爲何用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)
相關文章
相關標籤/搜索