本人一直在做Java面试辅导,也经常写些Java求职类的文章,这里为了避免抽象,就写一个具体的成功案例。可以这样说,这位求职者在写简历和找工作时遇到的问题具有一定的普遍性,所以这里本人就以此为例,再进一步讲一下应届生或Java初级开发,在找Java工作时的操作要点。
求职者的情况是,一位在读海外的计算机硕士应届生,之前有三个月国内的Java实习经历,但从简历上看,写的Java项目经验太像学习项目,而且描述技术时急于求成,写了较多的微服务等资深技术,同时Java的基础知识有待提升。
本人在了解情况后,做了三次电话沟通,更确切地讲应该是微信语音沟通,第一次是辅导简历,外带给出证明真实项目经验的技巧,第二次讲如何证明自己在项目里用过spring boot,以及日志事务等开发项目所需的技术,第三次是模拟面试,当然本次辅导的需求和收费均是定制的。
最后的结果是,这位朋友经过2次面试后,在当地(海外)入职一家比较知名的公司。
第一次沟通的情况。
第一次沟通的重点,其实是让这位朋友知道如何证明商业项目,在此基础上,顺带帮助这位求职者修改了简历。原先这位朋友关于简历项目的描述包含如下要点。
1 写了这个项目是某销售管理系统,时间是3个月,但没有写公司情况和上线情况。
2 写了这个项目用到微服务组件,同时写用到nacos,gateway,ribbon等组件,而且也写用到了redis和kafka等分布式组件。
3 简历上没有写高并发相关内容,但问了本人,该如何在简历上体现出这点。
这位朋友也意识到商业项目的重要性,所以也希望咨询如何在面试中证明自己的商业项目经验。
本人通过沟通,确认了这位朋友的商业项目确实是在一家公司里做的,同时也了解了具体的情况。所以在简历层面,给出了如下的建议。
1 除了写项目的开始和结束时间外,还要写明项目所在的公司名称以及客户名称,同时说明该项目当下已经上线,由此证明该项目是商业项目。
这里多说一句,商业项目是用来挣钱的项目,一般是在公司里做的。由于这个项目是销售系统,如果不写公司和客户名,真可能会被误认为是学习项目。顺带这里再强调,有些初学者学习时所用的项目,或者是培训班里讲到的项目,比如xx电商或xx外卖,由于小公司一般不大会做,所以除非给出信服的理由,否则会被认为是学习项目。
2 在项目描述部分,可以少写业务描述,毕竟这是简历,而不是项目说明书,但可以写用到的技术,比如是spring boot,mybatis等,同时更可以写项目亮点。
这里本人经过沟通,归纳出来的项目亮点是,有过单元测试的项目部署的经验,有用过索引,执行计划和Redis解决数据库性能问题的经验,排查解决过事务相关的问题,有排查解决OOM的经验,再进一步,还有用docker容器的经验。
3 本来这位朋友还想在简历上写,有用redis做分布式锁的经验,用kakfa+redis进行消峰的经验,有分布式事务的经验,但本人了解情况后,没有让写,只是让写,该项目用到了Nacos和gateway等分布式组件。
对于应届生来说,找到工作的要点在于证明真实项目经验,如果确实用到了秒杀等高并发技术,或者实践过诸如集群等资深技术,写到简历上也是可以的,但面试时面试官大概率会问。但如果没用过,不建议写,因为应届生在实习阶段,不参与高并发或秒杀等资深功能的开发,也在情理之中。但还是这句话,如果写了,面试官大概率会问,为什么要用?以及怎么用?如果说不好,面试官会质疑项目的真实性。
在第一次沟通中,本人给出的证明商业真实性的要点其实在于如下两方面。相关内容其实本人也有专门的文章。
1 从项目组的构成以及项目的开发方式(比如敏捷开发)等角度,证明项目的真实性。
2 从项目所用工具角度,比如maven或git等,证明项目真实。
秋招必读:Java真实项目的开发流程和常用工具-CSDN博客
如何证明自己真实的Java项目经验
除此之外,在第一次沟通过程中,本人还专门解答了相关问题,如下列些有代表性的。
问题1,如果只说自己做了后端开发,没有说自己做过前端或高并发等工作,会不会被面试官认为很low?
这块还是得根据实际情况,事实上大多数应届生是没法证明商业项目的,所以哪怕是说自己只做过后端,哪怕不说做过前端等,只要证明自己的商业项目经验,这其实就超出了大多数应届生的水平。
问题2,面试过程中 ,要不要去演示项目?
一般项目上线后,是上线在公司内部服务器,所以可能无法通过外网看到,即面试时无法演示。而且请注意,如果面试时你去演示,那么面试官大概率会认为这仅仅是学习项目,因为商业项目大概率是无法部署在你的电脑上去演示,也就是说,如果你去演示了,这反而会弄巧成拙。
问题3, 面试过程中要不要介绍业务?业务要介绍到什么程度?
面试时,对方公司所做的项目大概率和你之前做的不同,所以面试官大概率不会关注你之前的业务细节,当然有些套方案的面试官真可能会问的很细。一般来说,求职者只需要说,之前做过哪些模块,用过哪些数据表即可。
在第一次沟通时,本人还给了这位朋友一些解决过的实际问题案例,具体涵盖数据库、内存OOM和Redis等层面,这样做的目的是,求职者如果更能在面试中说明自己解决过的问题,那么一方面能进一步证明自己商业项目的真实性,另一方面还能证明自己能力很资深。
其中内存OOM方面相关内容,本人有如下的文章。
面试Java岗老喜欢盯着JVM问,有那么多项目要调优吗? - 知乎
数据库调优方面,本人也有专门的文章。
MySQL 性能调优的方法有哪些? - 知乎
第二次沟通的情况。
第一次沟通后,这位朋友用2天时间修改了简历,同时也看了本人给出的资料,做了些技术方面的积累,之后进行了第二次电话沟通。这次沟通包含如下两个要点。
1 如何通过事务,日志,swagger等技术说辞,证明自己用过Spring boot项目。
2 由于第一次沟通已经给了资料,本次沟通,本人就具体讲,如何通过说解决过的实际问题,证明自己的能力。
第1点的操作要点是,通过说业务需求和技术细节,证明自己用过某个技术。比如要说自己在项目用过事务,那么可以说,该项目的xx业务需求要同时操作两个数据表,所以用@transactional注解,同时,还设置了其中的timeout和事务隔离级别等参数。这样,有一个算一个,再通过此类说辞,说自己在项目里用过swagger,junit和logback日志等项目必用技术。
这些要点本人也有专门的文章来说明,不过这位朋友还真实用到了redis和kafka,然后本人经过沟通,也告知了如何证明用过此类组件的说辞,无非也是通过业务需求和细节来证明。
跑通spring boot学习项目+准备项目说辞=过面试不少初学者的做法,是在跑通一个Spring boot学习项目的基础上,通过准备简历和面试说辞,证明自己做过Java项目,事实上不少在校生或培训班学员就这样入行的。\x0d\x0a跑通spring boot学习项目+准备项目说辞=过面试https://mp.weixin.qq.com/s?__biz=MzIxODcxMzE1Nw==&mid=2247486890&idx=1&sn=7f03588a4899c047713b90dbdce2cfd0&chksm=97e71080a090999609de4302da458f012a048b1e8c308d86aaf81f678b5ad3192086cd5a919c&token=1712440134&lang=zh_CN#rd事实上,不少应届生求职者,会用错误的方法来证明自己的能力,这些错误的方法包括,或者想通过业务细节来证明,或者是通过(包装的)高并发说辞来证明,或者干脆是想通过背面试题和算法题来证明,事实上,在面试中,更得通过说自己解决过的问题来证明。
这里多说一句,哪怕当你成为Java资深开发,想要跳槽时,证明自己能力的最佳方法依然是说自己解决过的问题,只不过这个时间点,该说些自己解决过的架构和组件方面的问题。
回到主题上,应届生该如何通过说自己解决过的实际问题,来证明自己的能力呢?
1 先说问题是如何被发现,无非是通过junit单元测试,在前端发请求,或者用postman发请求,或者是客户方报出来,有些系统是用zabbix等监控系统发现线上问题。
2 再说如何排查问题,排查的基本点是看日志,即登到linux服务器,根据日志里的错误提示,到对应的代码里去看。如果是排查解决数据库方面的问题,那还可以再看执行计划的结果,如果是排查OOM问题,那再去看dump文件。
3 对于应届生来说,解决过的问题可以是空指针,或者前端传来的参数不对,但是别简单只说一个,最好是整合前端到后端发请求的整个流程,说前端发现问题,通过看日志,定位到是后端哪个模块,然后解决。
4 事实上,本人上文给出的关于数据库和OOM解决问题的说辞,也有效地帮到了这位咨询者。
同时在第二次沟通时,本人还给出了引导技巧,引导技巧的要点是举一反三,尽量掌握面试的问题方向,尽量把面试的问题引导到自己事先准备过的范围内。
比如面试官问及,你项目里用的是哪个数据库?你就别只说,用到的是mysql,同时更可以说,我项目里用的是mysql,同时解决过mysql的性能问题。
再如面试官问,你项目里用过哪些集合,你可以说,我用过arraylist,linkedlist和treeset,同时我还看过hashmap的底层源码,也了解过treeset里的红黑树数据结构。
这样之后的话题就有可能依然在你准备的范围内。
第三次其实是模拟面试。本人问了如下的问题、
1 介绍项目。事实上本人根据这位朋友的实际情况更新了项目介绍说辞,通过更新后的项目介绍说辞,这位朋友能有效展示数据库调优,内存OOM调优,Docker使用经验和解决过的实际问题等说辞。
2 具体问,你项目里有没有用过事务,有没有用过junit。这里本人给出的指导是,第一纠正了相关说辞,让这位朋友从业务需求和使用细节等角度,证明用过各种技术,第二针对性地给出了引导说辞,例如再被问及事务时,要引导到事务隔离级别等资深内容 ,同时再引导到解决过的实际问题。
3 问了项目的开发细节,比如项目是否上线,项目开发人数?你做的模块和事情,项目用到哪些技术,解决过哪些问题,这样就从多个角度,确保这位朋友能证明所做的项目是真实项目。
这三次沟通,大概每次是1个小时,从上文中大家可以自行感受相关说辞的价值,这些辅导比单纯改简历和给面试题,应该是更有针对性。当然,面试题本人也有,在辅导过程中,本人也给针对性地给了分布式组件,多线程,集合和虚拟机相关的八股文面试题。
最后这位朋友是进了一家知名公司,出于保护隐私,这里不给出具体名字,但如果说出来,大家一定知道。话说出来,如果本人说,单纯通过给面试题,让这位朋友进了好公司,大家未必能信,但本人是从项目真实性、技术说辞,解决过的数据库和内存等实际问题等角度综合辅导,所以最后这位朋友进了比较好的公司,也在本人的期望范围之内。
总结一下。
1 如果应届生单纯背八股文和算法题,固然有一定概率找到工作,如果学校好,进好公司也有一定的可能,但效率更高的,应该是证明自己做过商业项目。
2 证明自己做过商业项目,不是单纯在简历上做文字上的修饰,更要从项目组情况、技术使用细节和解决过的问题等诸多方面来证明。
3 应届生彼此之间的能力差距可能真不大,所以面试前,如果能有效准备说辞,并通过引导话术,真可能让面试官确信你的能力。
4 事实上,这些面试要点,其实大家在多面试几次甚至多失败几次后,应该也能自行体会到,不过如果咨询本人,这很能节省自己摸索和试错的时间。
如果大家有Java简历和面试方面的咨询需求,可以私信联系本人。本人可以根据实际情况定制性给出辅导建议。