2022 年你需要知道的 41 個 Node.Js 面試問題和答案

已發表: 2021-01-08

參加Node.js 面試並想知道您將經歷哪些問題和討論? 在參加 Node.js 面試之前,最好先了解會被問到的Node.js 面試問題的類型,以便在心理上為這些問題準備答案。

Node.js 是一個使用 JavaScript 的簡單但非常流行的服務器端腳本工具。 您可以使用 Node.js 創建像命令行程序這樣簡單的東西,甚至可以創建複雜的企業級 Web 應用程序。 您會注意到很多公司都需要經過認證的 Node.js 開發人員,以便處理整個服務器端。 您可以在職業生涯的各個階段找到對 Node.js 的需求。

目錄

2020 年 Node.js 面試問答

讓我們將文章分為三個部分:

  1. 基礎級別 Node.js 面試問題和答案
  2. 中級 Node.js 面試問答
  3. 專家級 Node.js 面試問題和答案

1. 基礎級 Node.js 面試問答

Q.1) Node.js 和 JavaScript 有什麼區別?

Node.js 是 JavaScript 的解釋器和環境,主要用於訪問或執行任何操作系統的任何非阻塞操作。 這裡的運行引擎是谷歌瀏覽器。

而 JavaScript 是一種編程語言,可用於 Web 應用程序的任何客戶端活動。 這裡的運行引擎是 Firefox、Safari、Google Chrome 等。

Q.2) 什麼是 Node.js?

Node.js 是基於Chrome 的 JavaScript 引擎開發的輕量級但功能強大的框架 它將 JavaScript 直接編譯為本機機器代碼。 它用於構建服務器端 Web 應用程序並擴展 JavaScript API 以提供通常的服務器端功能。 人們將此框架用於大型應用程序構建,例如單頁應用程序、視頻流站點和其他基於 Web 的應用程序。

Q.3) 列出使用 Node.js 的一些優點

  • 它速度很快,因為它是在 Chrome JavaScript 引擎上創建的,這使得它的庫在執行代碼時更快。
  • 它是異步的,因為它從不等待 API 返回數據。
  • 它是可擴展的,因為它的事件機制使服務器能夠以非阻塞方式響應。
  • 它是一個開源的,提供了一個令人難以置信的開源社區,它創建了一些很棒的模塊,為 Node.js 應用程序增加了更多的功能。
  • Node.js 從不緩衝數據,因為輸出是分塊的。

Q.4) 列出 Angular 和 Node.js 之間的區別?

Angular 是用於 Web 應用程序的開源軟件,而 Node.js基本上是應用程序的跨平台運行時環境。

Angular 是用 TypeScript 編寫的,而 Node.js 是用 C、C++ 和 JavaScript 等語言編寫的。

Angular 主要用於創建單頁客戶端 Web 應用程序,而 Node.js 主要用於創建可擴展且快速的服務器端網絡應用程序。

Angular 是一個 Web 應用程序框架,Node.js 有幾個不同的框架,如 Partial.js、Sails.js 和 Express.js 等。

Angular 最適合用於創建高度活躍和交互式的 Web 應用程序,而 Node.js 最適合用於開發較小的項目

Angular有助於將應用程序拆分為 MVC 組件,而 Node.js 有助於創建數據庫查詢

Angular 很好地用於創建實時應用程序,而 Node.js 很好地用於需要更快和更具可擴展性的情況

Q.5) 為什麼 Node.js 是單線程的?

它適用於單線程模型,而不是典型的基於線程的實現,以幫助異步處理。 使用異步處理,應用程序可以更好地執行並且在 Web 負載下更具可擴展性。

Q.6) Node.js 是如何工作的?

Node.js 是一個在 v8 環境中運行的虛擬機,使用 JavaScript 作為其腳本語言。 它適用於單線程模型和非阻塞 I/O,由於它可以處理大量同時請求,因此提供了很高的速率。 因為它使用 HTTP 模塊,所以它可以在任何獨立的 Web 服務器上運行。

Q.7) 我們可以在哪裡使用 Node.js?

Node.js 可用於創建:

  • 網絡應用
  • 實時網絡應用
  • 通用應用
  • 分佈式系統

Q.8) Node.js 有多少種 API 函數?

您可以在 Node.js 中找到兩種類型的 API 函數,即同步的阻塞函數和異步的非阻塞函數。

Q.9) 異步和非阻塞函數有什麼區別?

異步(非同步)函數是我們可以用來發出不等待服務器響應的異步 HTTP 請求的函數。 這些函數繼續返回它已經收到服務器響應的請求。

非阻塞函數用於 I/O 操作。 他們快速響應任何可用數據,並根據請求繼續運行。 如果沒有返回答案,API 會迅速返回錯誤。

Q.10) 解釋事件驅動編程

它是一種主要使用事件來觸發多個功能的編程方法。 事件可以是按鍵、鼠標點擊等。當事件被觸發時,將執行與元素預先註冊的回調函數。 該方法主要使用發布-訂閱模式。 正是由於這種方法,Node.js 比其他技術更快。

Q.11) 在 Node.js 的上下文中,解釋 REPL

Node.js 中的 REPL 表示讀取、評估、打印和循環。 它描述了計算機設置,例如 Unix/Linux shell 或窗口控制台,或者可以註冊任何命令的位置,然後系統可以用輸出進行回复。 Node.js 默認包含一個 REPL 環境。 REPL 可以執行以下任務:

  • 讀取:它讀取用戶的輸入,將其轉換為 JavaScript 數據結構,然後將其存儲在內存中。
  • Eval:它接收和評估數據結構。
  • 打印:打印最終結果。
  • 循環:循環給定命令,直到按兩次CTRL+C

Q.12) 列出應該使用事件循環異步完成的作業?

  • 輸入輸出操作
  • 繁重的計算
  • 任何需要阻塞的東西

Q13) 為什麼 Google 為 Node.js 使用 V8 引擎?

V8 運行時引擎將 JavaScript 代碼轉換為本機機器代碼,從而實現快速運行的應用程序。 這個 Chrome 引擎顯著加快了執行和響應過程。

Q14) 使用 Node.js 有什麼好處?

正如我們之前討論的,Node.js 建立在 V8 引擎之上,這使得它的庫可以快速執行代碼。 基於 Node.js 的服務器不等待 API 返回數據,這意味著它是異步的。 此外,Node.js 具有高度可擴展性,因為它的事件機制以非阻塞方式響應。

Node.js 應用程序中也沒有緩衝。 多年來,已經出現了一個相當大的開源社區,貢獻了優秀的模塊並為 Node.js 應用程序提供了額外的功能。

2. 中級 Node.js 面試問答

Q.15) 什麼是測試金字塔?

解釋為成功構建項目需要編寫多少單元測試、集成測試和端到端測試的比率的圖表稱為測試金字塔。

Q16) Express.js 包的作用是什麼?

Express.js 是一個幫助管理服務器端應用程序中的服務器和路由之間的數據流的框架。 這個靈活的框架建立在 Node.js 之上,特別是在名為 connect 的中間件模塊上。 反過來,connect 模塊使用 HTTP 模塊與 Node.js 通信。 因此,如果您使用任何基於 connect 的中間件模塊,與 Express.js 的集成變得容易。

Q17)斷言模塊在 Node.js 中的作用是什麼?

Assert 允許您編寫測試。 在 Node.js 中,它是一個內部模塊,提供一組用於檢查不變量的斷言測試。 您可以將 require('assert') 代碼用於其他應用程序。

Q.18) Node.js 中的錯誤優先回調是什麼?

Node.js 中的錯誤優先回調用於傳遞錯誤和數據。 傳遞這些函數的第一個參數必須是一個錯誤對象。 其他參數表示的是附加數據。 如果沒有錯誤或問題,您可以繼續使用後續參數。

var myPost = new Post({title: 'Myexample'});

myPost.save(函數(錯誤,myInstance){

如果(錯誤)

{

//處理錯誤並返回

}

//繼續使用`myInstance`

});

Q19) package.json 文件的用途是什麼?

Node.js 中的 package.json 文件包含項目的元數據。 它是應用程序的核心,您可以在其中定義包的屬性。 文件的元數據可以進一步分為以下幾類:

  • 項目名稱、許可證、作者、當前模塊版本、項目描述等屬性。
  • 您還可以通過將項目直接寫入 package.json 文件來包含有關項目的必要信息。

Q.20) module.exports 有什麼用?

要將所有相似的代碼混合成一個代碼單元,可以通過將所有相關函數移動到特定文件來執行,我們需要在 Node.js 中使用 module.exports。 例如,您有一個名為 greet.js 的文件,其中包含兩個函數,如下所示:

模塊.exports = {

greetInHindi:函數(){

返回“NAMASTE”;

},

greetInEnglish: 函數(){

返回“你好”;

}};

module.exports 提供了兩個函數,可以使用以下代碼在單獨的文件中導入:

var myGreets = 要求(“./greet.js”);

myGreets.greetInHindi() //NAMASTE

myGreets.greetInEnglish() //你好

Q.21) Node.js 中的反應器模式是什麼?

Node.js 中的反應器模式是一種非阻塞 I/O 操作的理論。 該模式提供了一個與每個 I/O 操作連接的處理程序,並且一旦創建了 I/O 請求,它就會被提交給解復用器 這個解復用器是一個通知接口,能夠在非阻塞 I/O 模式下處理並發。

它還有助於以事件的形式處理每個請求,然後將每個事件排成一行。 因此,它導致了事件隊列的生成。 同時,我們有我們的事件循環,它重複出現在事件隊列中的事件。

Q.22) Node.js 的 LTS 版本是什麼?

LTS 意味著 Node.js 的長期支持版本,它通過安全更新和性能增強來修復所有重要的錯誤。 所有這些版本的有效期至少為 18 個月,主要關注安全和穩定性問題。 對 LTS 版本所做的更改僅限於修復錯誤、npm、安全升級、文檔和性能加速。

Q.23) 你如何理解回調地獄?

回調地獄也被稱為末日金字塔。 這是由於不可讀的極端嵌套回調而發生的模式。 它通常包含多個嵌套的回調函數,使代碼難以閱讀或調試。 這主要是由於異步邏輯實現不當造成的。

async_A(函數(){

async_B(函數(){

async_C(函數(){

async_D(函數(){

……

});

});

});

});

Q24)列出 async.queue 的輸入參數。

在 Node.js 中,async.queue 將兩個參數作為輸入。 這些包括任務功能和並發值。

Q.25) 什麼是 libuv?

它是一個 Node.js 多平台支持庫,主要用於異步 I/O。 它最初是為 Node.js 開發的,但現在它也用於我們的系統,如 pyuv、Luvit、Julia 等。Libuv 基本上是基於平台的 libev/IOCP 的抽象,為用戶提供基於 libev 的 API。 libuv 的一些關鍵特性是:

  • 文件系統事件
  • 支持全功能事件循環
  • 異步 TCP 和 UDP 套接字
  • 異步文件和文件系統操作
  • 子進程

Q.26) Node.js 中的流

Streams 使您能夠在 Node.js 中讀取和處理大型數據集。 這些對像是類似於字符串和數組的數據集合。 它們允許您連續地從源讀取數據或寫入目標。 在 Node.js 中,存在四種基本類型的流——可讀、可寫、雙工和轉換。

Q.27) 你如何在 Node.js 中讀取和執行文件?

在 Node.js 中,有兩種​​讀取和執行文件的方法——readFile 和 createReadStream。 兩者的主要區別在於 readFile 是完全緩衝的,而 createReadStream 是部分緩衝的。 readFile() 僅在將整個文件推入緩衝區時才返迴響應,從而減慢處理時間。

相比之下,createReadStream 將流程視為事件系列,將文件拆分為塊並一一發迴響應。 因此,它提供了一種處理大型數據文件的有效方法。

Q.28) Node.js 中有哪些安全實現?

身份驗證和錯誤處理是 Node.js 中的兩個主要安全實現。

Q.29) Node.js 中如何處理子線程?

你會認為 Node.js 是單線程的,你不能使用子線程。 雖然進程一般不會暴露子線程,但您仍然可以使用 spawn() 在後台執行某些異步 I/O 任務。 這樣,應用程序的主事件循環就不會受到阻礙。 您還可以包含 ChildProcess 模塊以顯式使用此線程概念。

3.專家級Node.js面試問答

Q.30) NODE_ENV 有什麼用?

如果您的項目處於生產級別,Node.js 提倡使用 NODE_ENV 變量來標記它的約定。 這有助於在創建項目時做出更好的決策。 此外,當您將 NODE_ENV 設置為生產環境時,您的應用程序的運行速度確實快了大約三倍。

Q.31) 在 Node.js 中,createReadStream 和 readFile 有什麼區別

Node.js 提供了兩種使用 readFile 和 CreateStream 讀取和操作文件的方法。 readFile() 是一個完全緩衝的進程,只有當整個文件被推入緩衝區並被讀取時才會響應。 這是一個內存密集型過程,對於較大的文件會變得非常慢。

而在 createReadStream 的情況下,它是部分緩衝的,它將整個過程作為一個事件系列。 該文件被分成大塊,然後被處理並作為響應一次發送回。 一旦完成,它們就會從緩衝區中刪除,從而更有效地處理更大的文件。

Q.32)解釋 Node.js 中緩衝區類的用法

Node.js 中的 Buffer 類將原始數據存儲為整數數組。 它對應於 V8 領域之外的內存分配,這意味著它是一個全局類。 無需在 Node.js 中導入緩衝區模塊即可訪問該類。 之所以需要緩衝區類,是因為 JavaScript 與二進制數據不兼容。

Q.33)區分 spawn() 和 fork()

您使用 Node.js 中的 spawn() 來啟動一個新進程。 使用提供的命令集,此過程僅激活處理器上節點模塊的一個副本。 由於沒有創建新的 V8 實例,因此當您的子進程返回大量數據時,spawn() 變得特別有用。

相反,fork() 方法執行 V8 引擎的新實例。 這意味著多個工作人員在一個基於節點的代碼上運行各種任務。

Q.34)前後端開發

前端開發基於異步請求和 AJAX,而後端開發基於服務器架構。 前者使用標記和網絡語言(如 HTML、JavaScript、CSS 等)用於 SEO 目的。 而後者利用編程語言 Python、Ruby 和其他語言進行備份。 與後端開發相比,前端開發更易於訪問。

Q.35)列出使用控制流功能的步驟。

Node.js 中異步函數調用之間執行的代碼是控制流函數。 該功能的工作可以通過以下步驟進行解釋:

  • 一、控制執行順序
  • 然後,收集所需的數據
  • 接下來,限制並發
  • 最後,調用程序的下一步

Q.36) 命名 Node.js 的計時特性。

Node.js 提供了一個 Timers 模塊,它包含在給定時間段後運行代碼的各種函數。 該模塊提供的各種功能:

setTimeout/clearTimeout – 用於在幾毫秒後編程代碼執行

setInterval/clearInterval - 用於多次執行一段代碼

setImmediate/clearImmediate – 用於在當前事件循環週期結束時運行代碼

process.nextTick - 用於編寫需要在事件循環的下一次迭代中觸發的回調函數

Q.37) 告訴我們關於 Node.js 中 Punycode 的理論?

Punycode 是一種編碼語法。 它用於將 Unicode (UTF-8) 字符串轉換為基本的 ASCII 字符串。 這是必需的,因為主機名只能識別 ASCII 字符。 0.6.2 之後的所有版本都默認使用它。 但是,如果您希望將其用於舊版本,您可以使用以下語法:

punycode = 要求('punycode');

Q.38) 區分 Node.js 和 Ajax?

Node.js 是一種服務器端 JavaScript,而 Ajax 是一種客戶端技術。 Ajax 主要是更新或編輯網頁,甚至不需要刷新頁面。 然而,需要 Node.js 來開發通常由服務器而不是 Web 瀏覽器執行的服務器軟件。

Q.39) Node.js 是否提供任何調試器?

Node.js 確實提供了一個簡單的基於 TCP 的協議以及一個內置的調試客戶端。 如果你想調試你的 JavaScript 文件,你可以使用參數 node debug [script.js | -e “腳本” | <host>: <port> ],後跟要調試的js文件名。

Q.40)什麼是全局對象?

您可以在 Node.js 中使用全局對象,而無需顯式包含它們。 這些可以是應用程序模塊範圍內可用的模塊函數、字符串等。 有時,您可能會在全局範圍內找到它們。

Q.41) 解釋 Node.js 的退出代碼。

退出代碼是一組用於完成特定過程的不同代碼。 它也可以包括全局對象。 以下是 Node.js 中使用的退出代碼的一些示例:

  • 沒用過
  • 未捕獲的致命異常
  • 內部異常處理程序運行時失敗
  • 致命錯誤
  • 內部 JavaScript 評估失敗

從世界頂級大學在線學習軟件工程課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

結論

在我們收集的一些最常見的Node.js 面試問題和答案即將結束時,我們希望您發現它們很有價值,並且能夠通過正確回答來打動您的面試官。

如果您有興趣了解有關大數據的更多信息,請查看 upGrad 和 IIITB 的全棧軟件開發執行 PG 計劃,該計劃專為工作專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目和作業,IIIT-B校友身份、實用的實踐頂點項目和頂級公司的工作協助。

什麼是 Node.js?

Nodejs 是一個服務器端的 JavaScript 環境。 它是事件驅動的、非阻塞的和高度可擴展的。 Nodejs 也是開源的,因此是免費的。 Node.js 用於開發可擴展的網絡程序。 Node.js 獨立於平台,適用於各種操作系統 (OS),可以部署在 Linux、Solaris、Windows 和 Mac 上。 Node.js 被 LinkedIn、PayPal、IBM、Microsoft 等公司使用。Node.js 是一個 JavaScript 運行時,用於創建快速、可擴展的網絡應用程序。 此運行時旨在構建可以處理​​數千個同時連接的高度並發應用程序。

什麼是打字稿?

Typescript 是由 Microsoft 創建的 JavaScript 語言的超集。 Typescript 為 JavaScript 帶來了一些最先進的編程語言特性。 開發人員可以將他們現有的 java 服務器端編程技能實施到 JavaScript。 Typescript 在開發大型 Web 應用程序時特別有用。 TypeScript 是由 Microsoft 開發和維護的一種免費的開源編程語言。 它是 JavaScript 的嚴格超集,並為該語言添加了可選的靜態類型和基於類的面向對象編程。 它是一種用於應用程序級 JavaScript 開發的語言。

什麼是 MongoDB?