這次帶給大家前端關於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,它的作用是什麼。哪些工具可以用來保證一致性的程式碼風格
你可以選擇如下的工具:JSLintJSHint ESLintJSCS - 推薦在團隊開發中,這些工具對於編寫程式碼非常的有幫助,能夠幫助團隊開發者強制執行規定的風格指南, 還能夠透過靜態分析捕獲常見的錯誤。 解析:用來檢查被面試者是否有大型專案開發經驗。運算錯誤與程式設計師錯誤的差異#
运算错误并不是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中文网其它相关文章!
相关阅读:
一个用Vue.js 2.0+做出的石墨文档样式的富文本编辑器
以上是前端關於Node.js的面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!