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 (环绕通知):编程式控制目标对象的方法调用。环绕通知是所有通知类型中可操作范围最大的一种,因为它可以直接拿到目标对象,以及要执行的方法,所以环绕通知可以任意的在目标对象的方法调用前后搞事,甚至不调用目标对象的方法


hikarukimi
1 声望0 粉丝

hello,一名普通双非一本的计算机学生,正在努力自救中...