前端面试题课程笔记,课程笔记仅作为自用备忘
Ch5 知识深度-原理和源码
5.1 JS内存垃圾回收用什么算法?
1. 什么是 垃圾回收Garbage collection
- fn1里的数据会被回收
- fn2因为有外部引用,所以不能回收
- 闭包里的数据也不会被回收
2.垃圾回收的算法
- 引用计数(之前)
- 缺点:循环引用的问题
闭包不算内存泄露,因为闭包是有预期的,内存泄露是非预期的。
- 标记清除(现代)
5.2 (连环问)JS闭包是内存泄露吗?JS内存泄露的场景有哪些?
1.闭包不是内存泄露
闭包里的数据不能被回收
2.内存泄露的场景
-
被全局变量、函数引用,组件销毁时未清除
-
被全局事件、定时器引用,组件销毁时未清除
在这里插入图片描述
-
被自定义事件引用,组件销毁时未清除
3.扩展
WeakMap和WeakSet
5.3 如何检测JS内存泄露?
5.4 浏览器和node.js事件循环有什么区别?
![在这里插入图片描述](https://img-blog.csdnimg.cn/2127fc54a02248dba9980aa8a507ee17.png
5.5 虚拟DOM真的很快吗?
5.6 遍历一个数组用for和forEach哪个更快?
for更快,但实际中差别不大
5.7 node.js如何开启多进程,进程如何通讯?
5.8 清描述js-bridge的实现原理
5.9 Vue每个生命周期都做了什么?
1.beforeCreate
- 创建一个空白的Vue实例
- data method尚未被初始化,不可使用
2.created
- Vue实例初始化完成,完成响应式绑定
- data method都已经初始化完成,可调用
- 尚未开始渲染模板
3.beforeMount
- 编译模板,调用render生成vdom
- 还没有开始渲染DOM
4.mounted
- 完成DOM渲染
- 组件创建完成
- 开始由“创建阶段”进入“运行阶段”
5.beforeUpdate
- data完成变化之后
- 准备更新DOM(尚未更新DOM)
6.updated
- data发生变化,且DOM更新完成
- (不要在updated中修改data,可能会导致死循环)
7.beforeUnmounted
- 组件进入销毁阶段(尚未销毁,可正常使用)
- 可移除、解绑一些全局事件、自定义事件
8.unmounted
- 组件被销毁了
- 所有子组件也都被销毁了
9.keep-alive组件
- onActivated缓存组件被激活
- onDeactived缓存组件被隐藏
5.10 连环问
1.Ajax应该在哪个生命周期?
有两个选择:created和mounted
推荐:mounted
放在created只比mounted快10ms
2.Vue3 Composition API生命周期有何区别?
5.11 Vue2和Vue3和React的diff算法有什么区别?
5.12 Vue-router的MemoryHistory(abstract)是什么?
不会前进和后退,网页网址不会变