1.springboot自动装配的底层原理
基于依赖注入和控制反转
1.条件化装配:springboot使用条件化注解来控制是否应该自动装配特定的配置类和组件。
2.自动配置类:springboot提供了大量的自动配置类,这些类包含了针对常见应用场景的默认配置
3.springboot stater:是一组预定义的依赖项,它们包含了常用库和自动配置类,用于快速启动特定类型的应用
程序(如web应用、数据库应用)
4.springboot应用程序入口类:springboot应用程序通常包含一个主类,该主类使用@SpringBootApplication注解进行标记
5.自动配置的条件检查:当springboot应用程序启动时,springboot会自动扫描类路径上的自动配置类,
并根据条件注解检查是否满足自动装配的条件。如果满足条件,相应的自动配置将被应用
2.mysql有哪些锁,间隙锁什么情况下产生
1.共享锁:读锁,多个事务可以同时持有共享锁,用于防止其他事务获得排他锁,从而实现读取数据的并发性
2.排他锁:写锁,只有一个事务可以持有排他锁,用于防止其它事务同时修改数据,从而实现写数据的独占性
3.记录锁:锁定单个数据行,通常用于实现行级锁定。例如一个事务可以锁定一行数据,防止其它事务修改该行
4.间隙锁:是innodb存储引擎独有的一种锁。它锁定了一个范围,而不是单个记录。间隙锁在以下情况产生:
(1)当事务使用范围条件(如 where age between 1 and 12)查询数据时,innodb会对查询
范围内的间隙(不存在的记录)进行间隙锁定,以防止其他事务在该范围内插入新记录,这样
可以防止幻读。
(2)当使用锁定读取(select ... for update)时,innodb会对符合记录的条件进行排它锁定,
同时对范围内的间隙进行锁定
间隙锁的目的是确保并发事务的一致性,防止其他事务插入干扰数据
3.rabbitmq你是在哪里用的,你们怎么保证消息的正确传输的
1.消息确认:消费者端可以设置autoAck参数为false来禁用自动确认。当消费者成功处理消息后,可以发送确认
给rabbitmq,告诉它可以将该消息从队列中删除了。这样确保了消息不会丢失
2.持久化消息:在生产端发送消息时,可以选择将消息标记为持久化,但是消息持久化会降低消息传递的性能
3.交换器和队列的持久化:除了消息的持久化外,还可以将交换器和队列标记为持久化,这样可以确保它们在
rabbitmq服务器重启后仍然存在
4.生产者确认:生产者确认消息是否被rabbitmq接收和持久化,生产者可以等待rabbitmq发送确认后才认为
消息已经发送成功
5.消息重试和死信队列:在消费者处理消息时,如果发生错误,可以选择将消息放入一个死信队列,然后进行重试
或处理异常情况。这可以确保消息不会因为处理失败而丢失
6.集群:确保不会因为单点故障而消息丢失
4.如何实现手机端扫码登陆web端
1.生成随机的二维码:服务端生成一个随机的唯一标识符,然后将该标识符与当前用于的身份信息关联起来。
接着,服务器生成一个包含该标识符的二维码图像
2.将二维码展示给用户:服务器将生成的二维码发送给客户端,以便用户可以在其设备上查看和扫描
3.用户扫描二维码:用户使用移动设备扫描二维码
4.客户端发送认证请求:扫描二维码后,客户端应用程序将包含标识符的认证请求发送给服务器
5.服务器验证请求:服务器接受到客户端的认证请求,然后检查该标识符是否有效和未过期
6.用户确认登录:一旦服务器验证了用户的标识符并确认了其身份,服务器会向客户端发送成功登陆的消息
7.过期处理:为了安全性,标识符通常具有过期时间,一旦过期,用户将无法使用它来登录。服务器应该定期
清理过期的标识符
5…在可重复读的情况下,一个事务在读某个数据的时候,另一个事务可以来对这个数据进行操作嘛
不可以
在可重复读隔离级别下,一个事务一旦读取某个数据时,通常会对该数据加共享锁,以防止其他事务修改该数据。
因此,其他事务可以来读取相同的数据,但不能对该数据进行修改
6…redolog/undolog,mysql底层一个操作的具体流程是什么,需要啥时候记录哪些东西,之后做什么
1.redo log(重做日志) :
作用:记录了已经提交的事务所做的修改操作,以确保在数据库崩溃时或故障时可以将数据恢复到一致的状态
操作流程:
(1)当事务执行insert update delete 等修改操作时,mysql不会立即将这些操作写入磁盘中的数据文件
(2)它首先将这些操作写入 redo log 文件中,这是一个顺序追加的日志文件
(3)redo log 记录的是在某个数据也上做了什么修改,而不是记录整个数据页的内容
(4)当事务提交时,mysql将redo log中的修改操作应用到数据文件中的相应数据页,从而实际地更新数据
(5)这确保了即使在数据库崩溃时,可以通过重新应用redo log中的操作来恢复数据
2.undo log(撤销日志):
作用:用于事务的回滚和并发机制。它记录了事务执行的修改操作的逆操作,以便回滚事务或提供读一致性
操作流程:
(1)当事务开始执行时,mysql为该事务分配一些undo log用于记录该事务的修改操作
(2)在事务执行期间,如果需要回滚事务,undo log中的逆操作将被应用,以还原数据到事务开始前的状态
(3)在并发版本控制中,如果一个事务正在修改某个数据页,其它事务可能需要读取该页的先前版本。
undo log 可以用于提供这些读取操作的一致性视图
(4)当事务提交后,undo log中的信息可能被保留一段时间,以支持可见性和回滚操作
7.使用什么工具进行JVM调优
1.VisualVM:VisualVM是一个免费的Java性能分析工具,可以用于监视JVM的性能、内存使用情况、
线程情况等,并提供图形化界面和分析功能。
2.JConsole:JConsole是JVM自带的监控和管理工具,可以用于查看应用程序的性能指标、线程状态、
内存使用等信息。
3.jstat:jstat是一个命令行工具,可以用于监视JVM的性能统计信息,如垃圾回收统计、类加载统计等。
4.VisualVM Profiler:VisualVM还包含一个性能分析器,可以用于识别性能瓶颈和优化代码。