C++研发106面试题总结(四)

 

TCP三次握手和四次挥手及各自的状态?

三次握手: 

  CLOSE          LISTEN 

  SYN_SENT 

  SYN_RCVD 

  ESTABLISHED 

  ESTABLISHED 

  四次挥手: 

  FIN_WAIT1 

  CLOSE_WAIT 

  FIN_WAIT2 

  LAST_ACK 

  TIME_WAIT 

  CLOSE 

  CLOSE 

TCP如果两次握手会出什么问题?那三次握手又会造成什么问题?有什么好的解决方法没?

  两次握手:客户端发送的连接请求可能在网络中滞留了,如果没有三次握手,可能会再次创建一个连接。 

  三次握手:引起SYN flood 

  不断发送同步报文段会因为传输控制模块TCB【处于半连接状态】从而消耗服务器资源 

  (1)【处理连接和半连接】定时释放监控系中无效的连接 

  (2)Syn cache技术【处理半连接状态】,接受到的SYN先不创建TCB,而是用一个hash表来表示,当前连接,如果接收到ACK然后再创建TCB 

  (3)Syn cookie技术【处理连接】通过一个cookie值来确定当前连接是否合法,合法就连接,一般的验证方法是,服务器接受到一个syn包,服务器通过syn产生一个cookie数据作为初始化序列,接收到ACK包时,序列-1就是得到的cookie,然后进行相应的验证。 

TCP四次挥手为什么要有TIME_WAIT状态?为什么?

  有两个原因: 

  (1)保证TCP协议全双工连接能够可靠关闭,直接关闭的话,如果服务器没有收到ACK,会重复发FIN。 

  (2)保证这次连接的重复数据从网络中消失,如果上次的socket和这次的socket处理的程序一样,就会导致这次连接把上次的数据加进来了。 

死锁的原因?条件?如何预防?又如何避免?如何解除?

  原因:系统资源不足;进程运行推进顺序不合适;资源分配不当 

  条件:互斥;不剥夺;循环等待;请求与保持 

  预防:破坏任意一个条件 

  避免:银行家算法 

  检测:资源分配图简化法 

 

 

TCP的nagle算法和延迟ack,还有CORK呢?他们有什么好处?一起用会有什么效果?你觉得可以有什么改进?

  nagle算法:防止网络中存在太多小包而造成网络拥塞 

  延迟ack:减少ACK包的频繁发送 

  CORK:将多个包变成一个包发送,提高网络利用率,使载荷率更大 

  不可一起使用 

栈上分配内存和堆上分配内存有什么区别?

  栈上:分配简单,只需要移动栈顶指针,不需要其他的处理 

  堆上:分配复杂,需要进行一定程度清理工作,同时是调用函数处理的。 

变量的存储方式有哪些?

  Auto,extern,register,static 

线程私有和共享那些资源?进程私有和共享那些资源?

  线程私有:线程栈,寄存器,程序寄存器 

  共享:堆,地址空间,全局变量,静态变量 

  进程私有:地址空间,堆,全局变量,栈,寄存器 

  共享:代码段,公共数据,进程目录,进程ID 

什么是守护进程?如何查看守护进程?什么是僵尸进程?如何查看僵尸进程?

  守护进程:一个生命周期长,并且控制终端,然后周期性执行某种任务的进程 

  查看守护进程:ps a敏感词> 

  僵尸进程:进程退出,但是占用资源没有被回收 

  查看僵尸进程:ps -ef|grep defunct 

进程同步机制?

  信号量;管程; 

什么是信号?

  进程间通信机制中唯一的异步通信机制 

kill函数的每一个参数的作用?

  Pid>0:发给ID为pid的进程 

  Pid=0:发给进程组所有的进程 

  Pid=-1:发给所有的进程 

  Pid<-1:发给指定进程组的进程 

什么是协程?

  用户态的轻量级线程,有自己的寄存器和栈 

虚拟内存实现有哪几种方式?有什么意义?

  三种:请求分页存储管理;请求分段存储管理;请求段页式存储管理 

什么是类型安全?能举例吗?

  两个类型直接进行转换,必须是显式的,string和STL模板是类型安全的 

确保线程安全的几种方式?

  (1)原子操作(2)同步与锁(3)可重入(4)阻止过度优化volatile 

OSI七层模型?

  应用层;表示层;会话层;传输层;网络层;数据链路层;物理层; 

TCP/IP五层模型?

  应用层;传输层;网络层【路由器】;数据链路层【交换机、网桥、网卡】;物理层【中继器、集线器】; 

DHCP协议是什么?使用什么端口?他的优劣?

  DHCP协议:动态主机配置协议 

  客户端端口:68;服务端端口:67 

  说说DHCP协议执行的过程? 

  DHCP discover广播-》 

  《-DHCP offer广播 

  DHCP request-》 

  《-DHCP ack 

  在0.5T和0.875T会尝试新的租用,服务器不同意则返回nack否则是ack; 

  如果发生IP冲突则返回DHCP decline。 

网络序是大端还是小端?为什么要这样?

  大端,历史遗留问题 

ping命令使用的是什么协议?

  ICMP协议 

路由表一般包含什么?

  (1)网络地址(2)网络掩码(3)网关【下一跳服务器】(4)跃点数【距离】 

停止等待协议的缺点?为什么?

  信道利用率太低,每次都需要等上一次ACK包接收到了才能再次发送 

拥塞控制的方式?具体怎么做的?快重传的时机是什么?

  (1)慢开始(2)拥塞避免(3)快重传【收到3个失序分组确认】(4)快恢复 

DNS协议如何实现将域名解析为IP地址的?

  (1)客户机的应用程序调用解析程序将域名已UDP数据报的形式发给本地DNS服务器 

  (2)本地DNS服务器找到对应IP以UDP形式放松回来 

  (3)弱本地DNS服务器找不到,则需要将域名发送到根域名服务器,根域名服务器返回下一个要访问的域名服务器,则访问下一个域名服务器。 

10-05 16:55