1. 程式人生 > 其它 >大廠NODE.js高階面試題和答案,重點難點攻克!

大廠NODE.js高階面試題和答案,重點難點攻克!

 

 

不論是前端開發還是後端開發,Node.js 這些內容都早已經是我們的必備技能,消化理解了整個人就變得通透了,幾乎我們所有的程式開發人員日常開發中都會遇到這些難題了 !不過也不擔心,是問題就總能解決的哈

目錄

1、什麼是執行緒池,Node.js 中哪個庫處理它 ?
2、如何通過叢集提高 Node.js 的效能 ?
3、worker 工作執行緒與叢集有何不同 ?
4、Node.js 中的事件發射器是什麼 ?
5、如何測量非同步操作的持續時間 ?
6、如何衡量非同步操作的效能 ?
7、對於 Node.js,為什麼 Google 使用 V8 引擎 ?
8、為什麼要把 Express 應用和伺服器分開 ?
9、 解釋 Node.js 中的Reactor反應器模式是什麼 ?
10、什麼是中介軟體 ?
11、什麼是 node.js 緩衝區 ?
12、什麼是node.js流 ?
13、我們如何在node.js中使用async await ?
14、如何在 Node.js 中建立一個返回 Hello World 的簡單伺服器?

 

1、什麼是執行緒池,Node.js 中哪個庫處理它 ?

 執行緒池由 libuv 庫處理。libuv 是一個多平臺 C 庫,它支援基於非同步 I/O 的操作,例如檔案系統、網路和併發。

 

 

2、如何通過叢集提高 Node.js 的效能 ?

Node.js 應用程式在單個處理器上執行,這意味著預設情況下它們不會利用多核系統。

叢集模式用於啟動多個 node.js 程序,從而擁有多個事件迴圈例項。

當我們開始在後臺的 nodejs 應用程式中使用叢集時,會建立多個 node.js 程序,但還有一個稱為叢集管理器的父程序,它負責監控我們應用程式各個例項的健康狀況。

 

 

 3、工作執行緒與叢集有何不同 ?

Cluster簇:

  • 每個 CPU 上都有一個程序與 IPC 進行通訊。

  • 如果我們想讓多個伺服器通過單個埠接受 HTTP 請求,叢集會很有幫助。

  • 這些程序在每個 CPU 中產生,因此將具有單獨的記憶體和節點例項,這將進一步導致記憶體問題。

 工作執行緒:

  • 總共只有一個程序有多個執行緒。

  • 每個執行緒都有一個 Node 例項(一個事件迴圈,一個 JS 引擎),大多數 API 都可以訪問。

  • 與其他執行緒共享記憶體(例如 SharedArrayBuffer)

  • 這可用於處理資料或訪問檔案系統等 CPU 密集型任務,因為 NodeJS 是單執行緒的,同步任務可以更有效地利用工作執行緒。

4、Node.js 中的事件發射器是什麼 ?

EventEmitter是一個 Node.js 類,它包含所有基本上能夠發出事件的物件。這可以通過使用 eventEmitter.on()函式附加由物件發出的命名事件來完成。因此,每當這個物件丟擲一個甚至附加的函式時,都會同步呼叫。

 

 

 5、如何測量非同步操作的持續時間 ?

 Performance API 為我們提供了找出必要效能指標的工具一個簡單的例子是使用 async_hooks 和 perf_hooks

6、如何衡量非同步操作的效能 ?

Performance API 為我們提供了找出必要效能指標的工具。

一個簡單的例子

 

 

7、對於 Node.js,為什麼 Google 使用 V8 引擎 ?

那麼,還有其他選擇嗎?

是的,當然,我們有來自 Firefox 的Spidermonkey,來自 Edge 的 Chakra,但 Google 的 v8 是發展最快的(因為它是開源的,所以有一個巨大的社群幫助開發功能和修復錯誤)和最快的(因為它是用 c++ 編寫的)

作為一個 JavaScript 和 WebAssembly 引擎。它可以移植到幾乎所有已知的機器上。

 

8、為什麼要把 Express 應用和伺服器分開 ?

伺服器負責初始化路由、中介軟體和其他應用程式邏輯,而應用程式具有所有業務邏輯,這些業務邏輯將由伺服器啟動的路由提供服務。

這確保了業務邏輯被封裝並與應用程式邏輯解耦,從而使專案更具可讀性和可維護性。

 

9、 解釋 Node.js 中的Reactor反應器模式是什麼 ?

Reactor 模式又是一種用於非阻塞 I/O 操作的模式,但總的來說,這用於任何事件驅動的架構。

這裡面有兩個元件: 1. Reactor 2. Handler。

Reactor:它的工作是將 I/O 事件分派給適當的處理程式 Handler:它的工作是實際處理這些事件

 

10、什麼是中介軟體 ?

中介軟體介於您的請求和業務邏輯之間。

它主要用於捕獲日誌並啟用速率限制、路由、身份驗證,基本上是任何不屬於業務邏輯的部分。

當然,還有第三方中介軟體,例如 body-parser,您可以為特定用例編寫自己的中介軟體。

 

11、什麼是 node.js 緩衝區?

通常,緩衝區是一個臨時記憶體,主要由流使用以保留一些資料直到被消耗。

緩衝區是在 JavaScript 的 Unit8Array 以外的其他用例中引入的,主要用於表示固定長度的位元組序列。

這也支援傳統編碼,如 ASCII、utf-8 等。它是 v8 之外的固定(不可調整大小)分配的記憶體。

 

12、什麼是node.js流 ?

Streams 是 EventEmitter 的例項,可用於處理 Node.js 中的流資料。

它們可用於處理和操作網路上的流式大檔案(視訊、mp3 等)。他們使用緩衝區作為臨時儲存。

流主要有四種類型:

  • Writable:可以寫入資料的流(例如,fs.createWriteStream())。
  • Readable:可以從中讀取資料的流(例如,fs.createReadStream())。
  • Duplex:既可讀又可寫的流(例如,net.Socket)。
  • Transform:可以在寫入和讀取資料時修改或轉換資料的雙工流(例如,zlib.createDeflate())。

 

13、我們如何在node.js中使用async await ?

以下是使用 async-await 模式的示例

 

 

14、如何在 Node.js 中建立一個返回 Hello World 的簡單伺服器?

 

 

如果在學習前端方面遇見什麼問題,可以關注私聊我們哦!