4399面经

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还包含一个性能分析器,可以用于识别性能瓶颈和优化代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cw旧巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值