欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nodejs常見面試題與參考答案小結

  發(fā)布時間:2019-09-03 14:34:37   作者:不完美的完美   我要評論
這篇文章主要介紹了nodejs常見面試題與參考答案,涉及nodejs常見的知識點、難點與概念分析,需要的朋友可以參考下

1、為什么用Nodejs,它有哪些缺點?

  • 事件驅(qū)動,通過閉包很容易實現(xiàn)客戶端的生命活期。
  • 不用擔心多線程,鎖,并行計算的問題
  • V8引擎速度非常快
  • 對于游戲來說,寫一遍游戲邏輯代碼,前端后端通用

當然Nodejs也有一些缺點:

  • nodejs更新很快,可能會出現(xiàn)版本兼容
  • nodejs還不算成熟,還沒有大制作
  • nodejs不像其他的服務器,對于不同的鏈接,不支持進程和線程操作

2、什么是錯誤優(yōu)先的回調(diào)函數(shù)?

  • 錯誤優(yōu)先(Error-first)的回調(diào)函數(shù)(Error-First Callback)用于同時返回錯誤和數(shù)據(jù)。第一個參數(shù)返回錯誤,并且驗證它是否出錯;其他參數(shù)返回數(shù)據(jù)。

      fs.readFile(filePath, function(err, data)
      {
          if (err)
          {
              // 處理錯誤
              return console.log(err);
          }
          console.log(data);
      });

3、如何避免回調(diào)地獄?

以下方式避免回調(diào)地獄

  • 模塊化:將回調(diào)函數(shù)轉(zhuǎn)換為獨立的函數(shù)
  • 使用流程控制庫,例如[aync]
  • 使用Promise
  • 使用aync/await

4、什么是Promise?

  • Promise可以幫助我們更好地處理異步操作。下面的實例中,100ms后會打印result字符串。catch用于錯誤處理。多個Promise可以鏈接起來。

      new Promise((resolve, reject) =>
          {
              setTimeout(() =>
              {
                  resolve('result');
              }, 100)
          })
          .then(console.log)
          .catch(console.error);

5、用什么工具保證一致的代碼風格?為什么要這樣?

  • 團隊協(xié)作時,保證一致的代碼風格是非常重要的,這樣團隊成員才可以更快地修改代碼,而不需要每次去適應新的風格。這些工具可以幫助我們:
  • [ESLint] (http://eslint.org/)
  • [Standard] (https://standardjs.com/)
  • JSLint
  • JSHint
  • ESLint
  • JSCS推薦

6、什么是stub?舉例說明

  • stub用于模塊的行為。測試時,stub可以為函數(shù)調(diào)用返回模擬的結果。比如說,我們寫文件時,實際上并不需要真正去寫。

          var fs = require('fs');
          var writeFileStub = sinon.stub(fs, 'writeFile', function(path, data, cb)
          {
              return cb(null);
          });
          expect(writeFileStub).to.be.called;
          writeFileStub.restore();

7、什么是測試金字塔?舉例說明

  • 測試金字塔反應了需要寫的單元測試,集成測試以及端到端測試的比例:

  • 測試HTTP接口時應該是這樣的:
  • 很多單元測試,分別測試各個模塊(依賴需要stub)
  • 較少的集成測試,測試各個模塊之間的交互(依賴不能stub)
  • 少量端到端測試,去調(diào)用真正地接口(依賴不能stub)

8、如何用Node監(jiān)聽80端口

  • 這題有陷阱!在類Unix系統(tǒng)中你不應該去監(jiān)聽80端口,因為這需要超級用戶權限。因此不推薦讓你的應用直接監(jiān)聽這個端口。
  • 目前,如果你一定要讓你的應用80端口的話,你可以有通過在Node應用的前方再添加一層反向代理(例如nginx)來實現(xiàn),如下圖。否則,建議你直接監(jiān)聽大于1024的端口

  • 方向代理指的是以代理服務器來接收Internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡上的服務器, 并且將服務器返回的結果發(fā)送給客戶端。

9、什么是事件循環(huán)

  • Node采用的是單線程的處理機制(所有的I/O請求都采用非阻塞的工作方式),至少從Node.js開發(fā)者的角度是這樣的。而在底層,Node.js借助libuv來作為抽象封裝層,從而屏蔽不同操作系統(tǒng)的差異,Node可以借助livuv來實現(xiàn)線程。下圖表示Node和libuv的關系

  • Libuv庫負責Node API的執(zhí)行。它將不同的任務分配給不同的線程,形成一個事件循環(huán),以異步的方式將任務的執(zhí)行結果返回給V8引擎??梢院唵斡孟旅孢@張圖來表示

  • 每一個I/O都需要一個回調(diào)函數(shù)————一旦執(zhí)行完便堆到事件循環(huán)上用于執(zhí)行

10、運算錯誤與程序員錯誤的區(qū)別

  • 運算錯誤并不是bug,這是和系統(tǒng)相關的問題,例如請求超時或者硬件故障。而程序員錯誤就是所謂的bug

11、使用NPM有哪些好處?

  • 通過NPM,你可以安裝和管理項目的依賴,并且能夠指明依賴項的具體版本號。對于Node應用開發(fā)而言,你可以通過package.json文件來管理項目信息,配置腳本,以及指明依賴的具體版本

12、什么是stub?舉個使用場景

  • stub是用于模擬一個組件或模塊的函數(shù)或程序。在測試用例中,簡單的說,你可以用stub去模擬一個方法,從而避免調(diào)用真實的方法,使用stub你還可以返回虛構的結果。你可以配合斷言使用stub。
  • 舉個例子,在一個讀取文件的場景中,當你不想讀取一個真正的文件時:

      var fs = require('fs'); var readFileStub = sinon.stub(fs, 'readFile', function (path, cb) { return cb(null, 'filecontent'); }); expect(readFileStub).to.be.called; readFileStub.restore(); 

在單元測試中:Stub是完全模擬一個外部依賴,而Mock常用來判斷測試通過還是失敗

相關文章

  • Vue.js的高級面試題(附答案)

    這篇文章主要介紹了Vue.js的高級面試題(附答案),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2020-01-13
  • 36 個JS 面試題為你助力金九銀十(面試必讀)

    這篇文章主要介紹了36 個JS 面試題為你助力金九銀十,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-09-10
  • 10個比較流行的JavaScript面試題

    JS 初學者總是對this關鍵字感到困惑,因為與其他現(xiàn)代編程語言相比,JS 中的這this關鍵字有點棘手。今天小編給大家?guī)?0個比較流行的JavaScript面試題 ,感興趣的朋友一起
    2019-07-12
  • 深入理解javascript作用域,作用域鏈,閉包的面試題

    這篇文章主要介紹了javascript作用域,作用域鏈,閉包的面試題,在一些前端面試中經(jīng)常會問題,今天小編特此整理分享到腳本之家平臺,需要的朋友可以參考下
    2020-02-21

最新評論