我看了前几天些的博文, 分析若干没面试机会和没体现实力的简历, 就想起了做技术面试官时的一些往事.
我见过有些简历, 上面列出的项目描述非常高大上, 比如用到了 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 项目注册, 再结合项目实际略微说下代码和配置的方式. 用这种方式就能很好证明自己在项目里用过.
总之, 面试时应该掌握哪些技术, 这个大多数人应该都知道, 我之前的一些博文也写了不少这方面的内容. 刷些基本的面试题, 这个也不难, 但通过刷题只能证明自己掌握某种技术, 而一旦结合项目说出, 这就属于有实战经验, 这两者的分量差别大家能感受到.
5 总结, 求推荐和版权说明
写简历和面试的时候应该心平气和, 别存在 "用新技能唬住面试官" 想法, 这样自己反而能脚踏实地地准备面试中的说辞.
本文的重点是 "如何结合项目说明技能", 而在本人其它博文里, 也讲述过 Java 高级开发和架构师该掌握哪些技能, 自认为也能形成体系. 如果大家感觉好的话, 也请帮忙多多推荐.
有不少网友转载和想要转载我的博文, 本人感到十分荣幸, 这也是本人不断写博文的动力. 关于本文的版权有如下统一的说明, 抱歉就不逐一回复了.
来源: https://www.cnblogs.com/JavaArchitect/p/11057596.html