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

相关推荐

自我介绍1、说说ARP协议(已知IP找MAC,但是我给说反了QAQ,面试官疯狂暗示但是我还是记混了)2、说说TCP和UDP的区别(我回答完面试官说还有没有要补充的,我把报文分组说了才进到下一环节)3、TCP三次握手四次挥手4、四次挥手中fin包丢了怎么办?(超时重传),超时时间一般是多少?(我不记得了)5、TCP是怎么保证可靠传输的?6、说说TCP中的滑动窗口,为什么要有滑动窗口,窗口什么时候滑,滑的条件是什么,发送端和接收端的窗口大小一样吗?7、ping www.baidu.com的时候发生了什么?8、我们要ping一个域名,通过DNS协议找到了这个域名的ip地址。后来这个域名ip地址变了,我们ping原来的ip地址ping不通,要手动修改DNS记录,请问DNS记录文件存在哪里,怎么手动修改?(我不知道)9、我们ping一个服务器,能正常接收到对面回应的ping包,但是我们这却显示这个ping包超时了。这种情况问题一般出在哪里,怎么排查,怎么解决?(太难了乱七八糟说了一堆,面试官看起来没有得到满意的答案)10、说说智能指针11、手撕单例模式12、如何在一个服务器集群上实现单例?(我回答用一个哨兵服务器,单例资源存放在这个哨兵上。其他服务器要用单例对象的时候向这个哨兵请求,由哨兵服务器来保证集群中只有一个服务器能持有这个单例资源,通过加锁机制来让资源对象只会分配给一个请求)(我感觉思路没问题,但可能表达上有些问题,面试官追问了一下怎么加锁,然后就没了)给我问麻了#字节跳动##字节跳动暑期实习#
查看12道真题和解析
点赞 评论 收藏
分享
评论
5
29
分享

创作者周榜

更多
牛客网
牛客企业服务