前端面试每日3+2(第24天)
冰洋 12/25/2019  每日3+2
当你发现自己的才华撑不起你的野心时,就请安静下来学习吧!

鲁迅说过:
答案仅供参考...
# 1、NodeJs非阻塞I/O模型执行流程是什么(事件环)?
解析:
Node.js 事件循环机制 (opens new window)
 解析Node.js的事件循环机制 (opens new window)
主线程:
- 执行node代码,把代码放入队列
 - 主程序(事件循环程序)把队列里面的代码都先执行了
 - 同步代码执行完,执行异步代码
 - 异步代码执行过程,分两种情况:
- 异步io setTimeout setInterval:判断是否可执行,如果可执行就执行,不可执行就跳过
 - 异步io 文件操作:会从线程池当中抽取一条线程,帮助主线程去执行
 
 - 主线程会一直轮询,队列中没有代码了,主线程就会退出
 
子线程:被放在线程池里的线程,用来执行异步io操作
- 在线程池里休息
 - 异步io的操作来了,执行异步io操作
 - 子线程会把异步io操作的callback函数,扔回到队列
 - 子线程会回到线程池里去休息
 - callback,在异步io代码执行完成的时候被扔回主线程
 
# 2、node的架构是什么样的?
解析:
深入理解Node.js:核心思想于源码解析 (opens new window)
 node源码解析 (opens new window)
主要分三层:
- 应用app
 - chrome v8引擎及内置架构
 - 操作系统
 
node的内置架构又可以分三层:
- Node Standard Library (核心模块):JavaScript实现的, 是我们每天都在用的标准库,如Http, Buffer 模块。
 - Node Bindings (c++绑定):Node Bindings是沟通JS 和 C++的桥梁,封装V8和Libuv的细节,向上层提供基础API服务。
 - 这一层是支撑 Node.js 运行的关键,由 C/C++ 实现。
- v8是node运行环境,可以理解为node的虚拟机。V8 是Google开发的JavaScript引擎,提供JavaScript运行环境,可以说它就是 Node.js 的发动机。
 - Libuv 是专门为Node.js开发的一个封装库,提供跨平台的异步I/O能力.
 - C-ares:提供了异步处理 DNS 相关的能力
 - http_parser、OpenSSL、zlib 等:提供包括 http 解析、SSL、数据压缩等其他的能力。
 
 
# 3、node有哪些核心模块?有哪些全局对象?
解析:
核心模块:
- EventEmitter
 - Stream
 - fs
 - net
 - 全局对象
 
全局对象
- process
 - console
 - buffer
 - exports
 
# 4、node中的process、console各有哪些常用方法?
解析:
process:
- process.stdin
 - process.stout
 - process.stderr
 - process.env
 - process.argv
 - process.arch
 - process.platform
 - process.exit
 
console:
- console.log
 - console.info
 - console.error
 - console.warning
 - console.time/timeEnd
 - console.trace
 - console.table
 
# 5、node有哪些定时功能?执行顺序如何?
解析:
node中的定时功能:
- setTimeout/clearTimeout
 - setInterval/clearSetInterval
 - setImmediate/clearImmediate
 - process.nextTick
 
先执行微任务在执行宏任务(疑问)
 