我在之前的面试过程中,一直会遇到这样的问题:比如我要面试架构师,但我当时工作时,只有机会实践高级开发的技能,架构师方面的技能,只能看理论,最多只能在自己电脑上搭建个脚手架项目。
这样就进入了一个两难的循环等待:为了应聘成功高级岗位,必须要在面试过程里证明有相关实践经验,而相关经验在面试成功前是没机会实践的。很多想通过面试换工作升级的同学都会遇到这样的问题,在本文里,就将讲述相关的破局方法。
1 大公司里的面试官如何分辨实践经验和理论经验
在跨越的过程中,战略上一定要有信心,但战术上一定不能有任何走捷径的想法,因为技术面试官绝对能通过面试衡量出候选人的能力。
比如我在面试Java初级和高级候选人的时候,我第一可以甄别出候选人的经验是来自实践还是理论,第二可以衡量出候选人综合能力和岗位的匹配程度,我相信其它资深面试官也能做到这点。
有时候确实会睁只眼闭只眼,但绝对不是没看清候选人的能力,而是项目紧招不到人,所以就招个态度好而能力尚有欠缺的人进来。但在大多数情况下,如果候选人被甄别出关键技术没实践经验,或者说容纳必备技术的项目是学习项目,那很难通过面试。下面我就综合诸多面试官,给出些甄别候选人项目的方法。
第一问容纳技术的项目,比如问项目周期,项目参与人数,项目发布情况和上线情况,如果真的做过,这个应该不会前后矛盾,这时能分辨出项目是商业项目还是学习项目。
第二问技术在项目里的使用情况,比如考察Mybatis,就会问些如何处理原子操作,如何配置数据源,如何同Spring整合等问题,这类问题只要做过项目,那一定知道。
第三问技术的上下文,所谓全栈提问,比如Mybatis在处理高并发会用Mycat,如何配置,又如如何处理Mybatis抛出的异常,总之问些和该技术相关的问题点,有些培训学校可能光关注技术,未必关注技术间的联系。
第四问项目的部署,尤其是在linux上的部署。如果候选人简历上的项目没真实实践过,这块绝对是有欠缺的,而有些培训学校虽然讲了Linux,但可能也就讲到查看日志,运行安装程序等水平,未必会做jenkins等集成化部署,而如果候选人自己的学习项目更不会涉及到这点。
所以说,如果没准备,单纯就想靠裸面就实现跨越,基本上是不可能的,除非运气爆棚,或者面试的是一家不怎么讲究的小公司。不过话说回来,程序员在没任何实践经验的前提下实现跨越,这种例子比比皆是,大家如果靠自己摸索,也能做到这点,但在跨越时也得讲究效率。
2 以培训班的课程为学习方向,以培训班的进度管理学习时间,同时实践培训班的项目
这里并不是给任何培训班做广告,是否上培训班大家自己斟酌。但培训班(尤其时是知名培训班)制定的培训内容和进度是经过时间检验的,如果大家报名培训班,这自然没话说,用钱换时间换经验,按着进度即可,但如果想不上培训班,同时实现高效跨越,可以采用如下的步骤。
第一,找份课程大纲,比如java,一般会从基础语法一直讲到架构,同时会给出案例,如果大家多找几份大纲,会发现大同小异。
第二,可以买书买视频买收费专栏,总之想办法获取些系统讲述知识的资料,比如买若干本Java SSM框架的书,看明白后自然就知道这方面的内容了,而且每个方面至少买2本书。这时不推荐自己看网页而推荐买,因为这时如果自己看网页学,往往忽视重点,或者在一些无关紧要的点上空费时间,而买来的资料往往具有系统性,能帮助大家降低试错的成本。
第三,之前时找大纲买书买资料,这时知识还没进自己的大脑,这时就得用空闲时间边运行代码边看资料了。在看得时候,先注意广度,先别挖掘太深。刚开始学的时候是要解决从零到有的问题。这里执行的要点是时间管理,而资料则是到处可以得到。
最后得调试通若干个案例,比如java层面的,SSM,或Spring Cloud,或基于数据库的项目,可以调试几个。这里请注意,选择项目的时候,业务可以非常简单,甚至就一个页面然后加增删改查,但一定得包含全栈要素,比如从前端一直到后端框架然后到数据库,最好再带些打包部署步骤。
其实如果大家上心的话,诸多培训项目不是不可得,而且哪怕付费,也能得到不少项目。在实践的时候,一般得遵循“三个月原则”,即不管学什么,给自己制定的时间表是3个月,比如学java高级开发的知识点,从入门到架构到项目,一般用3个月即可。3个月如果学不好,那么可能就是态度或方法上的问题了。
3 学会技术了还不够,还得能证明自己在项目里用过
通过之前的方法,大家能在比较短的时间内,系统掌握更高级的技能,但这还不够,这仅仅是学习经验。之前也讲过,面试的时候得证明技术在项目里实践过,那么怎么弥补项目经验呢?我就以分布式组件Dubbo举例来说明。
1 通过之前的学习,好歹能知道dubbo的基本用法,比如如何远程调用,如何编写配置文件,然后就到公司找个dubbo的项目,争取看下他们的代码,看下真实项目里是怎么用dubbo的,有时甚至不用找,自己项目里就有,但可能之前没费心关注。
2 真实项目里,除了实现代码功能外,更需要考虑“异常”和“发布时”的情况,比如dubbo调用超时了怎么处理,结点失效了又该怎么办?尤其地,在发布时,更新了远程调用的接口,那如何切流量保证平稳发布。 这里我仅仅是给出了若干问题,但如果大家留心了,会发现一大堆“实现功能”之外的问题,把这些问题搞明白了,能在面试中讲清楚了,就能证明自己的实践经验。
3 在真实项目里,一定会出现相关产线问题,比如哪天因dubbo超时时间没设置好导致服务长时间没返回,大家可以留意相关问题的排查方法(比如通过看什么日志)和解决方法,如果是大家经历过的,可以写到简历中,这样也能证明自己的实际项目经验。
以上仅是以dubbo为例,事实上,在自己或者附近的项目里,包含了值钱技术远不止一个,可能之前因为自己的级别,项目经理不会安排相关的活,从而导致没实践经验,但这不是能阻止大家接触更高级的知识点。并且,“在简历和面试中证明自己相关技能的实践经验”要比“熟练地在项目里应用相关技能”简单很多。
一方面,面试时你可以引导面试官的提问,在以我的亲身经历为例,告诉大家写简历和面试的技巧(面向高级开发和架构师)这篇博文里,我就讲述了如何引导面试官提问之前技能的方式,另一方面,甚至你都不用引导,其实面试时,面试官也就用“如何处理异常情况”和“如何发布”等问题点来考察实践经历。
4 可以用博客,出书和出视频等方式来证明自己
通过上述方法,大家不仅能掌握比当前级别高的技能,更能证明自己在项目里用过。
不过在面试中,正是因为面试官只能用过简历了解候选人,所以得用问题来考察,但话说回来,如何候选人有能证明自己的东西呢?第一这些至少是加分项,第二万一有问题没回答好,好歹还能用博文或书来证明自己的相关经验。哪些能作为证明点?
第一是博客,别就一两篇,最好是数量比较多,而且若干篇博文里有几篇质量比较高的。
第二是出书。出书并不像想象中那样难,而且哪怕刚毕业,只要肯上心即可,比如案例书,真不需要太多的实践经验积累。
第三是有专栏或公众号,最好是原创性文字多些。
大家可以想象下,如果你有系列博文或书,那么说自己学习能强有上进心能承受大压力,这就不是空话了。而且在应聘比自己当前级别高的岗位时,面试结果大多估计是可上可下,这时如果能有看得见摸得着的东西来证明自己,这样成功的可能性就大很多了。
5 一定得在面试前准备高级技能实践经验的表达方式
这一定得在面试前准备好说辞,尽量少在面试时现场发挥。其实在上文里已经给出相关重点,这里来总结下准备的方式。
1 大家可以想下,有哪些细节,只有做过才知道,面试前就可以准备这些。比如部署Dubbo,配置文件里超时时间怎么设置。
2 在第1点的基础上,尽量准备些多组件整合使用的关键细节,比如Dubbo和Zookeeper整合,nginx和限流组件hystrix整合的实现细节,往往在项目里经常用到多个组件,这样组合起来讲,可信度更高。
3 如果可以,再准备些排查解决问题的介绍。假设候选人能详细说明在项目中排查Kafka OOM异常的方法,比如如何看日志定位问题,如果通过修改配置来解决,这样一定能证明自己在实践中用过。
4 最好是能结合业务场景来说,比如某支付场景,需要每秒2000的并发,那么是怎么通过配置怎么通过整合组件实现的。
其实大家可以照此方式,自己想些准备点,比如相关细节,相关底层代码,相关排查问题的方式都行。有些同学或许会说,由于自己没实践机会,所以没法理直气壮地说自己做过这里不提倡弄虚作假,在前文里也提到过,相关实践经验是靠自己在项目组内或其它项目组里争取来的,不能靠坐等得到。
看到这里大家也能发现,上述能证明自己实践经验的说辞,在面试中现场想,一定没法说好。而且在跨越阶段,平时工作中大多数用到的还是本阶段的技术,只有少数部分才是高级技术,这就更需要用上述方法准备了。
6 总结,求推荐:可以边学边面试,别用“准备不充分"作为懈怠的理由
本文主要从从准备技术和准备实践经验这两方面讲述了实现跨越的方法,更在此基础上讲述了应聘更高级岗位的面试准备技巧。
我就见过不少人,为了求稳定,往往会以“没准备好”作为理由,不去挑战更高级的岗位,同时平时也不看更高级的技术,就每天得过且过。这样看似每天很舒服,而且在一个公司里熟悉业务熟悉人际关系后,日子还会过得很滋润,但长久一来,竞争力就丧失了。
其实实现跨越不简单,毕竟如果平时就只关注自己的活,确实没机会接触更高级的技术。不过也不难,因为更高级技术的资料网上到处有,而实践机会,如果平时多观察多动手,也不能说少,所以大家不要以各种理由来阻碍自己的进步。
如果大家感觉本文有帮助,请推荐本文,也欢迎大家通过评论来交流。
版权说明:
有不少网友转载和想要转载我的博文,本人感到十分荣幸,这也是本人不断写博文的动力。关于本文的版权有如下统一的说明,抱歉就不逐一回复了。
1 本文可转载,无需告知,转载时请用链接的方式,给出原文出处,别简单地通过文本方式给出,同时写明原作者是hsm_computer。
2 在转载时,请原文转载 ,谢绝洗稿。否则本人保留追究法律责任的权利。