![](https://csdnimg.cn/release/download_crawler_static/87389163/bg3.jpg)
上述 HOC 的缺点 Render Props 都可以解决
Render Props 缺陷:
1、 使用繁琐: HOC 使用只需要借助装饰器语法通常一行代码就可以进行复用,Render Props 无法做到如
此简单 2、 嵌套过深: Render Props 虽然摆脱了组件多层嵌套的问题,但是转化为了函数回调的嵌套
React Hooks 优点:
1、 简洁: React Hooks 解决了 HOC 和 Render Props 的嵌套问题,更加简洁 2、 解耦: React Hooks 可以
更方便地把 UI 和状态分离,做到更彻底的解耦 3、 组合: Hooks 中可以引用另外的 Hooks 形成新的 Hooks,
组合变化万千 4、 函数友好: React Hooks 为函数组件而生,从而解决了类组件的几大问题:
1、 this 指向容易错误 2、 分割在不同声明周期中的逻辑使得代码难以理解和维护 3、 代码复用成本高
(高阶组件容易使代码量剧增)
React Hooks 缺陷:
1、 额外的学习成本(Functional Component 与 Class Component 之间的困惑)2、 写法上有限制(不
能出现在条件、循环中),并且写法限制增加了重构成本 3、 破坏了 PureComponent、React.memo 浅比
较的性能优化效果(为了取最新的 props 和 state,每次 render()都要重新创建事件处函数)4、 在闭包场
景可能会引用到旧的 state、props 值 5、 内部实现上不直观(依赖一份可变的全局状态,不再那么“纯”)
6、 React.memo 并不能完全替代 shouldComponentUpdate(因为拿不到 state change,只针对 props
change)
5、 什么是 Executors?
Executors 框架实现的就是线程池的功能
Executors 工厂类中提供的 newCachedThreadPool、newFixedThreadPool 、newScheduledThreadPool 、
newSingleThreadExecutor 等方法其实也只是 ThreadPoolExecutor 的构造函数参数不同而已。通过传入
不同的参数,就可以构造出适用于不同应用场景下的线程池。
6、 如何判断对象是否是垃圾?
引用计数: 在对象中添加一个引用计数器,如果被引用计数器加 1,引用失效时计数器减 1,如果计数器
为 0 则被标记为垃圾。原理简单,效率高,但是在 Java 中很少使用,因为存在对象间循环引用的问题,
导致计数器无法清零。
可达性分析: 主流语言的内存管理都使用可达性分析判断对象是否存活。基本思路是通过一系列称为 GC
Roots 的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程走过的路径称为引
用链,如果某个对象到 GC Roots 没有任何引用链相连,则会被标记为垃圾。可作为 GC Roots 的对象
包括虚拟机栈和本地方法栈中引用的对象、类静态属性引用的对象、常量引用的对象。
7、 volatile 类型变量提供什么保证?