node面试题

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的异步事件回调机制的实现,并解释原理。

node面试题_第1张图片
alt node运行原理

NO4

开完一个完整的Node程序,有UI层、Service层、DAO层、MODEL层等,我们要在交给 QA前需要编写测试用例。测试用例一般遵循测试金字塔(测试金字塔指的是在编写 测试用例时,底层的单元测试应该远比上层的端到端测试要多,如下图)请问在如下 三个阶段,都用什么样的技术进行测试用例的编写。

node面试题_第2张图片
alt node 测试
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

你可能感兴趣的:(node面试题)