HashMap扩容机制
mysql事务
1.原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
2.一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
3.隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
4.持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
并发事务带来哪些问题?
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。
脏读(Dirty read): 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。
丢失修改(Lost to modify): 指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。
不可重复读(Unrepeatableread): 指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。
幻读(Phantom read): 幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。
mysql索引的储存方式
spring的两大特征
ioc aop
spring事务隔离
<!—->l <!—->DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 .
<!—->l <!—->READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )
<!—->l <!—->READ_COMMITTED 会出现不可重复读、幻读问题(锁定正在读取的行)
<!—->l <!—->REPEATABLE_READ 会出幻读(锁定所读取的所有行)
<!—->l <!—->SERIALIZABLE 保证所有的情况不会发生(锁表)
在TransactionDefinition接口中定义了七个事务传播行为。
PROPAGATION_REQUIRED 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
PROPAGATION_SUPPORTS 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。
PROPAGATION_MANDATORY 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。
PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常
PROPAGATION_NESTED如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行
AQS
CAS
ReentrantLock和synchronized的区别
JVM内存区域
垃圾收集算法
Redis
缓存雪崩
缓存穿透
缓存击穿
Spring怎么解决循环依赖
spring进行扫描-反射后封装成beanDefinition对象-放入beanDefinitionMap-遍历map-验证(是否单例、是否延迟加载、是否抽象)-推断构造方法-准备开始进行实例-去单例池中查,没有-去二级缓存中找,没有提前暴露-生成一个objectFactory对象暴露到二级缓存中-属性注入,发现依赖Y-此时Y开始它的生命周期直到属性注入,发现依赖X-X又走一遍生命周期,当走到去二级缓存中找的时候找到了-往Y中注入X的objectFactory对象-完成循环依赖。
1、为什么要使用X的objectFacory对象而不是直接使用X对象?
利于拓展,程序员可以通过beanPostProcess接口操作objectFactory对象生成自己想要的对象
2、是不是只能支持单例(scope=singleton)而不支持原型(scope=prototype)?
是。因为单例是spring在启动时进行bean加载放入单例池中,在依赖的bean开始生命周期后,可以直接从二级缓存中取到它所依赖的bean的objectFactory对象从而结束循环依赖。而原型只有在用到时才会走生命周期流程,但是原型不存在一个已经实例化好的bean,所以会无限的创建-依赖-创建-依赖-…。
3、循环依赖是不是只支持非构造方法?
是。
SpringCloud常用组件 原理
我所理解的 Spring Cloud 就是微服务系统架构的一站式解决方案,在平时我们构建微服务的过程中需要做如 服务发现注册 、配置中心 、消息总在线 、负载均衡 、断路器 、数据监控 等操作,而 Spring Cloud 为我们提供了一套简易的编程模型,使我们能 Spring Boot 的基础上轻松地实现微服务项目的构建。
Eureka ,RestTemplate ,Ribbon、Open Feign、Hystrix、Zuul
AOP使用@Transactional原理
https://cloud.tencent.com/developer/article/1644003
https://www.bilibili.com/video/BV1pV411o7jc?from=search&seid=14247583295140529631&spm_id_from=333.337.0.0
自己设计一个配置中心
线程池线程销毁原理
https://blog.youkuaiyun.com/weixin_44053668/article/details/102155732?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link
https://www.bilibili.com/video/BV11A411V78m?from=search&seid=16074711990273033156&spm_id_from=333.337.0.0
扩容达到int上限
若扩展长度大于int类型最大值,创建一个容量为int上限的ArrayList
HashMap底层
ConcurrentHashMap原理
红黑树
分布式定时任务更新数据的一致性和效率还有准确度
索引底层
锁的续期
redis主库突然挂了,从库还没更新数据,怎么办
布隆过滤器说有不一定有 说没有一定没有
b树和b+树区别
https://www.jianshu.com/p/ace3cd6526c4