深圳爱培科 - 嵌入式工程师 - 二面

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编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论
接好运
点赞 回复 分享
发布于 今天 12:08 北京

相关推荐

bg双二,非科班,无论文竞赛,小厂实习一段。秋招开始后,从去年8月开始一直断断续续投到现在,不过最近明显没什么HC,大概大家都忙着过年吧。期间面过大大小小的厂几十个了,现在已经能通过面试官的几个问题,大致了解到公司靠不靠谱。有些面试官上来就问“这个你做过吗?那个你做过吗?你对我们公司这个行业怎么看?”,关于具体的技术细节,几乎不会问,你讲了他也是走神——纯草台班子,进去没人带着你干活,你大概率要独自面对一个只会提需求,不能帮你解决问题的老登。有些面试官会从项目入手,等你介绍完后,问你的的业务痛点(或解决的问题、遇到的困难),问你项目的大致结构,问你每个模块的技术细节,问你“如果不考虑资源限制,你想怎么完善这个项目”——大厂基本都有这个流程,这种公司适合有技术追求、愿意卷的同学去——当然,最主要的问题是,这种公司不是很容易进。有些面试官,也问点项目,也问点技术,也问点人际交往、与领导的相处等问题,什么都问,什么都问的不太多——这种公司比较咸鱼,我指的是业务上,可能没有什么很拿的出手的产品,混混日子应该还可以,但如果想从这个公司跳出去,可能不太被认可。(没有说这种公司一定不加班的意思)目前在实习,但是感觉留下可能比较困难,也签了保底的,但是还是想再冲一把。那就投呗,现在心态已经从有事没事就拿起ssob看有没有人回复,转变成每天抽一点时间一顿打招呼发出去,再集中时间发送简历,主打一个命里有时终须有,命里无时莫强求。虽然朋友们回家的回家,旅行的旅行,而我为了一份更好的工作,还在一边实习一边给老登做事,但也觉得挺充实的,也挺好的,至少以后想起这段时间,不会觉得后悔吧。祝大家新年快乐。
厨子代码仔:找实习的时候面几家就能摸清楚门道了,好的岗位和公司都是从简历开始问,从项目的整体和具体负责的内容到细节,层层递进,会让面试者感觉不慌不忙。会有不问简历,上来就问模型细节,训练系列,让手撕公式;还有一直问他自己项目细节,问你怎么能解决掉某某痛点的。以上两类都是本人面实习过程中,遇到的典型草台班子面试具象化,面试可以自信一些,这是一场双向选择的过程,不要降低自己身份,不会就实话实说,但也可以讲讲自己的思路,不磕巴、语速不要太快,有礼貌,简历上的所有东西要能游刃有余(本人也只是27届在实习的过程中,这只是自己面试的感受,不对轻喷✋
春节前,你还在投简历吗?
点赞 评论 收藏
分享
昨天 19:12
门头沟学院 Java
先说说自己的情况,家里帮不上忙,本科很一般,硕士是211、期间也没有太知名的实习,基本都给导师打杂了。因为知道背景一般所以一直在网上刷八股,算法题,目前拿到了几个offer。纠结了一周多,现在决定接人行金科公司的offer了,不想再拖了。目前自己拿到的offer,2个互联网的,2个国企的,其中一个是成方金科,人民银行的软开中心,还有一个不是太好的公司。互联网的一个业务还行,薪资也还行,但吐槽内部管理的太多了。另一个薪资稍微低一些,聊下来感觉强度比较大,综合比较觉得性价比不高。成方金科其实一直很纠结,小红书上看到有说加班多的,有说去年没发年终奖的,但是整体面试体验非常好,面试官都挺和善的,HR也是有问必答,感觉比较实在,和我没去的那家国企简直一个天上一个地上。而且薪资真的是我知道的国央企里最高的了,问了HR也很稳定。所以这两天各种找关系去打听,联系上了一个别的学院的学姐,听她说完了之后自己想开了很多。首先工作确实很稳定,他们部门这几年都没有离职的,公司没有末位淘汰。工作强度看项目,有的大项目强度比较大,可能一周三天加班,不过是极少数。团队中没那么多勾心斗角的,大多数同事都比较nice,但也听说有的团队氛围不是太好。关于年终奖听说是去年有管理要求,所以只发了一部分,今年就正常了(好像是改了发放规则)。另外对新人比较友好,他们这一届安排的导师都还不错,每年还给校招生评优秀新员工。而且她说有比她早几届的,几乎年年晋升,目前职级都T7了(硕士进去统一是4级),整体评价还是看工作表现,评优秀项目、评绩效这些只要表现好,校招生也有份。最后她也劝我别太被网上的消息忽悠了,还是自己想清楚,因为网上的只是很片面的一些消息,工作后她会觉得很多人只是在网上宣泄情绪,而不是负责任的发言(听完后有点对网上消息豁然开朗的感觉)。我最终决定接,也是觉得以自己的背景而言,拿成方金科的offer已经算是不错的选择了。而且确实每个公司都会有人吐槽,互联网吐槽的更多,但是从之前自己面试的感受以及和HR沟通的感受来看,我觉得整体应该还是挺好的(当然他们的薪资也真的是国央企里很好的),真有不好的可能去了别的地也躲不过,还是自己适应吧。哦对了户口,好像比较保密,没打听到太多,据说是有人解决了,有人没解决,HR也说的是部分解决,不承诺解决,随缘吧。
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务