知识点总结:
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:
-
输入字节流InputStream
-
输出字节流OutputStream
-
字符输入流Reader
-
字符输出流Writer
-
字符流与字节流转换
11.LongAdder: 用于统计而不是用于并发同步控制 缺点: 没有提供赋值方法,意味着要复用需要调用reset方法,这个方法的缺点上边已经说了,另外时间复杂度也会比AtomicLong.set高,因为有遍历操作 取值方法时间复杂度相对来说也高,因为要进行遍历求和 正如作者的描述,占用空间更大,因为使用@Contended注解避免伪共享
优点:高冲突下吞吐量更高 选择在有冲突时分散竞争资源,为每个线程分配一个Cell