阿里巴巴C++开发实习面经(已拿offer)

二月底在牛客网上看到钉钉内推,想着预面不进系统,去白嫖试试,帖子里说了只需要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

项目

成绩

英语好吗,真的好吗

家庭情况怎么样

分享一下最初不擅长,但是迎难而上的事情

你到底想成为什么样的人,具体画像

你喜欢什么体育锻炼

目前为止,坚持得最久一件事情是什么

参加什么健身项目

健身的难点和阻碍是什么,坚持很难吗

最印象深刻的收到批评的事

作为组织者完成的团队任务,分享一下

比赛取得成绩最关键的因素是什么

所在行业的动态,以及竞争对手的动态(钉钉、企业、飞书啥的)

过去两年,遇到最棘手的问题

复盘项目,有什么改进空间

团队协作有分歧、最后达成一致,分享一下

同学对我的印象,有什么负面的吗

你通过什么途径来学习技术

有在开源社区发表过什么吗

有论文吗

现在最佩服的人是谁

总结:长达一个小时的开放性问题,很难顶,但我发挥的不错,说话条理清晰


#阿里巴巴2021暑期实习##阿里巴巴##实习##C++工程师##面经#
全部评论
真巨佬
6 回复 分享
发布于 2020-04-09 15:41
&陈硕建议封为中国c++培训第一人😂
2 回复 分享
发布于 2020-04-09 22:27
太谦虚了,明明代码能力前3,我作证!
1 回复 分享
发布于 2020-04-09 15:54
lz太强了,感觉好多答不上来,本科还是研究生啊?本科就是大神了啊
1 回复 分享
发布于 2020-04-09 23:10
&感觉在练一年,我也有希望。。。
1 回复 分享
发布于 2020-04-10 08:04
十分厉害!想请教一下,上面涉及那么多知识,平时都是用过的吗?如果平时完全没接触过这些东西应该怎么准备呢?
1 回复 分享
发布于 2020-04-11 15:54
太强了 看了你的面经我发现要好好学习啊……不会的好多,会的东西还了解不深入……
1 回复 分享
发布于 2020-04-21 21:03
点赞 回复 分享
发布于 2020-04-09 15:42
大佬太强了,能否介绍一下你看的相关书籍,mysql和操作系统以及C++方面的
点赞 回复 分享
发布于 2020-04-09 16:51
老哥,什么是交叉面😂
点赞 回复 分享
发布于 2020-04-09 19:59
点赞 回复 分享
发布于 2020-04-09 20:18
这是暑期实习吗?太猛了
点赞 回复 分享
发布于 2020-04-09 20:42
老哥你每次面试隔的时间那么长,心态不蹦吗
点赞 回复 分享
发布于 2020-04-09 20:45
感谢大佬分享🙏🏻
点赞 回复 分享
发布于 2020-04-09 21:20
请问hr面后多久收到offer呢
点赞 回复 分享
发布于 2020-04-09 22:46
楼主hr面之后多久知道的结果呀!
点赞 回复 分享
发布于 2020-04-09 22:46
&项目没难度会不会不好过面试
点赞 回复 分享
发布于 2020-04-10 09:10
楼主是后台开发的吧?
点赞 回复 分享
发布于 2020-04-11 16:31
一般说自己 的优缺点,该咋说会比较
点赞 回复 分享
发布于 2020-04-11 19:45
师兄真优秀!
点赞 回复 分享
发布于 2020-04-11 20:14

相关推荐

点赞 评论 收藏
分享
58 336 评论
分享
牛客网
牛客企业服务