学历:本科陕西某211,非科班;研究生跨考武汉某985,科班。
投递方向:暑期实习,C++/C开发
投递企业: 华为, 阿里, 网易, 腾讯, 字节, 美团。
项目经历和比赛情况: 某国家网络相关比赛 top3,python爬虫项目*2,收尾项目测试工作。
经过一个月的笔试面试,终于收获了2个实习去向。怎么说呢,投递的比较晚,4月10号左右才开始实习的投递,大佬们估计2月份就发车了,3月份就拿下了,4月份就做办公室里愉快加班了。感觉投递的晚也是失去了一些机会和可能性吧,但是结果还是不错的。建议大家(来年实习)如果有把握的话就尽早去投,以战养战比较好。我个人全面开始准备差不多是在年后了,所以错过了第一波(2月),让过了第二波(3月),在最后阶段才上车。
无论是实习还是秋招,大家还是要早准备,早投递。不要想着自己万事具备了,再去冲。很多岗位不等你的,你准备好了再去,别人面你就当刷kpi了。早投递的好处就是可以尽早把握当期的面试官想问的问题,因为自己投递的岗位都是相似的,所以遇到的问题会有一定的重叠,或者说至少方向上可以把握,这样再去抓紧时间补足短板,这就是以战养战。
目前我经历过面试的企业有华为,阿里,腾讯,美团。腾讯和美团可能还有后续面试,华为和阿里流程走完拿下。
经历过笔试的企业有华为、网易、阿里、字节、美团
下面就从刚刚结束的阿里面试讲起,说一说实习面试的感受和不同大厂的侧重点。
笔试基础: 阿里是2道题 1小时, 当时是一道都没AC,一道95%, 一道 < 40%。
自我介绍
爬虫项目介绍一下,怎么做的,用到什么开源模块,功能是什么。
比赛的作品是什么,怎么做的,负责哪一部分,实现什么功能,遇到什么问题,未来可以往哪些方面进行改进。
查找一些数据的方法有哪些。
我说了二分,大顶堆小顶堆,哈希,根据应用场景来说还有位图, 粗糙一些布隆过滤器。||面试官问聊不了解前缀查找,我说我知道有Trie树这样的方法,但是具体不了解。感觉面试官这里是希望深入讨论一下,然后我拉了。
转换到语言的问题上,说一说你知道的C++有啥新特性嘛?
auto,decltype, 智能指针,override,final。这种开放性问题尽量多说,说的时候要尽量全面的讲。
如果要向一个 socket write一下, 然后对端recv一下收到,这之间经历了什么过程。
我从tcp连接建立开始说,说了系统调用,上下文切换,封装包,网络路由传输大概这些。
做题,N叉树遍历,奇数层从右👉左,偶数层从左👈右。不写输入输出,只写函数和数据结构。大概20分钟吧
leetcode差不多原题,之前有做过,队列+栈。
反问环节,介绍部门,面试官人很好,给我介绍了10+分钟的部门情况。
-1. 聊天,面试官(巨佬)人很好,开场先聊了一小会
自我介绍
比赛作品情况介绍,是什么,为什么,怎么做,为什么获奖。根据我们的作品内容,面试官提出了一个实际场景下应用的可行性问题,对问题展开了讨论。2面主要的问题都集中在这里,对项目深入的剖析,各个模块实现细节,讲了讲其中用到的架构含义。
做题(40~4?分钟)
多个有序32位整数集合求交集:
eg: A = {0,1,3,4}, B = {1,4,5}, C = {1,4} 交集 {1,4}
做题的时候拿到题目,我简单想了一下直接说可以用hash表来做,简单介绍了一下思路,面试官认可,然后提示想想怎么用有序。
再想了一小会,说用二分法可以,简单介绍思路,面试官认可,表示可以写代码了。代码写完,面试官认可,说还可以改进一下。
思考改进的做法,和面试官交流,最后说可以利用有序,从缩短二分的区间,然后改代码。脑子瓢了有点小插曲,不过也有惊无险面试官认可。
最后面试官说还可以在改进,问我知不知道间隔着查找(就是先查位置1 然后 2 4 8 16 ...)可以更加简化提高效率。面试官给我简单的讲解了下思路,没让写代码了。
反问聊天,到这部分时已经约70分钟了,面试官又简介了一下部门,人员,实习生培养的一些机制。
个人发展和职业规划。后来从HR姐姐那里才知道面试我的是大boss,所以这个地方也问了写职业规划。
流程很快,上午面完,当天中午HR姐姐就约当天晚上面试,结果我有事情就到了第二天。
HR面试还是比较轻松愉快的,下面是一些问题,但是整个流程并不是一问一答这样进行的,而是在聊天(你和朋友怎么聊就怎么聊)中推进的。
问了个人的情况,学校情况,(另一半情况),以后(两人)的发展打算。
自我介绍。
面对HR的自我介绍,建议和技术面有不同的版本,技术面可以多说一些技术相关的内容。HR面要覆盖广一些,成绩、比赛/项目、日常生活、社交都展现一些比较好。
说一些个人对部门的认识。 HR姐姐也补充了一些部门的介绍。
投了哪些公司,进展怎么样。
为什么现在才投阿里,为什么先投了腾讯和华为,这是投的第几个阿里的部门。
周围人学长学姐来阿里的多不多?
聊一聊你对你投的这些公司的印象和认识。
反问环节。
整体上面试过程都是很充实的,时刻都有问题和思考。在流程上,流程没走的时候很慢,比如我就在笔试和第一个电话邀约之间卡了10天多吧。但是面试流程走起来了,就很快,三次面试5天内搞完。而且offer出结果的速度也可以(可能是实习面试快结束了,所以存量少比较快)。具体的对比后边再写。大家接着看啊!
这一个月中,我还参加了腾讯的两次面试,为什么是两次呢?因为人生中的第一个工作面试给了腾讯,因为临场状态不适应拉了,被放回去了,所以有了第二次面试。下面聊一聊腾讯这两次面试中问到的一些问题吧。
腾讯面试很扎实,太扎实了。
自我介绍
TCP 和 UDP区别
TCP怎么实现可靠传输
为什么3次握手,4次挥手
C++ Map底层怎么实现的
C++ vector底层怎么实现,增删内存怎么变化
数据库服务器宕机怎么办,分布式怎么解决
从上一问转到这里,redis了解吗
消息队列 kafka了解吗,说一说
每秒20000个QQ号登录,怎么找出5分钟内的重复qq号
我说的Hash,他说也是一种实现方法,有没有别的更好的。
2个脑筋急转弯。
反问
第一次面试我发挥的极其拉垮,嘴瓢了很多,好几个题会但是也慌了说不明白, 所以最后都给我整上脑筋急转弯了。但是我心态爆炸了,也没有转明白 T T。然后结束的时候,反问完,面试官直接说把我放回去了,之后可能会有别的部门捞我。。。。然后我就极其意外的等到了他说的其他部门。
自我介绍
比赛相关同之前,是什么,为什么,怎么做的,blabla
爬虫项目,是什么,为什么,怎么做的。URL去重怎么做,你提到了布隆过滤器,可以说一下布隆过滤器原理嘛?
python线程用过吗,知道GIL是什么嘛。
C++虚函数调用过程是怎么样的。
C++新特性说几个呗
你知道右值/右值引用这个东西吗,说一说(新特性我漏了,所以面试官提出这个问题)
指向结构体的指针+1会怎么样(结构体类型的指针加1)。
如果我要构建一个hash数据结构,我应该怎么构建,考虑什么因素。如果满了,除了用STL那种处理方法(我在说构建时采用这种方法),还有什么别的方式吗。
map是怎么实现的,底层怎么实现。
Mysql调优的话怎么看语句执行过程(调优的依据)-> explain
Mysql索引怎么实现的
最左匹配了解吗
这个我在 《MySQL技术内幕innodb》中看到过,当时印象有点不深刻,想的是对的,但是怂了没说这个投降了。现在想起了之所以会有这个问题,大概是我上边没说联合索引,然后面试官就引申了这个问题出来。
如果Mysql对设置了索引的列进行查询,但是explain出来发现并没有使用这个索引,可能的原因是什么?
我说的可能where a = 1这样的查询方式,在内部就直接通过自适应hash走了。面试官肯定了一下,也没有说别的。 现在想想,这个问题可能也和联合索引有关系,联合索引也可能由于查询的顺序或者条件判定不同,mysql就没有用建立的索引。
DDos的原理及防御手段
输入url到浏览器中,从输入到显示经过了什么过程。
我说的缓存->DNS缓存->DNS->IP->GET发送出去->服务器响应->浏览器渲染。但是面试官表示少点什么,于是就有了下边问题
上面过程中,IP层的流程呢
路由表 ARP 之类的
协程是啥,有用过嘛。
python yield相关
这次面试个人觉得也就是在数据库索引的地方忽视了联合索引,然后最左匹配不太扎实,别的回答的还好。不过腾讯面试这太扎实了,其他公司都没有这么扎实的提问。而且。。腾讯我还没有笔试。。电话面也没有笔试,这也很神奇。。。
目前还有下一面,流程还没结束,之后会有更新。
美团同样投的C++后台开发的岗位。美团的两次面试和腾讯的第二次面试挤到了一天,给我人整麻了从早上面到晚上。
-1. 先上来面试官介绍了部门的情况,在做的工作,未来的方向。
下面的内容是对着我的简历从上问到下。
比赛的情况,是什么,为什么,怎么做。引申出下面这些问题:
1.1 用udp编程和TCP编程有什么区别
1.2 DDos攻击怎么回事
1.3 UDP是怎么从传输层封装到链路层的,写一下常用的头部
1.4 比赛作品的细节问题
1.5 用TCP原语,实现一个C/S架构的生产者消费者模型。
我有问是用互斥信号量这样的东西吗,他说都可以,然后我就是用epoll复用这样去写的一个简单的收发,没往传统OS关于生产者消费者的实现上引,面试官也认可我的写法。
1.5 一些关于项目的其他问题(忘记了)
1.6 在Linux中有用过一些http的服务器嘛
1.7 如果我有一个IP协议,然后我没有定义链路层协议,那么计算机之间怎么进行交互。
我简历中有涉及5G的部分,然后面试官又问对5G安全的了解
现在5G与4G的区别,为什么没有大规模应用。
简历中有用到爬虫的项目,说一下实现,是什么,为什么,怎么做。
4.1 有没有实现步进
4.2 出现循环连接怎么办 hash 布隆过滤器
4.3 由上边的爬虫引出问题,网页看成链表,如何确定一个链表有环
我回答,双指针可以,简述了一下做法,也没让写。然后我又多嘴问了一句,要找到这个成环节点吗,然后面试官说找到最好。。。。然后我就开始推公式了。这个题之前leetcode上做过,hash表可以,推公式更简单,但是想到面试官说链表可能有无穷多个,然后觉得hash表有点拉垮,就推公式,然后推拉垮了(太奇怪了,第一遍leetcode做推出来了)。面试官也没说啥(毕竟后面这个找节点是我提的。。。),说判断有环这个问题最初就是爬虫引申出来的。
Mysql简历上说了解,在Linux中用C++操作过嘛?
反问。
面试官人蛮好,会引导,有互动。。。不过提的问题都很硬核和开放。算是面过的几家公司里最不好把握的了。
华为的话我之前有写过,就不赘述了,偷偷放个链接,感兴趣的同学可以去看一看。
https://leetcode.cn/circle/discuss/zjzf3k/
对于面过的这4家企业中,不同企业的侧重点是完全不一样的。
阿里
对于阿里来说,据我个人的感受以及实验室小伙伴们的感受,可以下结论为阿里十分极其重视个人简历中出彩的项目和比赛,并会根据其中的内容进行深挖。具体来说,他考察的不仅是技术层面的东西,更有一些设计的思想,调优的思想在里面。也就是说阿里很重视你的实践能力,对于基础知识考察并不是最重点的地方。
所以准备的时候一定要仔细想一想,自己为什么要做这个东西,自己做这个东西经历的过程是怎样的,遇到了什么问题,怎么解决的,有哪些技术难点,怎么进行团队合作的,为什么能拿奖,潜在的优化方向,和现实中结合一下可以吗,有什么场景限制? 上面每个问题都是我所经历的,所以大家去投也要提前有过思考。有的问题我没有答得很好,因为过分重视基础知识了。
腾讯
腾讯目前还没有走完,但是就经历过的情况,腾讯面试是最扎实的面试了。你所学的,背的面经可以充分展示用武之地。像腾讯和字节都是很重视这种基础知识的考察,所以在准备的时候,要充分收集信息,去学习重点基础知识。尽量做到思维敏捷,对答入流,自信一些。具体来说,OS、计算机网络、常用的大数据查找、去重算法、语言的特性要特别熟悉、掌握一个数据库的内容、掌握缓存中间件redis内容。其他的像消息队列分布式系统都是有可能(低概率)考到的东西,有更好,没有的话最好了解了解。
通过上面放出的面试收到的提问,可以发现一般来说一个岗位,重点问题就那么多,所以集中力量先搞定常见的问题。比如说我搞服务端,我就要对TCP/UDP弄得门清, 我会C++,我就要对面向对象,指针引用这些东西很熟悉。所以大家在准备和复习的时候,先重点击破,再进行慢慢的补充。不要广撒网,广撒网会分散注意力,会影响对重点知识的记忆。
华为
最开始先走完了华为的流程,觉得华为真棒。结果养鱼了,之前还是年轻。不过华为的话整体面试难度倒是不高,有一种很轻松的感觉,问项目也不深入,问基础知识也比较简单。但是华为和字节都很重视算法题目的解答,字节一般是错了就拉了,华为也差不多。但是华为比较轻松,考察的广度和深度低于腾讯。 就是华为的最后流程很慢很慢很慢,心急的小伙伴可以斟酌一下。
美团
美团是这4个公司里,面试最最最硬核的了,他除了要求像阿里一样对项目的掌握,他还会针对你项目中涉及的技术进行很开放很开放的外延,会提出一些实际工作中的问题问你是否可以进行一个结合。比如说虚拟一个场景,将你的项目中一些技术带入,进行思考。或者说对于一些基础知识,他会进行虚拟场景的模拟让你进行思考,提出解答。所以再日常学习,背面经的过程中,不要只背,还要理解,然后适度的进行延申与思考。对于技术的背景也要有一定的了解。这样在应对开放性问题的时候,可以有思考的方向。
刚经历过一天三面,面均80分钟,我已经麻了。上面写的可能很多废话,如果有一两点能帮到大家,给大家一些感悟,那么我还是很欣喜的。
最后做个个人吐槽总结吧
作为一个人生头一次找工作、找实习的跨考小菜鸡,这段时间的准备感觉强度其实蛮高的,仅次于考研那年了。从3月份回学校,就开始了看书,刷题,背面经,针对面经中的问题找博客和书籍补足短板的循环往复,每天过的还是非常充实。中间也经历过了一些难受痛苦的时刻,比如人生第一回面试结果是腾讯打的电话,全程紧张懵逼,最后拉了,面试官问无可问都开始问脑筋急转弯了,我觉得很难过;还有字节2次笔试都拉了,连面试机会都没有,当时挺自我怀疑的,觉得200多道题刷给西北风了;还有一些玄幻时刻,网易笔试2/4? 2.5/5?,结果没人通知面试,网易要求这么高吗?面试刷我也行啊,机会都不给也是耐人寻味。
对于学习,这段时间有的技术博客可能看了有7-8遍,现在时常还看一看;自己收集的好几百页面经有的都看了3遍了,每到没把握的时候也会抽出一点时间刷一刷。 我以为考研那年是我努力的巅峰,现在觉得也是有些天真了,卷是无处不在的,总会有无形的手推着你不断的前进,卷都成了内在推动力了,化身成对技术和知识的渴望了。回头看一看过去两个多月,人麻了,但是也变强了,综合起来就是强麻了。hhh
最后的最后,来电鸡汤
秋招对大家的要求更高,考察的问题更深,面试时间更长,可能连面试流程都从实习的2+1,3+1。变成了秋招的3+1,4+1,5+1。但是还有时间可以准备,还有时间可以丰富自己,希望大家一起进步。没有什么卷不卷的,既然选择了计算机这个行业,不断地学习就是必不可少的,心态要放轻松。当每拿到一个题目都可以AC,当每次面试官的问题都可以被你轻而易举解答,当你学技术的脚步越来越快,你就会觉得之前的卷和累都有成果,都很欣慰。希望大家可以坚持下去,不管起点怎么样(我都是考研跨考),不管时间有多少,合理规划自己的复习,遇到挫折不气馁,取得阶段性成果小骄傲,在接下来的秋招或者来年的春招中拿到自己想要的offer,迈出职业规划的第一步。~~