摘要:
利用三级缓存解决,三级缓存都是什么? 一级缓存:singletonObjects,存放可用的成品Bean。 二级缓存:earlySingletonObjects,存放半成品的Bean,半成品的Bean是已创建对象,但是未注入属性和初始化。用以解决循环依赖。 三级缓存:存的是Bean工厂对象,用来生成 阅读全文
摘要:
什么是2PC? 即两阶段提交协议,将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2指的是两个阶段,P指的是准备阶段,C指的是提交阶段 1.准备阶段:事务管理器给每个参与者发布Prepare消息,每个服务参与者在本地执行事务,并写在Undo/ 阅读全文
摘要:
C--consistency: 一致性是指,数据的读取永远读到的是最新的数据。当数据分布在多个节点上时,从任意节点读取到的数据永远是最新的状态。 如何实现一致性? 1.写入主数据后要将数据同步到从数据库 2.写入主数据后,在向从数据库同步期间要将从数据库锁定,待同步完成后再释放锁,避免在新数据写入成 阅读全文
摘要:
GC的基本原理 将内存中不再被使用的对象进行回收,GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代、旧生代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停。 哪些内存需要回收: JVM的内存结构包括五大区域:程序计数器、虚 阅读全文
摘要:
String类型的底层数据结构、存储方式、扩容方式? 底层数据结构:SDS,简单动态字符串(Simple Dynamic String),它是一个带有长度信息的字节数组 存储方式:embstr和raw,当字符串长度比较短的时候使用embstr,长度超过44字节时使用raw方式存储 扩容方式:长度小于 阅读全文
摘要:
什么是哨兵模式? 哨兵(sentinel)是一个分布式系统,在主从结构中对服务器进行监控,当服务器发生故障时,投票选举中新的master服务器,并将所有slave服务器连接到的master服务器。 哨兵的作用? 监控:不断检查master和salve的运行情况 通知:当服务器发生故障时,向其他(哨兵 阅读全文
摘要:
synchronized的几种表现形式 1.对于普通同步方法,锁的是当前对象实例。 1 public synchronized void minus() { 2 int count = 5; 3 for (int i = 0; i < 5; i++) { 4 count--; 5 System.ou 阅读全文
摘要:
什么是线程池? 线程池就是一个线程缓存,负责对线程进行统一分配、调度与监控。 线程池的意义? 线程是稀缺资源,它的创建和销毁比较重且消耗资源,而java线程依赖于内核线程,创建线程需要进行操作系统状态切换,为避免资源过度消耗需要设法重用线程执行多个任务。 线程池的优势? 重用存在的线程,减少线程创建 阅读全文
摘要:
ThreadLocal数据结构 JDK8设计是此方案,早期设计是:key存的是thread,以threadLocal为单位。 JDK8设计的好处:当thread销毁时,tthreadLocalMap也会随之销毁,减少内存的使用。 内存引用流程图 什么是ThreadLocal?有什么特性? Threa 阅读全文