-
Spring 事务原理
用户配置 @EnableTransactionManagement @ComponentScan("com.example.learn.tx") @Config
-
Spring 事务失效的几种场景
检查异常 代码 未指定rollbackFor @Transactional public void transfer(int from, int to, int
-
Spring AOP 原理
版本 spring-aspects-5.3.13 步骤 @EnableAspectJAutoProxy开启AOP功能 @EnableAspectJAutoPr
-
Spring 循环依赖能否用二级缓存解决
结论 不能。 原因 bean创建分为三步:实例化、填充属性、初始化。 循环依赖发生在填充属性阶段,代理对象的创建在初始化完成后的后置处理器回调中。 如果只用二级
-
Spring 循环依赖
原因 ClassA的构造中需要ClassB,ClassB的构造中需要ClassA。 public class ClassA { public Clas
-
Spring 组件的注册时机
相关组件 被@Component、@Controller、@Service、@Repository、@Bean标注的组件。 相关后置处理器 主要是配置类后置处理
-
Spring @EventListener 加载流程
注解 /** * @see EventListenerMethodProcessor */ @Target({ElementType.METHOD, Ele
-
Spring 注册内置后置处理器流程
版本 spring-context 5.3.13 注册流程 AnnotationConfigApplicationContext构造函数中完成了Spring内置
-
Spring 依赖注入原理
版本 spring-context 5.2.6.RELEASE 依赖注入 AutowiredAnnotationBeanPostProcessor处理@Auto
-
Spring 创建 IOC 容器步骤
代码 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigA
-
Java 并发编程之线程池大小
说明 关于线程池大小的设置,有很多文章和经验公式,给出的答案不尽相同。 Java并发编程实战 《Java并发编程实战》:第8章 - 线程池的使用。第141页。
-
Java 并发编程之 ThreadPoolExecutor 线程池源码解析
构造函数 注意:只有在阻塞队列满的前提下才会创建非核心线程。 ThreadPoolExecutor executor = new ThreadPoolExecu
-
为什么 HashMap 长度必须是 2 的 n 次幂
2 的 n 次幂 1后面n个0 如: 2^3 = 1000 2^6 = 1000000 取索引的算法 取索引的算法是对hash值取模:hash%length,
-
JDK 1.8 HashMap 源码分析
数据结构 数组 + 单链表 + 红黑树 哈希冲突解决方法 尾插方式 if ((p = tab[i = (n - 1) & hash]) == null)
-
JDK 1.7 HashMap 源码分析
数据结构 数组 + 单链表 哈希冲突解决方法 头插方式 void createEntry(int hash, K key, V value, int bucke
-
MySQL 聚集索引和非聚集索引
聚集索引 聚集索引确定表中数据的物理顺序,每一行数据按照聚集索引物理上排序。 InnoDB存储引擎必须有且仅有一个聚集索引。 聚集索引存储的是这一行的数据本身(
-
Java 中类的变量、代码块、构造方法加载的顺序
加载顺序 父类静态变量 父类静态代码块 子类静态变量 子类静态代码块 父类成员变量 父类代码块 父类构造方法 子类成员变量 子类代码块 子类构造方法 示例代
-
Java 消除 if else 代码的几种方式
提前 return 优化前 if(condition) { //doSomething } else { return; } 优化后
-
Java 进程间通讯的几种方式
IPC 进程间通讯:InterProcess Communication。不同进程间的数据读写。 Socket 方式 如HTTP、TCP、RPC等可以实现直接的
-
Java 中的序列化 Serializable 和 Externalizable
Serializable 被static修饰的字段是不会被序列化的。 被transient修饰符修饰的字段也是不会被序列化的。 public class Per