NO1
大家在开发Node.js的时候都知道异步的嵌套非常麻烦,有人叫回调地域有人叫回调 黑洞,请问如何解决这个问题?
模式Promise Defferred 如g.js Step wind
ES6 Generator函数 + Promise 对象
Async await 函数
NO2
如何解释NodeJS 适用于IO密集型不适用CPU密集型?
1.Node还没有简单易用的多核计算接口。Cluster并不是那么好用。
2.Node的单核效率虽然比传统脚本语言高,但是和C、C++、Java比并没有优势。
NO3
请画出Node.js的异步事件回调机制的实现,并解释原理。
NO4
开完一个完整的Node程序,有UI层、Service层、DAO层、MODEL层等,我们要在交给 QA前需要编写测试用例。测试用例一般遵循测试金字塔(测试金字塔指的是在编写 测试用例时,底层的单元测试应该远比上层的端到端测试要多,如下图)请问在如下 三个阶段,都用什么样的技术进行测试用例的编写。
selenium-webdriver nightwatch(vue)f2etest
mocha supertest
karma PhantomJS + chai
NO5
有人说Node是玩具,写错一处整个网站就挂。为了解决它你有什么办法么?
中间件处理掉常见的404 500
关键函数比如请求进行封装 容错重试等
全部错误监听 uncaughtException
NO6
请你写出你知道的HTTP请求报头,并写出常见的HTTP Status Code标明他的含义
100,200,300,400,500
NO7
请用KOA2实现基本的服务端,并输出HelloWorld,且实现功能测试。
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);
#测试
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算法进行垃圾回收,请绘制三种 算法的原理,并描述何种情况下会造成NodeJS的内存泄露,如何检测?
新生代空间和老生态空间,Scavenge 来新生态空间,Mark-Sweep、Mark-compact来处理老生态空间
NO9
请你写出你能力范围的一个Node项目文件夹的划分,并标明他的作用
model 请求层
views 模块层
public/assets
controller
libs
config
NO10
请绘制浏览器实现缓存机制
浏览器请求->有缓存->是否过期->是->
Etag(标志)->向web服务器请求if-None-Match
Last-Modified?->向web服务器请求if-None-Since
->服务器决策->200,304