前端面试每日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
先执行微任务在执行宏任务(疑问)