前端面试每日3+2(第24天)

12/25/2019 每日3+2

当你发现自己的才华撑不起你的野心时,就请安静下来学习吧!

鲁迅说过:答案仅供参考...

# 1、NodeJs非阻塞I/O模型执行流程是什么(事件环)?

解析:

Node.js 事件循环机制 (opens new window)
解析Node.js的事件循环机制 (opens new window)

主线程:

  1. 执行node代码,把代码放入队列
  2. 主程序(事件循环程序)把队列里面的代码都先执行了
  3. 同步代码执行完,执行异步代码
  4. 异步代码执行过程,分两种情况:
    1. 异步io setTimeout setInterval:判断是否可执行,如果可执行就执行,不可执行就跳过
    2. 异步io 文件操作:会从线程池当中抽取一条线程,帮助主线程去执行
  5. 主线程会一直轮询,队列中没有代码了,主线程就会退出

子线程:被放在线程池里的线程,用来执行异步io操作

  1. 在线程池里休息
  2. 异步io的操作来了,执行异步io操作
  3. 子线程会把异步io操作的callback函数,扔回到队列
  4. 子线程会回到线程池里去休息
  5. 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

先执行微任务在执行宏任务(疑问)

Last Updated: 1/14/2020, 7:56:38 AM
    asphyxia
    逆时针向