JAVA面经复习(二十三)

面试难度:☆☆☆
声明:答案均为网上搜索汇总得到的参考答案,如有不妥或意见相左之处欢迎指出!

问:数据库索引为什么用自增id,有什么好处 ?

答:1、是自增id可以作为主键,能够加快聚簇索引下的搜索,减少回表。2、是对于B+树结构的索引,采用自增索引可以更好的维护树结构不必做出大的改动。

问:B+树?

答: B+树是一种多叉平衡树,其优点在于树的深度较低,支持范围查询切查询的速度较快。

问: 联合索引的匹配规则 ?

答:最左匹配原则。例如索引A,B,C;实际上构建了(A)、(A,B)、(A,B,C)三个索引。

问:DNS哪个层的协议,底层用是哪个协议 ?

答:应用层协议,其基于TCP/UDP协议。

问: UDP的特点 ?

答:1、无连接传输;2、尽最大全力交付,不保证可靠交付。3、面向报文的。4、支持一对一,多对多,一对多等通信。5、无阻塞控制,网络存在阻塞也不影响发送端的发送速率。6、首部开销小,比TCP的开销小。

问:TCP粘包怎么解决?

答:TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾。在发送端可能是由于采用了Nagle算法(其收集多个分组并合并成一个大的分组),因此可以考虑取消Nagle算法。如果是接收端引起的问题,则只能在应用层(即HTTP中处理)进行处理,1、采用格式化的数据,即给数据人为的加上开始符号和结束符号。2、发送数据长度,例如规定数据的前4位是数据的长度,应用层在处理时可以根据长度来判断每个分组的开始和结束位置。

问:HTTP怎么解决TCP粘包问题的?

答:1、 对于定长的数据包,保证每次都按固定的大小读取即可;
2、对于变长的包,可在包头的位置,约定一个包总长度的字段,从而就知道了包的结束位置;
3、对于变长的包,还可以在包和包之间使用明确的分隔符(应用层协议,是我们自己写的,只要保证分隔符不和正文冲突即可)

问:HashMap怎么解决冲突的 ?

答:采用的链表法解决冲突,在jdk1.8中,当链表过长的时候,会将链表转换成红黑树来加快检索的速度。

问:JVM怎么解决垃圾回收的?

答:JVM判断垃圾的算法有两种,分别是可达性分析和引用计数法。1、可达性分析,指的是从GCRoots出发遍历,如果能找到与之相联系的对象,证明对象存活。否则证明对象需要被清理。2、引用计数法,比较简单,每有一个对象使用到当前的对象,则该对象的引用计数器+1,不再使用该对象则计数器-1,当引用计数器为0的时候判定此对象为垃圾。

JVM在具体的垃圾回收算法上又分为四种,标记清除法,标记整理法,复制算法,分代收集算法。

参考资料:

腾讯TEG一面摸底面经

UDP协议的特点

什么是TCP粘包?怎么解决这个问题

http协议如何解决粘包问题