阶段知识总结

199 阅读2分钟

知识点总结:

1.springboot自动配置 1.1:

@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan

1.2:AutoConfigurationImportSelector,SpringFactoriesLoader,(META-INF/spring.factories)

2.spring的动态代理: JDk:InvocationHandler CGLIB:MethodInterceptor

3.spring的bean的初始化过程:

3.1:Aware接口接口(BeanNameAware...)

3.2:BeanPostProcess.postProcessBeforeInitialization();

3.3:调用Bean的初始化方法

3.4:调用BeanPostProcess的后置初始化方法,postProcessAfterInitialization

3.5:destory();

4.分布式锁 zookeeper :CuratorFramework, InterProcessMutex 注释:在父节点下创建临时顺序节点,如果是最小的子节点的话则获取到锁 redis:Redisson框架,注释:注意

5.AQS的原理:

6.MVCC:提高读写并发性能,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读

7.事务总结: 事务失效常见场景:1.数据库引擎不支持事务;2.注解修饰在非public方法上;3.try catch把异常捕获,4.方法中调用同类的方法(注解事务是代理实现的,在同类中方法调用不会去调用代理);5.默认只回滚RuntimeException和Error( 参考:org.springframework.transaction.interceptor.DefaultTransactionAttribute#rollbackOn())

8.mysql保证事务的ACID:

redolog保证持久性,脏页未刷到数据盘,可以通过redolog恢复----持久性

undolog----原子性和隔离性

redolog和binlog-----保证事务的一致性

9.实例化一个类的方法: 论实例化一个类的方式?

(1)通过构造方法实例化一个类;

(2)通过Class实例化一个类;

(3)通过反射实例化一个类;

(4)通过克隆实例化一个类;

(5)通过反序列化实例化一个类;

(6)通过Unsafe实例化一个类;

demo:

User user1 = new User();

User user2 = User.class.newInstance();

User user3 = User.class.getConstructor().newInstance();

User user4 = (User) user1.clone();

User user5 = unserialize(user1);

User user6 = (User) unsafe.allocateInstance(User.class);

10.JavaIO:

  1. 输入字节流InputStream

  2. 输出字节流OutputStream

  3. 字符输入流Reader

  4. 字符输出流Writer

  5. 字符流与字节流转换

11.LongAdder: 用于统计而不是用于并发同步控制 缺点: 没有提供赋值方法,意味着要复用需要调用reset方法,这个方法的缺点上边已经说了,另外时间复杂度也会比AtomicLong.set高,因为有遍历操作 取值方法时间复杂度相对来说也高,因为要进行遍历求和 正如作者的描述,占用空间更大,因为使用@Contended注解避免伪共享

优点:高冲突下吞吐量更高 选择在有冲突时分散竞争资源,为每个线程分配一个Cell