Java面试,只要是社招,一定要求真实项目经验。如果是校招,虽然商业项目不是强制的要求,但如果能在校招面试中证明自己有商业项目经验,那么一定能提升过面试的可能。
但不少想找java工作的朋友,尤其之前是零项目经验,想通过自学入行的朋友,会费时费力地用1,2个月的时间,跑通一个java全栈项目,并在所谓吃透其中细节的基础上,把这个项目写入简历当成项目经验。本人甚至可以想象,有人为了所谓的“更深地理解项目”,更会自己动手写一套项目,这样就更加费时费力了,并且,其实跑通项目是有难度的,而且难度还不小,有人甚至因为无法跑通项目,从而被阻塞住入行Java的进程。
但事实上,在入行Java的过程中,在准备Java项目时,更可以采用如下的更高效且更直接的办法。
1 熟悉必要的spring boot外带jpa技术,或spring boot外带mybatis技术,这是必不可少的。
2 就跑通一个针对单表的spring boot做增删改查的业务模块,比如针对员工表,跑通一个带增删改查功能的模块。
3 此时就可以去准备一个项目了,其中的业务场景可以脑补,只要别太离谱就行,当然的,更可以去看一个现有的项目,观察其中各种增删改查的流程。
4 但同时更要掌握商业项目长怎么样,并据此准备项目说辞,相关内容大家可以看我如下的文章。
秋招必读:Java真实项目的开发流程和常用工具-CSDN博客
5 在此基础上,找个项目里的业务场景,比如人事管理,准备spring boot,日志,缓存等技术的开发流程和应用场景,同时准备测试(比如用junit和postman)和部署(maven打包部署)的说辞,当然更可以准备八股文。
这样的话一定能很好地契合面试官询问项目,以及通过项目询问技术的场景。
1 面试官会关心项目的真实性,比如项目所在的公司,是否上线,开发模式,开发团队规模。这块需要事先准备,但这块和项目业务类型和数据表的种类无关。
2 面试官会问做了哪些模块,用到哪些数据表,顶多再问表的规模,但不会很细节地问,比如不会问增加人事信息具体做什么,怎么检查参数,具体用哪个类连数据。
所以在准备面试时,可以通过跑通spring boot增删改查业务,脑补各模块的应用场景,一方面也就是针对具体业务端,比如人事管理,做增删改查,另一方面,如果之前跑通一个项目,只能是反复地准备其中增删改查的业务动作,这就属于无效的重复劳动。
3 面试官一定会问写日志,测试部署等项目常用事项,以及缓存分布式等使用方式,事实上不少求职者也会把这块写到简历上。而大多数学习项目是不包含这些要点的,所以即使跑通学习项目,对这块帮助不大。相反,如果按上文链接文章给出的提示准备相关说辞,一定能通过项目必然包含的工作事项,证明自己做过商业项目。
4 面试官大概率会问数据库里的事务,分布式组件,以及通过日志排查解决问题的方法,这块,学习项目里大概率只能给出api,但面试时需要结合项目场景说,如果单跑通一个学习项目,第一你用redis和事务的场景说下来一定不是契合商业项目使用场景,第二用法和商业项目一定不同,所以大概率会露馅。
上文大多写的是操作原则,下文将通过一个具体的spring boot增删改查的模块,告诉大家如何准备商业项目的说辞,以及如何通过说明各维度的细节证明这是真实项目,而不是学习项目。
通过这个模块,掌握spring boot从控制器到service层再到repo层,整合jpa做库存数据操作的动作即可,当然其中还会包含各种注解,比如用@urlmapping来接收请求,用@autowired来实现依赖注入,JPA层面也有关联数据库的各种注解,在此基础上大家可以再扩展先掌握些Bean和AOP等必要技能。
如果再想了解多些的话,可以看本书后面给的vue做前端,spring boot做后端的项目,但这里请注意,由于面试只要展示后端技能,前端vue等,这是个加分项。不过在没有充分掌握后端开发技能的前提下,前端宁可不看。
然后不是继续看spring boot相关技术,比如不用继续细看logback或spring security等技能,更无需深入看spring cloud技能,而是准备项目。
1 挖掘下,比如你之前有在公司干spring boot项目的经验,或者在校有和老师或同学一起干过spring boot项目的经验,你把这些简历首先要写到简历上,通过简历证明你真正做过项目,而不是只跑通过学习项目。
商业项目包含的要素一般有,这个项目你是在什么公司做的,或者具体和朋友创业的情况是如何,这个项目客户是谁,做了多久,用到什么技术,项目是怎么测试和部署的,总之这些要么在简历上体现出现,要么在面试中具体和面试官说清楚。这里大家能看到,商业项目是挣钱的,相关用于挣钱的要素,大家如果能在简历或面试中体现出来,那么一定能说明这是商业项目。
这里反过来讲一下,比如初学者跑通多个学习项目,但这些无非是技术上的重复劳动,如果不提及“用于挣钱”的要素,那么一定无法据此证明这是商业项目。
2 再针对性地学测试、日志和部署,以及商业项目里一定会用到的技术。请注意之类一定要围绕商业项目里必然包含的实践要点来学技术。比如下文里本人讲述了基于敏捷开发模式的项目开发诸多要点,其中包含了git,maven(打包部署),junit(测试),logback(日志),当然项目开发绝不是只包含这些,更可能会包含swagger或spring security。
这里涉及的要点是,通过说具体技术的用法,证明你做过商业项目。相反如果仅说明你在学习项目里怎么用技术,这没用。比如在说junit单元测试,你可以说,我开发好功能以后,用junit做测试,其中用到了mock方法来模拟其它api的数据,同时junit还和sonar整合,从而确保代码测试覆盖率。
再如logback写日志,你可以说,我们项目是用logback写日志,以便测试,写日志时需要根据日志的重要性分成info,debug等级别日志,同时是通过配置文件,设置日志文件是每天更新以此。
3 大家看了上文描述后能体会到,说spring boot日志或security等技术时,一定得结合商业业务场景说,同时列举些你用过的相关api,单说你做过商业项目,但其中细节你说不清,或者你知道logback等技术,但项目里没用过,这两者都不行,一定得通过组件证明商业项目经验。
这样的话,大家在通过初始化项目学spring boot的时候,就无需只关注api,更无需学些初级开发一定用不到的技术,比如分布式集群,但一定会针对性地准备项目实践场景,以及相应的技术说辞。
4 准备到这个程度,大家能达到的效果是,能通过简历证明自己的足量项目经验,这样能得到面试机会,同时能在面试中通过客户信息等项目细节证明项目的真实性,更能通过测试部署日志等细节证明自己做过项目,但仅仅到这个程度其实还不够,但在这个程度上后面的准备就好多了。
做Spring Boot项目时 ,绝不会简单地只用上文提到的组件或技术,一定还会用到其它的技术,比如redis缓存,写日志时还可能涉及异步日志,前后端交互可能还会涉及到分布式部署,但这些技术点,一方面能通过面试不断从面试官的提问里积累,另一方面可以通过深挖logback,redis等细节,外带准备项目应用场景来准备面试。
但不少java初学者的做法是只跑通学习项目,或者漫无目的跑通多个学习项目,同时大量背八股文,这样的话,第一没法过简历筛选,更别谈面试了,第二甚至估计连准备简历和面试的标准(即真实项目经验),这也未必清楚。
5 更何况,按上文的方式准备好项目经验后,准备八股文就有方向了,其实面试一定更会问和项目相关的八股文。比如面向对象层面的八股文会很多,但由于这块项目里也就用个类或重载,所以未必会多问,但相比异常处理和集合,就可能多问,而且项目开发所对应的日志组件,缓存组件等,也会问得更多。
所以其实在准备好项目经验后,更能针对性地背八股文,或者哪怕当下不知道侧重点,多参加几场面试,多通过商业项目经验展示自己的能力后,多听听面试官结合项目经验问的八股文,那也能知道侧重点。
本文提到的要点是,第一结合spring boot做增删改查的业务知道项目里要用到哪些技术,第二结合项目实际准备能证明项目真实性的说辞,第三再围绕项目里用到的技术,说明自己真正做过项目。照这个思路去准备面试,由于能证明自己做过项目,其效果是第一能通过简历得到更多的面试机会,第二好歹能和面试官有问有答,并能在此基础上通过多场面试实践后果面试。
事实上本人用这个方法,帮到一些本来无面试机会的一些朋友得到了java面试机会,通过这些准备方法,我的一些朋友普遍能在少项目经验的前提下,通过准备,最终成功入行。但还是有一句说一句,本人辅导的客户由于之前spring boot技术普遍一般,且缺乏项目经验,能入行就不错了,一般找到的都是小公司或外包公司,找到自研或中等规模公司的也有,但不多。
如果大家想进一步了解简历和面试方面的技能,可以留言,或者到知乎或公众号,找
“老胡聊Java”