File tree Expand file tree Collapse file tree 2 files changed +28
-6
lines changed
Expand file tree Collapse file tree 2 files changed +28
-6
lines changed Original file line number Diff line number Diff line change @@ -58,7 +58,7 @@ IOC的实现原理是工厂模式加反射机制。
5858
5959
6060[ 三级缓存解决循环依赖] ( https://developer.aliyun.com/article/766880 ) :
61- - 前提,出现循环依赖的Bean必须是单例;依赖注入的方式不能全是构造器注入(全是构造器注入则无法解决循环依赖)。
61+ - 前提,出现循环依赖的Bean必须是单例;依赖注入的方式不能全是构造器注入(通过setter方法进行依赖注入, 全是构造器注入则无法解决循环依赖)。
6262- getSingleton(beanName)方法三级缓存
6363 1 . singletonObjects,一级缓存,存储的是所有创建好了的** 单例Bean对象**
6464 2 . earlySingletonObjects,二级缓存,完成实例化,但是还未进行属性注入及初始化的** 提前暴露的对象**
@@ -145,4 +145,11 @@ PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的区别:
145145
146146结论:
1471471 . transactional注解修饰的方法会创建一个代理增强类,其他方法调用该注解修饰的方法也只是调用原类中的方法。
148- 2 . transactional修饰的方法内报错就一定会回滚。
148+ 2 . transactional修饰的方法内报错就一定会回滚。
149+
150+ # Spring 用到了哪些设计模式
151+ 1 . 普通工厂模式:通过 BeanFactory 和 ApplicationContext 容器创建 Bean 对象
152+ 2 . 代理模式:AOP 的实现
153+ 3 . 单例模式:Bean 默认是单例
154+ 4 . 模板方法:jdbcTemplate 等用到了模板方法
155+ 5 . 观察者模式:Springboot 事件驱动,监听器等
Original file line number Diff line number Diff line change @@ -256,15 +256,30 @@ func main() {
256256- 数组在内存中是一段连续的内存空间,元素的类型和长度都是固定的;
257257- 切片在内存中由一个指向底层数组的指针、长度和容量组成的,长度表示当前包含的元素个数,容量表示切片可以拓展的最大元素个数。切片 ` s[x: y] ` 表示 ` s ` 中第 ` x ` 位到第 ` y - 1 ` 位元素截取。
258258
259- ## 协程
259+ ## 协程/线程/进程的区别
260260
261- 简单理解:用户态的线程,上下文切换通过调用方去控制,而不是操作系统 。
261+ - 进程:是具有一定独立功能的程序,是系统资源分配和调度的最小单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全 。
262262
263- 好处:减少了线程的重复高频创建;尽量避免线程的阻塞;
263+ - 线程:是进程的一个实体,是内核态,而且是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
264264
265- 和线程的对比:协程更适合于IO密集型应用程序,如网络编程、爬虫等。而对于CPU密集型应用程序,线程仍然是更好的选择。
265+ - 协程:是一种用户态的轻量级线程,调度完全是由用户来控制的拥有自己的寄存器上下文和栈。调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。一个线程可以有多个协程,线程、进程都是同步机制,但协程是异步
266266
267267
268+
269+ ## Go 和 Java 的区别
270+
271+ 1 . 语言特性:
272+ - Java 面向对象,静态语言,有完整的继承体系,不支持多继承,值传递
273+ - Go 虽然是静态类型语言,但具有动态类型语言的**鸭子类型**(基于 interface 实现),支持多继承,值传递
274+
275+ 2 . 并发模型:
276+ - Java 的并发基于线程和锁
277+ - Go 的并发基于协程和通道,可以实现轻量级的并发
278+
279+ 3 . 性能
280+ - Java 需要通过虚拟机,可跨平台,从字节码编译成机器码
281+ - Go 的效率高,因为没有虚拟机,直接编译成机器码
282+
268283## Byte 和 Rune 类型
269284
270285- byte是uint8的别称,一个值就是一个ASICII码的值,占 1 个字节的英文类字符,使用 byte
You can’t perform that action at this time.
0 commit comments