写在前面
本文中的面试题答案为博主自己在网上参考各个文献总结,可能会存在部分错误或者总结不足的地方,欢迎各位大佬指正交流,共同进步。
软连接和硬链接的区别
-
软连接:B保存A的地址,访问B→访问B中A的地址→访问A
-
硬连接:B指向A的地址,访问B→访问A
TCP/UDP的区别
-
TCP面向连接(发送数据先建立连接(三次握手)),UDP面向非连接(发送数据不需要建立连接)
-
TCP发送数据稳定,不缺失,不重复且有序(这里可以介绍下TCP流量控制)
-
TCP面向字节流,UDP面向报文
-
TCP点到点,UDP一对一、一对多、多对多
TCP流量控制
通过滑动窗口协议实现,接收方返回ACK包含自己的窗口大小,利用窗口大小控制发送方发送数据
TCP三次握手(A给B打电话)
-
客户端向服务端发syn包,进入SYN_SEND状态等待服务端确认(A:喂?听得到吗?)
-
服务端接受syn包,确认客户端syn包(Ack)自己也发送一个syn包,此时发送的包有两个(ack+syn),进入SYN_RESC状态(B:听到了,你呢?)
-
客户端收到ack+syn包并返回一个ack给服务端(A:听到了(会话开始))
TCP四次挥手(A和B挂电话)
-
客户端发送fin+ack给服务端(A:我说完了,挂了啊?)
-
服务端收到后返回确认ack(B:嗯)
-
服务端发送fin+ack给客户端(B:我也没事了,挂吧)
-
客户端返回ack给服务端(A:好的(通话结束))
TCP为什么要四次挥手
四次挥手是因为存在可能A的消息发送完了,但是B还有消息要发送,为了确认两边都已经确实把消息发送完毕再进行关闭连接。
如果TCP四次挥手时B没有给A回复时会怎样?如果等待的话等待多长时间?要是一直没回复呢?
如果B没有给A回复,A会进入等待状态,TCP设有一个保活计时器,如果B出现故障,A不会一直等待。A每收到一次B的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到B的任何数据,A就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,A就认为B出了故障,接着就关闭连接。
get和post的区别
-
get用于请求服务器获取数据,post用于向服务器提交数据
-
get将请求信息放到URL中,post将信息放到报文中
http与tcp区别
-
TCP协议是传输层协议,主要解决数据如何在网络中传输;HTTP是应用层协议,主要解决如何包装数据,二者并无太大可比性。
-
Http协议是建立在TCP协议基础之上的
什么是MySQL索引
帮助MySQL高效获取数据的数据结构(一般都用B+树)
有哪些索引类型?建立索引的考量?
索引分为单列索引、组合索引和唯一索引,底层还分为聚合索引(存储所有数据,innodb)和非聚合索引(存储数据地址,myisam)
建立索引的考量为不能频繁的进行增删改等更新操作(需频繁维护B+树等数据结构,开销大),重复的值不适合索引(重复值查找速度慢),索引包含的内容频繁作为条件的适合建立索引。
java中有无static的区别
-
有static:方法和属性属于类,不属于对象,通过类.方法的方式可以调用,修饰类时类中不允许出现非static方法或属性
-
无static:方法和属性属于实例对象,调用需先实例化
java8新特性
-
支持Lambda表达式,允许把函数作为参数
-
加入Stream API,支持流处理
-
加入Optional类解决空指针异常