1. 面试总结3

1.1. java类加载过程是怎么样的

加载->验证->准备->解析->初始化->使用->卸载

1.1.1. 说一下volatile

保证内存可见性与禁止指令重排序

使用缓存一致性协议保证内存可见性,当CPU对变量进行写操作时发现,变量是共享变量,那么就会通知其他CPU中将该变量的缓存行设置为无效状态。 当其他CPU在操作变量时发现此变量在的缓存行已经无效,那么就会去主内存中重新读取最新的变量,通过嗅探总线传播数据。

使用内存屏障禁止指令重排序

1.2. 数据库慢查询优化了解哪些

建索引的几大原则:

  • 最左前缀匹配原则:mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配
  • =和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序
  • 尽量选择区分度高的列作为索引。
  • 索引列不能参与计算,保持列“干净 ,函数不走索引
  • 尽量的扩展索引,不要新建索引

慢查询优化步骤:

  • 先运行看看是否真的很慢,注意设置SQL_NO_CACHE
  • where条件单表查,锁定最小返回记录表,这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高,找出区分度最高的字段。
  • explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
  • order by limit 形式的sql语句让排序的表优先查
  • 了解业务方使用场景
  • 加索引时参照建索引的几大原则
  • 观察结果,不符合预期继续从0分析

1.3. 有遇到过内存泄漏吗?你们是怎么解决的?

© gaohueric all right reserved,powered by Gitbook文件修订时间: 2021-12-08 23:22:22

results matching ""

    No results matching ""