腾讯QQ后台开发部门一面面经
- TCP 和 UDP 区别(答案烂大街了,略)
UDP 和 TCP 的数据包有最大长度限制吗?
——UDP包分为包头和正文, 包头共有64位(8字节),分别是16位源端口,16位目的端口,16位UDP包长度和16位校验和.因此UDP包正文的 最大长度是2^16 - 1=65535字节.【以太网帧的数据区最大长度为1500字节】
TCP 分段 和 IP 分段,UDP 会分段吗
——TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明显,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不需要在网络层进行IP分片了。因此TCP报文段很少会发生IP分片的情况。
由于UDP数据报不会自己进行分段,因此当长度超过了MTU时,会在网络层进行IP分片。同样,ICMP(在网络层中)同样会出现IP分片情况。
总结:UDP不会分段,就由IP来分。TCP会分段,当然就不用IP来分了!(https://www.jianshu.com/p/f9a5b07d99a2)
TCP TIME_WAIT 状态
——通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT 状态。
如下图:客户端主动关闭连接时,会发送最后一个 ack 后,然后会进入TIME_WAIT状态,再停留 2 个 MSL 时间,进入 CLOSED 状态。
【为什么叫 FIN 包呢?因为是 finish 的 abbr】
MSL:maximum segment lifetime (最大分节生命期),这是一个 IP 数据包能在互联网上生存的最长时间,超过这个时间 IP 数据包将在网络中消失 。MSL 在 RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒。
TIME_WAIT:状态维持时间,是两个 MSL 时间长度,也就是在 1-4 分钟。Windows 操作系统就是 4 分钟。
为什么建立连接协议是三次握手,而关闭连接却是四次握手?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
【建议:看看 TCP 的各个状态,参考 https://www.cnblogs.com/softidea/p/5741192.html】
TCP 的半连接队列是什么?
C++中的容器了解多少 —— https://blog.csdn.net/tju_fengbo/article/details/81978595
C++ vector 是在头还是尾插入的?如果 C++ 要删除一个列表中的元素,会影响头指针还是尾指针
C++ 中重载、重写的区别
C++ 进程内存空间分布
C++ 中指针和引用的区别
对于指针来说,它是一个地址,这个地址是一个数值,那么就意味这个数值可以为0(空指针),也可以为其他,即指针可以不指向任何东西。
对于引用来说,引用被称为变量的别名。一定是“某个存在物体”的别名,所以引用不能为空,即不能存在空引用。在声明引用的同时就要对它初始化,并且,引用一经声明,就不可以再和其它对象绑定在一起了。
在底层,引用变量由指针按照指针常量的方式实现。
- mysql 怎样保障数据一致性
对于一个基本有序的数组进行排序用什么最快?
—— 插入排序?求指正
- 红黑树中已经有n个数据,寻找某个key是否存在的时间复杂度为 logN (是一种平衡二叉树)。
进程间通信(IPC:Inter-Process Communication)的几种方式
—— 管道、信号量(semophore)、消息队列、信号(signal)、共享内存、套接字
Linux 对 IPC 的管理的命令
socket 编程的 epoll、select、poll 什么意思?
——https://blog.csdn.net/jyy305/article/details/73012706 、 https://blog.csdn.net/wk_bjut_edu_cn/article/details/80669310
附:无意间看到的文章
- 看到一个讲排序的 blog ,动图很可
- topK 、BFPRT、KMP
- QQ 是怎么实现通信的?