每一年,应届毕业生都要面对校招,对于程序员来说,进大厂是我们最大的理想。那么我们应该如何准备校园招聘,如何见招拆「招」?简历、网申、笔试、面试、offer,你会过招到哪关?

正值春招结束,此时准备秋招再合适不过,本栏将为你答疑解惑,帮助技术同学更好地去应对校园招聘,拿到心目中理想的大厂 offer。

专栏作者是 985 硕士,目前是阿里 Java 工程师,在 2018 年秋招期间收获了 BAT 头条滴滴等大厂 offer,基本都是研发岗位,期间总结了很多求职经验,包括简历、笔试、面试等方面的内容。

专栏里很多内容都是作者的亲身经历和独家经验,也是最新最有料的一手校招干货,希望能够帮助到更多想进互联网大厂的同学,特别是研发方向的同学。

校园招聘是什么

抛开书面语言,其实校园招聘就是公司对应届毕业生的统一招聘。不管是本科生、研究生、博士生,只要你是符合毕业时间要求的学生,就可以参加校园招聘。

为什么公司要大量地招收大学生呢,原因很简单,刚毕业的学生是一张白纸,对事业最有热情和冲击力,学习能力也比较强。

这也是为什么,创业公司不怎么招大学生,而是招收一些有经验的人,因为他们需要能够马上干活的熟练工,大公司则更喜欢招收优秀大学生,培养他们,挖掘其潜力,为未来做打算。

校园招聘的时间点

不要以为你要等到毕业后才去参加校园招聘,事实上根本不是这样的。

讲真,很多没有准备的大学生都以为校园招聘是毕业以后的事情,事实上你是要在你毕业前一年去参加校园招聘的。

如果你对此毫无了解,那么恭喜你现在已经知道了真相,继续看下去吧。

比如你是 19 年 7 月毕业(如果是春季毕业,就是 3 月份)那么你就要参加18 年秋季的校园招聘。

为什么要提前一年参加呢,因为招聘是一件很漫长的事情,校园招聘可能从7月一直持续到11月,这期间你需要全身心投入,参加招聘,在11月之前基本上就可以完成签约了。

找到工作以后,还剩半年时间,一般就是用于写论文了,当然你也可以用来做别的事情。

所以,校园招聘一定要及早准备,大三或者研二的那个暑假,就是你参加校园招聘的时候了。

校园招聘的流程

在互联网时代,校园招聘其实很简单,一般来说在电脑上可以搞定一切。网上投递简历,申请职位,线上可以笔试、面试,很多公司都会让你在线上完成所有招聘流程。

正常来说,第一步是网申,筛选简历。

第二步是笔试,可能是现场笔试或者是线上笔试。

第三步是面试,同样可能有现场面试或者视频面试、电话面试。

第四步则是发offer,一般会先给口头offer,录用通知书,最后给正式offer。

第五步是签约,也就是签三方协议,三方协议是有法律效力的,所以签约要慎重。

如何准备校园招聘

越早越好,如果你的理想是进大公司,那么真的需要花大量时间来准备。如果你只想进小公司,那只要你成绩还可以,我想你也花不了多少时间就可以找到工作了。

假设你想进大厂、名企,那么可以根据岗位的要求做准备,下面大体上说几点。

专业能力

说白了,专业能力是最重要的,笔试、面试其实考察的都是你的专业能力,比如咱们计算机最爱考的计算机网络、操作系统、数据库、数据结构,就是专业能力最好的体现。

校园经历

很多管理岗位都需要你有优秀的校园经历,不管是社团,学生会,还是其他社会活动,平时一定要注意积累。

竞赛

竞赛是大公司比较看重的一个东西,如果是有含金量的比赛,那么一定要多多参加,让自己的简历更加有亮点。

项目经历和实习经历

如果你在目标岗位方面有过一些项目经历或者是实习经历,那是非常加分的,如果没有,赶快想办法去积累吧,一般暑假实习是校园招聘前的那个春天开始招聘的,如果你能够有实习经历,那还是非常有说服力的。

成绩和奖励

成绩好自然也可以是你的亮点,平时做个学霸,面试官自然会觉得你靠谱,如果有什么奖学金,拿过一些比较有含金量的奖,那也是非常加分的。

春招和秋招的区别

上面说过,秋招一般是在毕业前一年的秋天开始的,而春招则是秋招之后的那个春天开始的。

也就是说,秋招如果没有找到合适的工作,你可以再春招再尝试一下。

但是春招的岗位、招聘人数、公司数量都是大幅度缩水的,简单来说,就是补招,为什要补招,可能是公司没招够人,也可能是有人放弃了offer导致人数不达标。

总之,人家公司也是降低要求来捡漏,能不能被捡到完全看运气,因为春招的机会真心不多,狼多肉少。所以能在秋招解决就不要等到春招了,否则会很痛苦的。

实习岗位和正式岗位

现在很多公司都喜欢招收实习生了,上文说过,实习生招聘是在秋招前的那个春天开始的,由于大部分学生只有到暑假才有空实习,所以也叫做暑期实习生招聘。

为什么公司要招收实习生,一是因为实习工资低,降低成本,但却可以要求学生干一样的活,二是可以提前收人,减轻秋招招人的压力,并且可以择优录取实习生,淘汰不合格的实习生,在通过秋招继续招人,以便达到人员结构最优解。

很多大公司比如 BAT 都喜欢找一大堆实习生,相应地也会降低一定要求,如果你有大厂的实习经历,那么为你秋招是大大加分的,并且还有机会留用转正,所以现在如果你想去大公司的话,一定是要参加实习生招聘的,积累实习经验、面试经验,才能让你在人群中脱颖而出。

关于岗位选择

讲真,上了这么多年大学,很多同学压根就不知道自己适合哪个岗位,其实一点不奇怪,现在的大部分大学专业和工作岗位根本不对口,不知道自己是什么岗位是很正常的,这种情况只能根据兴趣、专业能力来判断你和哪个岗位更匹配了。

作为程序员,大部分时候可以根据语言去选择岗位,比如 Java、C++、Python 等等。当然也有些公司会根据职责来划分岗位,比如前端、后端、大数据、测试等等。

选择一个合适的岗位好比选择一所好大学,一定要选适合自己的,感兴趣的,有一定积累,并且愿意为这个方向去努力,去拼搏的岗位。

很多人看金融火,想去搞金融,看计算机火,又想去搞计算机,结果一看自己的专业和人家八竿子打不着,学校又不怎么样,那你怎么和人家科班出身或者是名校毕业的同学竞争呢。

假如你在这个岗位基础过硬,学校和专业也还可以,同时又有一些项目和实习经历,那么就算是大公司可能也会对你刮目相看。

凡是还是得脚踏实地,不要好高骛远,我当年也是空有壮志,0基础就想进BAT,马上就被现实打脸,这个世界上,光有梦想是不够的,还要有行动。

关于简历

简历这个问题我说了太多遍了,这里用几句话总结要点。

  1. 长得不好看就不要放照片

  2. 基本信息只要名字、电话、邮箱、年龄,不要什么都往上写,不查户口

  3. 模板简单点,不要花里胡哨,最多三种颜色,少图多字。

  4. 岗位要写清楚,只能写一个,要和投递的岗位一致,不要一份简历到处投。

  5. 所有的经历、技能一定要和岗位有关,千万别为了凑数写一些不相干的东西,比如你的岗位是程序员,你就不要写你干过销售。

  6. 技术岗位的同学请注意,写在简历上的技能你一定要有B数,能说清楚的知识点再写到简历上,答不出来的不要作死写上去。

  7. 实习、项目经历只写和自己有关的,别人造的火箭跟你没有半毛钱关系就别往上写了OK?

  8. 简历请用PDF格式,要不然发到HR那边可能会变成无字天书。

  9. 如果你简历上没东西可以写,那么你真的需要充电了,请抓紧时间,积累技能和经验,赶在招聘之前完善好简历。

  10. 我的简历至少改了20遍,才能变成现在我满意的版本,所以不要想一口气吃成胖子,慢慢修改,慢慢完善吧!

我实在来不及了怎么办

很多同学在了解到校园招聘时已经来不及准备了,其实很正常,特别是一些大公司比如BAT,如果你没有长时间的积累,可能连简历关都过不去,但是我的梦想就是BAT,怎么办呢?难道只能望洋兴叹了吗。

这个问题太多人问过我了,其实也不是没办法,这里就有几种曲线救国的办法。

考研

可能你学历不足,能力也不够,又没有经历和经验,怎么办,为何不尝试考研呢,一来提升学历,二来给你2到3年的时间去充电、学习、积累,是不是觉得前途变得非常光明了呢。

不瞒你说,我走的就是这条路

保研和出国读研

如果你本科阶可以争取保研机会,那一定要好好把握,比考研的同学轻松多了。后续努力的途径和上面的考研一致。

出国读研则是另一条路,相比考研,出国只需要考语言,难度要低很多,同时你可以报名多个学校,这是非常 nice 的。不过有一点前提,就是你得有钱,出国读研还是挺费钱的。

先随便找个工作,后续再跳槽

很多人觉得毕业找不到好工作,那么干脆先干几年再跳槽去大公司,感觉也不错。

当然这也是可以的,只不过大厂的社招难度是比校招更大的,所以这条路并不一定有想象中那么好走。

总结

我个人觉得能读研还是先读研,提升学历不说,还有时间可以自学充电,出来工作的第一个平台也会比较高,直接出来工作虽然一开始是要容易一点,但是要逆袭去大公司的可能性相对会低一点。

如何准备技术简历

怎样制作一份优秀的技术简历。相信很多同学都对此有疑问,实际上,制作简历这件事,说难也不难,说简单也不简单。

简单,是因为你只需要它需要的内容其实并不多,只需要你花一下午的时间,找一份简历模板,然后把内容写满即可。

难,是因为你要把你毕生所学提炼成一纸简历,并且要投其所好,让面试官看到他想要看到的,同时也是你自己最为擅长的。

要意识到这一点,其实很不容易。很多朋友也拿过自己的简历给我看,质量参差不齐,但是一般愿意把简历拿给我看的朋友,他们是知道自己简历存在不足,想要改进的,而他们的简历确实也属于比较优秀的。

合格的技术简历是改出来的,从第一份简历开始,不断地积累内容,完善简历,这才是最有效的途径。我们不妨来看看,每一步应该怎么走吧。

第一份简历

我的第一份简历是在大学的时候写的,和很多没有求职经验的同学一样,简历,非常粗糙,除了基本信息以外,没什么拿得出手的东西,只好用英语四六级、计算机二级、毕业设计等一些没什么技术含量的内容来滥竽充数了。

我在大学基本上就是玩过来的,所以什么竞赛、活动基本也没参加过,荣誉奖励这一栏就只能写一写奖学金、优秀学生干部了,相比很多参加过蓝桥杯、数学建模,甚至是 ACM 的同学来说,我那会的简历实在太辣鸡了。

对于本科同学来说,项目经历、实习经历估计也不会多,于是大家纷纷把自己的课程设计、实训课程搬到自己的简历上去,其实这也是一种办法,毕竟有总比没有好。

我那时候已经想要转行去做软件了(原来是电信专业)于是在暑假还去过某互联网小作坊实习,干了两个月 PHP,于是便把这段经历也搬到简历上去了,实在没东西写,就只能挑你最拿得出手的东西了。

于是我的第一份简历就这么“堆”出来了,大学学的是全是电子和通信的课程,毕业设计做的游戏开发、实习做的是 PHP,我甚至把在中国电信打工的经历都写上去了。

这在我现在看来,简直是不可理喻的,杂乱无章,和目标岗位毫无关联,我竟然还想拿这样的简历去应聘 Java 工程师,我一定是疯了。

厚积而薄发

简历这个东西,就是你的个人履历,你要把自己最出彩的东西写到简历上,把最有吸引力的东西拿给别人看。

假如,你真的没有东西写,那怎么办。这也是很多同学问过我的一个问题。答案很简单,没东西写,那就是积累不够,不管是项目、实习、还是博客、GitHub,没有一样东西是随便能做成的,你需要积累,需要有这些东西为你加持,这个过程是漫长而艰辛的,但是却又是你不得不做的。

项目:

首先谈谈项目,简历上的项目一定要和你的岗位有关,投的Java岗位,就不要写游戏开发的经历(我曾经这么干过)如果压根没有关系,那还不如不写,面试官会觉得你很不专业,并且他对你这个项目也不会有什么兴趣。

没有项目怎么办,都说艺术来源于生活,而项目来源于网络,不管是视频课程、网络资料,还是课堂设计、开源项目等,选一个你感兴趣的,花时间去做完它,只要你付出了对应的时间和努力,这个项目就是属于你的。

实习:

比起项目,实习更加不易得,很多同学甚至没有机会去实习,当然,如果学校有组织实习,这样的经历也完全可以写上。

一般来说,实习分为寒假实习、暑假实习和日常实习,对于课业较紧张,抽不开身的同学,可以考虑寒假实习和暑假实习,寒假实习一般很少,不会统一招,而暑假实习很多,比如这段时间的春招实习招聘,录取的同学一般都是被安排在暑假入职的。

如果你课业不紧张,那就没必要等到寒暑假了,上面三种实习生招聘你都可以参加,尽早入职,积累实习经验,一定会让你收获颇多的。

博客:

我在读研之前,压根不知道有技术博客这个东西。后来我发现,程序员都喜欢看博客、写博客,于是我也跟风去做,一做就是三年。

读博客,是吸收别人总结的知识,是一种学习的捷径,但你需要花时间去筛选优质内容。

写博客,是你学习后的输出方式,把知识教给别人,是最好的复习方式,也是检验你学习能力的方式。

博客是个好东西,如果你已经有了项目和实习经历,但是还是觉得不够,想让你的简历大放异彩,博客可能是一个不错的选择。

不管是选择自己搭的博客,还是用CSDN、博客园这类平台,亦或是Git Page这类博客,其实都不重要,赶紧开始写博客,才是当务之急。相信我,写博客,绝对没坏处。

其他:

除了以上内容,其实还有很多可以丰富你简历内容的办法,比如GitHub、竞赛奖励、校园活动等内容,只要和目标岗位有关的经历,都是可以为你加分的。

关键在于,要尽快开始,并且持续积累,做出一些成果,才能最终把这些东西搬到简历上去。

我的简历修炼之路

改了四年的简历,经历了很多个阶段,扔掉了十多份不合格的简历,目前算是可以能让自己和面试官满意了。

第一个阶段,就是我刚才说的第一份简历,杂乱无章,没有重点,内容虽多但是都是生搬硬套,和求职意向没有太大关系。

第二个阶段,明确了自己的求职岗位,简历上只写和目标岗位相关的内容,但是由于相关内容不多,只好加上一些【自我评价】、【校园活动】这类没什么意义的内容。

第三个阶段,根据岗位要求,学习相关技术,积累沉淀,逐渐转化为博客、GitHub上的一些内容,同时自己做一些Java Web项目,在这期间找到了一些实习工作,于是开始实习,简历上也因此多了两段实习经历。

这个阶段其实是我进步最大的阶段的,基础更加扎实,并且有了项目和实习经历的加成,即便如此但是由于这些内容很多很杂,我还没办法把最精华的部分提炼出来,在简历上写的东西还不能打动面试官。

第四个阶段,在一次次简历被筛,面试折戟之后,我意识到简历可能还存在问题,虽然这个阶段简历上已经没有什么内容要补充的了,但是需要做减法,也需要注意细节。

比如,在掌握技能这一栏目里,只了解一些皮毛的知识点,用“了解”来描述

了解得比较深入,能够熟练回答相关面试问题的知识点,可以用“熟悉”来描述。

看过相关书籍、源代码,了解过底层原理的知识点,可以用“熟练掌握”来描述,当然,我绝不敢用“精通”二字。

对于项目和实习经历的描述,我更加慎重了,不管是措辞、逻辑都更加严谨和专业,只写自己做的,并且要分点叙述,把难点和亮点都介绍清楚。

我参加校招时的简历大概长这样(仅供参考)

这份简历仅供参考,切勿盲目模仿。上面我说过,对于掌握情况不同的技术,你需要用不同的形容词去描述,我这里也是这么做的,用词基本都是经过考虑之后才确定的。

简历上提到的技术点,我基本上都是比较熟悉的,保证能够说出一些有深度的东西来,才敢写在简历上。也只有这样,你才能保证面试官问到相关技术知识点时,你有足够的把握去回答。

  文能码字,武能coding,是我黄小斜,不是黄老邪噢。  

简历上的项目经历怎么写

作为一个程序员,想必大家曾经都做过一些项目,可能现在手头上也还有一些项目。

不过还是有很多学生朋友来问我“没有项目怎么办”,诚然,确实有不少同学没有实习经历,又没有什么像样的项目经历,对于这样的同学,简历上的项目经历难道只能空着了吗。

其实不然,就算你是跟着一些课程做项目,你也可以通过丰富项目内容的方法把项目变成自己的,只要你真的去做了,真的理解了代码逻辑,同时有所收获,这个项目就是有价值的,是可以登上简历这一大雅之堂的。

正因为如此,现在很多简历上的项目经历的质量都是参差不齐,同时有的项目经历又非常相似,面试官一眼就能知道你的项目到底是真是假。

大部分的面试官都会对你的项目经历进行提问,你能不能清晰到位地描述号好你的项目经历,决定了你的项目价值,即使项目再牛掰,你不能把它讲清楚,那么也是白搭。

所以,回答关于项目方面的问题,是有技巧可循的,比技巧更重要的是 3 条原则,这也是我经历各种面试之后总结出来的东西。

真实性

项目经历,贵在真实,简历造假什么的真的不要想了,面试官稍微深入问一下简历上的东西,保证你会一脸懵逼,简历上那些高大上的技术到头来反而成为你被面试官抓住的把柄。

何谓真实,首先,你要真的做过这些项目,其次,对项目的描述要真实,可以适度修饰,但不要太过夸大。

项目是真实的,你自己心里才会有底,面试官问的有问题,你才有把握能够回答。退一万步讲,就算你真的骗过了面试官,那你也谝不了你自己,简历造假如果在日后被发现,那处罚也是相当严重滴。

所写内容一定要和你有关

很多朋友都犯过一个错误,包括我,就是把喜欢把项目经历写的天花乱坠,比如把整个系统的开发工作都写在简历上,把部门的技术栈搬到简历上,把那些你没参与的工作都写到了简历上。

其实这只是看起来很美好而已,当面试官问你比较不熟悉的模块时,你就只能说这个不是你做的,那个也不是你做的,这就十分尴尬了,在面试官那里一定也是大大扣分的。

在吃了几次这样的亏之后,我简历上的项目经历再也没有出现和我无关的内容了,面试官问到实现细节我也能够应对自如,毕竟自己做过,心里肯定清楚呀。

所以,与其指望着拿别人做得模块来浑水摸鱼,不如想想如何提炼一下你的项目内容吧,就算真的只是简单的CRUD,也没有关系,所谓“亮点自寻”,这个时候你就应该想办法把项目里的亮点找出来。

比如你用了哪个ORM框架来实现数据库交互,为什么用Mybatis而不用Hibernate,或者是用了哪个Web框架、日志系统、构建工具,又或者用了什么数据库、缓存,为什么要用这些技术。

除此之外,你也可以介绍一下自己如何优化模块的性能,复杂的业务逻辑又是如何实现的。

分点叙述,条理清晰

这一点与其说是原则,不如说是技巧。把“分点叙述”翻译成白话文就是“一个模块用一段话来介绍,如果你做了 3 个模块,那么就分1、2、3点,分别用一句话来介绍所做的内容”

这里补充一下,你可以在分点描述里提及技术栈,或者是在项目总结的部分介绍相关技术栈。

比如:1、我负责部门数据运营报表模块的开发工作,使用JUC并发工具、线程池等技术完成该模块的业务逻辑开发,使用MySQL数据库、Hibernate框架完成数据层的处理,同时我对该模块的业务代码进行了优化,提升了数据报表30%的响应速度。

为什么要分点叙述,其实就是让你的项目条理更清楚,面试官很容易就能看出你做了哪几个模块,可以对应地进行提问。

以前我没有分点描述项目,结果面试官只能从一大段话中提取一些关键字来提问,这可能让面试官很不满意。

不只是项目经历里的模块需要分点描述,你自己在介绍自己的项目时也应该通过这种方式来完成,这样的好处显而易见。

你很快就能够条理清晰地向每一个面试官介绍自己的项目,并且针对每一个模块都可以很自然说出它们的难点、亮点,以及实现过程。

不要问我为什么知道的,当我面试的次数越来越多时,我已经习惯了介绍项目、回答项目问题了。所以每次遇到关于项目的问题基本上都是张口就来,面试官一问什么我就知道要答什么了。

虽然以上三点原则不能包治百病,但是对很多同学来说应该是蛮有益处的

如何准备算法笔试面试

程序员最头疼的算法题,其实主要指的就是算法笔试和面试题,在国外互联网企业,算法笔试面试题是非常常见的,而如今国内的互联网大厂也很喜欢考察算法题,特别是对于校招同学来说,算法题更是非常重要的敲门砖,过不了这一关,也就没有后面的事情了。今天就带大家聊一聊,如何应对算法笔试面试题。

为什么要考算法题

为什么如今的互联网公司都喜欢考察算法题呢,其实主要有几个原因,当然这只是我的观点,分享给大家。

数据结构与算法是程序员的必修课

对于程序员来说,数据结构与算法是必修课,每个程序员都应该对其有所掌握,可能大家一开始接触编程都是从某个语言开始,实际上,没有数据结构与算法知识的支撑,你很难理解一些比较高级的语言特性,比如集合类,比如 hash 算法等等。

数据结构也是 4 门计算机基础专业课之一,可见其重要性。而算法一般也会基于数据结构进行设计,因此有很多关于数据结构的算法题,比如栈和队列、二叉树相关算法,都是基于数据结构来进行设计的。

算法题有难度

大家都知道,算法题是很有难度的,因为考察内容很广泛,没有固定题型,需要灵活变通,有自己的解题思路才行。正如咱们初中高中的时候搞的奥林匹克竞赛一样,只有少数人才能参加,能够解题。

虽然算法题也有难易之分,但是比起其他的基础面试题,更加难以准备。因为考察基础知识的面试题都是可以通过系统复习来进行准备的,也有很多的面经和面试题可以作为参考。算法题有难度,所以更有区分度,更能够区分优秀和普通的同学,虽然这一区分标准并不能让绝大多数人信服,但是确实是一种很有效率的选拔方式。

外企一直拿算法题作为笔试面试必考的内容,也是基于这一原因,而他们更加认同的一点是,能够解决算法题的同学,解决其他困难问题也不会差多少,这一点其实也是很有道理的。

算法题从入门到进阶

如果你是一个算法小白,或者是不知道如何准备算法题的笔试面试,那么这里我将给你们提供一个关于算法题的学习路线。

这个路线也是根据我自己亲身经历总结而成的,我也是从一个算法小白一步步练习,才能应付一些大厂的算法题,相信这个路线对你们能够有所启发。

数据结构与算法基础

数据结构与算法基础是每个算法小白必须要学习的内容,如果你连栈和队列都搞不清楚,那么又如何去解决相关的算法题呢。

我当时是在考研的时候学习数据结构专业课的,当时完全是一个小白,买了一本《天勤数据结构》就开始啃了起来,但是因为自己完全是零基础,所以光看书还是难以理解,于是上网找视频看,系统讲解数据结构的视频并不多,记得一开始看的是郝斌的数据结构,就这样我顺利地完成了数据结构的复习,最后考研专业课也考了个不错的成绩。

其实就算不是考研,你也可以按照我的学习方法去学习这门课的。

刚才说的主要是数据结构方面的内容,其实还有一些算法并不是基于数据结构进行设计的,比如动态规划、递归等算法,其实都是一种思想,这方面的书籍我也看过很多,但是并没有理解多少,后来看到了一些还不错的算法书籍,这里也可以推荐给大家,一本是《图解算法》,一本是《啊哈,算法》都可以作为入门的算法的书籍。

剑指offer

学完第一部分的内容之后,相信你对数据结构和算法基础已经有所了解了吧。

这时候你已经有能力去解决一些基础的算法问题了,而剑指 offer 则整理了互联网企业常考的算法问题,在过去几年里都非常流行,很多互联网企业都会选取其中的题目进行考察,因为里面的题目都很经典,所以非常受大家青睐。

第一次看到这本书的时候,发现这些题目的解题思路都非常独特,以前从来没有见过,这本书上的代码是 C++ 语言版本的,所以我看着也比较吃力,其实现在网上已经有很多其他语言的代码版本了,我博客里就有基于Java 版本的代码。建议还是找到自己对应语言的版本,正好可以熟悉一些 API,避免发生错误。

剑指 offer 一共包含40多道算法题目,其中大部分是和数据结构有关的题目,比如字符串、栈与队列、二叉树、链表和数组等等,这些题目如果你从来没见过,可能完全没有思路,但是如果你见过几次,能够自己写上几遍,其实就可以对题目的思路有所理解,下次再遇到的时候就有机会独立解决了。

LeetCode

一般来说,剑指 offer 是至少要刷个1到2遍的,你需要了解大部分题目的解题思路,并且能够手写出大致的代码,才能进入到下一个阶段。

LeetCode 是程序员都知道的一个网站,一个刷算法题必备的网站,但是相信大家一开始接触这个网站的时候,一定会觉得头大,比起剑指 offer 的题,LeetCode 上的题目更加有难度,题型众多,变式也很多,出题的角度也比较刁钻。

我第一次到这个网站刷题,也觉得难度颇高,无从下手,但是后来还是找到了解决之道。遇到一个从来没有接触过的领域,最好的办法就是听取前辈们的建议,首先,我看了一些 LeetCode 刷题指南,网上有很多,大概会告诉你应该如何去刷题,按照什么样的顺序。其次,我也看了一些LeetCode 刷题视频,里面会告诉你一般的解题思路。有了这些铺垫之后,我终于开始在 LeetCode 做题了,迈出第一步之后,剩下的就是坚持了。

有一些常见的刷题顺序可以推荐给大家,一个是按照默认顺序,我不是很喜欢,因为题型乱七八糟,不好归纳,第二个方法是按照 tag 刷题,并且避开差评的题目(差评的题目一般用例都比较古怪,很难 ac)我主要是按照 tag 标签进行刷题的,并且只刷一些比较经典的题目,最后一共做了 150 道左右,又花了一些时间重新进行复盘,这才算是有了一定的解题能力。

真题

不做真题,即使你刷题再多,恐怕都会吃亏,算法真题和 LeetCode、剑指 offer 其实都不尽相同,因为很多真题是公司自己出的,题目质量良莠不齐,有的题目可能是经典题型的变式甚至是照抄,有的题目则是一些出题人脑洞大开自己想的题目,考察的内容不再以算法思想为主,而是以解决问题为主,题目更加灵活多变,有时候也会结合公司业务场景,甚至是时事热点,总之就是五花八门,等你做多了之后,也就见怪不怪了。

互联网算法真题其实很多地方都有,比如牛客网,在知乎上、博客上也能找到不少,光我做过的笔试面试算法题,估计也不下200道。这些题目没有什么捷径,多做,多练,多总结,学会快速解题,迅速得分,掌握解题之道,只是时间的问题。

算法题解题技巧

算法笔试题和面试题最大的区别就在于,现在的笔试题一般都是线上考试,判卷也是自动化的,对就是对,不对就是不对,面试题则更加人性化,你写个大概的代码框架,也比啥都不写要强得多。

正因为如此,所以掌握一些算法题笔试解题技巧,也是非常有必要的。

1 熟悉自己使用的语言这里主要指的是要了解编程语言中数据结构的使用,比如栈,队列,链表,哈希表等等,还要会使用一些排序方法,比较器。除此之外,还得会写基本的输入输出,因为很多在线笔试的网站都要求自己完成输入输出。

2 科学答题这里说一个小技巧,就是实在想不出来的话,可以直接输出测试用例。

3 检查错误另外,有些题目可能会超时,原因是复杂度太大,可以考虑空间换时间。

而有些题报内存问题,此时要检查一下数组大小是不是超过规定的空间复杂度了。

如果是递归栈溢出,则可能要考虑剪枝或者使用非递归做法。

另外,记得要检查你的变量类型是否正确,有时候可能需要用long但你却用了int,也会导致白白丢分。

4 本地调试很多笔试题都支持本地编辑器提交处理,所以你可以先在本地进行测试,如果有问题的话可以考虑断点调试,更容易发现错误在哪里。

5 黑科技其实很多笔试题在网上都有原题,用好你的搜索引擎和聪明的头脑,相信你可以多得几分的。

BAT大厂面试的那些套路

发现一个有趣的现象,网上一些比较热门的文章、博客往往都是“某某公司面试题汇总”、“某某公司面试题解析”,似乎程序员们对面试题总是抱有热情,好像多看了几道面试题,自己的能力就可以很快提高一样。

作为一个研发工程师,看过很多公司的面试题,也参与过很多公司的面试,发现大厂的面试题更加具有代表性,虽然现在很多大厂的面试官也懒得自己出题了,不过经验老到的他们还是更清楚如何高效率地考察面试者。

而小公司的面试题往往五花八门,有的更加贴近公司自身业务,希望面试者结合业务给出解决方案,有的干脆直接从书本上找题目,考察一些死记硬背的概念,当然,有的初创公司逼格很高,则会搞一些高难度的面试题,角度刁钻,常常让面试者猝不及防。

既然大公司的面试题具有共性,那么我们也不妨来尝试探讨一下,大厂面试题到底考察面试者哪些方面的能力。

1、基础知识

基础知识无疑是大厂面试官最喜欢考察的东西了。如果面试者的基础都不扎实,那么建立于基础知识之上的实战能力、业务能力都是空中楼阁。

说到基础知识,首当其冲的就是岗位要求的能力了,比如对于Java工程师,你需要熟悉Java核心技术:反射、多线程、异常处理、集合类、IO流。

作为一个程序员,你还需要掌握计算机网络、操作系统、数据结构与算法,甚至是计算机组成原理(一般很少考察)。

这些都是最基本的,除此之外,作为一个Java Web工程师,你需要熟悉Web框架,比如SpringMVC、SpringBoot,能说出它们的工作原理,特性、优缺点等等。

而作为一个后端工程师,你需要了解MySQL的工作原理、常用命令,了解Redis的常用数据结构、使用方式,了解Java网络编程的基本概念,能够解释NIO和BIO、能够了解JVM,了解GC等等。

面试官考察这些基础知识的方式很简单,找一些相关的面试题一一进行提问,根据你的回答,基本上就可以了解你对这些知识点的掌握程度了。

2、知识深度

也许上面这些问题,你通过背一些面试题,看一些面经,就能掌握得八九不离十了,毕竟面试官提的很多问题也是在网上找到的,所以你可能会放松警惕,觉得这样就足够了。

其实不然,大厂面试官还有一个爱好,就是对于每个知识点,都喜欢深入往下问,问到没有问题可以问,或者问到你不会为止,这样提问的目的只有一个,就是试探你对这个知识点的理解深度,如果你无法提供足够深刻的回答,结果往往就是失败。

举个例子来说,大家都知道JVM的GC,一般来说,常见的GC算法、垃圾回收器也都知道那么几个,但是要说到具体的回收过程,可能很多人的理解还是没有到位。

我们可以这么回答:首先对象先分配到年轻代,下次GC时,活着的对象进入老年代,实际上年轻代还分为Eden和Survivor区,Survivor区又分为From区和To区,From区和To区的对象在每次YGC时都会交换,在Survivor区存活下来的对象的年龄会+1,直到年龄达到进入老年代的阈值,此时Survivor区的对象进入老年代。

就算答案已经这么冗长,其实还可以被拓展,被补充。面试是一个面试官考察你的机会,也是一个你展现自己能力的机会,所以,每次面试都要毫无保留,把你会的东西全部表现出来,结果往往会令人满意。

相比于基础知识,要提高你的知识深度更加需要时间和精力,这就不是一朝一夕的事情了,需要你不断地去积累,这方面的内容读者朋友也可以参考我之前的文章。

3、解决问题的能力

解决问题的能力,这个主题有点宽泛,但是却真的是大厂最喜欢考察的东西。

比如面试官拿出一道你没见过的算法题,往往是很容易让你产生畏难情绪的,如果你放弃思考直接回答不会,那你就输了。

题目可能很难,但是面试官想看到的是你思考的过程,以及解决问题的能力,如果你可以介绍自己的思路,给出一些解决方案,就算题目真的不会写,可能也会给面试官比较正面的影响。i

当然,如果你有很多题都不会,那可能你解决问题的能力也就这样了。

除了算法题,智力题也是一种常见的面试题型,这些题目可能涉及概率论、博弈论,题目本身不会很难,你应该给出你的解题思路和思考过程,面试官一般也会引导你打开思路,这类题目也很能反映一个人解决问题的能力。

如果你有项目经历或者实习经历,那么面试官往往会问你在项目中负责什么,遇到了哪些困难,又是如何解决的,其实也是为了考察你解决问题的能力。

如果你能很清楚地介绍你所做的东西,并且能够告诉面试官自己通过努力解决了项目中的一些难题,一定会让面试官对你刮目相看,当然,前提是你真的做过这些项目,克服过这些困难,简历造假就是搬起石头砸自己的脚。

总结:

说了这么多,其实大厂面试官只不过想要了解面试者的可塑造性,面试题、算法题、压力面试等,都只是一种手段。因为大厂需要的有可持续发展能力的人才,能够为公司和部门长期发展提供更多的可能性。不需要救火队长,也不需要混子。

大厂技术面试的一些技巧

校园招聘号角吹响,一大波毕业生正在路上。众所周知,校园招聘中最重要的几个环节就是投简历,笔试和面试了。

前两个部分的内容我们之前已经讲过了,今天我们来讲一下面试中你要知道的事。

由于我是技术同学,所以对其他岗位的面试不是很熟悉,我也参加过一些群面,但是毕竟较少,这里就不献丑了。

正常的技术面试一般有2到3轮,外加一轮HR面。技术面试的技巧其实不管是第几轮都是适用的。这里总结一下。

自我介绍

一段好的自我介绍是一场面试成功的基础。自我介绍一般可以围绕着简历来说。

由于这段时间面试官会看你的简历,所以可以把时间控制为面试官看完简历所需的时间。

自我介绍最重要的是有条理,突出重点。

比如我会这么说:

1 您好,我是xxx,是xx大学研二的同学,专业是软件工程。

2 我主要学习和专注的方向是Java后端开发

3 之前我看过一些这方面的技术书籍,写过一些博客,做过一些项目。

4 去年有两段实习经历,分别是什么什么,大概说一下。

这样自我介绍说完大概就30秒左右,面试官也基本看完了简历,接下来面试官就可以开始提问了。

回答问题的技巧

面试官开始提问,你开始回答,一般这个时间需要持续半小时到一个小时。你需要毫无保留地把你所学的东西表达出来,当然要使用得当的方式来回答。

概念性问题回答步骤

概念性问题一般都要分点答题,可以使用总分总的结构,尽量答全面,只说自己比较有把握的部分,不要不懂装懂。

讲一下 tcp 的三次握手和四次挥手。

很基础的题目,但是回答也要有条理。一般可以分三步来回答,先说一下握手的过程,注意描述客户端和服务端,并且大概说一下为什么要这么做。

讲一下 lock 和 synchorized 的区别。

这道题你最好能分点来答,并且把用法和原理都答上。

1 sync 和 lock 都是可重入锁。

2 sync 可以锁类,实例和实例方法,lock 只能锁方法。

3 lock 可以搭配 condition 使用,以维护多个等待队列,而 sync 只有锁对象一个等待队列。

4 lock 需要手动释放锁,否则会内存泄露。

5 sync 底层使用系统调用,需要切换到内核态,而 lock 则使用 aqs 来实现。

看似简单的问题,如果要回答完整还是很不容易的,这时候分点答题是最好的选择,避免自己的思路混乱,也能让回答显得很有条理。

算法类问题回答步骤

算法类题目的答题技巧也是有迹可循的,首先可以先问清题意,让面试官提供足够信息,然后要求思考一段时间,想一个暴力解法来回答,接着和面试官交流,不断进行优化。

说一下10亿个数找出前十个数的办法。

1 可以先问一下数字范围,单机内存是否足够

2 尝试回答建十个元素的小顶堆,数组遍历一遍即可。

3 如果面试官不满意,再尝试回答哈希分片到多台机器上执行,最后再进行归并。

总之,算法题一定是一个交流和思考的过程,了解足够多的信息以后,先暴力再优化,实在想不出来可以实话实说,不要打肿脸充胖子。

实际场景类问题

这类问题通常不好准备,需要你综合以前所学,加上一些现场的思考来进行回答。不过万变不离其宗,如果你基础扎实,这类问题也难不倒你。

秒杀系统架构怎么设计

其实这个题在网上可以找到答案,不过这类的场景题很受面试官青睐。

1 前端做好请求拦截,时间到之前不提供链接

2 http访问做负载均衡

3 请求消息通过消息队列削峰和限流

4 通过缓存缓解数据库压力

5 数据库做主从和读写分离

看似复杂的题,只要你有一定积累,还是可以分点回答清楚的。

HR面回答技巧

如果能够面到HR小姐姐,那你已经是很优秀的同学了,HR面说简单也简单,说难也难,重要性自然不及技术面试,但是也要足够重视。

1 纯咨询类问题

家长,故乡,女友,学校等等方面的问题,礼貌地回答即可。

2 灵活类问题

优缺点

最有挑战的事

最成功和最失败的事

实习收获

这方面的回答讲究一个扬长避短,把一些不起眼或者是中性的缺点拿出来说,同时要说现在是如何改正这个缺点的。

这样回答的话,既巧妙地避开了你的缺点,也能让人看出你完善自己的决心。

当然,分点答题很重要,一定要说清楚自己的逻辑,是什么,为什么,怎么做。

3 较敏感的问题

你最讨厌什么样的人

你在工作中遇到最大的问题

有几个offer你如何选择

这类问题一定要思考清楚再回答,避免给HR留下不好的印象,offer选择的话,可以不说的太直白,我一般是说结合公司,岗位和城市进行考虑。

4 学习和职业规划

平时怎么学习

遇到压力怎么处理

未来的职业规划

这方面也需要做准备,分点答题即可,对未来规划需要清晰,答到点子上。否则会扣分。

有什么问题想问的

我一般会问部门情况和后续面试安排,多了解一些信息总是有益的。并且可以让人感受到你对他们的重视

压力面试技巧

压力面的起源不知道是哪里,但是确实会遇到一些压力面,说是压力面,不如说是面试官故意刁难你。

这时候你的反应是否正确就很重要了,人在情绪激动的时候如果还能理性处理问题,会更让人青睐。

我经历的一次压力面是这样的。

1 自我介绍后,面试官先吐槽我的项目没技术含量,然后抛出几个问题。我只好陪笑。

2 接着我对这个问题尝试做出回答,回答质量一般,被直接驳回。我又尝试咨询问题详情,被不耐烦地打断。此时我已经很不爽了,但我说话还是很和气。生怕再触怒他。

3 然后他的态度才逐渐缓和,正常地提了几个问题。我也都正常回答了。

全程我都保持冷静,没有跟面试官正面冲突,而是避其锋芒,为自己争取机会。不管是压力面,还是遇到脾气差的面试官,甚至是故意刁难你的面试官,切记要保持礼貌和理智。

不卑不亢,保持谦虚,礼貌作答,才是应对任何面试都应该遵守的原则。

以上就是我的面试技巧总结,如果大家有什么其他想法,也欢迎跟我交流探讨。

额外内容

应届生如何获取招聘信息

关于秋招的一些真相

实习转正和校招如何权衡?

校招前几个月,如何高效地进行复习?

刷完500道BAT面试题,我能去面试大厂了吗?

从Java小白到收获BAT等offer,分享我这两年的经验和感悟

2017春招实习面试回顾:从面试连跪到收割offer

从零基础到拿到网易Java实习offer,我做对了哪些事


本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。

阅读全文: http://gitbook.cn/gitchat/activity/5ccb0783c5eb6e70c45303aa

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App , GitChat 专享技术内容哦。

BAT + 程序员校招指南相关推荐

  1. 要命!《程序员延寿指南》火爆 GitHub,日涨1500+星,跟着码农干多活 20 年

    金磊 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 跟着程序员搞养生,最高能多活20年?! 就在最近,一个名为<程序员延寿指南>的项目在GitHub上大受欢迎,几天狂揽5.5k颗星 ...

  2. BAT程序员们常用的开发神器

    BAT程序员们常用的开发神器 黄小斜 今天 作者丨InfoQ编辑部 工欲善其事必先利其器,一个优秀的程序员除了代码写得好,善于利用各种开发工具同样可以事半功倍.以 BAT 为代表的各大厂程序员们在平时 ...

  3. 「程序员做饭指南」霸榜GitHub,还用数学公式解决「吃什么」世纪难题,微软程序员出品...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 我也是没想到啊,GayHub啊不 ...

  4. 《程序员做饭指南》霸榜 GitHub!不仅有量筒、烧杯,还用上了数学公式?

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 对于 GitHub,相信绝大多数程序员都再熟悉不过了. 作为目前全球最大的开源软件存储库,GitHub 托管了大量的软件代码,无数开源爱 ...

  5. 必看!程序员逃生指南

    作者 | 八宝粥 设计 | 章敏 出品 | CSDN(ID:CSDNnews) 2020 艰难一年已经过去 ,2021 究竟如何,谁也不知道. 作为程序员,前有「大小周」,后有高科技坐垫"监 ...

  6. Github热榜--《程序员做饭指南》

    公众号:尤而小屋 作者:Peter 编辑:Peter 最近在GitHub上发现了一个很有趣的项目:[程序员做饭指南],居然成为多日GitHub的热榜第一. 仓库具体地址: https://github ...

  7. 14K Star,「程序员做饭指南」冲上热榜

    来自公众号:OSC开源社区 作者:叶子 近日,GitHub上一个名为「HowToCook」的项目冲上热榜,没错就是一份程序员做饭指南,可它又不是一份普通的做饭指南,一起来看看吧. 首先,它拥有丰富的菜 ...

  8. 小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

    本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有 ...

  9. 小程序的 HelloWord 01《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

    本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有 ...

最新文章

  1. Llinux课程计划安排
  2. c++switch实现猜拳_策略模式+简单工厂+注解消除 if-else/switch-case
  3. 求助:如何在Vista系统环境下增加系统盘C盘的容量?
  4. Linux中shell的分类以及查看当前的shell
  5. jqgrid常用操作
  6. oracle 临时表空间的增删改查
  7. USACO / Sorting a Three-Valued Sequence (简单题,方法正确性待证)
  8. JVM学习-操作数栈(Operand Stack-官方翻译)
  9. java synchronizer_Java同步框架AbstractQueuedSynchronizer详解
  10. 开发错误记录5-Failed to sync Gradle project ‘HideTitleDemo’
  11. 模式识别—判别函数分类法(几何分类法)
  12. 浏览网站ssl证书错误该怎么办?
  13. the sip module implements API v12.0 to v12.8 but the PyQt5.QtGui module requires API v12.9
  14. jmeter基础(二)-JMeter证书
  15. 应该如何进行程序化交易系统的检验?
  16. 等待了两年,最终得以如愿,不容易!
  17. 各大互联网公司技术博客汇总
  18. 驱动文件中只有cat/inf/dll文件,怎么安装
  19. LintCode算法入门:
  20. 真人演示——怎样练腹肌最快最有效听语音

热门文章

  1. 解决python错误:utf-8 codec can't decode byte 0xbb in position3:invalid start byte
  2. 解决网络丢包问题及故障判断方法
  3. Vue3 怎么使用icon阿里字体图标
  4. z-index使用以及失效的处理方法
  5. 如何设置Python环境变量?
  6. SqlDbx 连接mysql 数据库
  7. 瑞吉外卖项目:移动端导入用户地址簿与菜品展示功能实现
  8. 【开餐馆】 动态规划
  9. 做软件测试工程师真的很容易吗?
  10. opencv之Mat的定义