亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

nodejs常見面試題與參考答案小結(jié)

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

1、為什么用Nodejs,它有哪些缺點(diǎn)?

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

當(dāng)然Nodejs也有一些缺點(diǎn):

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

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

  • 錯誤優(yōu)先(Error-first)的回調(diào)函數(shù)(Error-First Callback)用于同時(shí)返回錯誤和數(shù)據(jù)。第一個(gè)參數(shù)返回錯誤,并且驗(yàn)證它是否出錯;其他參數(shù)返回?cái)?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)換為獨(dú)立的函數(shù)
  • 使用流程控制庫,例如[aync]
  • 使用Promise
  • 使用aync/await

4、什么是Promise?

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

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

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

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

6、什么是stub?舉例說明

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

          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、什么是測試金字塔?舉例說明

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

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

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

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

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

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

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

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

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

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

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

11、使用NPM有哪些好處?

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

12、什么是stub?舉個(gè)使用場景

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

      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是完全模擬一個(gè)外部依賴,而Mock常用來判斷測試通過還是失敗

相關(guān)文章

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

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

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

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

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

最新評論