深圳爱培科 - 嵌入式工程师 - 二面
1. TCP的三次握手和四次挥手详细过程,TIME_WAIT状态的作用是什么?如何优化TIME_WAIT过多的问题?
答案:
- 三次握手:SYN → SYN+ACK → ACK,建立连接
- 四次挥手:FIN → ACK → FIN → ACK,关闭连接
- TIME_WAIT作用: 确保最后的ACK能到达对端防止旧连接的数据包干扰新连接持续2MSL(Maximum Segment Lifetime)
- 优化方法: 调整内核参数:net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_tw_recycle=1使用SO_REUSEADDR选项让客户端主动关闭连接使用连接池复用连接
2. epoll的工作原理,与select/poll的区别?ET和LT模式的区别及应用场景?
答案:
- epoll优势: 使用红黑树管理fd,无fd数量限制使用事件驱动,只返回就绪的fd,时间复杂度O(1)使用mmap共享内核和用户空间内存,减少拷贝
- ET vs LT: LT(水平触发):只要有数据就通知,可能重复通知,编程简单ET(边缘触发):只在状态变化时通知一次,需要一次读完,效率更高但编程复杂
- select/poll:每次调用需要拷贝fd集合,遍历所有fd,O(n)复杂度
3. 如何实现一个高性能的TCP服务器?多线程、多进程、IO多路复用各有什么优缺点?
答案:
- 多线程模型: 优点:共享内存,通信方便缺点:线程安全问题,上下文切换开销适用:中等并发(几百连接)
- 多进程模型: 优点:隔离性好,稳定缺点:创建开销大,通信复杂适用:需要隔离的场景
- IO多路复用+线程池: 优点:高并发,资源利用率高缺点:编程复杂适用:高并发场景(万级连接)
- 最佳实践:Reactor模式(主线程epoll监听,工作线程处理业务)
4. 什么是惊群效应?如何避免?SO_REUSEPORT的作用是什么?
答案:
- 惊群效应:多个进程/线程同时监听同一socket,当连接到来时,所有进程被唤醒,但只有一个能accept成功,造成资源浪费
- 避免方法: 使用SO_REUSEPORT(Linux 3.9+),内核负载均衡分发连接使用锁保护accept使用EPOLLEXCLUSIVE标志(Linux 4.5+)主进程accept后分发给工作进程
- SO_REUSEPORT:允许多个socket绑定同一地址端口,内核自动负载均衡
5. 共享内存的实现原理?如何保证共享内存的同步?System V和POSIX共享内存的区别?
答案:
- 实现原理:通过页表映射,将同一物理内存映射到不同进程的虚拟地址空间
- 同步机制: 信号量(sem_wait/sem_post)互斥锁(pthread_mutex_t需设置PTHREAD_PROCESS_SHARED)文件锁(flock/fcntl)
- System V vs POSIX: System V:shmget/shmat/shmdt,使用key标识,需要ipcs/ipcrm管理POSIX:shm_open/mmap,使用文件名标识,更简洁,推荐使用
6. 死锁的四个必要条件?如何检测和避免死锁?在项目中遇到过死锁吗,如何解决的?
答案:
- 四个条件:互斥、占有并等待、不可抢占、循环等待
- 避免方法: 按固定顺序加锁使用trylock避免阻塞设置超时机制使用死锁检测工具(Valgrind的helgrind、ThreadSanitizer)
- 检测方法: 资源分配图检测环使用pstack查看线程堆栈使用gdb attach调试
7. 内存泄漏的原因和检测方法?如何使用Valgrind进行内存调试?
答案:
- 常见原因: malloc后忘记freenew后忘记delete循环引用(智能指针)文件描述符未关闭
- 检测工具: Valgrind:valgrind --leak-check=full ./programAddressSanitizer:编译时加-fsanitize=addressmtrace:glibc提供的内存跟踪
- 预防:使用智能指针、RAII、代码审查
8. 什么是零拷贝技术?sendfile和splice的区别?在什么场景下使用?
答案:
- 零拷贝:减少数据在内核态和用户态之间的拷贝次数,提高性能
- sendfile:直接在内核空间传输文件到socket,适合文件传输(HTTP服务器)
- splice:在两个fd之间移动数据,通过管道实现,更灵活
- 应用场景:文件服务器、代理服务器、大文件传输
9. TCP的滑动窗口机制?拥塞控制算法有哪些?如何调优TCP参数?
答案:
- 滑动窗口:流量控制机制,接收方通告窗口大小,发送方据此控制发送速率
- 拥塞: 慢启动:指数增长拥塞避免:线性增长快速重传:收到3个重复ACK立即重传快速恢复:减半窗口后继续传输
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

网易游戏公司福利 632人发布