360 C++服务端开发 一面面经

概述:10月12日一面,面试官主要问项目(sylar的webserver,做这个项目的可以参考下),问的比较犀利,30分钟不到结束。后续二面由于时间冲突,拒绝后再无消息,面试时间不能协商且提前一天发面试就很抽象。

面试流程:

1.自我介绍

2.介绍项目

3.采用的是什么调度算法(FIFO,讲线程)

4.协程任务队列是怎么设计的,数据结构是什么(链表)

5.所有线程都访问同一个协程任务队列的并发导致锁的颗粒度比较大,如何解决(可以给每个线程分配单独的协程任务队列)

6.各线程单独的协程任务队列协程数量不均匀怎么办(学习go的思想,偷其他队列的任务,再偷全局队列,每次偷一半)

7.协程是怎么实现的(封装ucontext)

8.用到的信号量和互斥锁是线程的还是协程的(线程)

9.用互斥锁,一个协程拥有资源,占用锁后,切换出去,新协程请求不到资源,陷入锁的阻塞队列,无法切出,怎么办(自旋锁)

10.自旋锁只适合短时间拥有锁,长时间会导致CPU空转,还有其他方法吗(没有想出来,然后问我做项目的时候有没有了解相关内容,说没有就不问了)

  • 上面这些问题本质应该是要设计一个用户态的协程锁,事后想的思路是模仿互斥锁,每个锁拥有一个挂起队列,当请求锁时发现锁被使用,则将协程切出,并保存在挂起队列,当锁被释放时,从挂起队列取出协程放到协程任务队列去等待执行,还存在两个点需要考虑
  • 模拟自旋锁的情况,自旋一段时间如果获取不到锁再加入挂起队列
  • 如果被唤醒时的时间过久则将协程加入到任务队列的队首快速执行

11.定时器怎么实现的(epoll的超时时间,map)

12.hook是怎么实现的,举个网络IO的例子

13.文件IO有用到吗(没有,现在的理解(不一定正确)是正常的文件IO应该是阻塞的,没有等待磁盘这一步,只有等待CPU,除非使用异步IO或者DMA,才能通过协程切换释放CPU)

14.手撕:3个一组反转链表

15.反问:技术栈

#软件开发笔面经##360求职进展汇总#
全部评论
太猛了,佬,那个源码得有6万行,你全都干下来了啊?
1 回复 分享
发布于 2024-12-14 20:38 安徽
佬,你是几号笔试的
点赞 回复 分享
发布于 2024-10-26 15:42 辽宁

相关推荐

昨天 17:32
西安邮电大学 C++
两个项目挑一个介绍一下,遇见了什么困难如何解决你刚才说用 udp 作为广播包为什么udp 和 tcp 区别 为什么不选 tcp我看你给每个线程建立了 tcpsocket 为什么多线程的 io 策略有哪些static 关键字介绍一下对局部变量加 static 有什么作用对函数加呢对全局变量加呢如果全局变量加 static 放在头文件里会有什么问题c++中堆和栈的区别有哪些栈比堆的速度快吗 为什么讲一下 inline智能指针有哪几个shared ptr 如何设计的shared 是线程安全的吗(我真是蠢 没复习到说了个不安全,豆包分的三个情况 修改引用计数安全 访问修改指向对象不安全要加锁 修改同一个实例不安全)让你用代码设计 shared ptr 怎么设计内存泄漏有可能哪些原因假如说现在测试跟你说程序 cpu 占用率高,如何排查是不是内存泄漏内存泄漏如何定位valgrind 介绍一下valgrind 的底层是什么原理(不会,动态二进制插桩)cpu 的三级缓存找工作太坎坷了,我实习是 c+的,看大家都学 java 就八月份开始一直投 java,国庆后想明白了才捡起来的 c+,希望一直努力准备,能有个满意的保底,实在不行就春招😂双非鼠鼠真的很感谢鹅厂给一次面试的机会(原来微信用的就是 qt5)
发面经攒人品
点赞 评论 收藏
分享
10-16 11:02
已编辑
哈尔滨工程大学 C++
part1.自我介绍;part2:项目:将一个你最熟悉的项目(讲了项目A在车企·域控器的OTA)服了,撞枪口上了 ,他刚好是做这一块的;疯狂深挖;(1)你们控制板的主控芯片是哪一个?为什么要以这种方式实现监控?刷写逻辑是什么?A/B区切换逻辑?(2)主控并发获取系统快照写入缓存以后,主线写入日志过程是写入主控日志还是系统日志?如果是写入主控日志,你这种实现在多写入场景下的时间和原有时间帧能同步吗?怎么同步?(3)刚刚你提到了线程池的入口函数的封装和信号量触发,在哪里触发?线程池的实现的源码有看吗?基于什么实现的?(4)你们的开发是基于AutoSar还是自己的编译环境?有没有兼容autosar的服务?怎么实现的?(5)实际项目中有涉及过中断操作吗?(6)像你所说的缓存写入日志的场景如果出现异常或是掉电程序崩溃时你针对缓存数据和日志系统有什么兜底措施吗?怎么实现?回滚的策略是什么?part3:场景八股(1)说一个熟悉的stl容器,底层是基于什么实现的?是线程安全的吗?你在什么场景下会用到这个数据结构?插入和删除的时间的复杂度是多少?查找的时间复杂度呢?(2)将一下lambda表达式有哪些参数可选;各自实现什么功能?你刚刚提到的了返回值自动类型推导,之前还有个mutable参数是什么功能?可以输入什么数据类型?(mutable 默认:值捕获的变量在 lambda 内是 const 的,不能修改。加 mutable:允许修改值捕获的变量副本(不影响外部)。)(3)用过智能指针吗?讲一个项目中用到的场景?有什么优缺点?shared_ptr的引用计数的数据类型是什么?(4)刚刚你提到了熟悉多线程编程,我这里有两个线程,线程A获取锁执行某一模块功能,线程B同理;同时只能由一个线程获取锁,当前内部功能的实现超出预期,线程A不释放锁;如何在线程A功能不受损的情况下让线程B按照原有时序预期获取锁?只用锁操作;(描述有一点点问题,因为最后答案还是设置超时机制强制释放锁);(5)了解UDS服务和CAN通信吗?反问,公司部门业务(车联网应用)工作作息;面试官太专业,语气温和,面试虽然答得依托但是体验狠好;
查看12道真题和解析
点赞 评论 收藏
分享
评论
6
37
分享

创作者周榜

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