二月底在牛客网上看到钉钉内推,想着预面不进系统,去白嫖试试,帖子里说了只需要3轮技术+1轮HR即可拿到offer,虽然流程上我面了4轮技术+1轮HR,但是三面不是很重要,写一篇面经回馈牛客。
一面
2.25 1.5h
自我介绍、简历、项目
介绍一下智能指针(auto_ptr已废弃,unique_ptr独占式/禁止拷贝,shared_ptr引用计数/自动析构/死循环,weak_ptr弱引用解决shared_ptr死循环的问题)
介绍一下STL,基本上按照STL源码剖析来的,空间配置器两级、空闲链表、内存碎片,迭代器粘合剂、隐藏内部实现、萃取,容器vector、list、heap、set、map,仿函数、适配器inserter与基于deque的stack和queue
介绍一下操作系统,我主要说了一下内存管理(交换技术、虚拟内存:页表页面页框,页面置换算法LRU)与死锁(提到了华为比赛,四个产生原因)的理解
CPU调度方式有了解过吗(Round Robin,优先级调度,优先级调度可能会产生饥饿的问题,解决方法是偶尔提升一下优先级,还有一些基于优先级的变种调度方法)
进程间通信(管道、信号、信号量、共享内存、消息队列、套接字,还多说了一下最好的是套接字,因为可以跨主机,在管道那里还提到pipe函数中,fork后父子进程一个关fd[0]一个关fd[1],以及单工的问题)
网络编程,介绍一下epoll(先说了I/O复用的好处,内核注册事件表、LT与ET)
为什么要有time wait(两个原因),time wait过多怎么办(重用与快速回收)
数据库MySQL的索引是什么,简单介绍一下(B+树,减少磁盘IO,数据存在叶子节点,叶子节点有顺序的指针,可供范围循环)
MySQL的主键索引和副键索引(我回答只知道主键是唯一的,没具体了解过)
你了解哪些开源产品(我说了阿里的Dubbo,分布式的RPC框架,说了一下RPC的概念)
服务器怎么负载均衡(我说服务器集群,类似线程池那样,一个负责接收连接,具体业务交给其他服务器)
HTTP1和2的区别(没怎么答上来,但我还是说了一下我的推测,更安全的SSL、缓存更好、状态码更多、交互更加丰富)
网页编辑器白板手撕代码:合并k个有序链表(leetcode原题,但当时没做过)
拿到题后我说了我的想法,可以转化为两个有序链表的合并,这样合并k-1次两个链表即可,但面试官表示效率不理想
然后我就想到了刚才的做***重复比较,于是说了个更快的想法:依次比较k个链表头部,把其中的最小值加到输出链表后面,这个得到最小值的链表的cur指针后移一位
写完后在面试官提示下想起了用最小堆改善最小值的操作
总结:总体而言很轻松,很多题目都是开放的,我可以尽情吹我知道的所有知识:)
二面
3.11 1h
介绍项目
看我比赛用Python写的,问我为什么Python比C++慢,我回答说一个是静态编译语言,一个是解释型脚本语言,C++对内存控制更加贴近底层blabla,Python和C++各有什么优势(Python脚本,快速搭建原型,追求性能再用C++重写)
const常量与宏定义常量的区别
C++多线程了解吗,要注意什么,有什么锁,问到读写锁,我说C++里面好像没有读写锁,他说是操作系统里的读写锁
内存泄漏怎么办
shared_ptr重载了=运算符,里面有什么,要注意什么,返回值是什么(这里扣的很细,所幸答出来了)
服务器端有100万个TCP长连接,可能会出现的问题,首先回答说一个连接占用一个socket,socket有最大数量限制,没法支持100万个,然后说一个TCP连接还有发送缓冲区和接收缓冲区,追问大小是多少,我说记不太清了,4196kb,通过套接字选项或内核文件可修改,然后继续回答100万个TCP连接可能会把内存占满。后面还答了CPU不够,可能计算不过来,导致客户端发送请求后久久得不到响应
DDoS是什么
SYN FLOOD怎么处理,我说清洗非法源地址加上服务器端减少重传第二次握手包的次数or快速放弃连接,再问有什么方法可以减少SYN包带来的资源消耗,我说TCP fast open,然后解释了一通,但好像不是他想要的,他愣了一下就跳过了这里
TCP半连接是什么意思(发生在四次挥手的时候,客户端关闭说明没有东西要发送了,服务器端仍然可以发送),三次握手的时候有半连接吗(没有,因为只有双方established才能通信)
slow start是什么,为啥要slow start(不知道网络是怎么样的,所以要用小包探测,如果直接发大包,那会给加剧拥塞)
看过什么书
有看过什么开源产品/项目的代码吗,如redis、memcached、libevent、levelDB,我说大公司开源产品的源码没深究过,最熟悉的源码可能是STL吧,按照书本内容按图索骥
设计模式知道什么,单例模式怎么实现(双检锁版本or局部静态对象版本),双检锁为何会失效有深究吗(我说在stackoverflow上看到的,但原因是由于操作系统平台引起的,没深究)
现在其他公司or部门面试情况怎么样了
你觉得你自己最大的缺点是什么
遇到最难的技术问题是什么,怎么解决的
如果重来华为比赛,你觉得有什么可以改进的(用C++重写,用冠军队伍的二分发车法)
问我有什么问题,我问了下IM的写扩散在大群的里的问题,这是个我提前准备好的针对问题,C++在钉钉中主要做IM,所以提前了解了IM的一些知识
总结:总体问的不难,很多问题我正好有复习到,所以发挥还不错
三面
3.26 睡午觉时的突袭电话面试,23min
我是3.20第一批笔试的,两道题只a了ban'd,但考虑到题目偏难,应该可以过,3.26上午看到官网状态从简历筛选中变为面试中,于是在钉钉上问了下hr,她说会安排的,没想到在下午午睡的时候就来电话了。。。
介绍最有收获的项目
饥饿,如何解决,多级反馈队列
悲观锁和乐观锁,扯了下乐观锁的实现(版本号和CAS),原子操作啥的,乐观锁的写时检查会不会有问题
一个进程对全局数据修改,另外一个进程看得到吗,扯了一些寄存器、内存地址、volatile啥的
进程与线程的区别
malloc和mmap的区别,映射区是什么(强调了一下是C语言的内存模型)
解释事务的ACID
MySQL的四种一致性(没答上来
一条MySQL语句执行过程(没答上来
总结:本来以为第三面是交叉面的,可能是为了完成总共五面的流程,***来一次简短的面试,我可以感觉对方没有想多花时间面试的欲望,他说结束的时候,我愣住了,问就完了吗,对方说是的,前面已经有两轮了
四面(交叉面)
3.27 14:08-15:03
为什么这个时间要记这么清楚,是因为我在3.27中午接到了心心念念的腾讯HR面试邀约3.27 15:00,所以想着小憩一会再迎接HR面试的,在睡梦中突然来了个杭州电话,钉钉四面(交叉面)来了!一边接电话一边起床,慌慌张张的,首先明确跟面试官说三点之前要结束,他说没问题,于是整个面试他的语速都非常快,问题一个接一个,以下记录可能不太完整
项目
手写代码match,用C语言写,不能用容器
刚才这个手撕的函数,返回值是int*,在栈还是堆,为什么
vector在栈还是堆,能开10万个元素的vector吗,怎么扩容的,怎么开辟内存,vector作为函数返回是在哪,有什么要注意的(这里回答的不好,我最开始回答的是在堆上,但面试官问到vector作为函数返回在哪时,我又把答案改成了栈上,还说会有爆栈的风险。其实vector就是在堆上的,底层由allocator去维护,所以函数退出时,普通定义的vector也可以由allocator自动回收)
gdb调试,开启什么参数,切换线程,切换栈(只知道用bt打印栈),打印参数时被优化了是怎么回事(不知道)
看过啥开源项目(陈硕的muduo网络库)
写完代码后,有什么优化手段(我以为是在写代码时注意优化,他说不是的,我回答不会了)
全局变量可不可以在头文件中定义,为什么不行(应该是不行的,但是原因我不知道,我扯了一会extern,然后说不知道,正确答案见能不能在头文件中定义全局变量?)
topk问题,基于partition的快速选择算法的时间复杂度为什么是O(n)而不是快排的O(nlogn)(不是分治而是减治,等比数列求和可以知道是O(2n),省略系数就是O(n)了
数组中所有数都是成对的,只有一个数落单了,找出它(异或,只需O(n)时间复杂度)
Q:看来你有所准备啊(指的是两个算法题)
A:啊没有没有(一顿傻笑)
Q:你觉得你的优点是什么,你觉得这次面试你发挥得怎么样
A:巴拉巴拉,发挥得不是很好
Q:你认为你的代码能力在班级排第几
A:班级50来个人,我觉得能在前五名吧
Q:但我感觉你的手撕代码不像是前五名的水平
A:可能是因为有点紧张
Q:你确定你是因为紧张,还是因为能力没那么强?
A:紧张
Q:但我觉得你在vector那里不好
A:不好意思,可能这块知识我不是很了解
Q:你有什么要问我的吗
A:因为我的问题基本上在前三个面试官都问过了,所以没有其他问题了
Q:好的,那就这样,谢谢,拜拜
总结:代码能力排前五名我是吹的,还真不一定,交叉面压力也是有的,有些知识点不是很清楚,还需要再加强
HR面
3.28 1h
项目
成绩
英语好吗,真的好吗
家庭情况怎么样
分享一下最初不擅长,但是迎难而上的事情
你到底想成为什么样的人,具体画像
你喜欢什么体育锻炼
目前为止,坚持得最久一件事情是什么
参加什么健身项目
健身的难点和阻碍是什么,坚持很难吗
最印象深刻的收到批评的事
作为组织者完成的团队任务,分享一下
比赛取得成绩最关键的因素是什么
所在行业的动态,以及竞争对手的动态(钉钉、企业、飞书啥的)
过去两年,遇到最棘手的问题
复盘项目,有什么改进空间
团队协作有分歧、最后达成一致,分享一下
同学对我的印象,有什么负面的吗
你通过什么途径来学习技术
有在开源社区发表过什么吗
有论文吗
现在最佩服的人是谁
全部评论
(33) 回帖