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 辽宁

相关推荐

最近小韩辅导的几位同学都有一样的疑问 为什么自己有多段中大厂实习 但是约面屈指可数 甚至连中小厂都没有 抛开学历因素 简历的问题首当其冲目前很多大厂的测开岗位都是带有欺骗性和迷惑性的 表面jd和面试中反问的介绍告诉你业务是开发xxx或者偏后端 其实进去之后就是做业务功能测试 可能在你实习四到六个月之后会安排相关提效开发的专项 但是大部分实习生可能因为个人学校家庭种种因素没办法实习那么长时间的 大部分工作都是业务测试导致简历没办法编写 这个时候就需要将纯测试简历往测开方向包装为什么要包装呢 因为大多数大厂是没有测试岗的 基本都是测开 测开在手工测试之外是需要代码能力的 以至于在面试的时候时常会去考察面试学生的sql和算法 统称为代码能力 而普通的测试岗位是没有这个环节的 最多问问你对这道算法的思路 所以测开也意在强调开发这边的能力是面试学生必须具备的条件 如果拿纯测试的实习经历或者技术栈去投递简历很有可能被刷掉 没有太多的面试机会 如果实习经历里有开有测 技术栈里既有测试相关的技术也有开发相关的中间件 那约面的概率就会相对提升 所以在实习阶段或者正在找实习的阶段一定要对简历进行一个修改和包装 提升自己的约面率最后 正在找实习的27 28同学欢迎私信我测开/测试相关的问题 也同时欢迎秋招面试寥寥无几以及还未上岸的同学找我一起交流 小韩祝大家实习和秋招面试多多
应届生简历当中,HR最关...
点赞 评论 收藏
分享
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
38
分享

创作者周榜

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