面试总结(19/10/22)
面试总结(19-10-22)
- 简述SpringBoot
spting boot 相对于springMVC 最大的特点就是对于配置的简化,尽量用注解去完成配置,相对的对于代码的侵入度会有所增加。
还有就是在 springboot 中,将项目模块化成为常态,将不同功能放在不同的模块中,springcloud中引入微服务的概念。
- 简述HashMap
HashMap 在Java中的底层是以 数组加链表 的形式实现的,在进行put操作的时候,先计算键值的hash值,然后在散列桶里查找,如果没有相同的就放入链表中,如果有相同的,就比较value值和value的hash值,如果相同就替换原来的值,如果不同就放到链表的后面。
在散列桶内数据达到转载因子规定的比例的时候(默认0.75),会调用resize方法,扩容两倍。
在Jdk1.8中,当链表长度大于8时,会将链表转化为红黑树,在小于6的时候恢复成链表。
- Mybatis和Hibernate的区别
我觉得最大的区别在于对于SQL语句的支持存在差异,Mybatis可以使用原生SQL,入门掌握比较快,hibernate有自己封装的HQL语句,需要对SQL语句进行额外的学习,但是对于数据库的适应程度强,适用于需要部署在不同数据库中的系统。
- Redis支持的数据类型
String, List, Hash(Key,value), Set. zSet
- 如何排查慢SQL,如何优化
我比较常用的是explain分析SQL语句 1、system:表中仅有一行(=系统表)这是const联结类型的一个特例。
2、const:表示通过索引一次就找到,const用于比较primary key或者unique索引。因为只匹配一行数据,所以如果将主键置于where列表中,mysql能将该查询转换为一个常量
3、eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于唯一索引或者主键扫描
4、ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,可能会找多个符合条件的行,属于查找和扫描的混合体
5、range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引,一般就是where语句中出现了between,in等范围的查询。这种范围扫描索引扫描比全表扫描要好,因为它开始于索引的某一个点,而结束另一个点,不用全表扫描
6、index:index 与all区别为index类型只遍历索引树。通常比all快,因为索引文件比数据文件小很多。
7、all:遍历全表以找到匹配的行
注意:一般保证查询至少达到range级别,最好能达到ref。
- 线上故障如何排查
索引原理, 建立索引注意事项
三次握手和四次握手
TCP 和 UDP 的区别
Linux中的SCP命令和 SSH的作用
weakReference的作用
弱引用(weakReference) 如果一个对象只有弱引用,那么不管内存空间够不够都会被GC回收。
强引用:我们一般使用的就是强引用,垃圾回收器一般都不会对其进行回收操作。当内存空间不足时Java虚拟机宁愿抛出OutOfMemoryError错误使程序异常终止,也不会回收具有强引用的对象
软引用(SoftReference): 如果一个对象具有软引用,在内存空间足够的时候GC不会回收它,如果内存空间不足了GC就会回收这些对象的内存空间。
虚引用(PhantomReference): 虚引用与其他三种引用都不同,它并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。所以,虚引用主要用来跟踪对象被垃圾回收器回收的活动,在一般的开发中并不会使用它
堆内存溢出和栈内存溢出的区别,什么会导致内存溢出
spring security 和 shiro的区别