腾讯 后台开发 二面

概述:5月7号面试,腾讯会议,30分钟,问的不多,主要是项目,问了少量八股

面试流程:

1.自我介绍

2.项目来源

3.什么是协程(用户态线程,用户栈,用户态切换)

4.协程和线程相比有什么优势(轻量级、切换快、开销小,用户管理,配合非阻塞IO更好地实现异步并发)

5.更好地实现异步并发是怎么理解的(IO操作时检测到需要等待缓冲时切换协程)

6.线程也可以在等待时切换,协程的优势是什么(用户自己操作)

7.轻量级怎么理解(线程的栈是MB级别的,协程的栈是KB级别的,线程在内核中切换,协程在用户态中切换)

8.怎么设置非阻塞(fctnl)

9.返回EAGAIN是什么意思(缓冲区没准备好)

10.互斥锁怎么实现的(访问锁时如果锁被占用就阻塞,加入阻塞队列,锁被释放时唤醒阻塞队列的中的线程进入就绪队列)

11.http协议怎么解析的(引入了其他项目的解析器)

12.http是什么格式(消息行 消息头 消息体)

13.N:M的协程调度器是什么(N线程处理M协程)

14.如何调度(先来先服务,线程依次去协程队列取任务执行,如果没有任务就执行空闲协程,陷入epoll_wait,有任务时再唤醒空闲线程去执行任务)

15.如果所有线程都不空闲呢(说明已经很大程度的利用上了CPU)

16.其他协程就不调度了吗

  • 要等当前有协程执行完之后再去执行其他的协程,也是当前项目的一大缺陷,调度是非抢占式的
  • 然后讲了下GO中有个sysmon协程可以监视其他协程,当协程运行时间过长的时抢占,但是目前没有搞清楚怎么在用户态实现计时器和抢占式,这是项目后续需要优化的方向(画饼ing)
  • 最后强调协程本身适合IO密集型任务,而不是CPU密集型任务

17.堆排序时间复杂度(O(nlogn),建堆后n次下滤)

18.快速排序时间复杂度(平均O(logn),最坏O(n2))

19.shared_ptr和unique_ptr的区别(共享和独占)

20.shared_ptr的实现(维护计数器的指针,多一个共享指针时计数器+1,释放一个指针时计数器-1)

21.shared_ptr如何避免循环引用问题(weak_ptr,监视shared_ptr,不会改变引用计数,使用前先检测shared_ptr是否存在,存在则使用)

22.tcp协议怎么保证可靠性(丢片后重传)

23.怎么发现丢片(确认号)

24.介绍下实验室项目的背景和难点

25.反问:业务和流程

总结:有点意外,问的其实挺少的,答的比较流畅

#我的实习求职记录##软件开发2024笔面经#
全部评论
随便点就点到你小子
点赞 回复 分享
发布于 05-15 23:11 湖南
这个协程是项目里的吗?我感觉我完全答不上来啊😭
点赞 回复 分享
发布于 06-06 14:55 福建

相关推荐

评论
14
47
分享
牛客网
牛客企业服务