最近我在帮朋友的公司招人,招人的第一步是要筛选简历,在这过程中,我发现虽然能收到很多简历,但实际能通过筛选能进入到技术面试流程的简历不多,估计10份里不会超过4份能通过筛选。
如果没法通过技术面试,那么候选人尚且能收集面试题,回家继续准备,毕竟他和面试官也交流过,也不算没收获,但对于这些没法通过筛选的简历,简历的主人往往是无从得知的(公司不会主动通知),所以他们依然会混混沌沌,可以预想,在不短的未来,他们依然无法得到面试机会。
本文就将从资深面试官的角度,和大家分享一下写简历和发送简历的经验。本文的内容是根据java web轻量级开发面试教程改改编的,下面是正文。
不知彼而知己,一胜一负,这句话能很好地反应当前大多数程序员投简历找工作的现状。
目前不少比较初级的候选人根本是通过广发简历以求得到面试乃至跳槽的机会,殊不知这种不清楚面试关键点和不分析公司具体招聘需求的做法不仅会降低找到好工作的效率,更会让大家和一些心仪的公司失之交臂,从而只能“凑合”地进入一个能满足自己工资要求的一般公司。
简历的作用在于向招聘方展示你和这个岗位的匹配度,从而去争取面试机会,仅此而已。不过我见过不少候选人的简历非常花哨,篇幅也比较长,但在其中却很难看出他能胜任这个岗位。
要知道,招聘方只能从简历开始了解到候选人的信息,所以简历不用面面俱到,简明扼要地列出应聘方关心的要点即可;也不用千方百计地在格式上费脑筋,能让招聘方感到一目了然即可。
1 简历中应包含的要素,一个都别落下
在筛选简历时,招聘方往往需要从大量的简历中找到值得面试的(这个比例起码是5比1),所以停留在每份简历上的时间不会很长。
所以大家在准备简历应当注意“直接”两字:能让筛选人能直接地看出本人的教育背景、工作经历和项目经理,并让他们“直接”感到这份简历能纳入考虑范围。
根据这个原则,大家可以按次序在简历中列出如下表所给出的要素。
简历中应包含的要素 |
目的 |
基本信息,比如姓名,性别,年龄,目前所在城市,是否在职,手机和电邮等。 |
1 让招聘方了解候选人的基本信息。 2 以便招聘方通过手机等方式能联系到候选人。 |
按时间倒叙写教育背景,一般只需要包含高中以上,初中高中等不必写,但需包含专业和学历学位信息。 |
用专业和学历学位等信息向招聘方证明自己的技术背景。 |
总结性地列出自己所掌握的技能。比如: 1 有3年Java经验,有2年Spring MVC经验。 2有3年Oracle经验,有2年Oracle调优经验。 等等 |
一般这些总结点是和职务需求是一致的,这样能让招聘方直接地感受到该候选人的匹配度。 在这基础上,可以适当列些能成功帮到自己的总结点。 |
按倒叙列出工作过的公司,并列出在这些公司里的项目经验,这部分的技能下文会详细描述。 |
在项目经验描述里,能通过项目用到的技术经验等,具体地给出自己“匹配”该岗位的证明。 |
可以列出和应聘岗位相关的培训经历和得到过的奖励 |
这些属于加分项,同等情况下能优先录用 |
用少量篇幅列出自己的兴趣和自我总结 |
让招聘公司进一步了解候选人 |
2 该如何描述公司的工作情况
这部分一般是按时间倒叙描述,比如可以按如下的格式写:
2015年11月到2017年10月,在xx公司,职务是Java高级开发。离职理由是想进一步发展。
2012年2月到2015年11月,在xx公司,职务是Java初级开发。离职理由是想进一步发展。
按此格式写之前的公司情况
这部分的内容应当尽量靠前,在罗列公司情况时,请大家注意如下的四个要点。
第一,工作情况可以和项目经验分开写,一般会在后继的项目经验里写具体用到的技术框架以及所做过项目的细节,在这里的工作情况描述里,可以不用过于复杂,让招聘方看到你之前的公司情况即可。
第二,尽量别出现长时间的“空白期”,比如上份工作是2月份结束的,而下份工作是6月开始的。如果出现持续三个月以上的“不在职状态”,需要在简历中说明情况,比如这段时间你是换城市发展了,或辞职复习考研或复习考公务员,总之得找个能说得过去的理由。
第三,在简历上,尽量别让人感觉你每份工作都做不长,但不能以此作假。比如我见过有候选人会合并公司,比如2016年11月到2017年3月在A公司,2017年4月到10月在B公司,他为了不让招聘方感觉他换工作太频繁,在简历上就写2016年11月到2017年10月在B公司工作,而故意合并了A公司的经历。这样的话,如果遇到背景调查,会露馅,即使有些公司不做调查,在劳动手册等材料上也能反应出真实的工作情况,所以这种做法有一定的风险性。
这里推荐的做法是,不要合并公司,但可以写明理由,比如当时小王是被外派公司A以人力派遣的形式外派到B公司,但没过多久A公司因某种原因不再具备人力派遣的资质了,这时小王就不得不终止与A公司的合同转而和B公司签约,这样虽然看上去小王是换了公司,但实际上没有。通过类似的合理解释,招聘方就不再会质疑小王的工作能力和稳定性了。
第四,可以写上合适的离职理由,尤其当你短时间里换工作比较多,可能引起招聘方的质疑的情况里,更该考虑些合适的理由。
合理的离职理由可以是,想为自己提供一个更大的发展空间,或想通过升级来独当一面,以此进一步提升自己的能力,或公司因资金等方面的原因倒闭了。总之,这不是我主观上不稳定,而是由于客观原因导致我不得不换工作。
而可能会导致没面试机会的离职原因是,待遇问题(虽然大家心知肚明,但不能这样写),或无法承受大压力,或同事领导排挤。这类理由往往会暴露出候选人的缺点,所以不建议大家采用。从这意义上来讲,“合同期满”也不是一个好的离职原因,因为如果候选人能力强,那么为什么原公司不和你续约呢?
总之,在描述公司情况时,一旦出现会让招聘方感觉你能力不强或不稳定时,一定得醒目地写上足以信服的理由,这样你的简历才会有机会被继续被读下去,进而你才会有技术面试的机会。
3 描述项目经验的技巧
之前已经提到过,招聘方非常注重候选人简历上相关技术项目经验,因为这至少能有效地证明候选人实践过相关技术,而不是只具有理论知识。
具体而言,招聘方首先会看候选人最近半年的项目里用的是否是和本岗位相关的技术或框架,如果是,那么说明候选人能在入职后能直接上手干活。其次,会看候选人所有项目经历中和本岗位所用技能(或框架)一致时间年限,一般招聘方会对这个年限有个最低的标砖,当然越长越好。
如果大家自己感觉项目经历明明很匹配但最终却连面试的机会都没,那么问题大多就出在这个环节,下面我们来具体分析下描述项目经验的技巧。
3.1尽量把学习培训项目和毕业设计项目往商业项目上靠
商业项目是指能挣钱的项目,和它对应的就是些不以挣钱为目的的学习项目或毕业设计项目。正因为客户付了钱,所以商业项目的要求要远远高于学习或毕业设计项目,这也是为什么招聘公司会看重商业项目而会主动过滤学习项目的原因。
职位描述上的相关技能年限一般只是指商业项目经验,而一般不会包括学习项目经验。所以对于一些介于商业项目和学习项目之间的项目,尽量当成商业项目来写。
比如小张在大三时帮计算机系的王老师所在的ABC软件公司干了半年的活,如果小张在简历上写:“在校期间,从x年x月到x年x月完成了xx系统,用到了xx技术”,那么这多半会被当成类似于课程设计的学习经验,但如果再加上如下关键性的描述:“这个系统是属于xx公司的xx商业项目里的一部分,我和另外三位开发人员做了半年,最终这个系统成功上线并在客户xx公司的环境里投入运营”,那这样小张的商业项目总年限里就能加上这半年时间了。
又如小李在做毕业设计时,花了7个月的时间参与了导师的一个电商商业项目,他主要的工作是设计一个调度算法,但也参与了一些诸如订单管理模块的工作。如果他就平淡地写一句,毕业设计是xx,毕业论文是xx,那么招聘方看过就算了,也不会认为小李在做毕业设计时还有过商业项目经验,这样小李未免有些吃亏。
但如果这样写:“在x年x月到x年x月的7个月里,在毕业设计中,我参与了xx公司的xx电商项目,客户方是x,我参与了订单管理和xx模块,并设计了其中的调度算法,在我的毕业论文里,详细介绍了这种做法”。文字没修改太多,但足以让小李增加7个月的商业项目经验。
在招聘过程中,我们经常会看到有些候选人参加了培训学校,在里面也做了一些实训项目。如果这些项目是用来让学生练手的,而没有产生商业价值,那么虽然这些项目可能来自真实项目,名字也叫xx实训项目,但非常可惜,我们没法把它当成商业项目。不过我们看到过一份印象比较深刻的简历,某候选人小丁在某三个月的时间内,一边参加培训,一边还在朋友的公司里兼职做着xx信息管理系统的项目。那么如果小丁能很好地在简历中很好地说明这个情况,而且还能在面试中很好地回答相应的问题,那么我们不得不相信小丁在这个三个月里确实做的是商业项目。
对于高级程序员而言,他们的项目年限一般会超过3年,所以多挖掘出来的商业项目年限就属于锦上添花了。不过不少公司在招聘时往往会设个最低年限标准(一般是1年半到两年),这对刚毕业的或工作经验小于2年的初级程序员而言无疑是道坎,所以如果大家处于这青黄不接的时间段里,就更得挖掘这些“严格意义上还算商业项目”的项目经历并写到简历中,这至少能帮大家争取到更多的技术面试机会。
不仅如此,我们发现大多数初级程序员的水平其实也差不多,这时就得看谁的商业项目经验丰富了。比如有次我们无法从两位候选人中权衡,因为他们的综合条件和面试情况都差不多,但其中有一位在大三阶段有段为期6个月的商业项目实习经验,另一位没有(也有可能他也有但没当成商业项目来写),这种情况下我们就录用了有实习经验的候选人了。
3.2通过具体案例来看项目经验该怎么描述
假设某公司需要招一个Java高级开发,如下是职位描述。1、计算机及相关专业毕业,3年以上Java Web项目开发经验;熟悉Linux平台。 2、精通JAVA 编程,熟悉Spring、Spring MVC、Mybatis/Hibernate等开源框架,熟悉常用cache机制,Jsp/Servlet等技术。 3、熟悉Tomcat、Nginx等应用服务器的配置和优化。4、熟悉数据结构和算法,熟悉Java多线程开发。熟悉MySQL、Redis,熟悉数据库索引。5、了解Web前端技术,包括HTML5/CSS/Javascript等。6、拥有良好的沟通能力和文档能力。7、勤奋而善于思考,愿意不断挑战和提升自己。
这里先说个技巧,如果候选人能通过简历让招聘方确信,在最近的项目里他用到了不少和招聘岗位相关的技术,那么他得到面试机会的可能性就会大大提升,因为招聘公司会认为候选人能入职后很快上手,而不会有太长的熟悉期。所以,我们可以按如下思路改写最近做的一个项目。
那么我们就可以根据职位需求,从如下几个方面来描述项目经验。
第一,简要描述项目的背景,比如时间范围,客户是谁,项目规模有多大。
从x年x月到现在(这个时间范围至少是最近半年),我参与某外汇交易系统,客户是xx银行,这个项目组的构成是,1位项目经理外加10位开发,总共的规模大概在80个人月左右。
第二,大致描述项目的需求和包含哪些模块,然后简要说下你做了哪些模块,同时说下在这个项目用到的开发工具和主要技术点,这部分的描述如下所述。
这个外汇交易系统包括挂盘撮合成交、实盘成交、反洗钱和数据批处理等模块,我主要负责了挂盘撮合成交模块,其中用到了Spring MVC架构,数据库是Oracle,用Mybatis实现的ORM,该系统是运行发布在Weblogic服务器上,我们还用了Nginx来实现负载均衡,用Redis来缓存数据。在这个项目里,我还用到了JS实现了一些前台页面。
这里请大家注意如下的要点。
1 招聘方在看简历时,更关注的是用的技术,所以这里无需过度展开该项目里的业务细节,比如无需用大篇幅来写挂盘撮合成交模块里干了什么事情。
2 如果在这个项目里用到了职位介绍里给出的技术,应尽量写在项目描述里,但也要不能不顾事实地一股脑全写上。
第三,这里可以在刚才的基础上展开写这些技术在项目里是如何用的,以此来进一步证明你和所应聘职务的匹配度。同样这里也应围绕技术,而别多写业务细节,大家可以参考如下的范例。
具体而言,在这项目的挂盘撮合成交模块里,我们用到Spring MVC框架,用到了其中的拦截器来拦截非法的挂盘订单请求,在数据库层面,我们还把一些常用数据放入Redis里,在Redis里我们用到了list和set这两种数据类型,而且还用到了master-slave模式。在使用Nginx时,我们是通过配置来避免出现Session粘滞的问题。
如果大家只写用到过Spring MVC和Nginx,那么筛选简历的人看一眼就过了,最多认为大家用过。但如果大家再写一些只有用过才能知道的细节点,比如Nginx的master-slave模式,那么就会给招聘方留下比较深刻的印象,大家给他们的感觉就会是“不仅用过,而且熟悉(或精通)”。
3.3这些亮点你大多做过,不加在简历中有些可惜
我们见过不少简历,在描述项目时,也能像上文一样,能根据招聘职位的具体要求展示出自己的匹配点,这种简历属于“达标”,即可以纳入考虑范围。在这个基础上,如果大家在项目里有下表列出的亮点,一定请写上,这就是大家优于别人的地方。
可以加入的亮点 |
怎么加 |
JVM调优方面 |
请参考第九章,里面有专门的描述 |
设计模式方面 |
请参考第八章,里面有专门的描述 |
数据库调优方面 |
1可以说在项目里用过批处理预处理事务等高级知识点。 2 能通过监控查看哪些SQL语句需要调优 3 能通过索引执行计划等方式对SQL语句进行优化 4 进一步的话,能通过数据库集群等方式分散对单个数据库的压力 5 如果做过,也可以写一些关于NoSQL和大数据方面的经验 |
Spring MVC等架构方面 |
1 用过其中诸如拦截器、AOP和事务等高级技能点。 2 在搭建框架时,能一起参与并熟悉如何通过框架来提升代码的可维护性。 |
学习和解决问题的能力特别强 |
比如可以写,在项目里,自己被分担一块大家都不大熟悉的技能,但你在短时间里就完成了技术调研并把它用到项目里。 |
能承担大的工作压力 |
1 由于客户方催进度的原因,这个项目需要加班(总之加班原因不是你造成的) 2 在这种情况下,你能和你的团队一起连续奋斗,最终成功地完成进度。 |
上述的一些技能要求未必会出现在职位描述里,但确实都属于亮点,而且在大家的项目里,多少会用到些,所以不加有些可惜。当然,如果大家有其它的亮点,也可以加上,毕竟这能提升大家简历的价值。
3.4多写些和项目管理相关的技能
我们见过不少简历,在其中更偏重技术或诸如沟通和协作方面的能力,但事实上,项目管理方面的技能同样重要。这里可能会有个误区,不少人认为初级程序员的简历无需写项目经验,但事实上,项目管理技能也是靠积累的,哪怕刚工作1个月,也能积累这方面的能力。
在这方面,项目经理更偏重于如何根据项目需求合理地分配任务和协调进度,对于程序员而言,则可以在简历中写项目管理的方式以及如何使用常见的管理软件来提升项目管理的效率。
这里我们就以“敏捷开发”为例,向大家展示下如何介绍自己项目管理的方式。
我们这个项目采用了敏捷开发的模式,具体而言,我们会根据项目总体需求,设置若干个发布点,在时间上,每隔1个月就会设置一个。根据任务的优先级,我们先会大致定下每个发布时间范围内的大致任务,而在每个发布时间范围内,会根据当前情况适当微调。
而且,我们项目组还引入了“每天站立会议(Stand up Meeting)“的形式,每天我们项目组会用大致20分钟的时间一起讨论下每人已经完成的任务、要做的任务和遇到的问题,这样即使遇到阻碍性的问题,也不会耽搁整个项目很久的时间。
相关的内容无需多,大家只需列些“敏捷开发的必做点”,以此来证明自己实践过这种开发方式即可。如果招聘公司也是采用类似的项目管理方式,那么这点一定是个很好的加分项,即使招聘公司采用其它方式,比如瀑布模型,那么你写上这话,招聘方的评价就不会仅仅是“熟悉项目开发的技术”,而且还是“了解并实践过XX项目管理方式,对项目管理有一定的了解”,这样这份简历获得面试机会的可能性就大大增加了。如果大家在项目里用到的不是敏捷管理模式,而是其它的管理方式,也可以照着这个思路写。
此外,正规的项目多少或用些项目管理的工具,大家也可以在简历中列一些自己用过的,以此来进一步证明项目管理方面的经验。在下表里,我们总结了一些常见的开发人员能用得上的项目管理工具。
工具或软件 |
项目管理方向 |
能起到什么样的作用 |
JUnit |
单元测试 |
开发人员在开发完成后,可以用Junit来编写自己代码的单元测试代码,运行单元测试代码后,能测试自己开发的模块。 |
Maven |
构建项目 |
通过Maven,我们能给项目引入必备的jar文件,也能方便地编译(build)和发布项目代码。 |
Jenkins(一般会和Ant一起用) |
持续集成工具 |
我们一般会用重复的工作来发布不同版本的项目,比如运行ant脚本,把生成的jar放入指定的Linux目录并设置一些script文件的可运行权限。我们可以通过设置Jenkins脚本来配置这些重复的工作。 |
Jira |
缺陷或任务管理 |
每当遇到一个Bug或一个新任务,我们可以建一个jira,此时该Jira状态是Open,程序员开始开发时,会设置成In Progress,完成开发后能设置成In QA,这样测试人员就能介入测试,测试完成后,测试人员能把它设置成In UAT,一旦把该任务部署到生产环境,就能Close这个Jira。也就是说,通过Jira,我们能在项目里很好地跟踪和监控具体问题和任务的当前状态。 |
Git |
版本管理 |
通过Git或SVN等版本管理工具,在项目里我们能方便地建立提交或回退各人的修改,还能分支版本。Git还有个好处:可以设置成“评审后才能提交”的模式,这样某人要往主版本提交的代码必须要经过一人或多人的评审,这样就能很好地控制代码的质量。 |
Autosys或Crontab |
用于定时跑脚本任务 |
比如我们要定时跑一个脚本,我们就能通过Autosys或Crontab来设置,通过Autosys,我们更能方便地设置任务间的依赖关系,比如A任务跑好后B任务才能跑,而且还能查看任务运行的状态是成功还是失败。 |
Sonar |
代码质量管理 |
通过Sonar,我们不仅能检查代码是否还有bug,还能查看代码的质量,比如代码的注释率是多少,单元测试覆盖率是多少。Sonar还能给出一些代码方面的建议。总之,通过Sonar,我们能提升代码质量。 |
具体而言,大家可以在简历加上如下的内容:在这个银行(或其它)项目里,我们用Maven来管理项目,用Git做版本管理,用Junit来做单元测试,用Jira来做bug管理,在代码上线前,我们还会用Sonar来扫描代码,如果发现一些可改进点,比如Junit覆盖率不高,我们会及时改正。
大家在简历中写这部分的内容时请注意如下的两个要点:
1 在项目管理方面一般都会用到些工具,也就是说,大家可以写上在自己项目里用到的工具以及这些工具应用在哪些方面,但别什么都不写。
2 面试官在看到相关描述后,一般会在面试中询问些细节,比如Jenkin的配置方式等,也就是说,大家不仅要写,还得适当地了解下这些工具的使用细节,以备面试时的提问。
4投送简历时的注意要点
简历准备得再好,如果用不恰当的方式投递出去,同样无法得到面试机会,所以大家在发送简历时,应当注意如下的要点。
4.1不要发送“万能“简历,根据具体的职位要求进行微调
这可能是不少求职者的“通病”,他们往往就准备一份简历,然后看到一个合适的工作机会就发一份,也不关注这个公司的行业背景,也不看这个职位的具体要求。
其实大家的简历是“闭门造车”的形式写出来的,只能“尽可能”地描述自己掌握的技能(无法完全描述出你项目里用到的所有技能要点),而每个公司的职务要求一定不会完全相同,所以大家在发送简历前一定得根据具体的职位需求改写相关的项目经验描述,以求达到“匹配度”最高的效果。
相反,如果大家针对不同的公司发的是同一份简历,那么就得撞大运了,这样一定会失去不少“匹配度不高“的面试机会,其实修改简历所用的时间不会太多,但效果一定是大相庭径。
4.2在招聘会上,尽量要口头说出你和这个职位的匹配点
在招聘会上,大家只能是发送同一份简历,在这种情况下,大家一定得尽可能地和招聘方交流几句,同坦诚的措辞,口头说下你和这个职位的匹配度,同时让招聘方感受到你热切想得到这份工作,这样比“递交简历无其它互动“的效果要好很多,至少能给招聘方留下些许印象。
4.3简历以正文形式发送,别让招聘方觉出敷衍
在很多场合下,大家是通过邮件的方式发送简历,在这种方式下,由于只是通过文字,无法面对面直接交流,所以大家应当尽量让招聘方感受到自己求职的诚意,至少别让他们感觉出“敷衍”。
这里来举些可能会让招聘方感受到“敷衍”的例子。
例子1,从邮件的标题和称谓上,看不出这份邮件是给本公司专门定制的。比如我们经常会收到这样的简历,标题是“应聘xx岗位”,开头是,尊敬的先生/女士,在其中第一没有公司的称谓,第二我们已经在招聘要求里写了负责收简历的是人事王先生,但这里没有具体的称谓,这就会让我们感觉这份邮件是通用的,而不是专门发给我们公司的。
恰当的做法是,在邮件标题里写上具体的公司名,比如应聘xx公司的xx岗位,在开头上写,xx公司,尊敬的人事王先生,这里如果没有留收简历人的称谓就写尊敬的人事,这样就会让人感到候选人在这份邮件至少是下过功夫的。
例子2:从邮件列表里,我们能看出候选人是群发邮件,把同一份简历发给不同的公司。这种情况不多,但有,恰当的做法是,在一封邮件里,只给一个公司发送求职信息。
例子3:有些候选人在邮件里,直接用附件的形式发简历,而没有任何正文的内容。这就无法让招聘方感觉到候选人的诚意了。
比较恰当的做法是,候选人还应当在邮件里写上如下样式的求职信。
xx公司,尊敬的人事张先生:
我在xx招聘网站上看到您这边的招聘Java高级开发的信息,特来应聘。
我叫xxx,今年xx岁,xx大学xx系毕业,本科学历,手机是xx。
我有x年java经验,用过Spring MVC等技术(根据职位描述列出用到过的其它Java技术),数据库方面,我用过xx,也有过调优经验(数据库方面的经验也请和职位描述一致)。再根据职位描述写一些自己和这个岗位相匹配的技术。
我非常愿意加入贵公司从事Java高级开发的工作,我的详细情况请看我的简历,如果可以,我非常愿意向您这边提供更多的个人信息。
最后列上署名
因为有些公司的邮箱出于安全因素,会过滤附件,所以还是建议大家以附件形式发简历的同时,在正文里也加上简历的内容。
结语:
如果我的这篇文章反响不错,我将继续发表文章向大家介绍如何进一步地描述项目信息。