快手 C++ 一面面经
概述:10月11日面试,面了50分钟,主要是八股,难绷的是投简历筛了1个月才面上,不过面试官人特别好,不会的题都会让我思考,然后和我详细讲答案,体验不错
面试流程:
1.自我介绍
2.new和malloc的区别
3.全局静态变量的构造和析构时机
4.map容器,在for循环中erase(it)会怎么样,怎么修改(erase返回值就是下一个it)
5.什么时候用多线程/多进程(io多、连接多、切换多用多线程,计算多,连接少、要求安全性用多进程)
6.多线程的优点(切换快、原语丰富,通信方便)
7.HTTP1/2/3的区别
8.DNS用的UDP还是TCP
9.shutdown的效果
10.tcp是全双工吗?(我记错了,http是半双工,tcp是全双工)
11.epoll用的边缘触发还是水平触发?有什么区别
- 说了边缘触发比水平触发效率高,因为epoll_wait唤醒的次数少
- 反问二者至少需要几次read,以为都是一次(面试官解释了一下,但不知道是不是正确的)
- 边缘触发最少要两次,当返回为0且ERRNO不为EAGIN的时候才结束
- 水平触发最少要一次,数据量少的时候效率更高,所以要权衡一下
12.对协程的理解
13.协程用在什么场景(异步并发)
14.协程适合计算量大的任务吗(不适合,会延迟,协程主要是用在等待非CPU资源(其他设备的CPU也算)的情况)
15.用协程并发为什么有优势(没答对,面试官说不需要竞争锁,意思是锁不会到内核层面?)
16.手撕:Z字型层序遍历
17.反问
#软件开发笔面经##快手求职进展汇总#