秋招总结(C++方向,腾讯、百度、华为、滴滴、搜狐)
写在前面的话:
今天收到了腾讯的签约邀请,这意味着我的秋招之旅基本上可以结束了。平时经常在牛客上刷题以及看大家分享的面经,受益匪浅,因此趁着还有点小激动,跟大家分享下我的经历。首先来总结一下这次秋招,我投了30家公司,以下列出,给来年的学弟学妹们做些参考吧:
阿里、腾讯、百度、京东、微店、唯品会、好未来、迅雷、360、搜狐、完美世界、携程、去哪儿、爱奇艺、网易、网易有道、网易游戏、搜狗、欢聚时代、美团、百度外卖、今日头条、滴滴、深信服、艺龙、科大讯飞、小米、猿题库、乐视、金山。
笔试光荣牺牲的有:阿里、京东、美团、猿题库,可能还有搜狗
面试挂的有:百度
拿到了两家的签约意向书:腾讯,搜狐
华为进了池子,滴滴还在等通知,其他的直接放弃了或者是还没有任何消息
在应届本科生中,我并不是什么大神,身边的大神们早就通过实习转正或者内推拿到了bat的offer,我知道自己和他们的差距,所以在秋招前,我的心情是非常紧张和焦虑的。特别是投了一些内推完全没动静,唯一有动静的网易内推笔试直接GG了,于是就更郁闷了,真的是一度在怀疑人生。
在这些面试过程中,由于我的项目写的比较多(然而大部分都是自己写的小项目),所以大部分面试官都花了很多时间去问项目方面的细节(除了百度),所以一些基础知识感觉问的不是特别多,也可能是本科生的缘故,问的不是特别难、特别偏,基本上看面经的时候都看到过。当然,这跟运气确实有很大的关系,我感觉我遇到的都是非常不错的面试官。另外,本人记忆力不好,有些问题已经忘了。
搜狐一面 50分钟
全程聊项目
印象中问了两个基础问题:
select和epoll的区别
举两个stl内部实现的例子
搜狐二面 10分钟
两个问题:
描述一个印象最深的项目
对个性化推荐的理解
百度一面 50分钟
1. strcpy和memcpy的区别
2. 手写memcpy
3. linux下的malloc和free底层都干了什么事(调用free貌似系统不一定会真正释放内存)
4. 手写一个类(考察类的前置声明)
5. epoll和select的区别
6. map遍历删除(考虑迭代器失效)
7. 手写快排
腾讯一面 90分钟
1. 做题:将近20道,主要是C++,操作系统和计网,都是一些基础知识点。记得的有:
struct内存结构
一些关键字的作用(super是C++的?,没看到过)
执行int main(int argc, char *argv[])时的内存结构
中断
虚拟地址
Nat
Tcp的三次握手和四次握手
访问www.qq.com经历的过程
2. 问一些笔试做错的题
3. 虚函数是怎样实现的。。。
4. 已知有一个struct X,其中包括一个变量a,求a在X中的偏移量(不能声明struct变量)
面试官给的答案:&reinterpret_cast<struct X *>(0)->a
5. 进程和线程的区别
6. 项目相关
腾讯二面 50分钟
1. 主要是项目
2. 进程间的通信方式
3. 如果父类和子类都有自己的虚函数(不是覆盖),内存结构是怎样的(各自都有自己虚函数指针)
4. 手写快排
5. 数独求解算法
腾讯HR面:30分钟
1. 你的一些个人基本情况
2. 总结你的大学四年
3. 你的优点和缺点,附上实例
4. 你的意向岗位和城市
5. 其他公司的面试情况
6. 等等。。。
华为技术面 40分钟
1. 虚函数是怎样实现的。。。
2. 看github代码。。。
3. 实现一个计算器的思路
4. 项目相关
华为综面 30分钟
面试官应该不是HR,像是一个部门的头头,一直在说他们工作的方向,没问我啥,就让我宣传一下华为以后只会招更多的本科生,研究生会招的越来越少
滴滴一面 30分钟
笔试做错的题全都拿来问一遍
问些基础,有两个问题印象很深刻:
epoll和select的区别。。。
虚函数是怎样实现的。。。
项目相关
滴滴二面 40分钟
1. 介绍tcp协议和udp协议
2. stl traits是怎样实现的
3. stl迭代器在哪些情况下会失效
4. ipv4的不足之处(提到了地址数量有限和安全性)
5. DDos攻击
6. 算法:一个链表,每个结点有next指针和向下指针,按照层的顺序打印出来(用队列即可)
滴滴三面 60分钟
1. map是怎么实现的
2. vector是怎么实现的
3. epoll和select的区别。。。
4. 虚函数是怎样实现的。。。
5. 构造函数可以是虚函数吗?析构函数呢
6. 手写字节序转换函数(从小端到大端)
7. 手写memmove函数
8. 项目相关,问的很刁钻,应该是所有面试官中问的最深的,问到最后自己会感到有点慌了,最后他表示把我当成研究生了
滴滴HR面 30分钟
1. 你的个人情况
2. 你父母的一些情况
3.你的未来规划
你的优点和缺点
你的期望薪资
等等。。。
关于项目:
在项目方面,面试官对其中的3个点比较感兴趣
1. 陈硕的muduo网络库,这是我在项目中用到的,已经阅读过了它的源码,所以面试时的相关问题都可以讲的很细很透彻
2. 简单的UDP协议,常见的问题有:项目的实现过程,ARP协议的实现原理,IP的分片和重组
3.
CMM解释器(实现了char、指针、函数、调试等功能),常见的问题有:指针、调试是怎么实现的,语法树、中间代码、内存、临时变量的实现问题
总结:
1. 大部分面试官都会问虚函数是怎么实现的、select和epoll的区别
2.
个人感觉校招前的准备和平时的积累是相辅相成的,面试官看到你简历上写的项目和技能后已经初步对你有了一个评估,之后的问题只是为了证明他对你的判断,根据你的表现进行加分减分。对于这些问题有些确实需要去刻意地准备。
3.
对于一些简单的问题尽量去回答得深入,比如说”虚函数是怎样实现的“,我一般是从单继承、多继承、虚继续三种情况去说明内存的布局。又比如”epoll和select的区别“,除了基本的区别外,还可以说下epoll的LT和ET模式。我遇到的面试官对这些回答都很满意。因此,去准备面经的时候不能只背,一定要去理解。
4. 个人对于学习C++方向的一些想法。除了基本的专业必修课,强烈建议看的书有:C++
Primer(Plus),Effective
C++,深度探索C++对象模型,stl源码剖析,如果涉及到linux和网络方面(最好去掌握),需要看的书:APUE,UNP,Tcp/Ip详解(卷1)。这些书不一定所有的章节都要看,但是重点不能看一遍就不管了,一定要熟练掌握。以外,一定要刷剑指offer,刷到你一看题目就能想到思路能写代码为止,如果有时间还可以去刷leetcode。