保存成功
保存失败,请重试
提交成功

BAT + 程序员校招指南

向作者提问
作者黄小斜,985 硕士,阿里 Java 研发工程师。专栏作者有幸于19年校园招聘中收获BAT等大厂研发offer,具体有:百度、阿里、腾讯、今日头条、网易、滴滴、亚马逊、华为(省略其他小公司)期间也开始分享自己的求职经验,希望帮助到更多想进入互联网行业的程序员同学。专栏作者的技术博客blog.csdn.net/a724888 已有70W+阅读,同时也是微信公众号【程序员江湖】和【Java技术江湖】的作者,目前已有4W+读者。
查看本场Chat

校园招聘是什么

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

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

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

校园招聘的时间点

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

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

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

比如你是 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 联系。

还没有评论
评论
查看更多
微信扫描登录