春招经验总结帖!

647 阅读11分钟

春招总结

本人水硕,今年研二。从今年二月份准备春招一直到目前拿到了腾讯视频,京东,滴滴数据中台的后台开发实习Offer。遗憾的是由于测评的原因,阿里HR面后无法录用。之后换了4个BU,共经历23场阿里面试,每次都是倒在了最后的录用排序。写这个帖子希望记录一下自己这一段的面试经历,也分享一下自己的一些经验,希望能够帮助到更多的人。

简历

简历是我们的第一份敲门砖,在用人公司与我们进一步沟通之前,他们也需要通过简历对我们的专业能力进行评估,衡量我们是否能够胜任这一份工作。针对于我们自己的简历,我总结出了以下几点需要注意:

  • 简明扼要,切忌冗余
  • 突出自己的技术栈
  • 着重介绍自己的项目经验和实习经历
  • 写上的每一个字你都要对其负责
  • 兴趣爱好,自我评价往后放(尽量少)

简洁很重要

在整个春招的过程当中,我也见过很多一起求职的小伙伴的简历。有的小伙伴的简历足足有4,5页长,在简历上疯狂介绍自己的校园活动,心得体会和个人评价。你要知道我们面试的公司大部分都是互联网公司,而互联网的时间从来都是不充裕的(实习过的人可能都有这种感受,需求没做完过),没有人愿意认认真真的拜读我们的简历,他们需要的是在最短的时间内,知道我们的技术体系,项目背景然后进行发问。因此我们首先要做的就是尽可能的在简历上表述更加有效的信息。

突出技术栈

在整个面试过程当中,面试官会主要根据你的自我介绍和简历对你进行发问,我所经历过的大部分面试官也有直接对着简历一条一条问的。其实我觉得这是我们的一个优势,如何才能引导面试官到你熟悉的领域?(PS:面试官如果真的随着性子问,可能除了真正的大佬之外,我们都是顶不住的。)那就是你简历上的个人技能这一块了。你可以把你所擅长的技术写的细致一些,并且针对这些提到的知识点去进行相关的总结,形成体系(PS:最好能够将你所提到的这些技能准备2-3个亮点,或者你总结一下实际操作时遇到的一些问题)。接下来放一下自己简历上对于个人技能方面的描述,希望能够有所参考:

  • 具备较为扎实的 Java 基础,熟悉常见的数据结构,深入理解 OOP 编程,具有良好的编程习惯,对 Java 集合框架,反射机制等有一定了解。
  • 了解单例,代理,工厂,装饰等设计模式,曾对实际项目使用工厂和装饰模式对所开发 activitis流程进行重构,从而使多流程管理共用一套基础代码,只需重写少部分代码即可实现流程开发。
  • 熟悉 mysql,有具体的线上调优实践经验。能够熟练使用 JDBC 操作数据库。了解内存存储系统 redis 的使用,在项目中有利用 redis 缓解数据库访问压力的经验。
  • 能够熟练使用 Spring,SpringMVC,Hibernate,activitis等开源框架,Git,Maven 等项目管理工具。
  • 了解 jvm,java 内存模型,垃圾回收机制等。
  • 熟练掌握 UDP,TCP(三次握手,四次挥手),HTTP 等网络协议。
  • 熟悉 Linux 常用命令,具有一定在Linux 环境下工作和维护的能力。
  • 具有项目开发经验,作为项目组组长,了解开发流程,具有良好的合作沟通能力和项目迭代管理能力。
  • 具有京东零售子集团的Java开发实习经历,参与需求迭代开发,了解互联网公司的开发流程和开发规范。

其实面试Java开发的小伙伴们大家的技术栈都大差不差,但是对于一些比较细枝末节的点,你希望能够让面试官看到的点都可以写在这里。除了上述的总结之外,针对于的项目中的优化和一些思考,也都最好准备一些亮点。切记:这些亮点需要从实际业务场景出发去谈而不要空谈。比如我上面提到的mysql的线上调优经验,我会总结自己的Mysql调优思路,针对于那些业务场景,出现过那些问题,我是如何排查问题的,是如何解决问题的,解决问题的依据和原理是什么,最终达到了什么样的效果。只有这一路说下来,面试官才知道这个东西真的是你自己做的,而且你在做的时候是有自己思考的。面试官们大都非常讨厌背书式面试。最开始我在面试的时候,介绍到这一个模块的时候,我总是不注重业务而直接说优化的思路,最后的结果就是被面试官疯狂打断并且提问实际的业务场景。这一块也给大家一个例子:

以长事务为例。我们的需求是使用activitis做流程控制发起流程的一个过程。整个事务我们需要持久化业务信息,发起流程,上传附件,流程总数+1。在安排语句顺序的时候,我们可以把可能造成所冲突的语句尽量往后放,比如流程总数+1这个操作(业务高峰发起流程时,在这里会有并发冲突)。通过调整语句顺序来提高业务的并发性能(其他动作很少会出现锁冲突)。继续优化:为了进一步降低最终修改总数的并发冲突造成的死锁检测的开销,可以将该记录拆成多条记录,当需要得到总数的时候做一次sum()操作。由于没有减的操作,这样做无需考虑特殊情况。(这样做的原因是我们可以尽量把冲突分散到多行,进一步的提高并发度)

面试

这里的面试一般包括了四个部分:自我介绍,专业提问,手撕代码,反问

整个面试环节的第一步是自我介绍,这里我也觉得是最重要的一点。一个好的开始绝对是成功的一半,千万不要在自我介绍的时候给自己挖坑啊啊啊啊啊!!!对于自我介绍而言,我建议大家可以出一个稿子反复练习一下,尽量不要在面试的时候有磕巴的情况出现。此外,时间尽量控制在2分钟之内,内容尽量锁定在你的项目经历和实习经历之上(PS:专业技能,校园经历,自我评价简历上都有就不要在说了)。还有一点就是自己说出来的话,自己一定要能够对它有一定的了解,千万别想当然的说话,有些技术栈不了解只是用了的话宁可不提。。。(PS:在别问我是怎么知道的,这次真的要哭了)

对于专业提问这个环节来说。面试复习的时候需要自己多总结,形成自己的知识体系,尽量在回答的时候能够全面的回复并且带上自己的理解。这样才可以应付面试官的"百般刁难",因为面试官都是在这个行业深耕多年的前辈,他们有遇到过很多的实际场景问题,然后把这些问题抛给你以此来考验你对于基础知识的掌握能力和思维扩展能力。我记得自己在面试的时候有遇到过一些比较灵活又常见的面试题:(1)TCP和UDP有什么区别?在我比较详细的解答的了它们之前的区别之后,面试官进一步的发问,如果让你来实现一个可靠的UDP连接,那么你会从那些方面来思考?(2)让你来实现一个拥塞控制算法,你会关注网络上的哪些指标?(3)如果让你针对于这类比较活的问题,就需要你能够在面试的时候迅速冷静下来,通过知识迁移能力来进行解答。在解答之前,你也可以进一步和面试官确认问题的细节,不要着急回答。一方面这样可以让你保证自己的答案不会偏题,另一方面也可以给自己争取一些时间思考。

手撕代码环节:这个环节紧张刺激,我感觉也没什么可说的好吧,剑指OFFER必刷好的吧(虽然我也就刷了20多题),leetcode看精力也要刷一些easy和medium的题。。。自己也在这方面反省过,说实话我在这方面下的功夫确实不多。因此也是在面试中比较怵这个环节的,但其实仔细想一下这方面能力确实也是必要的一个能力。我在京东实习的时候,我的mentor和我说过,一定要经常回过头来反思自己的代码,看一下性能是否有提升的空间(PS:一般我们写出来的代码提升空间往往贼大),代码如何写才能更加简练和有效。没事多刷刷题,有时候会给你一些灵感,看看别人的优秀解法和代码风格在回过头来看自己写出来的代码,好吧不说了你懂的。这里主要是学习一下大佬们思考问题的方式,不要什么东西一上来就想这暴力解,在业务上保证自己的需求逻辑没问题就完事。性能啊大哥!!!效率啊大哥!!!

反问环节:在这个环节切忌直接去问自己的面试结果,你和面试官聊得来他觉得不错的话,他会主动暗示你的。像什么接下来会有其他同事联系你呀,感觉你基础什么的还是不错的呀,反问你一些个人问题陪你聊聊天呀。你直接去问的话就非常尴尬,基本大部分面试官都不会直接当着你面百分之百告诉你过了,万一后面有更优秀的人或者部门每HC了,你在心里不得骂娘?其实我觉得与其问面试官这么难回答的问题,不如把握这个机会和面试官沟通一下。(PS:像阿里能面试你的怎么说也是个P7了把兄弟,这就是这个领域的专家了,有时候他们的一句点拨可能比你自己闷头看一周书的有效的多,这种机会不把握住留着回家过年?)我一般在这个时候会把自己面试过程当中的一些疑惑的点和面试官进行讨论,或者会问一些心中的疑惑。比如我有和面试官聊过,后台这么多方向,什么服务端开发,平台开发,中间件开发等等等等,他们在这个年纪是如何权衡选择的,自己在走这些方向有那些需要注意的点。

复盘

经历过面试过后,你可能会被问到怀疑人生,也可能会被直接拒绝。觉得自己的人生方向选错了,怎么就一个不小心选择了这么一个“朝气蓬勃”行当。但是我想说的是千万别灰心。。。。那是因为你还被虐的不够惨。当我经历过这两个月以来23场阿里的面试过后,虽然结果比较遗憾,我也因此苦恼了好一阵子。但是我发现通过自己的复盘总结之后,我对基础知识的掌握程度和2个月前已经提升太多太多了(PS:这里不得不说阿里真的是Java开发人的天堂好吧)。然后再去面其他公司的时候只能说真香。

总的来说,面试的过程就是一次又一次挑战自己,怀疑自己,完善自己的过程。这个过程一定是痛苦的,但是用心经历过的你无论是谈吐,交流方式还是知识体系都一定会有所提升。因此一定要肯定自己的每一点改变,希望大家能够相信自己,坚持的走下去。总有适合自己的公司,也总会走出一条属于你的路!!!与大家共勉。