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

相关推荐

04-06 17:04
门头沟学院 Java
想起来还是比较梦幻,以为二面挂了所以豁出去打电话问hr,被告知过了并且约3面,在4.2晚上今天有空来整理一下面经1.自我介绍2.自己的项目商品秒杀系统简单问了下,怎么保证不超卖的。高并发类的项目,如何保障系统服务提供能力不宕机,最重要的是什么,mysql最大连接数和什么有关3.实习中跟的项目,有变动过部门吗4.实习中的接口迁移,springboot和rpc的区别,为什么要做这个5.八股:进程调度算法都有哪些6.目前日常的cpu调度算法是哪个7.想提升吞吐量,用哪种更好8.优先级调度算法了解吗9.进程通信的管道介绍一下10.管道分类,匿名管道和命名管道的区别11.全双工是什么12.操作系统的中断是什么13.死锁的原因,解决办法14.资源分配图的应用15.udp怎么做到可靠传输16.tcp中的那些优化方式,滑动窗口,拥塞避免等,对性能有什么影响17.发起请求后,如果请求超时,该怎么排查(这里最开始从c端答了,但是没有任何思路,只能从b端答)18.coding(没想到还有coding,已经1小时5分钟了)- 一个软件公司,有几种类型的资源(开发,测试,设计人员等),他会承接多个项目,一个项目包含多个任务,任务需要一种类型的资源以及天数。问给定项目列表和拥有资源数量后,如果能完成所有项目,最少多少天,如果不能,最多完成几个项目?挺夸张的,没见过这种题,还需要自定义数据结构,处理了半天,最后计算的逻辑没写完,叙述了一下分类讨论的思路19.反问,对应届生的要求和看法,对小组业务详细的介绍总体来说强度偏大,面了这么多公司里只有字节是三面强度依然很大的,但是面试官很平淡,没有压力面。后续也是第二天告知通过并问当前拿到of的情况,约了hr面。       
查看22道真题和解析
点赞 评论 收藏
分享
评论
6
30
分享

创作者周榜

更多
牛客网
牛客企业服务