牛客前端刷题(七)—— Node篇

还在担心面试不通过吗?给大家推荐一个超级好用的刷面试题神器:牛客网,里面涵盖了各个领域的面试题库,还有大厂真题哦!

赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。
面试专栏分享,感觉有用的小伙伴可以点个订阅,不定时更新相关面试题:面试专栏 。
在这里插入图片描述

文章目录

  • 正文
    • 1、node中的模块化导入导出和ES6的区别
    • 2、中间件概念
    • 3、node.js 中 require('xxx') 是从哪里导入的
    • 4、请介绍一下 require 的模块加载机制
    • 5、请介绍一下 Node 中的内存泄露问题和解决方案
    • 6、 简单介绍一下 IPC
    • 7、 什么是守护进程?Node 如何实现守护进程?
    • 8、 简单介绍一下 Buffer
  • 专栏分享:

正文

本文内容来源出自 《牛客网》

1、node中的模块化导入导出和ES6的区别

  • node commonjs规范模块化
  1. module对象为模块运行时生成的标识对象,提供模块信息;
  2. exports为模块导出引用数据类型时,modulex.exports与exports指向的是同一对象,require导入的是module.exports导出的对象;
  3. 同一模块导入后存在模块缓存,后续多次导入从缓存中加载
  4. 源模块的引用与导入该模块的引用是同一对象;
  5. 最好不要同时使用module.exports与exports,导出对象使用module.exports,导出变量使用exports。
  • es6规范模块化
  1. es6通过export和import实现导出导入功能;
  2. .es6 export支持导出多个变量,export default是export形式的语法糖,表示导出default接口;
  3. import * as xx from 'xx.js’导入的是Module对象,包含default接口和其他变量接口;
  4. 多个模块导入多次,只会执行一次;
  5. 导出引用数据类型时,导出对象与导入对象指向同一个变量,修改导出变量对象,源对象也会发生改变。
  6. 导出单个变量建议使用export default,导出多个变量使用export。

2、中间件概念

在NodeJS中,中间件主要是指封装所有Http请求细节处理的方法。一次Http请求通常包含很多工作,如记录日志、ip过滤、查询字符串、请求体解析、Cookie处理、权限验证、参数验证、异常处理等,但对于Web应用而言,并不希望接触到这么多细节性的处理,因此引入中间件来简化和隔离这些基础设施与业务逻辑之间的细节,让开发者能够关注在业务的开发上,以达到提升开发效率的目的。

中间件的行为比较类似Java中过滤器的工作原理,就是在进入具体的业务处理之前,先让过滤器处理。它的工作模型下图所示。
牛客前端刷题(七)—— Node篇_第1张图片

3、node.js 中 require(‘xxx’) 是从哪里导入的

require函数可以导入模块、JSON文件、本地文件。模块可以通过一个相对路径从node_modules、本地模块、JSON文件中导出,该路径将针对__dirname变量(如果已定义)或者当前工作目录。

4、请介绍一下 require 的模块加载机制

参考答案:

  1. 计算模块绝对路径;
  2. 如果缓存中有该模块,则从缓存中取出该模块;
  3. 按优先级依次寻找并编译执行模块,将模块推入缓存(require.cache)中;
  4. 输出模块的exports属性;

5、请介绍一下 Node 中的内存泄露问题和解决方案

内存泄露原因

  1. 全局变量:全局变量挂在 root 对象上,不会被清除掉;
  2. 闭包:如果闭包未释放,就会导致内存泄露;
  3. 事件监听:对同一个事件重复监听,忘记移除(removeListener),将造成内存泄露。

解决方案

最容易出现也是最难排查的就是事件监听造成的内存泄露,所以事件监听这块需要格外注意小心使用。

如果出现了内存泄露问题,需要检测内存使用情况,对内存泄露的位置进行定位,然后对对应的内存泄露代码进行修复。

6、 简单介绍一下 IPC

IPC(Inner-Process Communication)又称进程间通信技术,是用于 Node 内部父子进程之间进行通信的方法。

Node 的 IPC 是通过不同平台的管道技术实现的,特点是本地网络通信,速度快,效率高。

Node 在启动子进程的时候,主进程先建立 IPC 通道,然后将 IPC 通道的 fd(文件描述符)通过环境变量(NODE_CHANNEL_FD)的方式传递给子进程,然后子进程通过 fd 与 父进程建立 IPC 连接。

7、 什么是守护进程?Node 如何实现守护进程?

守护进程是不依赖终端(tty)的进程,不会因为用户退出终端而停止运行的进程。

Node 实现守护进程的思路:

  1. 创建一个进程 A;
  2. 在进程 A 中创建进程 B,可以使用child_process.fork或者其他方法;
  3. 启动子进程时,设置detached属性为 true,保证子进程在父进程退出后继续运行;
  4. 进程 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}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

你可能感兴趣的:(牛客刷题,面试题,前端,面试)