nodejs基础知识

饿了么面试:https://elemefe.github.io/node-interview/#/sections/zh-cn/node

node流的概念:http://www.javashuo.com/article/p-zdxliltq-r.htmlgit

node的单线程github

node.js单线程只是一个js主线程,本质上的异步操做仍是由线程池完成的,node将全部的阻塞操做都交给了内部的线程池去实现,自己只负责不断的往返调度,
并无进行真正的I/O操做,从而实现异步非阻塞I/O。
重点在主线程为单线程,主线程执行代码造成一个执行栈
主线程以外维护一个事件队列,当IO或异步操做,会将事件放到Event queue中,并不会执行且继续执行主线程代码,不会阻塞,直到主线程代码完毕。
主线程执行完毕,循环去取事件,用线程池线程去执行事件。当有事件执行完毕后,会通知主线程,主线程执行回调,线程归还给线程池。面试

必定注意异步问题,可以使用promise,实现代码以下数据库

 1 // 遇到须要同步执行的代码,promise化,await执行,外层必定要有async
 2 function formImage() {
 3     return new Promise((resolve, reject) => {
 4         form((opt, {fields, files})=> {
 5             console.log(files)
 6             let filename = files.file.name
 7             console.log(files.file.path)
 8             let uploadDir = config.ROOTPATH + `/tmp/${roomId}/`
 9             let relativePath =  `/tmp/${roomId}/` + Date.now() + '_' + filename
10             mkdirs(uploadDir, () => {
11                 fs.renameSync(files.file.path, config.ROOTPATH + relativePath) //重命名
12                 resolve(relativePath)
13             })
14         })
15     })
16 }
17 let p = await formImage();
View Code

Node.js等则规定在JavaScript的回调函数的第一个参数为 Error 对象,这也是它的一个惯例。
npm install packageName --save //安装到项目目录下,并在package.json文件的dependencies中写入依赖,简写为-S
数据类型symbol:为了解决属性名重复的问题,symbol值是经过symbol函数生成的,确定是独一无二npm

class:constructor方法是类的默认方法,经过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,若是没有显式定义,一个空的constructor方法会被默认添加。
调用要用 new Class()json

事件驱动的过程promise

全部的东西包装成一个对象,执行了一个事件循环异步

​ 事件驱动,把全部的东西都当成一个事件async

while(true){ // 无限循环 }

###不一样的异步,不一样的优先级

while(true){ 第一步: 执行script(所有的代码) 先去清空micor-task队列的事件,去把这里面的所有执行完 再去找 setInterval 执行 再去清空micor-task队列 再去找 setImmediate 执行,再去清空micor-task队列 再去 I/O 操做 再去清空micro-task队列 }

虽然都是异步,可是是有优先级的

macro-task:队列 script(所有的代码)

script(所有的代码) setInterval() setTimeout() setImmediate() I/O操做(读写,查询数据库) 他们都是同步的,可是他们的回调函数是异步的

micro-task:队列

process.nextTick() Promise().then()

注意 setInterval()和setTimeout()优先级是同样的

异步事件的优先级

nextTick > Promise.then > setTimeout > setImmediate