<h4>1.為什么使用 Node 涨薪?(面騰訊時被問答)</h4>
我當(dāng)時簡歷有寫到 node ,騰訊的小姐姐就問到了這個問題献丑,當(dāng)時復(fù)習(xí)的還不是很透徹,回答的比較模糊创橄,下面是我找到的參考答案:
總結(jié)起來 node 有以下幾個特點:
簡單強大,輕量可擴(kuò)展.簡單體現(xiàn)在node使用的是 javascript,json 來進(jìn)行碼邦邦,人人都會醉蚁;
強大體現(xiàn)在非阻塞IO,可以適應(yīng)分塊傳輸數(shù)據(jù),較慢的網(wǎng)絡(luò)環(huán)境网棍,尤其擅長高并發(fā)訪問;
輕量體現(xiàn)在 node 本身既是代碼,又是服務(wù)器俘陷,前后端使用統(tǒng)一語言;
可擴(kuò)展體現(xiàn)在可以輕松應(yīng)對多實例,多服務(wù)器架構(gòu)桨菜,同時有海量的第三方應(yīng)用組件.
<h4>2.你是怎么理解 node 的非阻塞捉偏?</h4>
這也是騰訊小姐姐提及到的問題,我模糊了非阻塞與異步的概念霞掺,沒有很好的給出小姐姐想要的答案讹躯,然后小姐姐溫柔的給我分析了一波,下面是我當(dāng)時理解的小姐姐的答案潮梯,可能沒有理解透徹,如果有錯耙旦,求原諒萝究。
node 的特點是非阻塞異步處理锉罐,提到異步有一個很好的例子琴昆,就是你在燒水的同時還在寫作業(yè),然后水燒好了發(fā)出“滴滴”收到這個信號你去處理燒好的水业舍,可是在 node 里面這是有一個前提的,什么是非阻塞态罪,就是說寫作業(yè)是一個線程在處理下面,收到水燒好后, node 會調(diào)用另一個線程去處理這個事件沥割,不會阻斷寫作業(yè)這個事件,這就是 node 的非阻塞帜讲,異步機(jī)制椒拗。
<h4>3. node 的構(gòu)架是什么樣子的?</h4>
主要分為三層,應(yīng)用 app >> V8 及 node 內(nèi)置架構(gòu) >> 操作系統(tǒng). V8 是 node
運行的環(huán)境蚀苛,可以理解為 node 虛擬機(jī). node 內(nèi)置架構(gòu)又可分為三層: 核心模塊( javascript 實現(xiàn)) >> c++ 綁定 >> libuv + CAes + http .
<h4>4. node 有哪些核心模塊?</h4>
EventEmitter, Stream, FS, Net和全局對象
<h4> 5. node 的網(wǎng)絡(luò)模塊架構(gòu)是什么樣子的?</h4>
node全面支持各種網(wǎng)絡(luò)服務(wù)器和客戶端堵未,包括tcp, http/https, tcp, udp, dns, tls/ssl等.
<h4>6. node 是怎樣支持 https,tls 的?</h4>
主要實現(xiàn)以下幾個步驟即可: 1) openssl 生成公鑰私鑰 2) 服務(wù)器或客戶端使用 https 替代 http 3) 服務(wù)器或客戶端加載公鑰私鑰證書
<h4>7. node 中的異步和同步怎么理解</h4>
node是單線程的,異步是通過一次次的循環(huán)事件隊列來實現(xiàn)的.同步則是說阻塞式的IO,這在高并發(fā)環(huán)境會是一個很大的性能問題侦厚,所以同步一般只在基礎(chǔ)框架的啟動時使用拙徽,用來加載配置文件刨沦,初始化程序什么的.
<h4>8.有哪些方法可以進(jìn)行異步流程的控制?</h4>
- 多層嵌套回調(diào) 2) 為每一個回調(diào)寫單獨的函數(shù)想诅,函數(shù)里邊再回調(diào) 3) 用第三方框架比方 async , q , promise 等
<h4>小結(jié):平時雖然有用到 Node.js 但是真正面試問到的時候發(fā)現(xiàn)自己了解到的那些根本不值一提,所以簡歷上面寫熟悉来破、了解這些字眼一定要慎重。</h4>
<h3>參考資料:https://github.com/jimuyouyou/node-interview-questions</h3>