2024-11-21 背八股的第二天,已老实,明天还有前端的考试,继续加油吧,哎。
mysql
怎么定位慢查询
- 使用三方工具: Arthas,Skywalking
使用mysql慢查询日志
# 开启慢查询日志 slow_query_log=1 #设置慢日志的指定时间 long_query_time=2
索引是什么,有怎样的优缺点
索引是一种用于快速检索和查找数据的数据结构(常见的实现有b树,b+树,红黑树,hash)
优点
- 加快数据的检索速度,减少了磁盘io
- 通过建立唯一索引可以确保数据库中每一行数据的唯一性
缺点
- 删除,修改,插入数据时需要维护已有的索引结构,增加了耗时
- 需要占据一定的磁盘空间
聚集索引和非聚集索引有什么优缺点
聚集索引
优点
- 查询速度非常快,在其底层b+树之中叶子结点直接包含了该行数据
- 对范围查询和排序查找有专门的优化
缺点
- 聚集索引因为b+树本身是多路平衡树,需要在插入时保证数据的有效性,当插入的主键不是递增趋势时,会降低插入,查找的效率
- 对主键进行更新时代价比较大,需要调整b+树的结构
非聚集索引
优点
- 更新的代价相对聚集索引而言较小
缺点
- 依赖于数据的有序性,否则会因为调整树结构(页分裂,页合并)降低增加和查询的效率
- 可能需要回表查询,损失一部分性能
mysql中是怎么确定主键的
- 如果创建者指定了表的主键,那么该表的主键就是指定的主键
如果创建者没有指定表的的主键,那么该表的主键会从两种情况中产生
- 如果表中存在一个字段满足拥有唯一索引并且非null的条件那么就将这个字段作为该表的默认主键
- 否则innoDB会自创一个6byte的自增主键
什么是覆盖索引
覆盖索引是指查询语句中需要查询的字段正好是索引的字段,那么就可以根据索引直接查询到对应的数据不需要回表查询
什么是联合索引
使用多个字段创造的索引就是联合索引
java
类型互转可能出现哪些问题
- 丢失精度:double转float时精度可能会损失
- 数据丢失:long转int可能会导致数据溢出,得到意料之外的结果
- 类型不匹配:抛出ClassCastException
@Autowired和@Resource有什么区别
@Autowired
是 Spring 提供的注解,@Resource
是 JDK 提供的注解。
Autowired
默认的注入方式为byType
(根据类型进行匹配),@Resource
默认注入方式为 byName
(根据名称进行匹配)。
当一个接口存在多个实现类的情况下,@Autowired
和@Resource
都需要通过名称才能正确匹配到对应的 Bean。Autowired
可以通过 @Qualifier
注解来显式指定名称,@Resource
可以通过 name
属性来显式指定名称。
@Autowired
支持在构造函数、方法、字段和参数上使用。@Resource
主要用于字段和方法上的注入,不支持在构造函数或参数上使用。
@Autowired和@Resource这两个注解在默认的byXXX方式不能成功创建对象的时候都会尝试使用另一种方式创建对象
Bean 的作用域有哪些?
Spring 中 Bean 的作用域通常有下面几种:
- singleton : IoC 容器中只有唯一的 bean 实例。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。
- prototype : 每次获取都会创建一个新的 bean 实例。也就是说,连续
getBean()
两次,得到的是不同的 Bean 实例。 - request (仅 Web 应用可用): 每一次 HTTP 请求都会产生一个新的 bean(请求 bean),该 bean 仅在当前 HTTP request 内有效。
- session (仅 Web 应用可用) : 每一次来自新 session 的 HTTP 请求都会产生一个新的 bean(会话 bean),该 bean 仅在当前 HTTP session 内有效。
- application/global-session (仅 Web 应用可用):每个 Web 应用在启动时创建一个 Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
- websocket (仅 Web 应用可用):每一次 WebSocket 会话产生一个新的 bean。
使用scope注解配置
aop中有哪些常见的通知
Before(前置通知):目标对象的方法调用之前触发
After (后置通知):目标对象的方法调用之后触发
AfterReturning(返回通知):目标对象的方法调用完成,在返回结果值之后触发
AfterThrowing(异常通知):目标对象的方法运行中抛出 / 触发异常后触发。AfterReturning 和 AfterThrowing 两者互斥。如果方法调用成功无异常,则会有返回值;如果方法抛出了异常,则不会有返回值。
Around (环绕通知):编程式控制目标对象的方法调用。环绕通知是所有通知类型中可操作范围最大的一种,因为它可以直接拿到目标对象,以及要执行的方法,所以环绕通知可以任意的在目标对象的方法调用前后搞事,甚至不调用目标对象的方法
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。