91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

      手機站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

      千鋒教育

      掃一掃進入千鋒手機站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時隨地免費學(xué)習(xí)課程

      當(dāng)前位置:首頁  >  技術(shù)干貨  > 15個常見的Node.js面試問題及答案

      15個常見的Node.js面試問題及答案

      來源:千鋒教育
      發(fā)布人:wjy
      時間: 2022-06-01 13:17:00 1654060620

        俗話說:臨陣磨槍,不快也光。對于成功的編程面試來說,準(zhǔn)備和知識面一樣重要。準(zhǔn)備使你有信心參加面試,而不用擔(dān)心莫名的緊張情緒。如果第一次參加編程面試,這一點尤其重要。

      15個常見的Node.js面試問題及答案

        為幫助 Node.js 開發(fā)人員更好的面試,列出了 15 個常見的 Node.js 和網(wǎng)絡(luò)開發(fā)相關(guān)的面試問題。

        在本文中,我們將重點討論 Node.js 相關(guān)問題。但是,請記住 JavaScript 問題在 Node.js 面試中也經(jīng)常問到,所以準(zhǔn)備一些對你來說沒什么壞處。

        現(xiàn)在,讓我們深入了解面試中可能會問到的 Node.js 問題。

        ## **1、Node.js與JavaScript有什么不同?**

        ![img](https://pic3.zhimg.com/80/v2-3817e606ff0fa0e67be7139b855a5dd2_720w.jpg)

        ## **2、什么時候用Node.js?**

        Node.js 是異步的、事件驅(qū)動的、非阻塞的和單線程的,使得它成為開發(fā)下面應(yīng)用程序的完美候選:

        - 實時應(yīng)用程序,如聊天和提供實時更新的應(yīng)用程序。

        - 將視頻或其他多媒體內(nèi)容流式傳輸給大量觀眾的流式應(yīng)用程序。

        - 其他 I/O 密集型應(yīng)用程序,如協(xié)作平臺。

        - 遵循微服務(wù)架構(gòu)的網(wǎng)絡(luò)后端。

        然而,Node.js 的特性使得它對于其他類型的應(yīng)用程序來說不是一個理想的選擇。執(zhí)行 CPU 密集型任務(wù)的應(yīng)用程序(如復(fù)雜的數(shù)學(xué)計算)在使用 CPU 時表現(xiàn)不佳,因為 Node.js 是單線程的。

        ## **3、EventEmitter做了什么?**

        Node.js 中任何對象發(fā)出的事件都是 EventEmitter 類的實例,就像 http 模塊。

        所有 EventEmitter 類都可以使用 eventEmitter.on() 函數(shù)將事件偵聽器附加到事件。然后一旦捕捉到這樣的事件,就會同步地逐個調(diào)用它的偵聽器。

        ```js

        const events = require("events");

        const eventEmitter = new events.EventEmitter();

        const eventListener = function(){

        console.log("event triggered");

        }

        eventEmitter.on("emitted", eventListener);

        eventEmitter.emit("emitted");

        ```

        ## **4、事件循環(huán)是什么?**

        單線程的 Node.js 必須是非阻塞的,以防止線程阻塞在需要很長時間才能完成的任務(wù)上,事件循環(huán)負(fù)責(zé)實現(xiàn)這種非阻塞行為,它使用應(yīng)用程序線程調(diào)度掛起的任務(wù)。

        Node.js 在任務(wù)完成時通過回調(diào)來處理異步函數(shù)返回的響應(yīng)。與創(chuàng)建任務(wù)的事件類似,任務(wù)完成后也會發(fā)出一個事件。Node.js 將需要處理的事件添加到事件隊列。

        事件循環(huán)對事件隊列中的事件進行迭代,并安排何時執(zhí)行其關(guān)聯(lián)的回調(diào)函數(shù)。

        ## **5、流是什么?**

        Stream 流是從源讀取或?qū)懭霐?shù)據(jù)并將其傳輸?shù)竭B續(xù)流目標(biāo)的管道。有四種類型:

        - 可讀

        - 可寫的

        - 可讀寫

        - 先寫入,再讀出來

        每個流也是一個 EventEmitter。這意味著流對象可以在流上沒有數(shù)據(jù)、流上有可用數(shù)據(jù)或流中的數(shù)據(jù)在程序刷新時發(fā)出事件。

        ```js

        const fs = require("fs");

        const readableStream = fs.createReadStream("test.txt");

        let content = "";

        readableStream.on("data", (chunk) => {

        content += chunk;

        });

        readableStream.on("end", () => {

        console.log(content);

        });

        ```

        ## **6、ReadFile和createReadStream函數(shù)有什么區(qū)別?**

        readFile 函數(shù)異步讀取文件的全部內(nèi)容,并存儲在內(nèi)存中,然后再傳遞給用戶。

        createReadStream 使用一個可讀的流,逐塊讀取文件,而不是全部存儲在內(nèi)存中。

        與 readFile 相比,createReadStream 使用更少的內(nèi)存和更快的速度來優(yōu)化文件讀取操作。如果文件相當(dāng)大,用戶不必等待很長時間直到讀取整個內(nèi)容,因為讀取時會先向用戶發(fā)送小塊內(nèi)容。

        ```js

        const fs = require("fs");

        fs.readFile("test.txt", (err, content) => {

        console.log(content);

        });

        ```

        ## **7、如何處理Node.js中未捕獲的異常?**

        我們可以在進程級別捕獲應(yīng)用程序中未捕獲的異常。為此將偵聽器附加到 process 全局對象:

        ```js

        process.on("uncaughtException", (err) => {

        console.log("exception caught: ", err);

        });

        ```

        ## **8、Node.Js能否充分利用多核處理器?**

        (默認(rèn)的)Node.js 應(yīng)用程序總是單線程的,即使在多核處理器上運行,應(yīng)用程序也能只使用一個處理器。

        但是 Node.js 的核心模塊之一 Cluster 支持 Node.js 應(yīng)用程序開啟多核,允許我們創(chuàng)建多個工作進程,這些進程可以在多個內(nèi)核上并行運行,并共享一個端口來偵聽事件。

        每個進程使用 IPC 與主線程通信,并根據(jù)需要將服務(wù)器句柄傳遞給其他進程。主進程可以偵聽端口本身并以循環(huán)方式將每個新連接傳遞給子進程,也可以將端口分配給子進程以便子進程偵聽請求。

        ## **9、反應(yīng)堆設(shè)計模式是什么?**

        反應(yīng)堆設(shè)計模式是,Node.js 將回調(diào)函數(shù)(處理程序)附加到每個 I/O 操作,然后創(chuàng)建請求時將處理程序提交給解復(fù)用器。

        解復(fù)用器收集應(yīng)用程序中發(fā)出的每個 I/O 請求,并將它們作為隊列中的事件進行排隊。這個隊列就是我們所說的事件隊列。將事件排隊后,解復(fù)用器返回應(yīng)用程序線程的控制。

        同時,事件循環(huán)遍歷事件隊列中的每個事件,并調(diào)用附加的回調(diào)來處理事件響應(yīng)。

        這就是 Node.js 中所使用的反應(yīng)堆模式。

        ## **10、單線程與多線程網(wǎng)絡(luò)后端相比有哪些好處?**

        盡管 Node.js 是單線程的,但是大多數(shù)用于后端開發(fā)的編程語言都提供多線程來處理應(yīng)用程序操作。

        為什么單線程有利于后端開發(fā)?

        - 開發(fā)人員更容易實現(xiàn)應(yīng)用程序。我們的應(yīng)用程序在生產(chǎn)過程中不會突然遇到意外的競爭條件。

        - 單線程應(yīng)用程序易于擴展。

        - 它們可以毫不延遲地在一個時刻收到的大量用戶請求提供服務(wù)。相比之下,當(dāng)流量較大時,多線程后端必須等待線程池中的線程釋放,才能為用戶請求提供服務(wù)。利用 Node.js 的非阻塞特性,用戶請求不會在單個線程上掛起太長時間(只有在操作不是 CPU 密集型時)。

        ## **11、REPL是什么?**

        REPL 代表 Read Eval Print Loop,是一個虛擬環(huán)境,可以在其中輕松地運行編程語言。Node.js 帶有一個內(nèi)置的 REPL 來運行 JavaScript 代碼,類似于我們在瀏覽器中用來運行 JavaScript 代碼的控制臺。

        要啟動 Node.js REPL,只需在命令行上運行 node,然后寫一行 JavaScript 代碼,就可以在下一行看到它的輸出。

        ## **12、process.nextTick和setImmediate有什么區(qū)別?**

        傳遞給 setImmediate 函數(shù)的回調(diào)將在事件隊列上的下一次迭代中執(zhí)行。

        另一方面,回調(diào)傳遞給 process.nextTick 在下一次迭代之前以及程序中當(dāng)前運行的操作完成之后執(zhí)行。在應(yīng)用程序啟動時,開始遍歷事件隊列之前調(diào)用它的回調(diào)。

        因此,回調(diào) process.nextTick 總是在 setImmediate 之前調(diào)用。

        下面代碼段:

        ```js

        setImmediate(() => {

        console.log("first");

        })

        process.nextTick(() => {

        console.log("second");

        })

        console.log("third");

        ```

        將按順序輸出:

        ```js

        third

        second

        first

        ```

        ## **13、stub什么**

        測試應(yīng)用程序時使用 stub,模擬給定組件或模塊的行為,你可以將精力集中在要測試的代碼部分。通過使用 stub 代替與測試無關(guān)的組件,不必?fù)?dān)心外部組件會影響結(jié)果。

        例如,如果正在測試的組件在預(yù)期測試的部分之前有一個文件讀取操作,則可以使用 stub 來模擬該行為并返回模擬內(nèi)容,而不用實際讀取文件。

        在 Node.js 中,我們使用像 Sinon 這樣的庫來實現(xiàn)(譯者注,Sinon 在測試中替換某部分代碼,減少測試項編寫的復(fù)雜度 [https://sinonjs.org](https://link.zhihu.com/?target=https%3A//sinonjs.org))。

        ## **14、為什么在express中分離“應(yīng)用程序”和“服務(wù)器”是一種好的做法?**

        通過在 Express 中分離應(yīng)用程序和服務(wù)器,可以將 API 實現(xiàn)與網(wǎng)絡(luò)相關(guān)配置分開。在不執(zhí)行網(wǎng)絡(luò)調(diào)用的情況下執(zhí)行 API 測試,保證了更快的測試執(zhí)行和更好的代碼覆蓋度量。

        要實現(xiàn)這種分離,應(yīng)該在單獨的文件中聲明 API 和 server,對應(yīng) app.js 和 server.js:

        ```js

        // app.js

        const express = require("express");

        const app = express();

        app.use("/", index);

        app.use("/contact", contact);

        app.use("/user", user);

        module.exports = app;

        // server.js

        const http = require("http");

        const app = require("/app");

        app.set('port', process.env.PORT);

        const http = http.createServer(app);

        ```

        ## **15、什么是yarn和npm?為什么要用yarn代替npm呢?**

        npm 是與 Node.js 自帶的默認(rèn)包管理器,它有一個大型的公共庫和私有庫,存儲在 npm registry 的數(shù)據(jù)庫中(譯者注,官方默認(rèn)中心庫 [http://registry.npmjs.org/](https://link.zhihu.com/?target=http%3A//registry.npmjs.org/),國內(nèi)淘寶鏡像 [http://registry.npm.taobao.org/](https://link.zhihu.com/?target=http%3A//registry.npm.taobao.org/)),用戶可以通過 npm 命令行訪問該數(shù)據(jù)庫。在 npm 的幫助下,用戶可以輕松管理項目中的依賴項。

        yarn 也是一個包管理器,為了解決 npm 的一些缺點。yarn 依賴 npm 注冊中心為用戶提供對包訪問。yarn 底層結(jié)構(gòu)基于 npm,如果從 npm 遷移到 yarn,項目結(jié)構(gòu)和工作流不需要大改。

        就像之前提到的,在某些情況下,yarn 提供了比 npm 更好的功能。與 npm 不同的是,它會緩存下載的每個包,不必重新下載。

        通過校驗和驗證包的完整性來提供更好的安全性,保證在某個系統(tǒng)上運行的包在任何其他系統(tǒng)中的工作方式完全相同,這就是為什么選擇 yarn 而不是 npm 來進行包管理。

        ## **總結(jié)**

        在本文中,討論了 15 個最常見的 Node.js 面試問題,幫助你為下一次面試做準(zhǔn)備。知道你可能被問到的問題和答案,面試就不再緊張了。

        **- End -**

        更多關(guān)于“html5培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗,課程大綱更科學(xué)更專業(yè),有針對零基礎(chǔ)的就業(yè)班,有針對想提升技術(shù)的提升班,高品質(zhì)課程助理你實現(xiàn)夢想。

      tags:
      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
      請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
      免費領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      今日頭條展現(xiàn)量是什么?今日頭條展現(xiàn)量規(guī)則分析

      目前頭條用戶會發(fā)現(xiàn)微頭條和問答新增了“展現(xiàn)量”指標(biāo)。那么這個今日頭條展現(xiàn)量是什么意思呢?如何提高呢?下面千鋒教育小編就和大家說...詳情>>

      2023-09-19 09:15:47
      我想直播帶貨去哪里找貨源一件代發(fā)

      現(xiàn)在直播帶貨是一個非?;鸬男袠I(yè),越來越多的人進入到這個圈子,但是,認(rèn)真地說,直播帶貨能不能賺到錢還是要看自己。雖然這一行業(yè)火,收入高,...詳情>>

      2023-09-19 08:41:02
      入駐短視頻mcn需要多少錢?有哪些費用?

      眾所周知,現(xiàn)在短視頻成了很多人的自媒體創(chuàng)業(yè)道路之一,越來越多人喜歡在網(wǎng)上消遣時間,購物等。也有很多優(yōu)秀的博主去做出很多新的內(nèi)容,那么入...詳情>>

      2023-09-19 08:12:47
      短視頻帶貨應(yīng)該注冊什么公司?需要什么資料?

      短視頻大家應(yīng)該都非常熟悉,現(xiàn)在很多人都喜歡在閑暇的時候刷短視頻,短視頻平臺也開始了直播帶貨,商家也都開始創(chuàng)業(yè)了,那么短視頻帶貨需要營業(yè)...詳情>>

      2023-09-19 08:09:31
      怎樣投抖加不花錢?別人能看出來嗎?

      抖音一些視頻為了獲取更多點擊,一些博主機會投抖加。其實抖加的投放沒有絕對正確的方法,而不同賬號和視頻投放的策略都是不一樣的,不過一般情...詳情>>

      2023-09-19 08:00:10
      開班信息
      北京校區(qū)
      • 北京校區(qū)
      • 大連校區(qū)
      • 廣州校區(qū)
      • 成都校區(qū)
      • 杭州校區(qū)
      • 長沙校區(qū)
      • 合肥校區(qū)
      • 南京校區(qū)
      • 上海校區(qū)
      • 深圳校區(qū)
      • 武漢校區(qū)
      • 鄭州校區(qū)
      • 西安校區(qū)
      • 青島校區(qū)
      • 重慶校區(qū)
      • 太原校區(qū)
      • 沈陽校區(qū)
      • 南昌校區(qū)
      • 哈爾濱校區(qū)