后续会发一篇整理的文章;
1:简述require()模块加载机制
答:在node中文件即模块,分为原生模块和3种文件模块。
具体加载顺序如下图
图片:
2:node导出模块有哪2种方式,说说它们的区别?
图片:
答:真正的接口是module.exports, 初始值为{}。exports是对module.exports的引用,指向module.exports。在require()的时候,返回的是module.exports而不是exports。
3:请简述下Node事件循环机制
答:Node采用的是单线程异步非阻塞I/O模式。
主线程执行同步任务,异步I/O交给libuv处理。
libuv将建立的所有I/O操作内容绑定到单个线程上。只要每个事件循环在不同的线程中,就可以运行多个事件循环。
libuv将不同的任务交给不同的线程来处理。处理完成后会将对应事件的状态转为pending。
然后在下一次事件循环的时候按顺序取来执行。每一次事件循环都只会执行一个回调,从而避免了竞争的发生。
libuv解释:libuv是一个多平台支持库,主要关注异步I/O。它主要为node.js的使用而开发,同时也被Luvit、Julia、pyuv等使用。libuv为Node.js提供了跨平台、线程池、事件池、异步I/O等能力,