随笔 - 157  文章 - 0 评论 - 1145 trackbacks - 0

    我看了前几天些的博文,分析若干没面试机会和没体现实力的简历,就想起了做技术面试官时的一些往事。

    我见过有些简历,上面列出的项目描述非常高大上,比如用到了xx机器学习技术,或者在一个项目里基本用全了分布式组件,或者是项目名是xx金融量化系统。再看工作经历,往往就3年经验。而工作经验在5年左右的候选人,在简历中的项目描述往往就是比较朴实,一般见不到这类情况。

    在简历中,乃至在面试过程中,项目描述往往仅仅是个载体,第一用来证明自己在项目里确实用到相关经验,第二可以用项目描述打下伏笔,在面试过程中进一步展示自己的亮点。而项目本身的业务,面试官不关心。在本文里,就讲针对这些高大上的项目描述,来看下项目经历该怎么写,在面试中如何通过项目引出值钱技术。

1 描述项目案例时的误区

    可能有些候选人认为,在简历中,项目描述越接近当前热点(比如机器学习),就越能说明自己的实力,一些培训学校可能也用这些看似高大上的项目以及项目技术来包装优选人,但这属于过犹不及。大家可以换位思考一下。

    第一,如果就本科学历(有些甚至还是大专),工作经验3年左右,接触到机器学习量化分析之类的模块可能性大不大?

    第二,好吧,话不能说死,如果有机会接触,比如这个项目里用到了机器学习算法,能否有盈利点?给客户用的时候会不会给客户带来风险?或者说,用这些模块需要踩不少坑,成本不会少,在这个项目里能不能收回成本?

    第三,如果上述两点都能想办法解释通,那么在得到面试机会的时候能不能自圆其说,或者能否把相关技术讲清楚?不少候选人会卡在这块,比如我见过有人写了项目里用全了spring cloud组件,但问下来矛盾百出,甚至连eureka能干嘛都讲不清楚,或者确实用到了机器学习的库,但仅仅是简单地调用了其中若干方法。总之,在面试中的表现和简历中的描述相差甚远。

    比如某个外派岗位只要有找个能干活的程序员,哪怕经验只有2年,哪怕经验是从培训班里学到的也行,但如果简历上出现过于高大上而面试时却说不清楚,那么后果就是:存在虚假简历,这属于态度问题,可能会导致直接被fail。

    再说一次:简历中的项目经验只要能反应能力即可,可以适度夸张,但夸张的程度得在自己的实践范围和能力范围内。 

2 简历上出现高大上技术后得做得准备工作

    有些同学确实很勤奋,了解过一些值钱的技术,这些能力也超越了平均水平,不写在简历里确实有些可惜,为了打消面试官的疑虑,同时进一步证明自己,那么可以准备如下方面的回答。

    第一,这个技术(比如分布式技术等)为什么要用在项目里?不用有什么后果,或者是为了解决哪些痛点?

    第二,引入这个技术后,给项目带来哪些好处?比如能提高并发性,能提升数据库访问性能等。

    第三,结合项目需求,说下这个技术是怎么引入的,比如用到了哪些方法,做了哪些配置。

    第四,得全面介绍相关技术,比如引入了MyCat分库分表,那么就得说下它的框架,重要类,重要配置,以及踩过的坑。

3 值钱技术是加分项,更重要的是证明自己的基本功

    可能有些候选人想通过高大上的项目来证明自己的能力,但事实上会适得其反,因为在面试中更看重的是候选人的能力。而一些值钱的技术是加分项,能帮助候选人在可上可下的情况下面试成功,也能帮助候选人多要点工资,但仅此而已。

    那么哪些是基本功呢?基本功有很多,这里我列些java后端高级开发必备的基本功。

    1 Java核心,SQL数据库开发,框架,Linux之类的必备知识点。

    2 从日志里分析问题和解决问题的能力。

    3 通过 maven管理项目,通过Jenkins发布项目,通过sonar提升代码质量,诸如此类和项目业务无关但和项目发布管理有关的技能。

    4 必要的性能调优的技能,必要的项目部署技能。

    5 一些基于分布式组件的技能,比如netty,dubbo之类的。

    可能讲到这里大家感觉有些抽象,我通过一个面试中的实例来说下基本功和加分项的关系。

    有位候选人其实很上进,本科2年,计算机专业,专门报了培训班,从简历上看,之前项目里,用到多种分布式组件和大数据组件,比如dubbo,nginx,kafka,spark,面试时,在介绍项目经验时,也是信心十足,说业务,说技能,还抛出不少亮点,专等我来问,应该是得到了很好的面试辅导。

    我先问亮点,比如spark在项目里怎么用的,如何同业务结合,用好以后能带来什么好处?这位候选人也能说得头头是道,而且还能通过画图写代码来说明。不过在问java核心和SQL之类的基本问题时,回答不怎么好,比如hashcode方法就说不上,而且数据库方面只会增删改查,索引优化都没掌握好,更别提事务了。我有些不死心,毕竟亮点说得比较好,我又问了他们的项目是怎么发布的,他甚至说就在本地启动,用localhost访问,jenkins就听说过,没用过。这类候选人就属于华而不实了,后面我让我领导来面,最后结果我就不得而知了。 

4 如何结合项目引出技术

   上文的主要内容是,别在简历中写一些超越自己能力的项目以及技能,而且项目不宜太花哨,这属于“不该做”。如果本文仅仅给出“不该”,而不推荐些“应该”的做法,文章的立意就低了,所以这里说下如何结合项目实际引出自己技能的方法。

    项目不用高大上,能证明自己的能力就行,在简历上写项目经历这应该问题不大,把用到的技术列上去即可,但别仅仅写好简历就什么都不准备了。

    最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备,在这篇博文里,我列了一些准备工作。口说无凭,最好是结合项目业务说下你掌握某技术,下面给出些结合项目的说辞,供大家参考。

   1 比如虚拟机内存调优,理论谁都会,但如果某位候选人说,在xx项目的收单业务里,我们通过zabbix监控工具发现内存用量居高不下,我们就看了一些dump文件,也据此review了代码,发现存在Connection连接对象用好没关的情况,最后关掉后内存用量就降低了。

    技能不算难,项目也不高大上,甚至我已经忘了项目名,但一旦结合业务讲了,可信度就大大提升了,而且说这话也就三言两语,不到一分钟。

    2 比如项目部署发布方面,某候选人说,我们项目是基于spring boot,发布在3台linux系统上,项目是用maven管理,我们是通过jenkins打包,是用nginx做负载均衡,nginx的大致配置是xx,日志策略是一天一个文件,第二周把前一周的文件打成压缩包。在这种说辞里,是结合项目说明了项目发布部署的技能,项目和技能也非常朴实,项目里也只用到了一两种分布式组件,也没用全,但却能非常好地体现候选人的实力。

    3 也可以通过一些项目里遇到的坑,来说明自己掌握的技术乃至分析解决问题的能力,比如我听到某位候选人说,spring cloud组件里的服务治理eureka,如果一台机器down了,服务就找不到了,在项目里出现了这个问题,(结合实际说下),于是就引入了健康检查,然后再用两台eureka项目注册,再结合项目实际略微说下代码和配置的方式。用这种方式就能很好证明自己在项目里用过。

    总之,面试时应该掌握哪些技术,这个大多数人应该都知道,我之前的一些博文也写了不少这方面的内容,也出了两本书,Java Web轻量级开发面试教程Java核心技术及面试指南。刷些基本的面试题,这个也不难,但通过刷题只能证明自己掌握某种技术,而一旦结合项目说出,这就属于有实战经验,这两者的分量差别大家能感受到。

5 总结,求推荐和版权说明

    写简历和面试的时候应该心平气和,别存在“用新技能唬住面试官”想法,这样自己反而能脚踏实地地准备面试中的说辞。

    本文的重点是“如何结合项目说明技能”,而在本人其它博文里,也讲述过Java高级开发和架构师该掌握哪些技能,自认为也能形成体系。如果大家感觉好的话,也请帮忙多多推荐。

    有不少网友转载和想要转载我的博文,本人感到十分荣幸,这也是本人不断写博文的动力。关于本文的版权有如下统一的说明,抱歉就不逐一回复了。

    1 本文可转载,无需告知,转载时请用链接的方式,给出原文出处,别简单地通过文本方式给出,同时写明原作者是hsm_computer。

    2 在转载时,请原文转载 ,如要在转载修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

    3 我见过个别网友,通过对我博文的拼接和删减以达到做自己广告的目的,对此本人保留追究法律责任的权利。

 

posted on 2019-06-21 09:03  hsm_computer  阅读(...)  评论(... 编辑 收藏