后端开发面试题总结

105 阅读4分钟

写在前面

 本文中的面试题答案为博主自己在网上参考各个文献总结,可能会存在部分错误或者总结不足的地方,欢迎各位大佬指正交流,共同进步。

软连接和硬链接的区别

  • 软连接:B保存A的地址,访问B→访问B中A的地址→访问A

  • 硬连接:B指向A的地址,访问B→访问A

TCP/UDP的区别

  1. TCP面向连接(发送数据先建立连接(三次握手)),UDP面向非连接(发送数据不需要建立连接)

  2. TCP发送数据稳定,不缺失,不重复且有序(这里可以介绍下TCP流量控制)

  3. TCP面向字节流,UDP面向报文

  4. TCP点到点,UDP一对一、一对多、多对多

TCP流量控制

 通过滑动窗口协议实现,接收方返回ACK包含自己的窗口大小,利用窗口大小控制发送方发送数据

TCP三次握手(A给B打电话)

  1. 客户端向服务端发syn包,进入SYN_SEND状态等待服务端确认(A:喂?听得到吗?)

  2. 服务端接受syn包,确认客户端syn包(Ack)自己也发送一个syn包,此时发送的包有两个(ack+syn),进入SYN_RESC状态(B:听到了,你呢?)

  3. 客户端收到ack+syn包并返回一个ack给服务端(A:听到了(会话开始))

TCP四次挥手(A和B挂电话)

  1. 客户端发送fin+ack给服务端(A:我说完了,挂了啊?)

  2. 服务端收到后返回确认ack(B:嗯)

  3. 服务端发送fin+ack给客户端(B:我也没事了,挂吧)

  4. 客户端返回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的区别

  1. get用于请求服务器获取数据,post用于向服务器提交数据

  2. get将请求信息放到URL中,post将信息放到报文中

http与tcp区别

  1. TCP协议是传输层协议,主要解决数据如何在网络中传输;HTTP是应用层协议,主要解决如何包装数据,二者并无太大可比性。

  2. Http协议是建立在TCP协议基础之上的

什么是MySQL索引

 帮助MySQL高效获取数据的数据结构(一般都用B+树)

有哪些索引类型?建立索引的考量?

 索引分为单列索引、组合索引和唯一索引,底层还分为聚合索引(存储所有数据,innodb)和非聚合索引(存储数据地址,myisam)

 建立索引的考量为不能频繁的进行增删改等更新操作(需频繁维护B+树等数据结构,开销大),重复的值不适合索引(重复值查找速度慢),索引包含的内容频繁作为条件的适合建立索引。

java中有无static的区别

  • 有static:方法和属性属于类,不属于对象,通过类.方法的方式可以调用,修饰类时类中不允许出现非static方法或属性

  • 无static:方法和属性属于实例对象,调用需先实例化

java8新特性

  • 支持Lambda表达式,允许把函数作为参数

  • 加入Stream API,支持流处理

  • 加入Optional类解决空指针异常