自己经历的面试问题总结

面试问题一: 说下虚拟机和容器区别

  • 共同点都是在硬件和操作系统之上,虚拟机是完整操作系统,docker是应用容器引擎,是对进程的虚拟,基于操作系统之上虚拟

  • 从启动方面,容器是秒级,虚拟机是分钟级

  • 从资源方面,docker是在操作系统级别上虚拟,与内核交互,损耗低

  • 从硬件方面,docker运行的镜像比虚拟机多,对系统利用率高

  • 从隔离方面,docker属于进程级别隔离,隔离较弱,虚拟机是系统级别隔离

  • 从安全方面,docker安全性较弱,docker的root用户和宿主机一样,一旦普通用户提升到root权限,可能会造成灾难性操作

  • 从管理方面,dcoker集中和管理工具不成熟

  • 从高可用和恢复行,docker可以对业务的快速部署和扩容伸缩

  • 从交付方面,虚拟机可以通过镜像实现环境交付一致性,但docker只记录容器构建过程

面试问题二: 说下K8S与Docker区别

  • Docker是开源应用容器引擎

  • K8s是开源的容器集群管理系统

面试问题四: prometheus如何收集监控数据

通过各种 exporter 采集主机数据, 然后prometheus会采用http协议周期性的去export暴露的地址拉取监控样本数据

面试问题五:操作系统启动流程

    1. 内核引导, bios自建,加载硬盘

    1. 运行 init, 确定运行级别

    1. 系统初始化

    1. 建立终端

    1. 进入系统登录界面

面试问题六:OSI七层模型

  • 物理层

  • 数据链路层

  • 网络层

  • 传输层

  • 会话层

  • 表示层

  • 应用层

面试问题六: TCP与UDP协议不同

  • TCP 可靠面向有连接,常用于点对点,安全性高

  • UDP 高速面向无连接,常用于点对面,安全性低

面试问题七: 三次握手和四次断开过程

  • 第一次握手: 建立连接时,客户端发送syn(syn=j)包到服务器,客户端并进入SYS_SENT状态,等待服务器确认;

  • 第二次握手: 服务器收到syn包,确认客户的syn(ack=j+1),同时自己也发送一个syn(syn=k)包,既SYN+ACK包,服务器进入SYN_RECV状态

  • 第三次握手: 客户端收到服务器SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器端进入ESTABLISHED状态,完成三次握手

面试问题八:为什么连接的时候是三次握手,关闭的时候却是四次握手?

关闭的时候,服务端回回复ACK报文,收到了断开请求,但不会立即关闭,需要服务端把所有的报文发送完,才会发送 FIN 报文

面试问题九:为什么不能用两次握手进行连接

两次握手让彼此知道对方是谁,第三次是确实准备好

面试问题十:如果已经建立了连接,但是客户端突然出现故障了怎么办?

服务端会有TCP计时器,默认2个小时,如果两个小时没有收到客户端发送的数据,服务器会发送默认10次的探测报文,如果没有反应,会认为客户端故障,关闭连接

Last updated