字节网络2面凉经 5.21 后端开发
-
请先做个自我介绍。
-
在实习项目中,有用 AI 辅助 coding 吗?
-
实习项目相关(占大约一半面试)
-
无锁队列的实现原理是什么?对比其他队列的优势和劣势?为什么不是所有场景都用无锁队列?
-
锁的种类有哪些?各自的使用场景?
-
TCP 保证可靠传输的机制有哪些?
-
能讲一下 TCP 连接的状态机流转过程吗?
一、连接建立(三次握手)
假设客户端主动发起连接,服务器被动监听。
步骤 客户端状态变化 服务端状态变化 初始 CLOSEDLISTEN(监听端口)1. 客户端发送 SYN SYN_SENT– 2. 服务端收到 SYN,回复 SYN+ACK – SYN_RCVD3. 客户端收到 SYN+ACK,回复 ACK ESTABLISHED– 4. 服务端收到 ACK – ESTABLISHED状态说明:
LISTEN:服务器等待连接请求。SYN_SENT:客户端已发送 SYN,等待服务端确认。SYN_RCVD:服务端收到 SYN,已发送 SYN+ACK,等待客户端的 ACK。ESTABLISHED:连接建立成功,可以传输数据。
二、连接释放(四次挥手)
假设客户端主动关闭,服务端被动关闭。
步骤 主动关闭方(客户端) 被动关闭方(服务端) 初始 ESTABLISHEDESTABLISHED1. 主动方发送 FIN FIN_WAIT_1– 2. 被动方收到 FIN,回复 ACK – CLOSE_WAIT3. 主动方收到 ACK FIN_WAIT_2– 4. 被动方发送 FIN – LAST_ACK5. 主动方收到 FIN,回复 ACK TIME_WAIT– 6. 被动方收到 ACK – CLOSED7. 主动方等待 2MSL 后关闭 CLOSED– 状态说明:
FIN_WAIT_1:主动方已发送 FIN,等待对方 ACK。CLOSE_WAIT:被动方收到 FIN,等待应用程序关闭连接。FIN_WAIT_2:主动方收到 ACK,等待对方发送 FIN。LAST_ACK:被动方已发送 FIN,等待对方 ACK。TIME_WAIT:主动方收到 FIN 并回复 ACK,等待 2MSL(Maximum Segment Lifetime,通常 2 分钟)确保最后的 ACK 能被对方收到,并让旧报文在网络中消失。CLOSED:完全关闭。
-
进程间通信方式有哪些?共享内存的实现原理是什么?
-
C++ STL 容器在插入/删除后,迭代器失效的情况?举例说明。
-
C++11 之后的智能指针有哪些?使用场景?
shared_ptr多线程修改需要加锁吗?为什么? -
算法设计题:100 亿个 32 位整数,内存限制 256MB,如何找到中位数?
-
设计题:管理 1000 万个定时任务,支持 add、超时回调、cancel 操作。请说出关键设计思路。
-
手撕
-
你对岗位有什么问题吗?(工作内容、实习生评估标准、实习时间等)
查看18道真题和解析