当下不少Java初学者也知道求职时项目的重要程度,但在简历上写项目和准备面试项目时,真有可能走弯路,这样的话,加重学习负担还是小事,还真有可能导致无法入职。
1 对于在校生和应届生来说,你去跑通个学习项目,甚至包装个项目,其实问题不大,因为对于在校生来说,商业项目经验不是必要条件,不过你求职时,证明自己在公司里实习过,或者能证明帮老师干过能挣钱的项目,这能提升求职的成功率。
2 但对于要以社招身份求职的人来说,商业项目是必选项。比如有人毕业后考研,或者毕业离开学校以后想通过培训班或自学入行,对这些想找Java工作的人来说,第一要在简历上证明自己做过商业项目,否则很难拿面试机会,第二要在面试中证明商业项目的真实性,否则都没资格背面试题。
不过当下,不少Java初学者准备面试项目的方式,可以说是错误的。
1 有人打算把跑通的学习项目写在简历上,甚至打算在面试中以此来展示能力,还有人甚至恨不得在面试现场当场去演示学习项目,但这顶多只能证明自己用过项目综合学习过技术。
再进一步,不少人还煞有介事地收集项目,比如不跑通电商、金融、物流或支付等项目,都不敢去找工作,或者有些人在投简历和面试碰壁以后,归因于项目里包含的技术太简单,于是再去准备含微服务以及各种分布式组件的项目,但实际上,对方公司,其实更关心求职者是否做过商业项目。
2 有人自己感觉没做过商业项目,也知道学习项目和商业项目的差别,但补救措施是“借项目”,比如管认识的人去要项目说明书,对这些人来说,最好能到朋友的公司里,现场跑一遍人家的商业项目,在熟悉业务细节后,以此来作为自己的商业项目。
但事实上,在不演示项目的前提下,面试时用嘴是很难说项目的业务流程,而面试中一般不会有项目演示的环节,再进一步说,一些真正的商业项目,是无法在自己电脑上运行起来的,比如有项目是用Oracle,而且是分布式部署,用到docker+k8s。或者哪怕是一些技术相对简单的项目,也会包含一些组件或包,要在自己电脑上搭建商业项目的运行环境,其实也不大现实。
而实际上,一方面面试官仅会通过项目细节确认求职者是否做过真实项目,另一方面,面试官更会确认技术在项目里的使用情况。即如果求职者打算去了解商业项目业务细节,从打算以此证明商业真实性,这条路走不通。
3 这些求职者往往跑通过一些学习项目,但会凭主观臆断,想象着把分布式锁,微服务等一些所谓的”资深“技术嵌入到学习项目里,以此希望证明自己用过”资深“技术,从而能过面试。这种做法其实效率很不高。
比如你是想说你做的是学习项目,只要是学习项目,那在其中用的技术,哪怕再资深,面试官只能认为你在这方面只是会简单的接口调用。但如果你打算把这个学习项目说成是商业项目,这反而更误事,因为不少初级开发想象中的技术使用场景,其实是错误的,比如真实项目不大会用Redis+lua做分布式锁,甚至都不大会用分布式锁。
4 更有甚者,有些求职者会把一些根本没开发价值的项目写到简历上当成是商业项目。比如你写个外卖或电商,好歹也算有行业背景。但有些求职者写的是博客系统或留言系统或交友平台。这些项目在有经验面试官的眼里,甚至都不会继续往下看,因为没有商业开发价值,所以基本上是学习项目,而且其中包含的技术太简单。
本文不是教大家无中生有地包装项目,毕竟求职得凭诚信,但如果你确实做过商业项目,你就得在简历和面试中掌握足够的技能,别让面试官误认为你这仅仅是学习项目。
先说下,面试官一般怎么确认这是学习项目还商业项目?不大可能让当场演示,只是凭嘴问。
1 如果你在简历上写明这个项目的网址或APP名,那面试官真可能现场打开去验证,但这种情况下,基本能验证这个项目不真实。因为网址或app看到的一般是前端页面,而java做的是后端接口,真正的后端调用,是无法用前端效果去演示的,你现场又不可能演示用postman调用接口。
相反如果求职者说,这个项目是xx系统,客户是电信或某公司或某事业单位的部门,已经安装在客户的服务器上,是内部系统,从外网无法访问,面试官基本会信,因为很多情况就这样。如果求职者说,我最近做的项目,我离职时还没上线,这时面试官会警惕,因为求职者此时属于不打自招,在面试官无法确认是否上线的前提下,主动心虚说这没上线,意味着这个项目有可能是包装的。
2 项目角度面试官会从公司背景、客户、项目业务背景、项目开发细节和是否上线等情况,确认项目的真实性。
具体会问,这个项目你是在什么公司里做的?如果你说是跟着老师做或和朋友一起创业,这勉强能说得过,但如果你说是自己做的,这段时间不在公司,那么这属于学习项目。或者会问,客户是谁,是否上线?一般商业项目,哪怕安装在客户内部服务器,外面看不到,而且初级开发没参与上线的过程,也不知道上线细节,但项目为了挣钱,一般总会上线。
至于业务细节,面试官一般会问,这个项目包含哪些模块,你做过哪些模块,用过哪些数据表,数据表的数据量是多少?这里请大家记住,面试官不是你之前项目的具体使用者,不会详细问流程,比如你做的是客户数据插入,面试官不会问,你第一步如何检查数据,第二步如何传递数据,第三步插入到什么数据表等细节。
3 技术角度,面试官会问,你在项目里用过哪些技术,做过哪些事情。对在校生或初级开发来说,面试官的期望是,用spring boot做过增删改查的开发,用mybatis连过数据库,用过基本的事务,日志和单元测试等基本功能,做过基本的测试,解决过基本的技术问题。当然最好是在项目里解决过数据库或OOM问题,用过微服务等资深技术。
这块,如果求职者还说,用过redis或微服务,面试官也会问,你项目里是怎么用redis和微服务的,这块如果求职者只是在学习项目里用过,或者是想把学习项目里得到的经验嵌入到真实项目,一般回答的内容和真实项目的场景严重不同。比如会说用过redis+lua的分布式锁,但大多数真实项目其实不会用到分布式锁。
4 会问项目里解决过的实际问题,或者就着求职者说用过的技术,问技术细节。这块如果求职者的项目是包装的,那么基本上说不上解决过哪些问题,或者说出来的业务细节听上去像错了。
除了上文提到的分布式锁以外,一些零项目经验的求职者还会说,项目里用过分布式事务,但事实上连分布式事务和单机版事务的差别也搞不清楚。或者会说,项目没有高并发,但依然会用微服务和分库分表或其它分布式组件。
上文的叙述其实和“准备项目”的方法无关,但一些初学者看了,一定能知道,其实自己准备Java项目的方法,真可能是自欺欺人,在此基础上,大家也就更能理解下文提到的准备Java项目的方法。
1 结合公司场景,尤其是小公司场景,证明这是用于挣钱以及能够挣钱的项目。
首先你的项目一定是在公司里做的,比如大四实习了3个月,那么你需要在简历上说明,这3个月在什么公司,做了什么项目。或者退而求其次,这个项目是帮实验室老师做的,也是挣钱的项目。相反,如果做这个项目的时间段没有公司背景,那么大概率会被认为是学习项目。
同时,小公司所做项目的特点是,工期短,一般不会超过半年,不会自研,也不会做大公司的竞品。比如不会自研个电商平台,也不会做个外卖系统,原因好理解,哪怕做出来,功能再完善,也没法和大公司的竞争。所以在小公司里做的项目,真可能是xx管理系统。这里为了说明这个确实是商业项目,可以说明下这个项目的客户。
多说一句,比如在小公司里做的仓库管理系统,卖给了当地某公司,这是可行的,或者说,做了某政府部门的社区管理系统,同时说清楚,在哪里上线,这也可信,毕竟有些小公司能接到此类项目。但如果说,某小公司做了健康管理平台或留言系统,这种项目是没客户要买,所以挣不到钱。
2 说清楚项目组人数,开发细节和已经上线等细节。
比如你说,在项目里用过Maven, Git,技术上用过postman发请求做测试,这些组件和工具一般学习项目是用不到的,甚至有些培训班在讲课时也未必用到,但真实项目大概率会用到。
具体你说出,我们项目组是6个人,1个项目经理,1个前端,剩下的是后端开发,用Maven管项目,用git管代码,用postman发请求测试后端接口,我参与了xx等模块,开发了5个月,当然再进一步,你更可以说,这个项目开发完成后,是项目经理到客户现场去上线。那么对方公司听下来,就认为你掌握了这些只有商业项目里有的技术,能进一步确信你做过真实项目。
3 业务方面,通过“对数据表的增删改查”来证明。
很多Java初学者不知道说明项目业务的方法,其实这真可以说是“会者不难”。比如你做的是一个政府的社区信息管理平台,已经在某个社区上线,你就可以说,在这个项目里,你做过了信息管理模块、办理业务的明细模块,社区工作人员管理模块等业务模块,这些业务模块一听就属于这个系统,当然你不能说,这个系统里还包含了商品展示模块,因为这个模块从业务角度,不大可能属于“社区信息管理系统”。
而对于每个模块,你只需要说,其中是对数据表的增删改查,比如业务明细模块是对业务明细表的增删改查,你做的是后端,是用spring boot的控制器+service+repo,根据前端发来的请求url以及参数,对数据表进行操作并返回数据。
至于具体的业务细节,比如参数如何检查,请求如何处理,发生异常时如何返回数据,这些面试官不关心,你真不用讲,也不用准备。说句不该说的话,比如有人通过若依等系统跑通一个项目,然后用这个办法说业务流程,同时为这个项目准备一个公司场景,虽然这种做法不提倡,但面试官真很难发现,或者说也不想发现。
4 通过技术的使用细节,有取有舍准备面试说辞。
这块建议是分层次准备,第一个层次是准备日志、事务、junit、swagger、AOP和Mybatis的细节说辞,第二个层次是在第一个层次的基础上,外加redis和kafka等分布式组件的说辞,第三个层次是在此基础上,再外加微服务方面的说辞。
比如Java项目经验不多,自认为Java基础也一般,这里应该通过第一个层次,至少先证明自己的商业项目经验,并以此证明自己会用Spring boot框架做增删改查,这样就有一定的概率面试成,而且面成的概率远大于让面试官感觉你只做过学习项目。但如果相反,你连商业项目经验和基本的spring boot做增删改查的说辞都没准备好,在此基础上就去卷微服务和分布式组件,那么面试官真会认为,你连基本增删改查也不会。
而准备技术使用细节的做法是,通过接口和参数说明,比如你如何证明你用过junit?就说用过@test注解,用AssertEquals方法对比数据,其实就可以了。如何证明用过AOP?用过@Pointcut注解,同时用@Aspect注解,再说下业务场景,是把哪两个业务通过AOP整合到一起。
需要说明的是,如果能力一般,项目经验也不多,别去准备高并发技能,因为大概率准备不好。这里高并发的技能包括Redis+lua的限流或秒杀或分布式锁等,还是这句话,一层层准备,先准备基本的增删改查,准备好以后再准备分布式或微服务组件,这样其实对应届生来说,真就可以了。
5 解决实际问题的方法一般是,看日志解决。
比如你被问到,解决过哪些实际问题,你如果不会说数据库索引调优等高级问题,你真可以说,用postman发请求,发现问题,然后看日志,根据异常信息,排查过空指针或参数不对的问题。
通过上述方法,你大概率能证明项目的真实性,看到这里,不少初学者会发现,其实面试准备项目的方法和你自己原先想象的不同,而且也简单,毕竟这是从面试的角度来证明,而不是从学习的角度来证明。
当然具体操作的时候还有很多细节,相关内容本人也有如下的文章,这里就不再重复讲述了。
java零项目经验,找工作前该如何准备项目?面试时又该怎么说?-CSDN博客文章浏览阅读828次,点赞23次,收藏12次。本人在做Java技术面试官的时候,发现了一种不怎么好的倾向:不少求职者,尤其是Java初级开发的求职者,会认为面试准备就是背八股文和准备算法,这本身没错,面试前也该充分准备这方面的问题,但更要准备项目。1 在校招阶段,由于大多数应届生是没有商业项目经验的,所以对校招面试官来说,只能退而求其次,通过学习项目、八股文和算法题来选人,但话说回来,校招过程中如果能展示商业项目经验,一定能对其它竞争者形成碾压性的优势。https://blog.csdn.net/sxeric/article/details/138585808?spm=1001.2014.3001.5501说说真实Java项目的开发流程,以及面试前的项目准备说辞 - 知乎介绍项目是必不可少的Java面试环节,求职者需要借此证明自己真实Java项目的经验,如果再做的好的话,需要借此展开自己的亮点说辞。 不过之前如果只有学习项目经验,比如是自己跑通一个项目,或者是在培训班里通过…https://zhuanlan.zhihu.com/p/574240101计算机专业毕业的你,是如何提前准备找工作的? - 知乎其它方面不说,就说java方面,技术层面,可以简单归纳成,跑通spring boot学习项目+准备项目说辞=过面试…https://www.zhihu.com/question/376509250/answer/3346701471