还在担心面试不通过吗?给大家推荐一个超级好用的刷面试题神器:牛客网,里面涵盖了各个领域的面试题库,还有大厂真题哦!
赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。
面试专栏分享,感觉有用的小伙伴可以点个订阅,不定时更新相关面试题:面试专栏 。
文章目录
🍉正文
本文内容来源出自 《牛客网》
1、node中的模块化导入导出和ES6的区别
- node commonjs规范模块化
- module对象为模块运行时生成的标识对象,提供模块信息;
- exports为模块导出引用数据类型时,modulex.exports与exports指向的是同一对象,require导入的是module.exports导出的对象;
- 同一模块导入后存在模块缓存,后续多次导入从缓存中加载
- 源模块的引用与导入该模块的引用是同一对象;
- 最好不要同时使用module.exports与exports,导出对象使用module.exports,导出变量使用exports。
- es6规范模块化
- es6通过export和import实现导出导入功能;
- .es6 export支持导出多个变量,export default是export形式的语法糖,表示导出default接口;
- import * as xx from 'xx.js’导入的是Module对象,包含default接口和其他变量接口;
- 多个模块导入多次,只会执行一次;
- 导出引用数据类型时,导出对象与导入对象指向同一个变量,修改导出变量对象,源对象也会发生改变。
- 导出单个变量建议使用export default,导出多个变量使用export。
2、中间件概念
在NodeJS中,中间件主要是指封装所有Http请求细节处理的方法。一次Http请求通常包含很多工作,如记录日志、ip过滤、查询字符串、请求体解析、Cookie处理、权限验证、参数验证、异常处理等,但对于Web应用而言,并不希望接触到这么多细节性的处理,因此引入中间件来简化和隔离这些基础设施与业务逻辑之间的细节,让开发者能够关注在业务的开发上,以达到提升开发效率的目的。
中间件的行为比较类似Java中过滤器的工作原理,就是在进入具体的业务处理之前,先让过滤器处理。它的工作模型下图所示。
3、node.js 中 require(‘xxx’) 是从哪里导入的
require函数可以导入模块、JSON文件、本地文件。模块可以通过一个相对路径从node_modules、本地模块、JSON文件中导出,该路径将针对__dirname变量(如果已定义)或者当前工作目录。
4、请介绍一下 require 的模块加载机制
参考答案:
- 计算模块绝对路径;
- 如果缓存中有该模块,则从缓存中取出该模块;
- 按优先级依次寻找并编译执行模块,将模块推入缓存(require.cache)中;
- 输出模块的exports属性;
5、请介绍一下 Node 中的内存泄露问题和解决方案
内存泄露原因
- 全局变量:全局变量挂在 root 对象上,不会被清除掉;
- 闭包:如果闭包未释放,就会导致内存泄露;
- 事件监听:对同一个事件重复监听,忘记移除(removeListener),将造成内存泄露。
解决方案
最容易出现也是最难排查的就是事件监听造成的内存泄露,所以事件监听这块需要格外注意小心使用。
如果出现了内存泄露问题,需要检测内存使用情况,对内存泄露的位置进行定位,然后对对应的内存泄露代码进行修复。
6、 简单介绍一下 IPC
IPC(Inner-Process Communication)又称进程间通信技术,是用于 Node 内部父子进程之间进行通信的方法。
Node 的 IPC 是通过不同平台的管道技术实现的,特点是本地网络通信,速度快,效率高。
Node 在启动子进程的时候,主进程先建立 IPC 通道,然后将 IPC 通道的 fd(文件描述符)通过环境变量(NODE_CHANNEL_FD)的方式传递给子进程,然后子进程通过 fd 与 父进程建立 IPC 连接。
7、 什么是守护进程?Node 如何实现守护进程?
守护进程是不依赖终端(tty)的进程,不会因为用户退出终端而停止运行的进程。
Node 实现守护进程的思路:
- 创建一个进程 A;
- 在进程 A 中创建进程 B,可以使用child_process.fork或者其他方法;
- 启动子进程时,设置detached属性为 true,保证子进程在父进程退出后继续运行;
- 进程 A 退出,进程 B 由 init 进程接管。此时进程 B 为守护进程。
8、 简单介绍一下 Buffer
Buffer 是 Node 中用于处理二进制数据的类,其中与 IO 相关的操作(网络/文件等)均基于 Buffer。Buffer 类的实例非常类似于整数数组,但其大小是固定不变的,并且其内存在 V8 堆栈外分配原始内存空间。Buffer 类的实例创建之后,其所占用的内存大小就不能再进行调整。。
🎃专栏分享:
JavaScript相关面试题就更新到这里啦,相关 Web前端面试题 可以订阅专栏哦
🥰
专栏地址:《面试必看》
面试刷题神器:牛客网
⏳
名言警句:说能做的,做说过的 ! \textcolor{red} {名言警句:说能做的,做说过的!} 名言警句:说能做的,做说过的!
✨
原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
👍
点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!
⭐️
收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!
✏️
评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!
版权归原作者 不苒 所有, 如有侵权,请联系我们删除。