大廠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 的簡單伺服器?
如果在學習前端方面遇見什麼問題,可以關注私聊我們哦!