不破楼兰兰终不还 —— 秋招的一些经验
秋招的一些经验(后台开发方向)
秋招可以说是学生时代的重要一战,秋招的成败牵系着职业的起点。想在秋招中得到心仪的 offer,正确的意识和打法就尤为重要。有很多学生以为秋招是在自己毕业后的那个秋天,到了八九月份才意识到是现在这个秋天,再慌乱地进行准备,结果可想而知了,虽不能一棒子打死,但总归不能够充分发挥出自己的实力。意识如此,打法也是这样子,有了意识,却没有正确的打法,也极有可能事倍功半。
个人经历
双非本科,软件工程专业,技术栈选择了 C++,九月末签了腾讯后台开发 SP offer。大学期间主要打 ACM 竞赛,铜牌水平。我在 ACM 中受益很多,但局限性也是很明显的,如知识圈主要是很基础的 C++ 语法,对算法熟悉些但对项目、工程方法很生疏。但 ACM 给了我很好的平台,在 ACM 中接触到了许多大牛,圈子很重要,你的圈子中有很多牛人,那么你也很自然地想要变强些。 ACM 会给人自信,这么难的事情都做过了,别的事情也便没有什么好怕的。但 ACM 中所用到的知识或许和工作需要的有很大的差别,所以在我春招准备找后台报务器开发时也几乎是个完全的小白。但通过三月份冲刺一样地恶补知识,最后拿了华为和海康威视的 offer。
春招
在说春招经历前先说下我对大三(研二)下春招(指找暑期实习)的看法。我觉得春招是很必要的!对于春招(找暑期实习)来说,收不收获 offer 或许并不重要,但一定要来试试应聘的水,踩踩在应聘过程的坑,感受下应聘的氛围,练练手。春招收不到暑期实习 offer 的话并不致命,我们还可以在暑假好好复习,剑指秋招,没啥问题。但如果没有应聘求职的经验,导致在秋招中踩坑,那么就肠子都悔青了。就举我的例子,春招过程中我阿里一面后便杳无音信,一点消息都没(和面试官聊得挺火热的,面试官也说后面会有继续的面试),到最后发现是我没有在官网投递简历。还有腾讯错过了性格测试导致杳无音信。如果这些非实力上的错误导致秋招求职失败,那真的是哑巴吃黄连 —— 有苦说不出。而且假若之前没有笔试、面试的经历,那么秋招一开始的时候大概率很紧张,导致错失良机。春招就是一个很好的让我们试水、经历的机会,它试错成本又比较低,顶多收不到暑期实习的 offer,但暑期我们可以准备后面更重要的秋招!所以我觉得春招是必须要参与的!能收到心仪的 offer 更好(一般来说,实习转正要比秋招简单些),收不到 offer 我们也可以积累了重要经验再战秋招!
我的春招早期还抱有些幻想,在大三上 12 月初就投了 Google,但因为当时感觉要多准备准备,就约了年后的面试。面试约在了 3 月上旬,在这之前我就一直刷算法题准备 Google 的面试,没有去学习别的给自己留后路。结果一面挂,幻想破灭后就立即加入到春招大军中,一下发现自己很无力,因为大学学习方向主要是算法的关系,其实在项目方面自己很弱,而开发岗的话面试在这上面占有很大比例。于是差不多整个三月中下旬,我都是在刷面经,根据自己的目标恶补知识,多次熬夜赶项目写在简历上。这一段经历其实挺痛苦的,因为自己很菜,几乎是小白,时间紧,任务重,要补的东西实在太多。但自己心里也知道这段路是必须要走的,必须要经历的。我的春招很仓促,但这让我意识到自己要补的知识量有多大,大约要花多少的时间来学习他们。我的项目是在三月末赶完的,完成之后我就修改简历立马进行投递。(我在此之前也有投递简历、笔试,只是简历上写的项目其实并没有完成。大家一定要注意投递截止日期,不要错过自己喜欢公司的投递时间!)其实我这种安排已经算很晚很末的了,因为准备 Google 耽误了很多,是比较危险的做法。我的面试大多集中在了三月末、四月,试想如果我面试失败拿不到 offer 那后面就没有面试机会了。如果在三月面试的话,失败后还可以投些公司在四月继续面试。大家一定要记住早就是优势。
我春招并没有太多的面试,只面了 Google、阿里、华为、海康威视四家,最终拿到了华为和海康的 offer,其实我也很不推荐这种做法,毕竟更多的面试代表着更多的经验、更多的机会。我这么做算是我性格的原因,因为我算是比较专一、认准一个目标不达成不放弃的人,不太考虑失败的后路如何,如果有多个目标的话我会变得很纠结很犹豫,影响自己正常的学习。但感觉少而精的投递并不适合多数的人。另外希望大家一定要注意身体,平常时间够的话能不熬夜就不熬夜,这个真的伤身体。可能是因为春招时饮食休息不规律,加上压力比较大,所以得了算是一场比较重的肠胃病,虽然最后也没检查出什么大的病症,但是生病很难受,也很影响生活学习,而且到现在有时压力大的时候还会犯。
暑期实习
在华为和海康威视之间我选择了华为,因为我在南京有住处,华为也在南京,省去了一笔住宿的费用。而且女朋友也在南京。海康的话在杭州,有些许的不方便。而且当时觉得华为可能要更镀金些(现在觉得俩个其实差不多吧,各有各的特色)。
期末考试一结束,我就在 7 月 3 号立马开始实习,其实已经算晚的了。华为暑期实习在路由器部门,代码几乎是纯 C 的,代码数量之庞大不得不说令我十分震撼。实习一开始先熟悉环境、了解项目的架构、搭建开发环境等等,后面就是进行功能模块开发、完成实习任务,在这其间我逐渐发现其实自己并不是很喜欢这项工作,这个部门的主要工作自己也不是太喜欢,所以有些动了离心,并不是很想转正。当然,虽然不喜欢,你的实习任务还是必须要完成的。大项目编译起来很恐怖,我这个项目每次编译大约都需要一个半小时左右(还不是编译出全部的,只是编译一小部分),在这期间我就自己学习些自己喜欢的东西。我入职比较晚,但有两个入职比我早一两个星期的小伙伴,因为答辩需要导师、主管们的时间,所以就安排我们三个一起答辩,不再给我安排单独的答辩。我在 8 月中旬答辩,答辩还算稳稳当当,答辩之后离我实习结束时间并不太多了,于是在这之后我便没有进行新的任务开发,而是开始复习,准备秋招,带薪学习真舒服。在这段时间,主管因为知道我了解算法,又赶上华为要员工考试(类似 leetcode 算法题),就让我给大家讲了三次算法课,感觉是个很不错的经历,应该会对转正有些帮助吧。这段时间也在办公室腾讯一面,主管看到后笑了笑调侃了下,也没有责备我,蛮好的,倒是我心里有点不好意思。9 月 2 号我就结束了实习,开始了自己的正式秋招。
秋招
比起春招来说,秋招重要性要大一些。秋招有着更多的岗位,更多的机会,但同时也有着更多的竞争者。现在很多大公司秋招开始的时间越来越提前,原来说金九银十,但有许多公司七八月份就已经开始了,比如字节跳动,在七月中旬就结束了提前批的投递。相传今年腾讯有 3000 hc,其中一半是转正,1000 人分给提前批, 500 人分给正式批。虽然真实性不知,但可以肯定的是越早那么机会越大,而且如果你提前批失败了,还可以进入正式批再面试,相当于又多了一次机会!8.12 号提前批截止, 8.26 号常规批开始。所以大家一定要有意识,尽早做好准备。
虽然经常说早就是优势,但还是一条也是特殊注意,那就是适合自己的才是最好的。我在八月下旬实习快结束就开始投递简历,但当时自己还根本没有准备好、复习好,所以经历了一些面试被 “爆捶” 的经历。比如腾讯的效率出人得高,我在第一天晚上八九点投递了简历,本以为怎么也得过个一周才能面试,自己可以在这段时间准备下,结果第二天中午就收到了了解我情况的电话,第三四天的样子就收到了正式的一面。但当时还没有准备好知识,情况是可想而知的。电话面试时被面试官爆捶,几乎是问啥啥不会,或者说回答不到点子上,面试官其实蛮好的,最后说感觉我对知识是一知半解,并没有了解地很全面。自己心里有苦说不出,但面试官说的没错,我的表现给人的感觉的确就是这样子的,像 “引用和指针的区别” 这种基础的问题都回答不好,怎么让人信服,自己没有准备好不能够怪别人。在这之后更加勤奋地来学习。本来以为腾讯就这么凉了,结果谁知一面的小哥哥给我了通过,几天后收到了二面电话。二面给我的感觉就顺畅很多,但还是不那么满意,还有着更多可以改进的地方,还有着很多没有来得及学习的知识。二面没有像一面那么幸运,久久没有收到下一面的电话。以为自己又凉透了。大概隔了一周多的样子,我突然又接到了腾讯的电话,对方告诉我是 ieg 的,问了我一些基本情况和一些较为基础的知识。过后我去官网查看状态,由原来的复试变为了初试,所以是觉得自己被另一个部门打捞了起来吧,又有了生机,有了一线希望。我具体的秋招经历在 《黄沙百战穿金甲 —— 腾讯秋招经历》 中有叙述,所以不在这边详说。下面说一些更为重要的感觉、经验。
- 关注公司招聘官网,记录下它们招聘的关键时间点,如什么时候开始,什么时候结束投递。
- 多注意牛客网等一些网站的消息,发现其中有价值的信息。
- 内推用处不大,但有内推总比没有好。
- 保证在官网上填写的联系方式正确
- 一开始感觉经验不足的话可以先拿小公司练练手,等到自己感觉经验较足的时候再面大公司。
- 尽可能的多面试,面试其实是一次很好的学习机会!注意记录下面试中的问题,在面试中查漏补缺。
- 一开始海投,争取更多的机会,等有了一两个自己满意的 offer 后可以进行精投。
- 可以先投小公司有个保底 offer,有了保底 offer 后你再面试时感觉是不一样的,会戒除掉一开始没有 offer 时的紧张不安,焦虑也会好很多。如我在海康威视面社时拿到了腾讯 offer,于是在后面就轻松许多, HR 面时面试官问我身边的人怎么评价我,我思考后张嘴说 “逗比”,都给面试官整乐了。假如我没有保底 offer,那么我肯定不敢这么说。而后面也蛮顺利的通过了海康威视的 HR 面。等你有了保底 offer 后,你再面试的气场真的会改变。
- 和 HR 搞好关系,在 HR 面时要下联系方式,后面方便联系。
秋招的确是一场恶战,尤其在你还没有 offer 的时候,内心会非常煎熬。我在腾讯面试流程完成后就一直等待结果通知,这时候我还没有保底 offer。每晚睡觉时候都会多次做梦,梦到手机来了通知电话或是消息,然后就会突然醒过来看一眼手机,发现是梦,像极了之前和女朋友吵架时做梦梦到她理我了。白天的时候又是忧心忡忡,变得神经质,生怕错过通知电话,上厕所想起忘记带手机都会担心害怕这时候打来接不到。但收到 offer 后心总算落地了,觉得这一切是值得的。美好的事物总是值得期待。该吃吃该喝喝,遇事别往心里搁。
选定目标
首先,要根据自己的技术栈方向、实力来选定岗位,比如我语言的话只会 C++,别的语言几乎只会个 “hello, world”,那适合我的目标岗位范围就缩小了。我又特别想进大公司,应聘的目标范围又小了些。我们选定目标很重要,因为有了目标,我们才能决定我们的打法。比如说,我决定了想去哪个岗位,我可以逛几家公司的招聘网站,看看它们这个岗位的招聘要求,看下它们都列出了哪些技能,这些都可以决定我们的学习方向,我觉得这是对我们应聘大有裨益的。
根据时间选择打法
下面我们就要根据我们的时间来安排这些要学习的内容。我觉得我们可以根据时间是否充足来选择不同的学习方式。如果说我们时间比较急,没有太多的时间来学习,那么我们就在牛客等一些网站上多看面经,恶补知识。对于面经中出现的高频问题尤其注意,这些问题即使你觉得十分简单,也希望能抽出一些时间来确认下自己的答案是否真正的正确,是否全面,有没有要补充的。如果能从这些基础问题上进行拓展,那也是一项极好的能力、面试官很看重的能力(我觉得)。比如说面试官让我说四次挥手的过程,我一般最后会加上一句 “在一些情况下四次挥手会变为三次挥手”。在 TCP 四次挥手时有 TIME_WAIT
状态,面试官让我说为什么要设置这个状态时,我最后都会加上一句这个状态时长一般是 2MSL
,这样面试官一般肯定会问我为什么设置成 2MSL
,这刚好是我准备的问题,面试官问的问题便进入了我的圈子中,进入了我的节奏。我们可以看到有时(甚至说很多情况下)我们是可以引导面试官询问问题的,比如在回答面试官上一个问题的最后提一些我们会的且和当前问题有关系的知识点,一旦面试官进入我们的节奏,那我觉得给面试官留下个好印象,面试通过的几率就会上升许多。
但这种时间仓促,单刷面经来准备面试还是有着很大的漏洞,有着致命的不足,那就是我们对知识的掌握深度不足。我们刷面经所得来的知识很有可能只是表面上的,是宽泛而不深入,多而浅的,一旦我们面大公司,遇上比较厉害的面试官喜欢深挖知识点,那这种打法很可能遭遇滑铁卢。比如之前在面 YY 的时候,面试官问了我 TCP 和 UDP 的区别,这个肯定是面经上差不多都有的,我顺利的回答出后面试官问我如果想让 UDP 也能有 TCP 可靠、有序性,我们应该做哪些优化。这个回答我就显得很磕磕绊绊了。
所以我们如果时间充足的话,我还是希望大家能够步步踩实,对于知识点亲历亲为,多写程序,多多实践。这样才能够具有硬实力,很多面试问题是完全可以在面试前一段时间冲刺恶补的,但这硬实力却需要时间来积累。
面试问题的分类
经过我几家公司的面试经历,我觉得技术面试问题大致可以分为三类:底层基础问题、岗位特有问题、根据你简历内容的一些提问。底层基础问题就是那些语言、计网、操作系统、数据库等等这些知识,这一部分很重要,回答能否中的是你基础是否牢固的体现,这些知识很可能是你面哪家公司,不管什么岗位都有可能会问到的。岗位特有问题的话就是指面试这个岗位所独有的问题,这些问题是你可以特殊准备的,尤其是对你心仪的公司。比如你面服务器后台开发,他很有可能问你一些 Linux 常用的命令,因为你在做服务器时会经常用到,比如查看 CPU、内存消耗等等。如果你面游戏客户端开发的话他可能会问你有没有接触过渲染等等。我们已经知道他们可能会问这些问题为什么不去特殊准备下呢,把相关的知识点写进简历中我觉得是很吸引面试官目光的。第三类问题是根据你简历内容的一些提问,比如你的实习经历,项目经历,你在实习项目中遇到了什么问题、怎么解决的,简历中包含的一些知识点等等,这都是极大概率问的。还是就是你简历中的一些特殊点,比如读过 STL 源码,参与过某某开源项目,项目和岗位很符合,面试官很好奇你的项目,竞赛经历等等,如果你将这些写入简历中,那你要准备好一些面试可能会问到的问题。这里说下我对简历的一些建议,大家简历尽量真实,体现出自己的真正实力,可以包装,但要适度,包装的地方要在自己能力范围之内。比如我在简历中说自己了解红黑树,因为之前有专门去学习过红黑树,去理解它的思想,对于插入节点要做哪些事情等等,虽然这些现在也都忘记了,但如果面试官问我,我还是能说出些主要的特点、思想,插入节点一些情况下的操作。这样可能拿不到优秀良好分数,但拿合格分 60 我觉得还是差不多可以的,而且简历中也写的是了解,而不是熟悉,面试官问起来也能够给自己找个台阶下。
面试的一些技巧
如果我们能在网上找到和你同一个部门面经的话那真的赚翻了,因为对于一些基础知识的询问、岗位特有问题,同一个部门的问题范围还是差不多,甚至可能是一样的。说个我的例子,春招的时候学长内推 BAT 中的一家公司,因为内推是同一个部门,我和一个朋友遇到了同一个面试官,然后问的问题几乎是一模一样的。面试官都让我们实现个 vector
,算法题也是一样的。你说如果有人在你之前面了和你同一个的部门,然后写了一个较全的面经,你读到后对你面这个部门有没有帮助。毕竟面试不是在职技术员工们的主要工作,他们也是有着自己本职工作生产压力的,为了你面试单独出一套题我觉得是几乎不可能。他们的面试问题很有可能是他们熟悉的、在自己工作中经常用到的知识点。
下面说下我们应该重视什么样的面试知识点。我们要重视的,是那些高频出现的,较为基础的,不是很难的知识点。如果这些知识点我们回答不出,面试官打的分数我觉得不会很高。比如三次握手四次挥手这种面试天天问的,面试官问我我都没有回答好,那结果是可想而知的,面试官心里有 “这都不会?” 这种想法我都觉得有可能。这一类的问题我们还要学会扩展,这一点我们上面说过了。这一类问题回答好,面试至少能够通过。我们不要惧怕那些难度较高的题目,我觉得这一类题目如果你能回答出,那是加分项,大加分项。如果回答不出,面试官也可以理解,不会减分,至少不会减太多的分数。面对难题时,我们第一时间别直接说不会(除非你真的一点都没有接触过),要略做思考状,让面试官能感觉到你真地有认真对待这场面试。这种难题,很有可能是你和面试官一次交流的机会,是一次抛砖引玉的交流。比如你说出你自己一两点能够想到的思路,告诉面试官,一般来说如果是难题的话面试官很有可能会在你的思路上告诉你很多提示。要注意面试官的提示很重要,细细品味,不管是在所说的难题还是其他题目。如果一个题目你不清楚,那么千万别瞎说,因为面试官是很有可能挖坑的。这类题目你说出你知道的清楚的部分就好,不清楚的就说不太清楚,如果自己有一定的思路但不知道对不对的话就说 “这一点我不太清楚,但我猜测它是怎么样怎么样实现的”,或者说 “这一点我不太清楚它是怎么实现的,如果让我实现的话我会怎么做怎么做”。
面试还是有一定技巧的,有些像应试一般,如果你基础扎实,但没有为此特殊准备,没有去背一些答案,那还是有可能会经历一些坎坷。面试有些题目就需要我们像考试一样专门去准备下,多刷刷面经,背一背面试官希望听到的标准答案,这样更容易获得更多分,虽然这些题目或许在实际中用处并不大。面试也有着运气的一面,是你和面试官在知识、性格等一些方面的匹配,除了真正的实力上,还有一些人为因素在里面,比如你问题没有回答好,但你和面试官性格合得来,聊得火热,面试官也是有可能放你通过的(比如一面二面)。
如果一个面试你可以选择线上面(电话、视频)或者现场面,那么我推荐大家选择现场面。 原因如下:
- 现场面如果是在异地的话,那公司大概率是有路费住宿费报销的,在费用方面不用担心过多。
- 现场面有纸笔,不好描述的东西可以画下来,用图、表格、公式等等来表示,但线上面遇到这种不好表述的东西不太好解决,虽然可以上传附件什么的但很麻烦。
- 现场面和面试官面对面,你的表情动作、肢体语言可以很好的帮助你来回答。线上面的话如果你遇到问题回答不下去面试官不太好注意到你的一些细节,但如果是现场面面试官看到你有困难,关注下你表情什么的很有可能会来帮助你。
- 现场面毕竟是面对面,有人情味在里面。比起线上面,有着更多的人为因素。或许和面试官聊得来而通过了这次面试。
- 如果是视频面,一般也就那几家视频面试的平台,使用牛客的概率也极大(一般都是)。视频面很有可能让你写算法题目,如果是像笔试一样的题目,就会有测试样例什么的,让你直接提交,返回通过率。你写好了,结果一提交返回通过率很低岂不是很尴尬。即使没有测试样例,面试官也可以很方便地在他本地测试一下功能。这样子错误就不太好隐藏。而现场面的话一般是手撕代码,用笔写,我没有遇到过现场面给我电脑让我现场写算法题目的,面试官也是人眼编译,代码很多地方都可能通融通融,一些边缘错误可能也不太易查出。
在我现场面的几家公司中,我都拿到了 offer。而线上面的时候,还很有可能一些问题没答好而翻车。除非是因为时间冲突不能去现场,我推荐大家如果有现场面的机会的话去现场面,个人感觉几率真的大很多。
几家公司的笔试面试感受
和春招的时候差不多,我秋招其实也没有投递太多的公司(不太建议这样),更多地选择了少而精的道路。所以说下较少几家公司的笔试或面试感受。(因为我有过 ACM 的经历,所以在算法题目难度上可能感觉不太一样)
腾讯: 腾讯面试是在秋招的时候,一面被爆捶后,能感觉到这家公司对面试者真正技术、能力的看重。一些表面的知识完全可以靠突击、冲刺来记住理解背过,但腾讯的面试就很看重硬实力,看重那些你必须经历了时间才能积累下的基本功!你做的一些伪装面试官很容易就能够看出来。问问题一般先易,然后逐步加深,一点点挖掘你的实力,有时直到你的知识盲区。在后台开发方面的面试中较看重基础,对算法考查不太难。
头条:头条是在 9.1 号视频面的,我挂在了二面。头条也蛮看重基础的,和腾讯差不多,但比起腾讯会更看重算法题。(头条对算法的看重也是出了名的)算法题目给我的感觉是题目并不难,但需要一定的练习。如果算法题目没有通过的话那很有可能会的挂掉。我就是挂在了二面的算法题目上,题目并不难,只是我傻 * 一样地读错了题意,把字串读成了字序列,葬送了面试机会。读对题意很重要!,也要多听面试官的提示。面试官有多次提醒我,只是我鬼迷心窍地没有去想我题意读错了。到了晚上才反应过来,一拍大腿,肠子悔青。
阿里:阿里是在春招的时候面了一次,秋招没能获得面试机会。给我感觉和腾讯差不多,很看重基础、基本功。阿里的笔试据说只作为参考,笔试题目区别于别的公司的题目,更看重于数学方面、逻辑方面!基础部分大都都是数学题目,高数线代概率论什么的,还有一些逻辑题目,类似经典的 “谁养鱼”,我笔试题还有一题是陶哲轩的红眼问题,如果之前没有遇到过的确蛮难的。后面有附加题,一道偏项目,一道偏算法,当时心态做崩了,所以只做了算法题,项目题代码阅读量较多没有做。
百度:笔试较难。春招时百度的笔试贼难,几乎给我留下了阴影。秋招时要稍微简单些,除去最后一道题目题意不全有问题 AK 了笔试其他题目。其中一道是近期我恰好参加的 codeforces 比赛中的一道题目。虽然要比春招时简单些,但对于大部分人来说感觉还是有些难度。百度通知面试时因为已经签了腾讯,加上身体原因,因此没去面试。算是比较遗憾的事情吧,我对这家公司的技术很有敬畏的。
网易雷火:笔试最难。网易雷火的笔试题目是我经历过最难的。四个小时,六道算法题。六道算法题里还有两道状压 dp,这难度有点难顶。但还算幸运,我通过了笔试,获得了面试机会。可能通过笔试的话面试官会默认你能力较好吧,我一面的时候差不多就是聊天比较多,一开始先来两个很简单的数学题目,然后大致问了下技术问题,后面就是聊天吧,问我了一些 ACM 的经历。二面问了我很多我本该会却不会的东西,让我意识到自己还是很菜,要学习的还有很多。但二面面试官说我之前的评价都很好。
网易互娱:笔试较有意思,我喜欢的类型。第二题有些问题(感觉我思路没有问题的)只通过了 10% 的样例,其他题目 AK。结束后成就感满满,尤其是能做出最后一道算法题目。结束后牛客发了个题解帖子网易 C++ 后台开发笔试编程题。一直没有收到面试消息,应该是凉了吧。
地平线:面试最难。地平线作为一家独角兽,感觉招人的话要求是少而精。一些面试的问题非常深入,感觉要比 BAT、头条还要难一些。虽然是现场面,刷人依旧很不讲情面,很多人都是一轮游,一面之后就被刷了。还好我运气比较好,面试官问的问题简单的我回答的不错,难的我差不多有接触过一部分,多多少少了解一些,最后一路过关斩将,完成了三轮恐怖的技术面(三面最为恐怖!),在九月底获得了口头 offer。
欢聚时代:笔试很简单,选择 + 简答 + 算法题,一个半小时的时间,我 30 分钟就答完了,而且 AK 了算法题目。面试体验贼棒,有幸加入了合肥的线下交流会(不是宣讲会,而是八九个人的交流会)。在交流会进行了公司介绍、答疑、还有 HR 面,还抱走了一些奖品,很喜欢。技术面感觉也很好,和腾讯一样感觉蛮看重基础的,会深挖你的知识。HR 告诉我我面的部门类似于腾讯的 teg, 我挺喜欢的。面试过程中应用方面偏多,尤其是网络方面的知识,对算法重视程度感觉要弱一点。
海康威视:春招和秋招都有面试,感觉面试题目都是一些很经典的高频题目吧,多刷面经没啥问题。秋招时面试官看我有 ACM 经历对我蛮好的,除了问技术问题还给了我很多学习方向的建议,也算是聊天为主。比较玄学的是初试通过后我因为和百度面试相同的原因,没能去复试。结果收到了签约。所以说秋招实在太玄学了。
华为:笔试和面试都是在春招,暑期实习在华为,实习生以实习成绩为秋招考核标准,不能秋招。笔试体验蛮差的,一共三个编程题,AC 了两个,由于第二题叙述不清加样例空格问题用掉了很多时间。询问笔试客服时候客服也态度不太好,(后来才知道好像笔试客服都不好。一些题目可能题目有问题,你去询问,你会得到一样的回答:这是考试,请自己思考)华为面试给我的感觉蛮水的,技术面时间大约 25 分钟,问的问题都是表面上的东西,有很多问题我觉得自己并没有回答好结果面试官就默认我会了。不过据说今年华为秋招很难。
后台开发 C++ 一些高频面试问题
在这边提一些比较常出现的问题,这些问题只是我在面试过程中常遇到的,我觉得比较重要,但题目范围并不是很全面。
C++
- C++ 多态是怎么实现的
- C++ 对象模型、对象内存布局
- C++ 内存(堆、栈、常量区等等)
- C++ 一些关键字 (volatile static const)
- 引用与指针的区别
- 在构造函数中可以调用虚函数吗,析构函数中呢
- 智能指针 (auto_ptr, unique_ptr, shared_ptr, weak_ptr)
- 动态绑定、静态绑定
- STL 容器用法,vector 是怎么扩容的
- 萃取 (traits)
- 动态链接和静态链接区别
- const 与 define 区别, inline 与 define 区别
- strcpy 使用时要注意什么,strcpy、strncpy、strcpy_s 的区别
- memcpy、memmove 的区别
- C++ 代码编译过程的步骤
计算机网络
- OSI 七层、IP 五层
- 各种协议
- 三次握手、四次挥手
- 流量控制、拥塞控制
- TCP、UDP 区别
- 从输入网址到浏览器显示页面的过程(越详细越好)
- 网络拥塞时会有什么状况,网络发生拥塞了怎么办
- TCP 粘包
- select、poll、epoll 区别
操作系统以及 Linux
- 进程、线程、协程之间的区别
- 线程切换为什么比进程切换快
- fork () 会从父进程继承什么,什么是子进程特有的
- 线程共享哪些资源
- 虚拟地址到物理地址的转换(越详细越好)
- 进程间通信方式、线程间通信方式
- 锁、信号量区别
- 硬链接、软链接区别
- Linux 下的命令(这个回答一定要尽量回答你熟悉的)
- 文件操作
lsof、cd、ls、touch、pwd、mkdir、cp、mv、ln、rm - 系统负载(重点)
sar、top、uptime、free、vmstat、ps - 网络相关(重点)
ifconfig、ping、netstat、ss、route、traceroute - 文本操作
grep、sed、awk、cat、less、more、head、tail、wc、sort、uniq - 用户管理、权限管理
useradd /adduser、userdel、usermod、passwd、chmod、chown、chgrp - 其他
&、 nohup、at、corntab、which、find、whereis - 命令的综合运用
统计文件夹下有多少文件名全为小写,后缀名为.cpp 的文件、删除符合某条件的文件(比如删除 10 天前的文件,删除大小大于 4M 的文件)、文件中每行一个数字、输出他们的和
- 文件操作
- shell 脚本
- 文件系统
- inode、Linux 文件结构
- du、df 区别
- 用户态与内核态,用户态怎样进入内核态
数据结构、算法方面
这篇文章没有太涉及到算法题方面,因为我觉得算法归于我刚才说的硬实力。这个的确蛮难短时间突破的,需要长期的积累、学习、刷题,真正地去动手做才能有收获,只有经历过被虐的痛苦才能逐渐轻车熟路,这一点的确挺残酷的,但没有办法,要吃尽苦中苦,光看一些文字解析什么的我觉得并不能对读者提升很高。笔试面试的话题目难度一般最多 leetcode 中等吧,除非是大公司特别看重算法这一块会问很难的。毕竟面试官如果问你一道算法题他自己也要会,doge。
祝大家能够在秋招中斩获自己最心仪的 offer!