首頁  >  文章  >  web前端  >  前端關於Node.js的面試題

前端關於Node.js的面試題

php中世界最好的语言
php中世界最好的语言原創
2018-03-07 12:00:194512瀏覽

這次帶給大家前端關於Node.js的面試題,面試前端關於Node.js崗位有哪些需要注意的,下面就是實戰題目,一起來看一下。

【相關推薦:前端面試題(2020)】

#如果你希望找一份有關Node.js的工作,但又不知道從哪裡入手評測自己對Node.js的掌握程度。 本文為你羅列了10個常見的Node.js面試題,分別考察了Node.js程式設計相關的幾個主要面向。

在進入正文之前,需要事先宣告兩點:

這些問題只是Node.js知識體系的一個局部,並不能完全檢視被面試者的實際開發能力。

對現實世界開發中遇到的問題,需要的是隨機應變與團隊合作,所以你可以嘗試結對程式設計。

Node.js面試題列表

什麼是錯誤優先的#回呼函數##?

如何避免回調地獄?

如何用Node來監聽80埠?

什麼是事件循環?

哪些工具可以用來保證一致的程式風格?

運算錯誤與程式設計師錯誤的差別?

使用NPM有哪些好處?

什麼是stub?舉個使用場景?

什麼是測試金字塔?對於HTTP API,如何利用測試金字塔?

你最喜歡的HTTP框架,並說明原因?

現在,我們依序來解答這些問題吧。

什麼是錯誤優先的回呼函數?

錯誤優先的回呼函數用於傳遞錯誤和資料。第一個參數始終應該是錯誤對象, 用於檢查程式是否發生了錯誤。其餘的參數用於傳遞資料。例如:

fs.readFile(filePath, function(err, data) {  
    if (err) {        //handle the error
    }    // use the data object});

解析:這個題目的主要作用在於檢視被面試者對於Node中非同步操作的一些基本知識的掌握。

如何避免回呼地獄

你可以有以下幾個方法:

模組化:將回呼函數分割為獨立的函數

使用Promises

使用yield

來計算生成器或Promise

解析:這個問題有很多種答案,取決你所使用的場景,例如ES6, ES7,或一些控制流程庫。

如何用Node監聽80埠

這題有陷阱!在類Unix系統中你不應該嘗試去監聽80端口,因為這需要超級用戶權限。 因此不建議讓你的應用程式直接監聽這個連接埠。

目前,如果你一定要讓你的應用監聽80埠的話,你可以有透過在Node應用的前方再增加一層反向代理 (例如nginx)來實現,如下圖所示。否則,建議你直接監聽大於1024的連接埠。

方向代理指的是以代理伺服器來接收Internet上的連線請求,然後將請求轉送給內部網路上的伺服器, 並將伺服器傳回的結果傳送給客戶端。

關於反向代理的更多內容,建議你閱讀這篇文章。 關於如何利用nginx來為node配置方向代理的實踐,可以參考這篇文章。

解釋:這個問題用來檢查被面試者是否有實際執行Node應用的經驗。

什麼是事件循環

Node採用的是單一執行緒的處理機制(所有的I/O請求都採用非阻塞的工作方式),至少從Node .js開發者的角度是這樣的。 而在底層,Node.js借助libuv來作為抽象封裝層, 從而屏蔽不同作業系統的差異,Node可以藉助livuv來實現多執行緒。下圖表示了Node和libuv的關係。

Libuv函式庫負責Node API的執行。它將不同的任務分配給不同的線程,形成一個事件循環, 以非同步的方式將任務的執行結果傳回V8引擎。可以簡單用下面這張圖來表示。

每一個I/O都需要一個回呼函數-一旦執行完便推到事件循環上用於執行。 如果你需要更多詳細的解釋,可以參考這個影片。 你也可以參考這篇文章。

解釋:這用於檢查Node.js的底層知識,例如什麼是libuv,它的作用是什麼。

哪些工具可以用來保證一致性的程式碼風格

你可以選擇如下的工具:

JSLint

JSHint

ESLint

JSCS - 推薦

在團隊開發中,這些工具對於編寫程式碼非常的有幫助,能夠幫助團隊開發者強制執行規定的風格指南, 還能夠透過靜態分析捕獲常見的錯誤。

解析:用來檢查被面試者是否有大型專案開發經驗。

運算錯誤與程式設計師錯誤的差異#

运算错误并不是bug,这是和系统相关的问题,例如请求超时或者硬件故障。而程序员错误就是所谓的bug。

解析:这个题目和Node关系并不大,用于考察面试者的基础知识。

使用NPM有哪些好处?

通过NPM,你可以安装和管理项目的依赖,并且能够指明依赖项的具体版本号。 对于Node应用开发而言,你可以通过package.json文件来管理项目信息,配置脚本, 以及指明项目依赖的具体版本。

关于NPM的更多信息,你可以参考官方文档。

解析:它能考察面试者使用npm命令的基础知识和Node.js开发的实际经验。

什么是Stub?举个使用场景

Stub是用于模拟一个组件或模块的函数或程序。在测试用例中, 简单的说,你可以用Stub去模拟一个方法,从而避免调用真实的方法, 使用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常用来判断测试通过还是失败。

有关Node.js的单元测试小结,你可以参考这个链接。

解析:用于测试被面试者是否有测试的经验。如果被面试者知道什么是Stub, 那么可以继续问他是如何做单元测试的。

什么是测试金字塔?

测试金字塔指的是: 当我们在编写测试用例时,底层的单元测试应该远比上层的端到端测试要多。

当我们谈到HTTP API时,我们可能会涉及到:

有很多针对模型的底层单元测试

但你需要测试模型间如何交互时,需要减少集成测试

解析:本文主要考察被面试者的在测试方面的经验。

你最喜欢的HTTP框架以及原因

这题没有唯一的答案。本题主要考察被面试者对于他所使用的Node框架的理解程度, 考察他是否能够给出选择该框架的理由,优缺点等。常用的HTTP框架你可以参考这个网站。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

相关阅读:

JS模块化-RequireJS

一个用Vue.js 2.0+做出的石墨文档样式的富文本编辑器

原生js怎么封装插件

怎样用原生JS封装自己需要的插件

以上是前端關於Node.js的面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn