Node.js面试题:侧重后端应用与对Node主旨的明亮

Node是搞后端的,不该被被归为前端,更不应有用前端的见解去明白,去面试node开发人士。所以那份面试题大全,更爱戴后端应用与对Node宗旨的精通。

node开发技术图解

图片 1

node 事件循环机制

图片 2

起源

  • node正风生火起,很多介绍却滞留在入门阶段,不能投入生产
  • node相关的高品质面试题更是少之又少,很难全面考查应聘者的node能力
  • 广大篇章在讲第1方类库,然而那个库品质差距较大,一旦碰着难点咋做
  • 须求的,周详摸底node宗旨才能成为一名合格的node开发职员

目的与原则

  • 内外端兼顾,更爱惜后端
  • 力排众议实战兼顾,侧重考察对实战中使用较多的申辩的明白
  • 参考答案简单明了,一语中的,不为追求严酷而浪费口舌,绕弯子
  • 尽恐怕用代码讲清理论的行使与区别,以接地气
  • 终极目的是让我们对node有一个快捷完整的认识

剧情大纲

ES6新特性

javascript高级话题(面向对象,作用域,闭包,设计情势等)

node大旨内置类库(事件,流,文件,互连网等)

node高级话题(异步,安排,质量调优,十分调节和测试等)

常用盛名第3方类库(Async, Express等)

其余有关后端常用技术(MongoDB, Redis, Apache, Nginx等)

常用前端技术(Html5, CSS3, JQuery等)

ES6新特性

    1. ES6有哪些新天性?

参考答案:类的支撑,模块化,箭头操作符,let/const块功能域,字符串模板,解构,参数暗中认可值/不定参数/拓展参数,for-of遍历,generato
r器, Map/Set, Promise

    1. 你对ES6的村办观点?

参考答案:ES6必火!从软件工程角度来看,在此在此之前确实很弱,不吻合做大型应用,很简单导致烂尾工程。ES6就相当于当时的Java5,是历史性的前行,从此我们能够用js做大型项目了。事实上,各大主流浏览器未来早已支撑当先百分之五十新特点了,后端的Node.js更是可以直接使用ES6的大部语法。

推荐ES6入门好书: 阮一峰 ECMAScript 6入门

javascript高级话题(面向对象,效率域,闭包,设计格局等)

    1. 常用js类定义的不二法门有啥?

参考答案:首要有构造函数原型和对象创设三种格局。原型法是通用老方法,对象成立是ES5推荐介绍使用的方法.方今来看,原型法更普遍.

代码演示
1) 构造函数方法定义类

    function Person(){
        this.name = 'michaelqin';
    }
    Person.prototype.sayName = function(){
        alert(this.name);
    }

    var person = new Person();
    person.sayName();

2) 对象成立方法定义类

    var Person = {
        name: 'michaelqin',
        sayName: function(){ alert(this.name); }
    };

    var person = Object.create(Person);
    person.sayName();
    1. js类继承的方法有如何

参考答案:原型链法,属性复制法和构造器应用法.
其余,由于各样对象能够是3个类,那个方式也能够用来对象类的继承.

代码演示
1) 原型链法

    function Animal() {
        this.name = 'animal';
    }
    Animal.prototype.sayName = {
        alert(this.name);
    };

    function Person() {}
    Person.prototype = Animal.prototype; // 人继承自动物
    Person.prototype.constructor = 'Person'; // 更新构造函数为人

2) 属性复制法

    function Animal() {
        this.name = 'animal';
    }
    Animal.prototype.sayName = {
        alert(this.name);
    };

    function Person() {}

    for(prop in Animal.prototype) {
        Person.prototype[prop] = Animal.prototype[prop];
    } // 复制动物的所有属性到人量边
    Person.prototype.constructor = 'Person'; // 更新构造函数为人

3) 构造器应用法

    function Animal() {
        this.name = 'animal';
    }
    Animal.prototype.sayName = {
        alert(this.name);
    };

    function Person() {
        Animal.call(this); // apply, call, bind方法都可以.细微区别,后面会提到.
    }
    1. js类多重继承的兑现模式是怎么着的?

参考答案:正是类继承里边的性格复制法来完毕.因为当有着父类的prototype属性被复制后,子类自然有着近乎表现和属性.

    1. js里的功效域是何许体统的?

参考答案:当先百分之三十三言语里边都以块作成效域,以{}举办限制,js里边不是.js里边叫函数功用域,就是1个变量在全函数里有效.比如有个变量p1在函数最终一行定义,第三行也实惠,可是值是undefined.

代码演示

    var globalVar = 'global var';

    function test() {
        alert(globalVar); // undefined, 因为globalVar在本函数内被重定义了,导致全局失效,这里使用函数内的变量值,可是此时还没定义
        var globalVar = 'overrided var'; // globalVar在本函数内被重定义
        alert(globalVar); // overrided var
    }
    alert(globalVar); // global var,使用全局变量
    1. js里边的this指的是哪些?

参考答案: this指的是目的自小编,而不是结构函数.

代码演示

    function Person() {
    }
    Person.prototype.sayName() { alert(this.name); }

    var person1 = new Person();
    person1.name = 'michaelqin';
    person1.sayName(); // michaelqin
    1. apply, call和bind有怎么着界别?

参考答案:三者都能够把二个函数应用到别的对象上,注意不是自我对象.apply,call是直接执行函数调用,bind是绑定,执行必要再一次调用.apply和call的界别是apply接受数组作为参数,而call是承受逗号分隔的极致多少个参数列表,

代码演示

    function Person() {
    }
    Person.prototype.sayName() { alert(this.name); }

    var obj = {name: 'michaelqin'}; // 注意这是一个普通对象,它不是Person的实例
    1) apply
    Person.prototype.sayName.apply(obj, [param1, param2, param3]);

    2) call
    Person.prototype.sayName.call(obj, param1, param2, param3);

    3) bind
    var sn = Person.prototype.sayName.bind(obj);    
    sn([param1, param2, param3]); // bind需要先绑定,再执行 
    sn(param1, param2, param3); // bind需要先绑定,再执行
    1. caller, callee和arguments分别是怎么着?

参考答案:
caller,callee之间的关联就如employer和employee之间的关系,正是调用与被调用的关系,二者重回的都是函数对象引用.arguments是函数的具有参数列表,它是3个类数组的变量.

代码演示

    function parent(param1, param2, param3) {
        child(param1, param2, param3);
    }

    function child() {
        console.log(arguments); // { '0': 'mqin1', '1': 'mqin2', '2': 'mqin3' }
        console.log(arguments.callee); // [Function: child]
        console.log(child.caller); // [Function: parent]
    }

    parent('mqin1', 'mqin2', 'mqin3');
    1. 怎么样是闭包,闭包有何样用处?

参考答案:
闭包这几个术语,无论中文翻译依旧英文解释都太2B了,小编必须骂人,因为它什么实际都不是.非要讲它是什么的话,七个字函数,更多字嵌套函数的父子自笔者引用关系.全体函数都以闭包.通俗的说,闭包正是功用域范围,因为js是函数功用域,所以函数正是闭包.全局函数的功能域范围就是全局,所以不用钻探.更多的使用其实是在内嵌函数,这就会波及到内嵌作用域,或然叫功能域链.说到内嵌,其实正是父子引用关系(父函数包蕴子函数,子函数因为函数功用域又引述父函数,那它妈不是死结吗?所以叫闭包),这就会带来其余二个难题,曾几何时引用甘休?如果不截至,就会平素占据内部存储器,引起内部存款和储蓄器泄漏.好啊,不用的时候就引述设为空,死结就解开了.

    1. defineProperty, hasOwnProperty, isEnumerable都以做哪些用的?

参考答案:Object.defineProperty(obj, prop,
descriptor)用来给指标定义属性,有value,writable,configurable,enumerable,set/get等.hasOwnProerty用于检查某一性格是否存在于对象自笔者,继承来的老爸的个性不算.isEnumerable用来检测某一质量是不是可遍历,也正是能还是无法用for..in循环来取到.

    1. js常用设计格局的得以实现思路,单例,工厂,代理,装饰,观察者格局等

参考答案:

    1) 单例: 任意对象都是单例,无须特别处理
    var obj = {name: 'michaelqin', age: 30};

    2) 工厂: 就是同样形式参数返回不同的实例
    function Person() { this.name = 'Person1'; }
    function Animal() { this.name = 'Animal1'; }

    function Factory() {}
    Factory.prototype.getInstance = function(className) {
        return eval('new ' + className + '()');
    }

    var factory = new Factory();
    var obj1 = factory.getInstance('Person');
    var obj2 = factory.getInstance('Animal');
    console.log(obj1.name); // Person1
    console.log(obj2.name); // Animal1

    3) 代理: 就是新建个类调用老类的接口,包一下
    function Person() { }
    Person.prototype.sayName = function() { console.log('michaelqin'); }
    Person.prototype.sayAge = function() { console.log(30); }

    function PersonProxy() { 
        this.person = new Person();
        var that = this;
        this.callMethod = function(functionName) {
            console.log('before proxy:', functionName);
            that.person[functionName](); // 代理
            console.log('after proxy:', functionName);
        }
    }

    var pp = new PersonProxy();
    pp.callMethod('sayName'); // 代理调用Person的方法sayName()
    pp.callMethod('sayAge'); // 代理调用Person的方法sayAge() 

    4) 观察者: 就是事件模式,比如按钮的onclick这样的应用.
    function Publisher() {
        this.listeners = [];
    }
    Publisher.prototype = {
        'addListener': function(listener) {
            this.listeners.push(listener);
        },

        'removeListener': function(listener) {
            delete this.listeners[listener];
        },

        'notify': function(obj) {
            for(var i = 0; i < this.listeners.length; i++) {
                var listener = this.listeners[i];
                if (typeof listener !== 'undefined') {
                    listener.process(obj);
                }
            }
        }
    }; // 发布者

    function Subscriber() {

    }
    Subscriber.prototype = {
        'process': function(obj) {
            console.log(obj);
        }
    }; // 订阅者


    var publisher = new Publisher();
    publisher.addListener(new Subscriber());
    publisher.addListener(new Subscriber());
    publisher.notify({name: 'michaelqin', ageo: 30}); // 发布一个对象到所有订阅者
    publisher.notify('2 subscribers will both perform process'); // 发布一个字符串到所有订阅者
    1. 历数数组相关的常用方法

参考答案: push/pop, shift/unshift, split/join, slice/splice/concat,
sort/reverse, map/reduce, forEach, filter

    1. 列举字符串相关的常用方法

参考答案: indexOf/lastIndexOf/charAt, split/match/test,
slice/substring/substr, toLowerCase/toUpperCase

node宗旨内置类库(事件,流,文件,网络等)

node概览

    1. 为什么要用node?

参考答案:
计算起来node有以下多少个特征:简单强大,轻量可扩大.简单体将来node使用的是javascript,json来开始展览编码,人人都会;强大映未来非阻塞IO,能够适应分块传输数据,较慢的网络环境,越发擅长高并发访问;轻量浮未来node自己既是代码,又是服务器,前后端应用统一语言;可增加呈以往能够轻松应对多实例,多服务器架设,同时有海量的第1方应用组件.

    1. node的构架是什么样样子的?

参考答案: 首要分为三层,应用app >> V8及node内置架构 >>
操作系统.
V8是node运转的条件,能够清楚为node虚拟机.node内置架构又可分为三层:
大旨模块(javascript完结) >> c++绑定 >> libuv + CAes + http.

图片 3

    1. node有何样基本模块?

参考答案: 伊夫ntEmitter, Stream, FS, Net和大局对象

node全局对象

    1. node有怎么样全局对象?

参考答案: process, console, Buffer和exports

    1. process有啥样常用方法?

参考答案: process.stdin, process.stdout, process.stderr, process.on,
process.env, process.argv, process.arch, process.platform, process.exit

    1. console有啥样常用方法?

参考答案: console.log/console.info, console.error/console.warning,
console.time/console.timeEnd, console.trace, console.table

    1. node有何样定时功效?

参考答案: setTimeout/clearTimeout, setInterval/clearInterval,
setImmediate/clearImmediate, process.nextTick

    1. node中的事件循环是什么样样子的?

参考答案: event
loop其实便是1个事件队列,先参加先实施,执行完三次队列,再一次循环遍历看有没有新事件加入队列.不过请务必注意,那个事件队列的轮回,叁次只进行二个风云,然后下1回巡回再实施1个事件.那是出于javascript的单线程机制导致的,假设3次巡回四个事件,就可能会卡住别的代码的执行.异步执行的叫IO
events,
setImmediate是在当前队列立即执行,setTimout/setInterval是把推行定时到到背后的队列,process.nextTick是在脚下履行完,下次遍历前执行.所以总体顺序是:
IO events >> setImmediate >>
setTimeout/setInterval(注册事件) >> process.nextTick.

图片 4

    1. node中的Buffer如何应用?

参考答案:
Buffer是用来拍卖二进制数据的,比如图片,mp4,数据库文件等.Buffer辅助各个编码解码,二进制字符串互转.

EventEmitter

    1. 什么是EventEmitter?

参考答案:
伊夫ntEmitter是node中二个落实观看者方式的类,主要功能是监听和发射信息,用于拍卖多模块交互难点.

    1. 什么样完毕1个EventEmitter?

参考答案: 首要分三步:定义2个子类,调用构造函数,继承伊芙ntEmitter

代码演示

    var util = require('util');
    var EventEmitter = require('events').EventEmitter;

    function MyEmitter() {
        EventEmitter.call(this);
    } // 构造函数

    util.inherits(MyEmitter, EventEmitter); // 继承

    var em = new MyEmitter();
    em.on('hello', function(data) {
        console.log('收到事件hello的数据:', data);
    }); // 接收事件,并打印到控制台
    em.emit('hello', 'EventEmitter传递消息真方便!');
    1. 伊夫ntEmitter有啥优秀应用?

参考答案: 1) 模块间传递消息 2) 回调函数内外传递音信 3)
处理流数据,因为流是在伊芙ntEmitter基础上落实的. 4)
观看者方式发射触发机制相关应用

    1. 怎么捕获伊芙ntEmitter的谬误事件?

参考答案:
监听error事件即可.借使有多少个伊夫ntEmitter,也得以用domain来统一处理错误事件.

代码演示

    var domain = require('domain');
    var myDomain = domain.create();
    myDomain.on('error', function(err){
        console.log('domain接收到的错误事件:', err);
    }); // 接收事件并打印
    myDomain.run(function(){
        var emitter1 = new MyEmitter();
        emitter1.emit('error', '错误事件来自emitter1');
        emitter2 = new MyEmitter();
        emitter2.emit('error', '错误事件来自emitter2');
    });
    1. 伊芙ntEmitter中的newListenser事件有怎么样用处?

参考答案:
newListener能够用来做事件机制的反光,特殊应用,事件管理等.当任何on事件添加到伊夫ntEmitter时,就会触发newListener事件,基于那种方式,我们得以做过多自定义处理.

代码演示

var emitter3 = new MyEmitter();
emitter3.on('newListener', function(name, listener) {
    console.log("新事件的名字:", name);
    console.log("新事件的代码:", listener);
    setTimeout(function(){ console.log("我是自定义延时处理机制"); }, 1000);
});
emitter3.on('hello', function(){
    console.log('hello node');
});

Stream

    1. 什么是Stream?

参考答案:
stream是依照事件伊芙ntEmitter的数码管理形式.由种种差异的肤浅接口组成,首要包涵可写,可读,可读写,可转换等几种类型.

    1. Stream有何好处?

参考答案:
非阻塞式数据处理进步成效,片断处理节省外部存款和储蓄器,管道处理方便可扩充等.

    1. Stream有哪些杰出应用?

参考答案: 文件,网络,数据转换,音频录制等.

    1. 怎么捕获Stream的谬误事件?

参考答案: 监听error事件,方法同伊夫ntEmitter.

    1. 有什么常用Stream,分别曾几何时利用?

参考答案:
Readable为可被读流,在作为输入数据源时使用;Writable为可被写流,在作为出口源时使用;Duplex为可读写流,它作为输出源接受被写入,同时又作为输入源被后边的流读出.Transform机制和Duplex一样,都以双向流,差距时Transfrom只须求达成2个函数_transfrom(chunk,
encoding, callback);而Duplex要求各自达成_read(size)函数和_write(chunk,
encoding, callback)函数.

    1. 落到实处3个Writable Stream?

参考答案: 三步走:1)构造函数call Writable 2) 继承Writable 3)
完结_write(chunk, encoding, callback)函数

代码演示

var Writable = require('stream').Writable;
var util = require('util');

function MyWritable(options) {
    Writable.call(this, options);
} // 构造函数
util.inherits(MyWritable, Writable); // 继承自Writable
MyWritable.prototype._write = function(chunk, encoding, callback) {
    console.log("被写入的数据是:", chunk.toString()); // 此处可对写入的数据进行处理
    callback();
};

process.stdin.pipe(new MyWritable()); // stdin作为输入源,MyWritable作为输出源   

文件系统

    1. 放到的fs模块架构是怎么样样子的?

参考答案: fs模块首要由下边几部分构成: 1)
POSIX文件Wrapper,对应于操作系统的原生文件操作 2) 文件流
fs.createReadStream和fs.createWriteStream 3)
同步文件读写,fs.readFileSync和fs.writeFileSync 4) 异步文件读写,
fs.readFile和fs.writeFile

    1. 读写三个文书有个别许种艺术?

参考答案: 总体来说有二种: 1) POSIX式低层读写 2) 流式读写 3) 同步文件读写
4) 异步文件读写

    1. 怎么读取json配置文件?

参考答案:
重要有二种办法,第①种是应用node内置的require(‘data.json’)机制,直接获取js对象;
第三种是读入文件入内容,然后用JSON.parse(content)转换到js对象.二者的区分是require机制意况下,假使四个模块都加载了同七个json文件,那么内部1个改观了js对象,别的跟着变动,那是由node模块的缓存机制导致的,唯有三个js模块对象;
第三种方法则能够轻易更改加载后的js变量,而且各模块互不影响,因为他俩都以独立的,是多少个js对象.

    1. fs.watch和fs.watchFile有何样界别,怎么使用?

参考答案:
二者首要用来监听文件变动.fs.watch利用操作系统原生机制来监听,只怕不适用网络文件系统;
fs.watchFile则是定期检查文件状态变更,适用于互连网文件系统,但是相比较fs.watch某些慢,因为不是实时机制.

网络

    1. node的网络模块架构是何等样子的?

参考答案: node周全援助各样互连网服务器和客户端,包含tcp, http/https, tcp,
udp, dns, tls/ssl等.

    1. node是怎么帮衬https,tls的?

参考答案: 主要实现以下多少个步骤即可: 1) openssl生成公钥私钥 2)
服务器或客户端应用https替代http 3) 服务器或客户端加载公钥私钥证书

    1. 福寿年高一个不难易行的http服务器?

参考答案:
经典又很没毛意义的1个标题.思路是加载http模块,创造服务器,监听端口.

代码演示

    var http = require('http'); // 加载http模块

    http.createServer(function(req, res) {
        res.writeHead(200, {'Content-Type': 'text/html'}); // 200代表状态成功, 文档类型是给浏览器识别用的
        res.write('<meta charset="UTF-8"> <h1>我是标题啊!</h1> <font color="red">这么原生,初级的服务器,下辈子能用着吗?!</font>'); // 返回给客户端的html数据
        res.end(); // 结束输出流
    }).listen(3000); // 绑定3ooo, 查看效果请访问 http://localhost:3000 

child-process

    1. 怎么要求child-process?

参考答案:
node是异步非阻塞的,这对高产出很是有效.但是我们还有任何一些常用要求,比如和操作系统shell命令交互,调用可执行文件,创设子进度展开阻塞式访问或高CPU总括等,child-process就是为满意那几个需求而生的.child-process顾名思义,就是把node阻塞的做事交给子进度去做.

    1. exec,execFile,spawn和fork都以做什么样用的?

参考答案: exec能够用操作系统原生的不二法门实施各类吩咐,如管道 cat ab.txt |
grep hello; execFile是实施四个文书; spawn是流式和操作系统进行互动;
fork是八个node程序(javascript)之间时行交互.

    1. 落实1个简练的命令行交互程序?

参考答案: 那就用spawn吧.

代码演示

    var cp = require('child_process');

    var child = cp.spawn('echo', ['你好', "钩子"]); // 执行命令
    child.stdout.pipe(process.stdout); // child.stdout是输入流,process.stdout是输出流
    // 这句的意思是将子进程的输出作为当前程序的输入流,然后重定向到当前程序的标准输出,即控制台
    1. 多个node程序之间怎么样互相?

参考答案: 用fork嘛,上边讲过了.规律是子程序用process.on,
process.send,父程序里用child.on,child.send举办交互.
代码演示

    1) fork-parent.js
    var cp = require('child_process');
    var child = cp.fork('./fork-child.js');
    child.on('message', function(msg){
        console.log('老爸从儿子接受到数据:', msg);
    });
    child.send('我是你爸爸,送关怀来了!');

    2) fork-child.js
    process.on('message', function(msg){
        console.log("儿子从老爸接收到的数据:", msg);
        process.send("我不要关怀,我要银民币!");
    });
    1. 什么让叁个js文件变得像linux命令一样可实施?

参考答案: 1) 在myCommand.js文件底部参与 #!/usr/bin/env node 2)
chmod命令把js文件改为可举行即可 3)
进入文件目录,命令行输入myComand正是一定于node myComand.js了

    1. child-process和process的stdin,stdout,stderror是如出一辙的吧?

参考答案:
概念都以同样的,输入,输出,错误,都是流.差异是在父程序眼里,子程序的stdout是输入流,stdin是出口流.

node高级话题(异步,安排,质量调优,卓殊调节和测试等)

    1. node中的异步和协同怎么领悟

参考答案:
node是单线程的,异步是透过一回次的大循环事件队列来实现的.同步则是说不通式的IO,那在高并发环境会是一个极大的天性难题,所以同步一般只在基础框架的运维时使用,用来加载配置文件,开始化程序怎么样的.

    1. 有什么措施能够开始展览异步流程的控制?

参考答案: 1) 多层嵌套回调 2) 为每三个回调写单独的函数,函数里边再回调
3) 用第①方框架比方async, q, promise等

    1. 何以绑定node程序到80端口?

参考答案: 多样主意 1) sudo 2) apache/nginx代理 3) 用操作系统的firewall
iptables实行端口重定向

    1. 有啥方法能够让node程序碰着错误后活动重启?

参考答案: 1) runit 2) forever 3) nohup npm start &

    1. 怎么丰富利用多少个CPU?

参考答案: 二个CPU运维三个node实例

    1. 何以调节node执行单元的内部存款和储蓄器大小?

参考答案: 用–max-old-space-size 和 –max-new-space-size 来安装 v8
使用内部存款和储蓄器的上限

    1. 次第连接崩溃,怎么着找出难点在哪里?

参考答案: 1) node –prof 查看哪些函数调用次数多 2)
memwatch和heapdump得到内存快照实行自己检查自纠,查找内部存款和储蓄器溢出

    1. 有何样常用方法能够预防程序崩溃?

参考答案: 1) try-catch-finally 2) 伊夫ntEmitter/Stream error事件处理 3)
domain统一支配 4) jshint静态检查 5) jasmine/mocha举行单元测试

    1. 怎么调节和测试node程序?

参考答案: node –debug app.js 和node-inspector

常用知名第1方类库(Async, Express等)

    1. async都有何常用方法,分别是怎么用?

参考答案:
async是二个js类库,它的指标是化解js中13分流程难以控制的难点.async不仅适用在node.js里,浏览器中也能够使用.
1) async.parallel并行执行完八个函数后,调用停止函数

    async.parallel([
        function(){ ... },
        function(){ ... }
    ], callback);

2) async.series串行执行完多少个函数后,调用截止函数

    async.series([
        function(){ ... },
        function(){ ... }
    ]);

3)
async.waterfall依次执行多少个函数,后3个函数从前边函数的结果作为输入参数

    async.waterfall([
        function(callback) {
            callback(null, 'one', 'two');
        },
        function(arg1, arg2, callback) {
          // arg1 now equals 'one' and arg2 now equals 'two' 
            callback(null, 'three');
        },
        function(arg1, callback) {
            // arg1 now equals 'three' 
            callback(null, 'done');
        }
    ], function (err, result) {
        // result now equals 'done' 
    });

4) async.map异步执行八个数组,重回结果数组

    async.map(['file1','file2','file3'], fs.stat, function(err, results){
        // results is now an array of stats for each file 
    });

5) async.filter异步过滤七个数组,再次回到结果数组

    async.filter(['file1','file2','file3'], fs.exists, function(results){
        // results now equals an array of the existing files 
    });
    1. express项指标目录大约是哪些样子的

参考答案: app.js, package.json, bin/www, public, routes, views.

    1. express常用函数

参考答案:
express.Router路由组件,app.get路由定向,app.configure配置,app.set设定参数,app.use使用中间件

    1. express中怎样获得路由的参数

参考答案: /users/:name使用req.params.name来得到;
req.body.username则是取得表单传入参数username; express路由帮忙常用通配符
?, +, *, and ()

    1. express response有何常用方法

参考答案: res.download() 弹出文件下载
res.end() 结束response
res.json() 返回json
res.jsonp() 返回jsonp
res.redirect() 重定向请求
res.render() 渲染模板
res.send() 再次来到三种格局数据
res.sendFile 重临文件
res.sendStatus() 重返状态

其余有关后端常用技术(MongoDB, Redis, Apache, Nginx等)

    1. mongodb有哪些常用优化措施

参考答案: 类似守旧数据库,索引和分区.

    1. mongoose是怎么样?有支持什么特点?

参考答案: mongoose是mongodb的文书档案映射模型.首要由Schema,
Model和Instance四个方面组成.Schema就是定义数据类型,Model正是把Schema和js类绑定到一块,Instance正是二个指标实例.常见mongoose操作有,save,
update, find. findOne, findById, static方法等.

    1. redis扶助什么成效

参考答案: set/get, mset/hset/hmset/hmget/hgetall/hkeys, sadd/smembers,
publish/subscribe, expire

    1. redis最简易的施用

参考答案:

    var redis = require("redis"),
        client = redis.createClient();

    client.set("foo_rand000000000000", "some fantastic value");
    client.get("foo_rand000000000000", function (err, reply) {
        console.log(reply.toString());
    });
    client.end();
    1. apache,nginx有啥分别?

参考答案:
二者都以代理服务器,成效类似.apache应用简单,12分广泛.nginx在分布式,静态转化方面可比有优势.

常用前端技术(Html5, CSS3, JQuery等)

    1. Html5有怎么着相比实用新功效

参考答案: File API协理当半夏件操作; Canvans/SVG帮助绘图; 拖拽成效协助;
本地存款和储蓄帮助; 表单多属性验证协助; 原生音频摄像帮忙等

    1. CSS3/JQuery有啥样学常见选取器

参考答案: id, 成分,属性, 值,父子兄弟, 种类等

    1. JQuery有何样经典应用

参考答案: 文书档案采纳,文书档案操作,动画, ajax, json, js扩张等.