NO1
大家在開(kāi)發(fā)Node.js的時(shí)候都知道異步的嵌套非常麻煩,有人叫回調(diào)地域有人叫回調(diào) 黑洞,請(qǐng)問(wèn)如何解決這個(gè)問(wèn)題?
模式Promise Defferred 如g.js Step wind
ES6 Generator函數(shù) + Promise 對(duì)象
Async await 函數(shù)
NO2
如何解釋NodeJS 適用于IO密集型不適用CPU密集型?
1.Node還沒(méi)有簡(jiǎn)單易用的多核計(jì)算接口。Cluster并不是那么好用。
2.Node的單核效率雖然比傳統(tǒng)腳本語(yǔ)言高,但是和C、C++、Java比并沒(méi)有優(yōu)勢(shì)。
NO3
請(qǐng)畫(huà)出Node.js的異步事件回調(diào)機(jī)制的實(shí)現(xiàn),并解釋原理。

NO4
開(kāi)完一個(gè)完整的Node程序,有UI層、Service層、DAO層、MODEL層等,我們要在交給 QA前需要編寫(xiě)測(cè)試用例。測(cè)試用例一般遵循測(cè)試金字塔(測(cè)試金字塔指的是在編寫(xiě) 測(cè)試用例時(shí),底層的單元測(cè)試應(yīng)該遠(yuǎn)比上層的端到端測(cè)試要多,如下圖)請(qǐng)問(wèn)在如下 三個(gè)階段,都用什么樣的技術(shù)進(jìn)行測(cè)試用例的編寫(xiě)。

selenium-webdriver nightwatch(vue)f2etest
mocha supertest
karma PhantomJS + chai
NO5
有人說(shuō)Node是玩具,寫(xiě)錯(cuò)一處整個(gè)網(wǎng)站就掛。為了解決它你有什么辦法么?
中間件處理掉常見(jiàn)的404 500
關(guān)鍵函數(shù)比如請(qǐng)求進(jìn)行封裝 容錯(cuò)重試等
全部錯(cuò)誤監(jiān)聽(tīng) uncaughtException
NO6
請(qǐng)你寫(xiě)出你知道的HTTP請(qǐng)求報(bào)頭,并寫(xiě)出常見(jiàn)的HTTP Status Code標(biāo)明他的含義
100,200,300,400,500
NO7
請(qǐng)用KOA2實(shí)現(xiàn)基本的服務(wù)端,并輸出HelloWorld,且實(shí)現(xiàn)功能測(cè)試。
const koa=require('koa');
const app=new koa();
const result=new Promise(function(resolve,reject){
setTimeout(function()=>{
resolve("Hello world");
},1000);
});
app.use(async(ctx,next)=>{
const start=new Date();
ctx.body=await result;
});
app.listen(3000);
#測(cè)試
var app=require('app');
var request=require('supertest).agent(app.listen());
describe('hello world',function(){
it('should say "hello world"',function(done){
request
.get('/')
.expect(200)
.expect('hello world',done);
})
})
NO8
NodeJS使用了Scavenge、Mark-Sweep 、 Mark-compact算法進(jìn)行垃圾回收,請(qǐng)繪制三種 算法的原理,并描述何種情況下會(huì)造成NodeJS的內(nèi)存泄露,如何檢測(cè)?
新生代空間和老生態(tài)空間,Scavenge 來(lái)新生態(tài)空間,Mark-Sweep、Mark-compact來(lái)處理老生態(tài)空間
NO9
請(qǐng)你寫(xiě)出你能力范圍的一個(gè)Node項(xiàng)目文件夾的劃分,并標(biāo)明他的作用
model 請(qǐng)求層
views 模塊層
public/assets
controller
libs
config
NO10
請(qǐng)繪制瀏覽器實(shí)現(xiàn)緩存機(jī)制
瀏覽器請(qǐng)求->有緩存->是否過(guò)期->是->
Etag(標(biāo)志)->向web服務(wù)器請(qǐng)求if-None-Match
Last-Modified?->向web服務(wù)器請(qǐng)求if-None-Since
->服務(wù)器決策->200,304