Java,八股,cv,算法——双非研0四修之路day35

目录

昨日总结

今日计划

MySQL锁

全局锁

表级锁

行级锁

昨日八股答案

今日八股

MyBatis运用了哪些常见的设计模式?


昨日总结

  • 学习mysql进阶篇
  • cv(停滞中)
  • 小林coding--Spring面试篇(6/7)

今日计划

  • JVM底层原理学习,学习mysql进阶篇(完结),学习函数式编程(完结)
  • cv(停滞中)
  • 小林coding--Spring面试篇(7/7)
  • 码随想录------二叉所搜树的最小绝对差

MySQL锁

全局锁

全局锁:锁定数据库中的所有表,加锁后整个实例就处于只读状态。典型的使用场景是全库的逻辑备份
存在的问题:

  • 如果在主库上备份,那么在备份期间都不能执行更新操作,业务基本上就得停摆
  • 如果在从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志,就会导致主从延迟

表级锁

表级锁:每次操作锁住整张表。锁的粒度大,发生锁冲突的概率最高,并发度最低。

  1. 表锁
    表共享读锁:该表只能读不能写,不会阻塞其他客户端的读,但是会阻塞其他客户端的写
    表独占写锁:客户端既可以读也可以写 ,而其他客户端的读和写会进入堵塞状态
    2. 元数据锁(MDL)
    系统自动控制的。元数据就是表结构,MDL锁是维护表元数据的一致性,在表上有活动事务的时候,不可以对元数据进行写入操作
    当对一张表进行增删改查的时候,加MDL共享读锁;当对表结构进行变更操作的时候,加MDL排他写锁
    3. 意向锁
    为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,是的表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。
    意向共享锁(IS):与表锁共享锁兼容,与表锁排他锁互斥
    意向排他锁(IX):与表锁共享锁以及排他锁都互斥。意向锁之间不会互斥

行级锁

行级锁:每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。
INnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁实现的,而不是对记录加的锁。
如果不通过索引条件检索数据,那么INnoDB将对表中的所有记录加锁,此时就会升级别表锁
间隙锁锁的是两条记录之间的间隙。间隙锁的出现主要是为了避免多个事务并发操作时的幻读现象
临键锁锁的是两条记录的记录和间隙,简单来说,就是间隙锁和行锁的组合

昨日八股答案

  • springboot怎么开启事务

在服务层的方法上添加@Transactiona注解。当调用该方法时,Spring就会自动为该方法开启一个事务。如果方法执行成功,事务就会自动提交。如果方法执行失败,事务就会自动回滚

  • SpringBoot 过滤器和拦截器

二者是用于处理请求和响应的两种不同机制。

过滤器(Filter):作用全局范围(所有的请求和静态资源),对进入Servelet的容器的请求和响应进行预处理和后处理。过滤器通过实现 javax.servlet.Filter 接口,并重写其中的 initdoFilterdestroy 方法来完成相应的逻辑。当请求进入 Servlet 容器时,会按照配置的顺序依次经过各个过滤器,然后再到达目标 Servlet 或控制器;响应返回时,也会按照相反的顺序再次经过这些过滤器。

拦截器(Interceptor):作用于Controller层(仅拦截Spring管理的请求),用于业务逻辑相关的处理(权限、参数校验等等)。拦截器通过实现org.springframework.web.servlet.HandlerInterceptor接口,并重写其中的 preHandlepostHandleafterCompletion 方法来完成相应的逻辑。当请求到达控制器时,会先经过拦截器的 preHandle 方法,如果该方法返回 true,则继续执行后续的控制器方法和其他拦截器;在控制器方法执行完成后,会调用拦截器的 postHandle 方法;最后,在请求处理完成后,会调用拦截器的 afterCompletion 方法。

  • 与传统的JDBC相比,MyBatis的优点
  1. 代码简洁,Mybatis封装了样板的代码,开发人员只需要关注Sql语句和业务逻辑。通过配置文件或注解,MyBatis 会自动完成数据库连接的创建、关闭以及结果集的映射等操作。
  2. SQL与Java代码分离,使代码结构更加清晰,便于 SQL 语句的管理和维护。当需要修改SQL时,只需要修改对应的XML文件或注解。
  3. 动态SQL支持。在 JDBC 中,实现动态 SQL 比较复杂,需要通过拼接字符串的方式来生成不同的 SQL 语句。Mybatis提供了丰富的动态SQL标签

今日八股

MyBatis运用了哪些常见的设计模式?

  • Spring Cloud与Spring boot的区别
  • 常用的微服务组件
  • 负载均衡的算法
  • 介绍一个服务熔断和服务降级