面试题汇总

sql调优

  1. explain执行计划查看sql的执行效率

  2. 频繁查询时使用索引

  3. 对于频繁join的sql,可以使用视图,提高查询速度

  4. SQL语句中IN包含的值不应过多,否则会影响应性能,能用between就不用in

  5. 去重distinct过滤字段要少,否则影响性能

  6. 尽量用union all代替union,union有唯一性过滤操作,这就会涉及到排序,影响性能,使用union all的前提是两个结果集没有重复数据

  7. 先过滤,后分组可以提高groupby的效率

  8. 选择合理的字段类型,能用数字类型就不用字符串,字符串处理速度比数字类型慢; 尽量用小类型,比如:用bit存布尔值,用tinyint存枚举值等; 长度固定字符串用char,不固定用varchar

  9. 使用左连接时,左边表数据结果尽量小,条件尽量放到左边处理,就是小表驱动大表,小的数据集驱动大的数据集,从而让性能更优

  10. 批量提交可以提高性能,例如:
    在这里插入图片描述
    不能批量删除太多数据,会造成锁表:
    在这里插入图片描述
    注意一些索引失效的情况

索引失效的情况

1、带有运算

2、使用函数

3、使用%XXX左模糊查询,因为mysql是最左原则,使用XXX%右模糊查询是可以使用索引的,但是左模糊违背了最左原则所以不行

4、使用范围运算,not in,in > ,<都不行

5、查询的字段不是索引的最左字段,同样是因为最左原则

6、字段类型不匹配,常见的隐式数据类型转换,mobile=1356不会走索引,会转换为字符串可以查询但是,mobile='1356’会走索引

7、or条件左边的是索引字段,右边的不是。也不会走索引,因为or是一个并集

关于基本类型,包装类型之间的那些事

关于七种基本类型之间的转换:大类型可以接受小类型,小类型不可以接受大类型,需要强转;而对于同一种类型的包装类和基本类型:直接自动拆装箱,如果要手动转换,方法为:Integer =Integer.valueOf(int) int=Integer.intValue(Integer)
包装类型之间的转换:例如 Integer------>Short
Integer a=3 Short s=4;
a=s.intValue();s=a.shortValue(); 该操作会把他转换成对应的基本类型,然后自动拆装箱成包装类型

GC相关

一.如何判定垃圾数据
1.引用计数法
会产生对象间的相互循环引用的问题。
2.可达性分析法(主流)
判断对象与GC ROOTS是否有相连的引用链,如果没有,则是垃圾对象,这样可以解决对象间的相互循环引用的问题。

二.垃圾回收算法
1.Mark-Sweep标记-清除算法(新生代回收)
优点:回收效率高,速度快
缺点:会产生大量的不连续的内存碎片,要是想分配一个大对象,没有连续的内存地址空间,就会触发FULL GC
2.Mark-Compact标记-整理算法(老年代回收)
2.Copying算法(新生代回收)
在这里插入图片描述伊甸园区没有被gc的数据会转移到幸存区,下一次gc的时候会清理伊甸园区和一个幸存区,伊甸园区和幸存区都没有被回收的数据会转移到另一个幸存区,也就是说始终有一个幸存区是空的,幸存区中连续8次没有被gc的数据会被转移到老年代,如果老年代也满了,就会触发大gc。

三.GC收集器
1.Serial系列收集器:
单线程收集器,会产生停顿
2.ParNew收集器
多线程收集器,用于收集新生代的垃圾数据
3.CMS收集器
并发低停顿收集器,用在希望系统停顿时间短,延迟低的系统上。;典型应用:HBase
4.Parallel系列收集器
即可以回收新生代,又可以回收老年代,多线程收集器,不关心每次回收的停顿时间长短,而是关心每次回收的吞吐量;典型应用:Hadoop,Spark默认使用这种GC收集器
5.G1收集器(最新)
结合CMS和Parallel的优点,既要低停顿,又要高吞吐。内部将堆划分为一个个的小区域块,每个区域块根据功能被标记为:伊甸园区,幸存区,老年区
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值