送你一个励志故事——涵盖20多所互联网公司的校招C++面经

作者:守望者1028
链接:https://www.nowcoder.com/discuss/55353
来源:牛客网

终于有时间来回馈牛客了,接下来将继续我的学习历程(keep learning)。我的秋招故事很长很长,期间无穷多的心酸与苦难,当然也不乏兴奋与惊喜。写在这里,是对自己这段生活的一种怀念,更是想给目前还处于彷徨无助看不到希望的同学一种激励。这不是一篇纯粹的笔经面经,但我自认为这是一个曾经浮沉校招大小笔面试的非科班学子的面试记录与总结心得。当然,我认为会是个励志故事,你若不认同,就只能说我的文字太过拙劣,也许满足不了你,但是只要有同学能够从中汲取到正能量,能够学到某些小窍门,甚至只是一个小问题,我都是开心的。
(前面都是个人经历,不喜者可以直接往下翻,看面经去~)
那么,首先交代背景,我是个非科班的硕士生,水平很有限,真正开始准备工作需要的技能与知识是在一年前,具体专业的话,这么说吧,我是舒克也是贝塔,院系(本4硕17)。因为本科研究生都做了不少硬件的事情,所以软件方面需要加强的东西极其多,复习期间都是白天做项目,晚上学习,凌晨1点之前都不可能回到宿舍。并且在七八月份,找工作的关键时间,被导师要求写SCI文章(撰写加来回修改30+遍),更是直接只能忍着所有的困意与疲倦,奔波在各个面试地点,回来迅速转换思维写文章。如果你现在还是秋招,因为找不到工作很低落,那么我想跟你说,曾经的我,比你要痛苦得多,我只是知道,当我熬过去那段一躺下睡觉就会觉得心脏隐痛,感觉随时猝死的时间,我就会重生,命运不会抛弃愿意自我抗争的人。(说到这里,想到之前大家讨论的导师和学校,我只能说我航这个问题从来都是重灾区,可是吐槽是没有任何作用的,如果你厌恶你的生活,那就付出十倍百倍的努力来改变的下一步的生活吧,那才是我们要关注的重点。)
扯远了,收回来。我本科和研究生都做了很多嵌入式的事情,所以部分offer也与此相关。但是个人在接触硬软件清楚自己的意向是软件开发,所以主要往C++开发方向发展了。求职主要面向的是C++软件开发,后台开发,服务器开发。
学习了大佬的排版,我也照着这个写好了。https://www.nowcoder.com/discuss/29890 (大佬写的比我好好多)

offer情况是:
1) Get offer 或者offer流程中
腾讯(后台开发,offer,薪资各方面都算满意)
网易(C++开发,offer,三面面试官说前面的评价都是优秀,可能sp)
完美世界(服务器开发,sp offer,薪资不低)
趋势科技(软件开发,offer)
寒武纪(软件开发,offer,薪资还可以)
恒润(这一家可能只有北京高校知道一点,我航和我理去的比较多,sp offer)
多益网络(游戏开发,offer)
涂鸦移动(软件开发,offer)
CVTE(软件开发,终面,拒绝)
shopee(后台开发,offer,月薪不错)
远景能源(软件开发,终面,但不知道是不是被我说出的腾讯offer情况吓走了)
美团(后台开发,内推的三面完成,应该是G了)
深鉴科技(C++开发,offer,薪资很高,比普通的sp要高)
招银网络(软件开发,offer)
招商金融(软件开发,终面谈了所有offer情况,CTO坦言给不了我那么高工资)
中兴(软件开发,offer,谈薪后直接拒)
新华三(软件开发,终面谈薪后拒offer)
华为(IT软件开发,终面,面试官加了微信..)
4399(游戏后端开发,offer,谈薪后拒绝)
2)GG的公司
阿里巴巴(三面,挂)
京东(玄学面试,一面挂)
360(面试官很专业,但不容忍错误,挂)
58(后台开发,一面挂,所有面试中体验最差的公司,没有之一,没有之一,没有之一)
商汤科技(笔试好难,应该挂)
小米(笔试后没消息,挂)
携程(玄学笔试,至今没通知,挂)
3)待面试中
头条
4)放弃的公司
放弃面试:百度,滴滴,海康,好未来、蘑菇街(这么晚才接到电话也是醉了)
放弃笔试:类似去哪儿、深信服、TPlink之类
错过新浪网申。

没错,列举这些,就是想说明一点:我是几乎混迹所有互联网大厂笔面试的非科班学生 。此处没有任何别的意思,列举公司名字方便牛油们对于以上某家公司有兴趣或者有问题咨询,可以回复问我。另外,给大家介绍一位大佬@young_for_you,妥妥的大厂offer收割机,百度(sp)、京东(sp),搜狐(sp),腾讯(offer),网易(口头 sp offer),新浪(口头 sp offer),头条(目前正在实习,转正也是妥妥的)。如果大家有问题也可以找他(哈哈,职业坑队友)

本面试主要分成三块内容:
第一部分:知识水平的提升方法与面试技巧,针对非科班或者知识面薄弱的同学,讲解准备校招与校招过程中应该具备的能力与技巧,包括但不限于推荐书单,技能说明,面试技巧等。
第二部分:大体上描述C++研发或者后台开发在笔试面试中高频出现的问题;
第三部分:挑选其中20家公司,描述自己的面试经历,说说不同公司的面试题目与感受(因为面试公司太多,所以我过程中基本上都没有做记录,只能凭着记忆写,但是重要问题都会提及)
1. 提升知识水平的学习建议
1.1 提升硬实力
校招是对面试者的种种考核与展示机会,在没有实力之前去面对,是很无能为力的,结局往往也不会是可喜的。所以首先前提在于提升自己的知识水平,在本身实力不足的前提下,过得的强调技巧,一门心思想走捷径,很可能是会酿下苦果。
所以,最重要的是你要有足够的硬实力。语言基础,操作系统,计算机网络,数据库,设计模式,算法,我认为都应该学习,扩展自身的知识宽度。如果跟我一样是非科班的同学,毫无疑问你要花时间将这些基础都有侧重点的学习一遍或者几遍,这样不至于面试官提出的一些问题你完全不知所谓。不需要什么都懂得很深,但是基础的东西要能够说明白,并且在某些关键问题中尽可能地挖深,研究透彻。假设你C11特性就是了解得特别多,用一个同学的说法就是,C11的知识点早就刻入骨子里了,闭着眼睛都写得出来,那么我相信你在其他保证基础没问题的前提下,一定可以获得一个很不错的offer。
下面我说说基础的学习资料。我认为在有时间的前提下,应该将基础知识都先补全了,保证知识全面的前提下,再做深度研究。而且由于非科班同学对于大部分东西都是第一次接触,本身没有一个特别好的框架或者概念,往往不知道这些知识的内在联系与实际应用场景,不要担心,先安心扩展自己的知识宽度,在慢慢将这些知识融会贯通的时候,自然而然你自己就会有答案,甚至你会在笔试面试或者与同学的交流中得到答案。顿悟的前提一定是大量知识的积累。

读书的建议:
(1)读每一本书都建议一定要读取书的源码,自己敲一遍,相信我,读没读过源码,是否自己能够写出代码差别还是很大的。
(2)强烈建议处于校招或者准备校招的各位,要有一个读书计划,上面不仅要有读每本书的计划时间(10天或者两周),并且记载读完每本书的感受或者问题。如果可能,可以记录读书过程中发现的问题,并且在很多博客上去查找答案。如果一番读书过程,受益匪浅。

C++:
C++ primer 5(不建议C++ primer plus),基础书籍,必读
深度探索C++对象模型 基础书籍,必读
STL源码剖析 STL方面的神书,建议读
Effective C++
More Effective C++ 推荐
侯捷老师的书籍与视频都很推荐,之前有个牛油给出了侯捷老师的视频,我下下来了,但是忘记是哪位同学了。在最后我将我的所有学习资料都打包放在百度云盘上,有喜欢的同学可以下载。

操作系统:
深入理解计算机基础(CSAPP,神书,极度推荐,号称比同等质量的金子更加之前的书,这个评价一点也不为过,必读)
现代操作系统(在读完上一本书后读,讲述操作系统的概念,可以配套网易云盘北大或者清华的操作系统课程视频)
UNIX环境高级编程(APUE,强烈推荐,如果想进腾讯,建议此书列为必读,如果能够理解这本书的内容,网络编程不会是你拿到offer的拦路石)
还有一个是之前一个师兄推荐的,MIT6.828的这门课,要求自己设计出一个简易的操作系统,是一个极好的实践项目(7个lab)。

计算机网络:
计算机网络(谢希仁,基础书籍,必读)
图解TCP/IP(简单明了,花上三四天时间读读这本书,挺有好处的,基础书籍,非必读)
TCP/IP详解(卷一,进阶书籍,必读)
UNIX网络编程(卷一,神书,进阶书籍,强烈推荐,跟APUE一样,腾讯的敲门砖)
图解HTTP(非必读,面试过程中http问的问题一般偏多,可以考虑在http方面详细研究,作为自己的亮点)

数据结构:
网易云课堂浙大的数据结构课程(推荐,0基础学生的必备良药,基础视频,每节课的配套题目必须独立完成)
大话数据结构(推荐,但是个人感觉不如浙大的视频讲解)
算法4(推荐,书籍代码是java语言,不影响理解)
以上三种不建议都详读,建议浙大视频+作业,过程中快速读算法4即可。没有太多时间,可以学习完视频,完成所有课程作业之后直接学习算法。

算法:
剑指offer(准备校招刷一遍,校招过程再刷一遍,哪里不会刷哪里)
程序员代码面试指南(左程云,好书,配套左神的视频使用效果更佳)
Leetcode(后面会给出部分leetcode题目详解的电子版,题目牛客就可以刷,但是不太全,如果你想进阶的话可以刷,我并没有刷,在不能确保自己其他基础水平达到的情况下,不建议贪多只花时间刷算法)

数据库:
数据库概论(基础,快速读,重在了解概念与基础)
Mysql必知必会(基础,快速了解mysql的好书,推荐)
高性能mysql(建议读前面索引和性能的部分即可)
数据库面试问题不会太多,而校招时间有限,所以建议基础先打好,后续再学习更深入的部分。

设计模式:
大话设计模式
设计模式能够在笔/面试中用到的不多(大牛除外),所以可以扩展这方面的基础,对其进行了解即可,重点研究单例模式,工厂模式等常见的设计模式。

Linux:
鸟哥的linux家常菜(基础书籍,必读)
如果有兴趣看linux内核的话,可以看看
深入理解linux内核
Linux内核设计与实现(LKD)
Linux内核完全剖析——基于0.12内核

校招基础准备:
王道程序员面试宝典(好书,将大部分的基础都进行了讲解,基础问题基本上都涉及到了,可以很好的应对面试上的小问题,推荐面试前期或者基础不扎实的同学看一遍,后面有电子版。)

个人学习的电子书或者视频都在:http://pan.baidu.com/s/1nuAX6Ff 密码:ksjb
感兴趣的可以下载。

3.2 提升软实力与笔/面试技巧
笔试很多题目就是面试出的基础题目,语言基础、网络、数据库、linux,这些都是必考的,所以在校招之前和校招过程中,最好保持每天刷一定量的题(50起),注意查漏补缺,重点刷自己的短板(去刷2000题吧~)。但前提是,以上书单或者相似的内容都已经学会,否则很容易在笔/面试中铩羽而归。

提升软实力:
面试是一场个人show,是对自己目前已有知识与项目的一种展示,更是对面试者的全面审查。所以不只是硬实力的比拼,也考虑个人的综合素质,也就是所谓的软实力。我认为软实力这方面主要就是每个人的情商表现了,性格方面的东西是很难取改变的,由此每个人的作风也有所区别。但是在面试过程适当的掩盖自己的锋芒与说话的技巧还是极其重要的。大体可以总结为:
(1)保持自信的姿态,相信自己能够胜任这一份工作,语言有力,连贯并富有力量感
(2)保持谦卑的态度,认可面试官的知识能力,能够坦然接受面试官的所有评价,即使是嘲讽,切忌强烈反驳(双选过程,实在不开心不外乎就不去了)
(3)适当展示自己的价值观与人生观,每个公司都喜欢找契合自己公司文化的人,所以适当展示这方面,会给面试官一种很舒服的柑橘
(4)锻炼自己的反应能力,面试问题是不可控的,面试官会问到什么问题大都是无法预测的,所以保持绝对的热情与饱满的精神状态去面对,即使遇到不懂的问题很多时候也能够凭借本身的实力与灵活的现场反应能力回答上一二,加上面试官的提示,是完全可能回答好的。
(5)专注的注意力,在面试过程中,有时候是会有前后联系的,能判断到面试官擅长或者感兴趣的内容时,可以尽量往哪方面描述,可能会有意想不到的效果。

准备笔试的技巧:
(1) 学习过程中,注意总结笔/面试会可能会问到的问题,重点研究。举个栗子,鸟哥的linux家常菜这本书通俗易懂,看过一遍,估计也就一周。推荐边看边刷题(赞一波牛客的题库),即使刷题耽误了看书时间,也能慢慢让你培养出笔试的感觉,看完了你自然而然就知道这本书哪一块是重点,哪一块过一遍即可,然后再去刷题,看面经里面出现的linux命令的题目(如果分数ok,题目也都会,那么下一本)。
(2) 笔试过程中注重归纳与总结,记录每一类高频问题,可以在牛客上先找别人列出的问题,但是一定要将每个问题研究透彻,随时对其进行补充。
(3) 算法题除了多刷图以外,可以在自己电脑上将自己平时练习的算法题目进行总结,写一些通用的小算法,例如字符串题目、数组题目,dp问题,有些问题经常只是意境变换了,实际算法还是用得上的。
一言以蔽之,多看多练多总结,笔试不能高分也会通过。
另外:如果有线下笔试,都推荐线下笔试,难度会降低。

面试的准备与技巧:
面试是一个考核的现场,在实力之外,是需要技巧来支撑的,能够掌控面试节奏与放任面试节奏绝对是两个感受。。而校招本身就是一场战役,如果大厂岗位逐年减少,而IT学生越来越多,僧多粥少,没有准备的站会输得很惨。
(1)简历问题:互联网简历最重要的就是技能树和项目,其他都是锦上添花的东西。所以写上简历的东西一定要极其熟悉,自己深入项目,考虑面试官会询问什么问题,如果面试官问到你没有考虑到的地方,可以尝试发散思维去想去说,最好不要什么都说,甚至可以说你自己理解的但是其实不太相关的东西,至少要让他知道你是考虑过项目的整体框架,内在联系,存在问题以及改进空间的。另外,在面试几次之后,项目你也介绍过几遍了,面试官可能也提出一些问题,基于这些问题,重新润色简历上的项目描述,并且重新熟悉自己介绍项目的说辞,对面试官可能提出的问题做到心中有数。
简历上的技能,对自己写的每一项做到心中有数,例如,你写上“熟悉TCP/IP协议及其编程”,那么面试官问你建立服务器的socket函数有哪些,分别什么作用,你总不能不会吧?我最开始对数据库不太熟,没有系统复习过,简历上就没写数据库,然后美团面试的时候,一直问JAVA和数据库,我都直说不会/不太熟,面试官没有过分刁难,虽然还是问了很多。
(2)面试的准备
面试之前,前面简历的问题要熟透,嚼烂已知的项目的坑,并在后面面试中慢慢补全。知识技能方面,多看面经,首先将面试岗位的高频面试题都事先熟悉,用面经上面的题目自我考核,判断自己能不能很流利地回答出来。何谓流利地说出来,就是富有条理性的,透彻的,横向纵向结合的描述。并且在看面经的过程,可以扩展的看,每个问题的延伸问题,最后都花时间去琢磨(博客是个好东西,多看)。后面我会给出我知道的C++研发高频题目。
(3)面试过程的技巧
首先如果可以现场面,推荐现场面试,优势在于能够让面试官看到你的精气神,确保面试期间精神饱满,富有交流欲,尤其和面试官保持眼神交流,让他看到你的态度,并且对于每个问题,不管会不会,多问问面试官总是没错的。这个我认为是最重要的,每次面试官问的问题,我一般都是紧盯这面试官说,我是这么考虑的,您看看对不对/我对这一块不是特别熟悉,但我是这么想的,麻烦您指点一下/对于这个问题,我们分成三部分考虑,首先…
有人说面试变成了一站到底,这是很难避免的,面试官为了追求效率,考察你是否具备他们所要的技能,那么语言基础、网络、数据库、算法、linux基础,都必须至少两三个问题,于是他们就一个一个蹦出来。这种时候,你最好要稳住节奏,表现出足够的表现欲,对擅长的问题进行扩展,深挖,让面试官意识到你在某一方面很厉害,促使他去按照你想的方向去了解。聚个栗子,面试官问是否了解linux的IO模型,我一般是这么回答的,“对于这个问题,我们首先要理解同步异步、阻塞非阻塞的概念,balabala,他们之间的区别可以类比为XXX。在理解这些之后,我们将IO模型分为五类,分别是XXX”,讲完这些估计就要五分钟,相比你不咸不谈说,有五种,是XXX,面试官不详细问它们的特点你就不说,是不是差距很大。假设我有点忘记了IO模型的分类,那么前面的铺垫是不是也可以给自己时间去回忆。我经常是在面试期间忘了某个问题的答案,于是一边打打擦边球,一边大脑快速回忆这个问题,很可能在讲着讲着就想起来了。即是你想不起来,也绝对你比支支吾吾说不了几个字强太多了。
(4)面试的心态
前面说到了,精神一定要饱满,尽可能有信心一点。当然,我觉得对于前面几次面试的同学或者手上还没有靠谱offer的同学,紧张无可避免,那么就告诉自己,上次我面到了一面,这次我只要一面过了就好,一点一点目标往上提。
面试中自己的面试尽可能不要太受面试官影响,毕竟有些面试官确实不太负责,在面试期间时不时做一点别的事情,我们要做的就是做到自己的最好,描述清晰而流利,控制语速(我中兴面试的时候自我介绍实在太熟了,说得太快,被面试官提了一下)。
非科班同学面试经常碰到的一个问题就是,你不是这个计算机专业的呀/你的专业跟我们不匹配啊。这个问题很现实也很尖锐,毕竟科班出身的人就那么多,我凭什么要你不要他们,所以你要展示的就是你得计算机技能不比别人差,你的自学能力比普通人要强,或者你做的项目比别人牛逼,或者你比别人更能坚持,语言是很无力的,即使你说了,面试官也不一定就相信,所以在后面的面试拿出实力来表现自己。放在这里是想说,首先你自己心态要摆正,非科班对面试是正buff还是负buff,重点还在面试者自己身上,大公司一般不会卡这方面,更不会因此鄙视你,所以坦然一些,用实力告诉他们我们能行。
(5)面试后的总结与再准备
面试后,最关键是什么?还是总结。很多时候其实面试完毕你就大致知道结果了,至少你知道你能够根据面试官的反馈知道你自己的缺陷在哪里,记录下来。如果可能,每天都用word或者博客进行记录,短暂时间的将重点问题记录在手机备忘录上,然后找时间将这些问题一个一个克服。我个人是将问题都分类,分类总结记录,并且查资料将问题彻底弄明白。在经历三四次这个过程之后,你应该会很赞同这样一句话:面试是提高能力的最好途径。没错,你最初的总结一般都是很片面的,或者不符合面试需求的,但是在实战几次之后,你就会明白哪里才是重点,哪里是次要的,也明白自己的优势或者擅长的地方是哪些。在知道这些之后,面试过程中,就可以尽可能的避重就轻,引导面试官往你擅长的方面去说。还是聚个栗子,腾讯面试的时候,问了我http的状态码,我当时真的完全忘记了,就说这个我记得不太清楚,但是我了解的http是应用层上的XXX,版本有http1.0 1.1 2.0,动作一般有…,为了安全会用https来代替http。这样过渡掉这个问题,引导面试官来到你说的这些问题上(当然前提是你说这些可不能不会,不然就是自己挖坑自己跳了)。
还是回归面试后的心态,面试后就尽量不要过度去考虑这一场面试通过与否,最重要的是总结和准备下一场面试。这里也适用于笔试,校招时候公司太多,每天面试笔试往往都很多,没有太多时间给你感伤或者惊喜,在没有确定秋招结束之前,这里一直都是战场,不能松懈否则你可能就输了下一场。尤其是,如果面试失败了,那种低落情绪几乎避免不了,我们要做的就是尽可能缩短这个低落时间。我一直很看重京东的面试,抱了很大的期望,面试过程中感觉也很不错,但是当天就挂了,当时表示完全理解不了,非常低落,甚至开始怀疑自己的能力。这个时候,就必须和家人朋友聊一聊,放松一下,然后重新开始(有个信念,就是这是千万人都在争的路,输了也正常,但是我们都没有退路,没有任何办法,总结总结重新开始吧)

面试过程,真的不是学习或者工程能力强就能够拿到offer的,自身软实力也极其重要。心态,反应能力,态度,甚至状态都是能否通过一场面试至关重要的因素,这些就要靠我们自己去慢慢摸索与准备。我在拿到一些offer之后,跟同学讨论过,发现挺多人存在一个问题就是:对于很平常的问题,他们表现出不知道应该怎么回答,例如专业面的你在项目过程中最大的难点是什么,怎么克服的;HR面的你怎么评价你的研究生/本科生涯等等。这些问题说白了都是情商,无关技术,但是又很影响面试官对你的看法。这些问题没有标准答案,但是,保持诚恳的态度与真实的描述(当然实现要有所准备)是总是能够拉近和面试官的距离的。

2. C++研发高频笔/面试题目
笔试:
笔试这一块想不到特别好说的,很多时候只是公司筛选人的第一步,分数高低代表意义不大(尤其是大公司,现身说法,我的腾讯笔试真的是呵呵哒),当然笔试是一个门槛,不过后面很可能就不用谈了。我笔试经验也不足,感觉笔试考察最重点的就是算法的熟悉程度,代码能力,我笔试成绩通常不太高,原因是我编程题速度比较慢,往往都做不完。
以C++开放举例,粗略说说笔试一般会考哪些内容:
(1) 语言基础,C++中的定义,指针,模板,多态,重载等(尤其是多态,给定一个程序,基类子类有不同实现,考虑输出结果,这一类的题目面试题也极为高频)
(2) TCP/IP协议及其编程:计算机网络基础,socket编程,其中子网划分,七层协议(例如交换机属于数据链路层一类题目),五层协议,协议名称及其作用,常用端口号,https1.0 1.1特性与区别,三次握手四次挥手(可能出现的服务器攻击),加密(对称,非对称),IO复用等
(3) 操作系统:进程通信方式(linux/windows,每种方式的特点),线程通信(linux/windows),进程与线程区别,页面置换策略(考察置换几次),进/线程状态转换图,进程调度方式,死锁(必要条件,哲学家就餐,银行家,读者写者问题),
(4) 数据库:索引作用,应该/不应该创建索引的列,索引底层实现,sql语法,常见引擎特点,事务特点,隔离级别(引擎默认级别),隔离级别的问题,锁等
(5) Linux方面:IO模型,linux常见命令(grep,awk,sed),文件系统,
(6) 智力题:智力题是大公司笔试面试很喜欢出的题目,重在考察思维能力,也是为了选出潜力更大的人来吧。我没有刷过这类题,如果自我感觉这方面有欠缺的话可以自己在牛客上刷题。
(7) 算法:剑指offer,leetcode,左神的书和视频,任意两个搞定你都没有问题
那么说说面试的硬实力。
面试高频题:
校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我也忘记了,如果您看到有些熟悉,那么可能就是您的,如果您觉得侵权,请告诉我,我撤回。
1语言基础(C++)
(1) 指针和引用的区别
(2) 堆和栈的区别
(3) new和delete是如何实现的,new 与 malloc的异同处
(4) C和C++的区别
(5) C++、Java的联系与区别,包括语言特性、垃圾回收、应用场景等(java的垃圾回收机制)
(6) Struct和class的区别
(7) define 和const的区别(编译阶段、安全性、内存占用等)
(8) 在C++中const和static的用法(定义,用途)
(9) const和static在类中使用的注意事项(定义、初始化和使用)
(10) C++中的const类成员函数(用法和意义)
(11) 计算下面几个类的大小:
class A {};: sizeof(A) = 1;
class A { virtual Fun(){} };: sizeof(A) = 4(32位机器)/8(64位机器);
class A { static int a; };: sizeof(A) = 1;
class A { int a; };: sizeof(A) = 4;
class A { static int a; int b; };: sizeof(A) = 4;
(12) 给一个代码,求输出结果
class A
{
public:
A(int x){}
}
问:A a = 1;是否正确, 如果正确, 那么它调用了哪些函数?
这类题目更常见的是在基类和子类有不同实现方法。(虚函数相关,栗子很多,不多说了)
(13) C++的STL介绍(这个系列也很重要,建议侯捷老师的这方面的书籍与视频),其中包括内存管理allocator,函数,实现机理,多线程实现等
(14) STL源码中的hash表的实现
(15) STL中unordered_map和map的区别
(16) STL中vector的实现
(17) vector使用的注意点及其原因,频繁对vector调用push_back()对性能的影响和原因。
(18) C++中的重载和重写的区别:
(19) C ++内存管理(热门问题)
(20) 介绍面向对象的三大特性,并且举例说明每一个。
(21) 多态的实现(和下个问题一起回答)
(22) C++虚函数相关(虚函数表,虚函数指针),虚函数的实现原理(热门,重要)
(23) 实现编译器处理虚函数表应该如何处理
(24) 析构函数一般写成虚函数的原因
(25) 构造函数为什么一般不定义为虚函数
(26) 构造函数或者析构函数中调用虚函数会怎样
(27) 纯虚函数
(28) 静态绑定和动态绑定的介绍
(29) 引用是否能实现动态绑定,为什么引用可以实现
(30) 深拷贝和浅拷贝的区别(举例说明深拷贝的安全性)
(31) 对象复用的了解,零拷贝的了解
(32) 介绍C++所有的构造函数
(33) 什么情况下会调用拷贝构造函数(三种情况)
(34) 结构体内存对齐方式和为什么要进行内存对齐?
(35) 内存泄露的定义,如何检测与避免?
(36) 手写实现智能指针类(34-37我没遇见过)
(37) 调试程序的方法
(38) 遇到coredump要怎么调试
(39) 内存检查工具的了解
(40) 模板的用法与适用场景
(41) 成员初始化列表的概念,为什么用成员初始化列表会快一些(性能优势)?
(42) 用过C11吗,知道C11新特性吗?(有面试官建议熟悉C11)
(43) C++的调用惯例(简单一点C++函数调用的压栈过程)
(44) C++的四种强制转换
2计算机网络(TCP/IP)
(1) 建立TCP服务器的各个系统调用
(2) 继上一题,说明socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的?
(3) 对路由协议的了解与介绍。内部网关协议IGP包括RIP,OSPF,和外部网关协议EGP和BGP.
(4) 路由协议所使用的算法。
(5) TCP和UDP的区别
(6) TCP和UDP相关的协议与端口号
(7) TCP(UDP,IP)等首部的认识(http请求报文构成)
(8) 网页解析的过程与实现方法
(9) 在浏览器中输入URL后执行的全部过程(如www.baidu.com)
(10) 网络层分片的原因与具体实现
(11) TCP的三次握手与四次挥手的详细介绍(TCP连接建立与断开是热门问题)
(12) TCP握手以及每一次握手客户端和服务器端处于哪个状态(11种状态)
(13) 为什么使用三次握手,两次握手可不可以?
(14) TIME_WAIT的意义(为什么要等于2MSL)
(15) 超时重传机制(不太高频)
(16) TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?
(17) 流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)?
(18) tcp滑动窗口协议
(19) 拥塞控制和流量控制的区别
(20) TCP拥塞控制,算法名字?(极其重要)
(21) http协议与TCP联系
(22) http/1.0和http/1.1的区别
(23) http的请求方法有哪些?get和post的区别。
(24) http的状态码
(25) http和https的区别,由http升级为https需要做哪些操作
(26) https的具体实现,怎么确保安全性
(27) http中浏览器一个URL的流程,这个过程中浏览器做了什么,URL包括哪三个部分?
(28) 一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办?
(29) 对称密码和非对称密码体系
(30) 数字证书的了解(高频)
(31) 客户端为什么信任第三方证书
(32) RSA加密算法,MD5原理(MD5不算加密算法)
(33) 单条记录高并发访问的优化
(34) 介绍一下ping的过程,分别用到了哪些协议
(35) TCP/IP的分片粘包过程
(36) 有没有抓过TCP包,描述一下
(37) 一个ip配置多个域名,靠什么识别?
(38) 服务器攻击(DDos攻击)
3数据库(MySQL)
数据库我自身不是特别熟,面试的时候一般也都坦言了,所以面试官都只是问一些基础题目。
(1) 关系型和非关系型数据库的区别(各自优点)
(2) 常用SQL语句(DDL,DML,DCL,TCL)
(3) 数据库中join的类型与区别(inner join, outer join, cross join, natural join, self join),注意适用场景和sql语句的编写
(4) 数据库的索引类型
(5) 聚集索引和非聚集索引的区别(叶节点存储内容)
(6) 唯一性索引和主码索引的区别
(7) 索引的优缺点,什么时候使用索引,什么时候不能使用索引(重点)
(8) 索引的底层实现(B+树,为何不采用红黑树,B树)
(9) B树和B+树具体实现
(10) 索引最左前缀问题
(11) Mysql的优化(高频,索引优化,性能优化)
(12) 数据库引擎介绍,innodb和myisam的特点与区别
(13) 数据库中事务的ACID(四大特性都要能够举例说明,理解透彻,比如原子性和一致性的关联,隔离性不好会出现的问题)
(14) 数据库隔离性设置不同会出现的问题(脏读、不可重复读、丢失修改、幻读)
(15) 数据库的隔离级别,mysql和Oracle的隔离级别分别是什么
(16) 数据库连接池的作用
(17) Mysql的表空间方式,各自特点
(18) 分布式事务
(19) 数据库的范式
(20) 数据的锁的种类,加锁的方式
(21) 视图的作用与使用方法(如何删除等)
(22) 分库分表,主从复制,读写分离。(我不会,也没碰到过)
(23) 项目中哪里用到了数据库,怎么用的
4Linux基础
Linux这一块如果不太熟,可以直接说,但是因为开发岗位一般都是在Linux平台下的,所以几个基础问题还是要会的。
(1) Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别(超级重要)
(2) 文件系统的理解(EXT4,XFS,BTRFS)
(3) 文件处理grep,awk,sed这三个命令必知必会
(4) IO复用的三种方法(select,poll,epoll)深入理解,包括三者区别,内部原理实现?
(5) Epoll的ET模式和LT模式(ET的非阻塞)
(6) 查询进程占用CPU的命令(注意要了解到used,buf,cache代表意义)
(7) linux的其他常见命令(kill,find,cp等等)
(8) shell脚本用法
(9) 硬连接和软连接的区别
(10) 文件权限怎么看(rwx)
(11) 文件的三种时间(mtime, atime,ctime),分别在什么时候会改变
(12) Linux监控网络带宽的命令,查看特定进程的占用网络资源情况命令
5操作系统
(1) 进程与线程的区别和联系
(2) 一个进程可以创建多少线程,和什么有关
(3) 一个程序从开始运行到结束的完整过程(四个过程)
(4) 进程通信方法(Linux和windows下),线程通信方法(Linux和windows下)
(5) 进程调度方法详细介绍
(6) 页面置换方法详细介绍
(7) 能否实现一个LRU算法
(8) 死锁的必要条件(怎么检测死锁,解决死锁问题)
(9) 哲学家就餐,银行家,读者写者,生产者消费者(怎么加锁解锁,伪代码)
(10) 海量数据的bitmap使用原理
(11) 布隆过滤器原理与优点
(12) 布隆过滤器处理大规模问题时的持久化,包括内存大小受限、磁盘换入换出问题
(13) 同步IO和异步IO
(14) 文件读写使用的系统调用
(15) 线程池的了解、优点、调度处理方式和保护任务队列的方式
(16) 怎么回收线程
(17) 僵尸进程问题
(18) 多线程同步(尤其是如果项目中用到了多线程,很大可能会结合讨论)
(19) memcache了解
(20) 异常和中断的区别
(21) 一般情况下在Linux/windows平台下栈空间的大小
6设计模式和算法
设计模式一般都不会考太多,除非你明确说自己懂。我基本上就不涉及到设计模式的东西,所以只是简要说说。当然,单例模式和简单工厂模式的概念和使用场景还是要知道的。
(1) 介绍熟悉的设计模式(单例,简单工厂模式)
(2) 写单例模式(饿汉模式和懒汉模式),线程安全版本
(3) MVC设计模式
算法这一块太过庞大,几乎都有可能,牛油们最好还是去刷剑指offer(level 1),leetcode(如果能够刷到最高难度,算法对你来说已经不是什么了,或者说面试对你来说简直就是吃饭喝水的难度),左神的书《程序源代码面试指南》(字符串,数组,dp,海量数据问题,搞定它们也就搞定面试的一半)。
下面还是简单的列举一些吧(包括一些数据结构题目,只列举简单的,面试的算法一半不会太难,但是现在一般都是需要比较好的思维,或者曾经接触过这方面的题,建议就是多刷题,做题感觉是刷出来的)
(1) 红黑树的了解(平衡树,二叉搜索树),使用场景
(2) 红黑树在STL上的应用
(3) 了解并查集吗?(低频)
(4) 贪心算法和动态规划的区别
(5) 判断一个链表是否有环,如何找到这个环的起点
(6) 实现一个strcpy函数(或者memcpy),如果内存可能重叠呢
(7) 实现一个循环队列
(8) 排序算法(写快排,归并排序,堆排序),算法的时间复杂度,空间复杂度,是否稳定等
(9) 快排存在的问题,如何优化
(10) 反转一个链表
(11) Top K问题(可以采取的方法有哪些,各自优点?)
(12) Bitmap的使用,存储和插入方法
(13) 二叉树的先序、中序、后序遍历(非递归实现)
(14) 二叉树的公共祖先(简单地说,剑指offer上的题大都是高频题)
(15) 1-n中有多少个1
(16) 字典树的理解以及在统计上的应用
(17) 数组的全排列
(18) N个骰子出现和为m的概率
(19) 海量数据问题(可参考左神的书)
(20) 一致性哈希
7智力题
我特别把智力题单独拿出来讲,是因为这一块其实有些公司很看重(例如腾讯),但是我基本上也没刷过这类题目,接触不多,牛油们自行补充吧。
(1) 100层楼,只有2个鸡蛋,想要判断出那一层刚好让鸡蛋碎掉,给出策略(滴滴笔试中两个铁球跟这个是一类题)
(2) 毒药问题,n拼毒药,要快速找出哪一瓶有毒,需要几只小白鼠
(3) 博弈论问题
(4) 先手必胜策略问题:n本书,每次能够拿X-X本,怎么拿必胜
(5) 放n只蚂蚁在一条树枝上,蚂蚁与蚂蚁之间碰到就各自往反方向走,问总距离或者时间。
(6) 瓶子换饮料问题:多少个瓶子能够换1瓶饮料,问最多能喝几瓶

3. 面试经历(包含面经)
阿里巴巴(菜鸟)
内推,时间较早,结果比较可惜,都是电面
一面:

项目深挖,聊了30分钟的项目,然而我项目跟软件开发并没有太大关系,反而跟自动驾驶关联性大一些(当我意识到可以投递百度无人驾驶部门的时候已经太晚了)
面试官貌似对我的项目还挺感兴趣,项目聊得很深,具体到项目的硬件实现上。
因为我是擅长C++,所以后面就问C++的基础,当时答得好烂。
C++内存管理有哪些
指针和引用的区别
define和const有什么区别?
define和const分别在什么时候编译,哪个更安全
在类中,基类的析构函数为什么要设置成虚函数
虚函数的实现
8.有什么问题要问我
一面之后以为挂了,然而很意外的还收到了二面,二面正好跟导师在谈论文的时候,所以往后推迟了,就又换了一个面试官。这里说一下,对于大厂的面试,可以不推迟就不要推迟,尽可能去,有时候你一旦说刚好有事,岗位就变成不合适了。
二面
面向对象的三个特性是什么?
详细介绍一下多态
如果我拿一个父类指针,指向一个子类的数组,要找这个数组的三个元素,应该怎么使用多态来实现
(上个问题我想不出特别好的答案,然后说将这个指针转换成子类的,在+3找出这个对象)面试官询问如果不强制转换呢?
聊聊STL,如果我用一个int类型的指针,指向一个vector中的元素,会怎么样?
在vector里面有一个find函数,那如果我用find==-1,会发生什么(这个问题记不太清楚,只记得什么等于-1)
用过gcc吧,问你几个gcc的问题
在Linux中一个目的函数的生成过程或者说编译过程是怎么样的
编译有哪些方式
那在linux中,对于一个已经动态编译后的文件,怎么查找出它用了哪些动态库?
Linux共享库的搜索路径先后顺序
如果一个动态编译后的文件,可能缺少了某些动态库,我们应该怎么把它们添加上?
在Linux中,线程的同步方式有哪些
我问一些数据结构和算法的题目吧,知道红黑树吗
能说说单源最短路径dijkstra算法吗
那dijkstra算法能够找到最短路径的原因是什么
说说最小生成树吧
贪心算法和动态规划有什么区别?
设计题:设计一个爬虫,去爬一些论坛,有一些论坛可以直接爬,有一些论坛需要登录,有一些论坛需要注册,有一些论坛只让你检索固定数量的字符(例如你要爬20个,但是只让你爬15个),请问怎么设计这样一个类?
那有这样一种情况,如果刚开始给你100个论坛,你实现了,但是又给你100个,怎么办,不可能一直编译然后实现?
聊聊项目,花25分钟聊了项目
岗位在杭州,能够接收吗?
三面:
二面其实回答的很烂,感觉上是挂了,但是收到三面,三面很短,记不清问了什么了,没太多实质问题。

美团 后台开发
美团重点就是数据库、linux、java上,感觉只要你的java和数据库好就能进,恰巧,我是搞C++的,数据库不咋熟悉。
一面(面试官感觉也比较青涩,可能也刚毕业不久吧,人挺好的,问题超级多,面了一个多小时):

自我介绍
详细介绍项目
Linux命令(问了接近10个小问题吧):怎么修改一个文件的权限、怎么查询一个文件的最后10行(tail),那怎么找出含有关键字的行的前后4行(不会了),怎么查询一个网络情况
数据库熟悉吗?(不熟悉啊,没关系,我问几个问题)知道索引吗?在什么场景下用索引,索引有什么好处,有什么缺点?
面试官感觉我回答索引部分还可以,给了一个具体场景,问应该怎么做(不会)
计算机网络:TCP/IP的三次握手、四次挥手,为什么要用三次握手,两次可不可以,四次挥手有没有可能改成三次挥手
操作系统:进程和线程的联系和区别,Linux下进程的通信方式IPC,进程调度的算法(讲了先来先服务、短作业优先、轮转、最高响应比),分别分析每一种的优缺点,死锁的产生条件,怎么解决死锁问题,怎么检测出死锁(怎么检测出死锁不知道)
近程的通信里面的管道通信,有哪几种(命名和非命名)。写一个管道通信的命令,问第一个进程的输出传递给第二个进程的输入,那么它还保存这个数据吗
知道数据证书吗?(从非对称的加密算法,公钥私钥的使用,数字签名,CA给的数字证书来避免冒认)对称加密算法包括哪几类?MD5是加密算法吗(不算,原因是)
数据结构:堆栈和队列各有什么特点,队列有什么应用场景(美团真心超级喜欢问这个问题的,不管是啥都问有什么应用场景)画一下单链表,双链表和循环链表,他们的查找,插入,删除的复杂度分别是多少?
算法:给一个二叉树,找出其中最长的距离,给出路径
学过java吗?C++和JAVA的区别是啥?能接受java吗
一般怎么学习技术
说一个你最近看的博客

二面:(这个面试官不苟言笑,跟他交流找不到鼓励,而且他一直否定我的思路,最后能过也是万幸)

(一直看我的简历),介绍一下做的项目,详细说说其中软件的实现(项目真的很重要,面试面一定要将自己的项目介绍练习到能够详细透彻地讲解所有实现细节)
项目里用到了生产者想飞这,面试官让讲讲这个模型(感谢这次面试,让我更透彻理解我项目里面的缺陷与改进方法)
生产者消费者用在什么场景下(单生产单消费,多生产多消费)
项目里线程是如何同步的
项目里数据的保存(面试官见我答得不好,开启教育模式)
简历里写了linux(这个坑有点大),现在网络流量比较大,那我想查看那个IP的网络流量比较大(我答netstate),面试官说如果是查看端口的状态的话是这样,但是我的意思是说导致网络流量变得很大的是哪个IP。
用过sed命令吗?对linux了解多吗?
写过shell脚本吗
回归线程问题,说说多线程的出现是为了解决什么问题(回答不满意)
线程的状态有几种,画出状态转换图
你做过硬件的东西,那为什么要转软件
软件的高吞吐量考虑因素
除了C和C++,还了解过其他语言吗?有没有考虑学习Python
能不能说两个你最熟悉的数据结构?
找一个你最不熟悉的给我讲一下?balabala,一般用在哪里(又是应用场景,好烦)
你印象中C/C++和Java或者python的区别是啥,如果让你学习java或者Python,你会如何学习,有什么学习计划?
说一下你自己的亮点吧

二面比较煎熬,而且面试实在太少,回答的时候支支吾吾,结结巴巴,给人感觉极差,即使是原先可以很好回答的问题,也因为缺乏信心而在面试官中失色不少。
三面:

linux的IO模型可以说说吗
项目里数据是怎么传输的,是在哪一层协议?
看过GPL相关的东西吗
我们后台开发都是用java写的,你这一块怎么样
详细介绍项目的设计
项目里面用到的缓存区,那什么时候释放
设计题:假设一个输入框,可以输入中文姓名,我们要设计一个评分系统,给输入的姓名打一个分,姓名越符合取名的习惯分数越高,否则分数越低?要考虑名字很长的情况,名字中两个字本身都挺好,但是合在一起就语义就有问题的情况(深挖,回答不好)
写一个整数翻转的算法(考虑溢出)
写一个生产者消费者的伪代码
你最近在看哪些书啊?
你以前看了哪些计算机的书啊
职业规划
能不能转JAVA
有什么要问我的

美团有一点很不好,就是不管过不过完全不告诉你,而且面试的时候也是没有HR的,从通知面试,接我去面试的都是一面面试官。我差点以为你们是不需要HR的呢。

腾讯 后台开发
特地把鹅厂先提出来说,因为可能还有人在面鹅厂吧。首先,我腾讯也是霸面出来的。和大部分同学相比,我比较幸运的是我大概11:10去霸面(想着感觉太早去也不会给我机会面试,但实际上不是这样的),然后扫码放上简历,差不多10分钟简历就被拿走了,5分钟后就被叫去面试了。当时面试官筛掉一堆简历,我亲眼看着他最后只拿了我的简历走了,感觉幸运值MAX(后来发现可能是由于我内推的时候,接到一个简短的电面(20分钟),也是SNG事业群的,然后没有继续内推面试,放到校招面试了)
关于霸面这里也说说这方面技巧,首先霸面基本上只适用于这些支持霸面的公司,其他公司最好不要死缠烂打。霸面之前,再次修饰一下自己的简历,让自己的简历亮点更加突出,能够在5秒的快速浏览中让面试官get到他们想要的内容。可以在放简历处或者面试厅外面守面试官,在他们空闲之际,快速递上简历推销自己,如果简历足够出色,机会要比直接放在那里等人去拿好得多。但是如果面试官不感兴趣,切忌死缠烂打,只会起到反作用。

电面
这一面试比较久远,我能够记得的就只有几个问题了

linux中的僵尸进程,怎么产生,怎么处理
top K问题,有哪些方法可以做(快排,建堆,分成小文件,然后败者树)
快排思想,复杂度
快排和堆排对比

一面

自我介绍
因为是霸面,上来就给了一张纸,让我看看做几道题,其中一道是C++中多态相关的,就是那种询问输出结果的题;一道是循环fork,问有多少个输出行的题,还有一道忘了。感觉应该是如果这几道题没答上来就可以回去了
set,map和vector的插入复杂度
讲讲static的用法
全局变量和局部的静态变量除了可见区域不同还有什么不同?
什么时候要有拷贝构造函数
C++里面的红黑树
C++类里面函数加const的原因和实现?能不能在函数前面加上static,为什么
linux基本命令,权限查询,cpu和内存的情况,查询出来后的结果怎么看
排序算法比较,复杂度,稳定性等
11.智力题:有100本书,每次拿1-5本书,要先手赢,怎么拿?
12.智力题:蚂蚁在树枝上的问题
面试完感觉好开心啊,根本没去想过不过,只是觉得能够面到我最喜欢的公司啦,即是只有一面也值了,开心~(于是,当天晚上状态改变,通知复试)

二面:
二面我是当天第一个面试,感觉面试官还没有进入状态,所以前小段的面试比较冷场

介绍项目
(发现项目没啥问的),出了几道计算机网络基础问题,例如描述三次握手四次挥手的11种状态,还有两三个忘了。三次握手之间可能存在什么攻击(DDos攻击)
说说DNS的原理,具体工作原理(我没说清楚)
讲讲ping的具体工作,用到哪些协议(这一块要熟一点,不要只记住用了哪些协议,要深挖怎么工作)
讲讲http的状态码,403,201什么意思
中间穿插了一些别的问题,例如C++的多态,虚函数,排序算法啊
C++中加入构造函数里面有虚函数,会怎样
8:智力题(在他电脑上)
9:在他电脑上看两道题,说答案
(看着电脑,上面有我的笔试题每道题的得分情况)你怎么看腾讯这次的笔试题,难度怎么样,笔试完有没有去查你不确定或者不会的题目怎么做啊?
你笔试编程题做得不好啊,什么原因啊
那你挑一道编程题重新去做吧,哦,我给你选吧,就这道(魔法城堡)。我先面下一个,你要是写完了或者不会写你就再写一个快排吧
于是我就去后面写代码了,面试官面试下一个。(这里有个不太靠谱的小窍门,但是跟人交流过貌似挺符合的,要是面试官要是没有给你纸去写代码,那么你要小心点了,说不好就要去准备下一家了)
你有什么要问我的(问了部门,面试官比较详细介绍了部门,而且很贴心的告诉我如果我能进去,应该负责什么)
能否实习

三面(HR面试)

自我介绍(HR面试的自我介绍可以侧重软实力部分,项目技术方面介绍可以适当少一些)
不是计算机专业,为什么要转行
项目中遇到的最大难点
遇见过最大的挫折是什么,怎么解决的
职业规划
看过最好的一本书是什么
不是计算机专业,学习很难吧,平时怎么学习的?
怎么看待自己的?用两个词形容自己
目前的offer情况
家庭情况。
有什么问题问我的吗(我问因为部门有三个业务,具体负责什么确定了吗,培训机制,接下来的流程)
问流程的时候,hr小姐姐贴心的告诉我可能要加面(不要加面啊,哭)
嗯,最后我表示了一下对腾讯的感情,不吐不快。

于是度过史上最难过的十一(比我去年整个十一用来写论文还惨),每天都刷状态,然而每天都是HR面试(虽然HR小姐姐说了十一之后才会变状态,但是不死心)。一直到十一的最后(10月8号的晚上),状态变成已完成所有面试。第二天查询状态(待报批),报批了一周,于10月13成功get到offer。

网易(全是算法)
一面:

自我介绍
貌似问了两个C++基础,忘记了,反正面试官也没上心
了解归并排序和堆排吗?balabala后,写算法:有两个链表都是有序的,怎么合并成一个(归并)
算法:怎么判断一个输入字符是正确的IP地址(IPv4的点分法)

二面:

给一张纸,上面有几个问题,问怎么输出,跟腾讯差不多,还是多态那套东西
又给了一张纸,上面是别的问题,海量数据的设计题(忘记了)
写算法:有1个链表,上面每个节点除了next正常指向下一个之外,还有1个随机指向别的节点,怎么复制(剑指offer原题)
算法:有1个打卡系统,上面记录了每个人登陆时间和下线时间,询问最大在线人数(原先思路是对登陆时间排序,然后比较下线时间跟后面的登录时间,但是面试官指出了会出错的情况。于是设立了对最早登陆时间和最晚离线时间的排序,然后每次离线人数cnt-1,每次有登陆时间cnt+1的方法)

三面(我以为是HR,然而并不是)

介绍项目
2 项目的难点是什么
为什么转行
对未来发展的看法(职业规划)
前面的面试官对你的评价都挺好,那我就不多问了,写个算法吧,输入两个字符串,然后忘记了,貌似是怎么做处理后输出字符串。反正比较简单
有什么要问我的(没看到我的部门安排啊)

网易的面试特别顺畅,几乎没有卡顿或者不会的问题,当天状态特别好(腾讯加的buff在闪耀)。

完美世界(服务器开发)
错过内推,师兄的同学还是把我的简历给了HR,走校招流程。但是,我的笔试成绩不知道为啥找不到了,HR告诉了师兄。最后,HR让我去面试,面试之前重新做了一套卷子(1个小时)。这里就凸显内推的好处了,虽然流程都一样,难度都一样,但是起码人家更愿意给你机会。

先说说笔试,这套笔试难度中等,比较器全面考核了几乎所有的基础内容,有几道挺难的,没做的特别好。其中,有两道大题记忆比较深,因为遇见次数挺多,一道就是给了一个类,让你写出构造函数,析构函数,拷贝构造函数,赋值运算符重载函数。另一道是考察vector在删除某些函数的时候,iterator失效的情况,怎么解决

一面:
一面主要就是围绕笔试题进行询问,面试官一遍检查我的答题情况,一遍问一些重要问题(更多的是我做错的题目),然后扩展去问基础,例如

虚函数的实现,要极其具体的过程,例如虚函数指针在不同对象的指向
vector迭代器失效的情况
算法题的思路
项目具体介绍,包括缺陷和改进

二面(部门老大)
1.简单考察了一下技术。问了差不多十个小问题,具体记不太清楚。

学过mysql,询问有没有在项目中用到,sql语句考察
3.之前面过畅游?那边的情况
喜欢玩什么游戏,对游戏的认识,聊聊游戏
不是计算机专业,平时如何学习的?
最喜欢的书。
目前的offer情况
对户口有要求吗
二面没问太多,也没跟我说什么,原先以为应该是挂了,因为没有让我HR面,但最后是却发现是想给我申请sp,所以要加面。(这个sp应该跟有个同系师兄也在部门里面,而且做得很不错有关)

第二天,部门HR反馈面试结果,表示要加面,后期校招HR通知
第三天,校招HR电话通知面试,这里赞一波完美的HR和面试官,有一说一,直接跟你说是想给你申请sp所以才加的面,面试结果不影响录取。然后这个HR对我们学院好感兴趣,跟我聊了差不多半个小时。(HR人好好,聊到最后我差点就直接说不考虑了,就去完美)

三面(是一个等级好高的人面的,在另一个大厦,里面都是完美的X总)
三面全程聊项目,面试官不停询问项目细节,然后加大项目难度,如果数据量更大要怎么设计啊,如果数据传输更快速怎么办啊,一直提醒我站到一个全局设计的角度上,不要拘泥于某一点(看成一个项目需求,总体设计是否应该更改,怎么改)。我都没想到我的项目的扩展性有这么大…面到最后挺崩溃的,大咖就是大咖,思路跟不上。
最后问了一下喜欢玩什么游戏,有什么心得。
Over。

趋势科技
这一家没太多好说的,就是尽可能参加他的线下笔试吧,还是要简单一些的。
一面(30min)

介绍项目
面向对象的理解。
多态的理解
介绍三次握手四次挥手
其他基础问题跟前面高频题目大都重复,不说了。
写个算法思路:给一个字符串,怎么找出最长连续重复子字符串?
想做哪方面的软件开发?
有什么想问的?

二面(两个面试官,综合面,零零碎碎的,问了很多)

详细介绍了项目,面试官中途打断几次询问
介绍在项目里面充当的角色
项目最大的难点是啥
项目过程遇到的最大挫折是什么
介绍一下本科获得的全国赛奖项的情况
英语聊聊你对工作地点的看法
女朋友在哪,中文说工作地点的考虑因素有哪些
最有成就感的事情
在实验室中担任什么角色,参加的XXX能聊聊吗
职业规划,软件开发有多种,往哪方面发展
用两个词来形容自己
有什么要问的:趋势科技在国内的市场发展,培训机制(然后他们介绍了整个公司的整体文化,极客,自由)

不得不提一下,趋势科技的签约现场。二面后很快,就通知签两方,刚进们,就遇见那个宣讲的大咖,全程压力好大,他们气场太足了,但是确实我的所有问题都给予了解答,包括各种福利,公司制度,晋升渠道等等。然后跟我说,我可以先签了呀,反正没有违约金(这点厉害了),可以让我有个保底也好。也说了我可以继续去面其他的啊,最后还想去他们那再去。

京东(投了深圳岗位,但是面试我的是北京京东云)
一面:
坦白说,见到面试官,我就有不详的预感,因为我真的很不擅长跟年长的面试官(四五十岁)打交道。面试官全程冷淡,而且用“嗯?”来质疑你,感觉就是流程一直走,回答好坏确实没咋上心。

自我介绍+项目详细介绍
项目细化,能不能用XX来代替啊,为什么这么设计啊,项目目前的缺陷是啥?
三次握手四次挥手
TCP和UDP的区别,适用场景
抓过TCP包吗?TCP包怎么构成
端口号最大是多少,如果需要更多的呢?
接下来就厉害了,几乎所有的网络协议来个遍。ARP了解吗,详细说说
详细聊聊ICMP
路由协议了解吗?说说
http请求报文的组成
linux用过是吗?文件权限,还有一些常见的命令
聊聊traceroute
在浏览器输入一个URL后发生的事情
数据库,用了什么,问了一些sql语句
问了全文索引
还有好多,但是大都忘记了,基本上回答上80%,但是还是挂了。

360(C++开发)
面试的数据流部门的面试官,
主要就问了两个问题

写一个链表翻转的代码
类似今日头条,有很多帖子,假设每个帖子都有1个ID,32位,怎么实现将用户阅读过的帖子不重复出现(哈希不行,数据量太大,而且会是三维的(用户ID-帖子ID-是否阅读过),最后用了bitmap,还聊到了布隆过滤器,但是我这一块几乎都忘记了,实在面试官的引导下一点一点把这道题完成了)。
嗯,刚出门就看到状态说不合适。

Shopee 后台开发
Shopee今年是第一次校招,岗位在深圳,公司处于刚开始的阶段。面试包括开发面,测试面,HR面。
面试之前,先做两道笔试题。
第一道算法:将字符串的所有大写字母放在后面,小写字母放在前面,相对位置不能更改,不能有额外的空间复杂度。(面试官会看算法的时间复杂度)
第二道:问在[0,1000000]之间的数字不包括8和9的数字有多少个
一面(几乎将所有基础都涉及到了,但都不深)

解剖笔试题,解释自己使用的算法
进程通信方式,详细说明,并给出各自的优劣
死锁的必要条件
银行家算法
页面置换算法,详细说说LRU
C++的const和static作用
C++的内存泄露
面向对象的三个特性
C++的虚函数
(跟腾讯一样)在他的电脑上看题,两三道吧,C++和网络都有,C++是典型的虚函数问题,网络有两道,跟协议和执行顺序相关
在浏览器中输入一个网站,发生的事情(客户端,服务端)
输入网站后,浏览器做了什么(中间涉及到URL的构成)
OSA七层协议,交换机(XXX)属于哪一层
了解网络层的协议吗,分别有哪些
端口号的上限,以及原因
https属于哪个端口,FTP呢?
https和http的区别
了解设计模式吗?
单例模式用来做什么的
了解数据库吗(mySQL),count(1), count(*), count(col) 的区别
问了差不多五个SQL语句的问题(select,insert, alter)

二面(二面面试官对于一面面试官貌似比较相信,所以倾向于他的评价,没有问我太多)

笔试题第一道算法讲解,时间复杂度分析,是否可以优化(面试官认为可以优化,但是我到现在还是找不到优化方法)
笔试题第二道讲解,然后面试官质疑我的解法,我用概率论的方法重新解释了一遍,面试官接受了(这里想说一下,如果面试过程汇总,你跟面试官的想法相左,我觉得可以用很好的逻辑去讲解,让面试官明白,但语气要诚恳,态度要端正,说明你的想法即可,不要纠结于对错,因为更多情况下,会是你错了)
看两道题,第一道:有1亿个IP地址,怎么找出访问次数最多的IP(可能是这样)
第二道是比较简单的算法题,具体忘记了
用过C++,那么知道C++的调用惯例是怎么的吗?cdecl和stdcall的区别
项目是否在linux上开发(不是),linux系统有多大的用户内存空间
linux的gcc怎么调试
linux怎么判断每个进程占用的资源
数据库看过什么书?
了解覆盖索引吗

HR面:

自我介绍
最有成就感的事
最受挫折的事情
项目最难的地方,怎么解决
项目几个人做的,怎么分配
聊聊本科的获奖项目
不是科班的,而且在自己专业学得挺好的,为什么想转行
怎么学习的
介绍一本自己印象最深的书(必须是深入理解计算机系统)
了解家庭情况,地点选择
职业规划
学院大体的求职方向,帮忙宣传一下公司
有什么问题想问的(培训机制,国际公司的交流和出差情况,深圳办公地点刚创建不久,主要业务范围和晋升机制)

招银网络 软件开发
每一面都很简短,大概15分钟,而且此时我已经拿到腾讯,网易的offer,所以基本是抱着打酱油的心理去的。我相信如果大家把基础都学了,前面我列举的问题都理解,小公司的面试真的就跟吃饭喝水一样简单。
一面:
一面面试官给我一种不太舒服的感觉,虽然面试官全程都在记录和问问题,但是总是带着一种蔑视的笑,时不时来一句:你面的可是开发啊(大哥,我知道啊,我面的所有公司都是开发啊,可是大家的问题不像你的奇怪啊)。最终面试感觉就是:银行IT类的面试确实跟互联网还是不太一样,侧重点不同,所问的问题也不同。

简短自我介绍(第一家让我几句话结束自我介绍的)
面测试还是开发(开发),那你的笔试编程题不太好啊(这个我比较疑惑啊,那我前面的选择和填空是有多好,编程题不行还能够进入前10%,免了电面),于是给5分钟写一个算法,找出字符串中第一次出现两次的字符(我建立了哈希表做的,但是面试官说不太好,然后我就改成用一个变量记录字符,判断次数,次数为0的时候换字符,相同次数+1)
C语言能不能实现多态
map里面的并发
怎么将一个map清空(map的clear和erase的区别)
linux怎么检查一个进程的CPU使用情况
项目是否用到了数据库,怎么用C++连接到数据库
给了几个语境,写SQL语句

二面

详细问了项目,具体怎么做的,最难的地方
C++的一些基础问题,多态实现,static的作用等
进程的状态转换图
进程的通信方式IPC
三次握手四次挥手
是否了解数据库,mysql的常用引擎
数据库的事务特性

三面:

选择开发还是测试
家庭情况
目前offer情况
怎么看待目前的offer情况,为什么来面试招银网络(说自己的offer情况的时候,最好是选择性说,像招银这类公司要是跟他们说有腾讯offer,基本上算是GG了)
如果拿到华为和招银的offer,怎么选
项目几个人做的
地点选择

招商金融
这个公司今年第一年校招,所以面试挺水的。笔试是线下笔试,不太难。
一面(所有人基本都控制在15-20分钟)

项目解说与问答
C++的多态实现
TCP和UDP的区别
如果一个访问一个网站时间特别长,但是访问其他网站没有问题,可能是什么问题,怎么检查?那如果是别人访问这个网站都正常,但是你访问时间就是特别久,可能原因?
对金融科技的看法
目前的offer情况
是否能够转java,
期望薪资
介绍了一下他们目前公司的情况

二面
CTO第一句话就是你的专业跟我们不太相符啊,语气不太友善,然后我解释了自己对软件开发的热情与学习的情况。然后他们开始询问目前的offer情况,此时我已经拿到十来个offer,所以他们就觉得我是去玩他们的(尴尬,并不是这样的,我只是想看看金融科技行情怎么样)。后面CTO了解完我目前的薪资,就直说不留我啦,给不了我那么高的薪资,然后跟我说了一些腾讯这个部门的好处,让我好好去腾讯干。有可能的话一年之后再去找他们。

华为
不知道是否因为笔试题都AC了,面试特别水。而且华为的排号貌似是随机的,看是否有面试官捞你,有人等了四五个小时,但是有人一面之后没几分钟就二面,比较神奇。
一面

详细问项目,画图说明,包括目前的限制和改进策略
了解数据库吗?关系型数据库和非关系型数据库的区别

二面

自我介绍
家庭情况
3,职业规划
目前的offer情况
了解华为吗
有什么要问的(培训机制,华为的分级,部门的选择)
加面试官微信,有任何问题让问他

58后台开发
面试官全程用手机跟人聊天,用电脑跟人聊天,还一直笑,听语音。好几次我说完了,他还一直在盯着手机。尬聊没意思,当时要是大厂offer都下来了,立马就走人了。面试是双向的,希望面试官也都能够相对尊重一下面试的学生吧,起码面试也是你的职责。
面试题没什么好说的,大体就是项目解说+算法题2道+基础,路上遇到一个我理的小姐姐也去面试,刚好一起到的一起走的,不知道她求职还顺利不,祝好啊。

多益网络
两次笔试,第一次笔试好多数学题,第二次是计算机基础题(选择+填空+问答+编程2道),都不难,但是比较坑的是无法编译,自己考虑代码的正确性。面试只有一面,极其之水。
一面(QQ视频面试,20分钟)
是一个比较年长的大叔,貌似对技术也不是很懂,只是例行问问题,旁边坐着一个HR。

指针和引用的区别
vector一直插入会导致的问题
TCP,UDP的区别
加密问题(对称非对称),数字签名的作用
有没有看过什么开源项目
两个数组怎么拼接一起(想问的应该是归并)
算法题:五分钟写写出一个删除字符串多余空格的算法
做项目出现的问题,怎么解决的
对加班的看法
对工作地点的选择
是否可以实习(1-2个月)

CVTE
CVTE和远景能源都比较神奇,应该是前面备胎之后被捞起来,终面都跟前面的面试相隔很久,于是我都放弃了终面。
一面(电面,40分钟):
询问的知识点特别广,但是都不深,基本上都在我前面介绍的范畴内,没有任何偏题怪题,所以其实挺好过的,这里我只列举部分。

C++的static怎么使用
new和molloc的区别
面向对象三大特性
C++的虚函数实现
C++的多态,详细说动态绑定和静态绑定
STL的了解:vector的扩容问题,map和unordered_map的底层实现
list和vector的使用场景
操作系统基础:进程和线程的区别
线程状态有哪些
进程通信方式
在windows下一个进程可以创建多少线程,跟什么有关
进程调度方法有哪些
死锁的必要条件
计算机网络:TCP和UDP的区别
说说OSA模型,XX属于哪一层
三次握手四次挥手
必须三次握手吗
必须四次挥手吗,有没有别的情况?
用过linux吗?文件权限怎么看
问了一些grep的用法
管道通信的缺陷,是怎么实现的?
用过mysql吗?说说索引的作用
mysql语句分类,都有哪些
看过哪些开源的东西吗
能实习吗
项目的难点和解法

二面:(一面之后不到1小时马上通知二面时间)
二面是视频面,但是我航某主楼啊,走廊的网络信号简直烂到不行,视频面试之前弄了好久也没弄好,焦头烂额,所以面试中途,面试官还直接给我电话,改成电面了,当然还得在牛客上敲代码。
这一面问得很深,主要是针对项目和网络。

项目深挖,因为我项目里用到了生产者消费者模型,所以面试官一直问这个,包括为什么要这么用,怎么加锁解锁,怎么线程通信,数据采集速度,是否有重复读或者丢数的可能,为什么不用数据库等等
网络问题,深挖网络的理解,不像一面那样泛泛而谈。
TCP连接和解开的状态装换
TCP包了解吗?
端口限制,如果有超过这个限制的连接数怎么办
介绍一下MTU
TCP的粘包和拆包问题(问的很深)

写个算法(跟字符串有关,给定了函数的声明,写出来后,面试官问能够保证线程安全,不能那怎么想办法保证?(不会))
二面面得实在不怎么样,但是好久之后居然通知过了,进入终面。

远景能源
一面(电面+网上写代码)
跟CVTE的一面类似,也是C++基础和网络基础占主体,其中有道题比较有意思,问的是堆排序和快排的时间复杂度都是nlogn,那两者的区别是啥?用哪个会更快一点,为什么?(快排更好,高速缓存的原因,堆排序的局部性差)
算法和笔试的两道题都是剑指offer与leetcode的原题。
面试算法是扔n个骰子,点数和为m的概率。
二面:
二面之前让写一到算法题,比较难的题,题目大概是有两个字符串,判断第二个字符串能不能由第一个字符串变形得到,变形的方法是1.在字符串后面加A; 2.在字符串后面加B,然后字符串反转。例如“A”“BABA”这两个字符串中第二个可以由第一个变形得到,但是“A”和“ABAB”第二个不能由第一个变形得到。
面试首先讲这道题的算法代码。
面试官没有问太多的技术问题,基本上问到地点选择和目前的offer情况之后,了解到我有腾讯和网易的offer,问了一下期望薪资,就让我出来了,然后说等HR面,但最后HR直接就说不面了(原因应该是我说了offer的薪资水平和地点的倾向,他们觉得我去的可能性不太大吧)

4399 游戏后端开发
这个公司的面试比较简单,而且特别顺利,几乎没遇到任何卡壳的问题,面试时间也很短。
一面

C++的多态实现之类的基础问题跳过不说
游戏里面你觉得有哪些用到了TCP,哪些用到了UDP?
让你设计一个武器换装系统,怎么考虑?(期间会引导并且细化问题,主要集中在怎么回调,涉及到select和epoll问题,怎么线程安全等)
玩过什么游戏

二面(无关技术,但也不是HR)
这一面没什么太多内容,10来分钟的样子

智力题:100的阶乘和2的哪个次方比较接近?32 64 128 256
喜欢玩什么游戏,将来喜欢设计什么游戏
对游戏的看法

三面(HR面,但是居然还问到了技术)

从哪里知道的招聘信息,喜欢做游戏吗?
工作地点选择
项目相关难点
目前自我感觉最成功的事情
感觉最挫败的事情
职业规划
打算设计什么游戏
(突然来的技术问题)进程之间的通信有哪些
目前有哪些offer

后来,电话通知要去广州boss面,刚开始拒绝了,后来又邀请了一次,去面了。
四面(五分钟):

自我介绍与项目介绍
项目几个人做,分别负责什么
个人优势是什么

五面:
问了挺多技术问题的,但都不需要细说,大体上就是他问XX会吗?回答会或者不会,我也没怎么展开说(心理想的是,这时候不跟我谈薪资聊这些有什么用,我都要跟别的签约啦)
大致问题有:进程和线程的区别,线程的通信方式,是否会数据库,计算机网络了解吗,网络编程做过吗,了解IO复用吗,项目用过数据库吗
最后跟我说offer没问题了,薪资让我跟HR谈。

隔两天后,电话询问目前的offer薪资,说完之后感觉4399给不了高价,所以应该算是婉拒,不会有后续。

中兴
中兴这家公司无论是笔试还是面试,给人那种陈旧感挥之不去,很官方很机械,而且技术水平个人感觉很一般,入坑者慎重(个人意见,不接受辩驳)
笔试,这个笔试通知比较神奇,前30分钟说是“测试登陆时间”,我以为就是测试的时间,不算正式笔试,结果那就是笔试。好吧,一直在瞎选,然后快速跳到后面的题。(然而就这样做笔试都过了,好醉人)
一面几乎没什么技术问题,唯一的算法题居然是说你用惯了C++,那用C语言写一个数组翻转的代码,数组里面只有10个数字,小学生水平的算法。
二面综合面更水,没有任何技术问题,聊项目,聊工作地点,聊获得奖项,聊职业规划。
一段时间后通知拿着三方去参加终面,我不同意拿着三方,先询问薪资水平,她们没有明说,但是我说了目前offer的薪资后,就没再说让我拿着三方去的事情了。

新华三
比中兴的面试要“高水平”一些,线下笔试,难度一般,而且据说只要考40多分就能参加面试。笔试有两道算法,其中一道是去除一个shell文件里面的注释和空白行,;另一道是程序改错题(都要求C语言)
一面:

C++的多态实现
C语言的了解程度。
用C语言写1个简单算法。
网络的基础知识:画出三次握手四次挥手的TCP状态
建立服务端的socket函数
数据链路层的作用
数据链路层的协议有哪些?详细说说
了解通信行业吗
介绍了部门业务,询问擅长或者喜欢做哪方面的软件开发

二面:
HR面,常规的HR问题,问题的重点在于职业的规划,个人优势,和岗位地点的选择上。

三面:
应该是总监面,问了一些基础技术问题之后,还问了

怎么看待通信(顺便介绍了一下他们的业务)
说了一下5G目前的进展
是否面过华为和中兴,怎么选择这三家公司(这里要慎重说,突出你为什么要去新华三,不能说新华三不如他们,要说你看中新华三的哪些方面)
和前面一样的问题,未来打算从事哪方面的研发?
有什么问题要问的(培训机制,薪资构成),薪资说完之后就没什么好说的了,个人不会再考虑。

深鉴科技
机缘巧合听说了这家公司,并听一个比较年长的校友介绍了一下,里面貌似清北的学霸很多,当然我航的也很多,博士可以解决户口。内推了,没笔试,直接面试。
正常来说只有两面技术面,但是我面试的时候部门老大比较忙,所以加了一个人面。
一面:

C++的基础问题
TCP握手挥手过程与状态图
是否可以两次握手
一定要四次挥手吗
为什么要有TIME_WAIT状态
了解数据库吗(没有往深处问)
写两个算法,只记得一道是DFS,岛屿问题,判断岛屿个数
了解C++的模板吗,怎么使用的?
C++模板为什么声明和定义要放在一个文件里,而不能想别的一样放在不同文件?

二面:
这一面算是临时加进来的,面试官是一个从事网络编程好几年的程序员,所以只问我对这一块的理解,本身他也是对这方面比较熟,其他都一般也都不问。
问题都比较难,但是面试官一直安慰说没回答上来也没关系,毕竟我没做过这些。

linux的IO模型,详细说说有哪几种,怎么实现的(这一个问题就可以回答大半天的)
三次握手中可能出现的攻击与防范
服务端的socket构建过程,不是简单说bind,listen用来怎么怎么做,细化到具体参数怎么设计(不会)。
问到一些特别详细的参数设计了,我记得是某个东西的第五个参数可以怎么设计然后解决什么问题,基本上连问题都没听懂。

三面:

基础问题
写个算法,算出围棋的气,其实也还是DFS
怎么考虑职业的,包括岗位和地点
介绍了公司的业务,部门的工作范围
面试官人特别好,还给我介绍了商汤科技,face++,深鉴科技,寒武纪这些AI公司的优劣势,部门的情况也说得特别清晰,感谢。
目前offer情况
大公司和创业公司怎么看(跟我聊了挺多这个的,再次感谢)

HR电话沟通offer,薪资因人而异。面试官真的水平都很高,而且人好好,主要你够优秀,薪资可以匹配大公司的ssp。虽然我最后还是放弃了这个offer,但是推荐有感兴趣的可以去加盟。

恒润 嵌入式开发
这家公司主要做军工电子和汽车电子,在北京和天津都有工作地点。因为暑假面过他们的实习,拿到终面直通卡,所以直接终面。
终面形式跟互联网差别比较大,做一个自己毕设的PPT,15分钟讲解,然后面试的大佬会询问各种问题,中途顺便介绍他们的业务需求。聊了很久,面试官对我还是比较满意的,几天之后见到总裁谈薪。

寒武纪
有国家赛事一等奖,所以直接boss面,聊了挺多,都是项目和个人相关,不细说。

涂鸦移动
一面二面都有算法题,一面是非递归前序遍历二叉树,二面是一道分糖果的题,老师有一些糖果,要确保每个学生至少有一颗糖果,年龄比临近大的要分得多,给定一个数组表示每个小盆友的年龄,问糖果至少多少个)讲真,涂鸦移动公司环境挺一般的,想去的慎重。

上面列举了大大小小20来家公司的面试经历,中间有些掺杂了个人面试后的想法,仅供参考,如果不赞同,那很正常,毕竟都是感性的认知。

以上基本结束我的面经。如果再次更新,应该就是对牛油的问题解答。
以上都是个人个人的秋招经历与感受,不可能使用所有人,所以请根据自己的水平酌情参考,谢谢! 2017.10.26

你可能感兴趣的:(送你一个励志故事——涵盖20多所互联网公司的校招C++面经)