不少初学者朋友在学习Java过程中,会对着视频敲Java项目,其中遇到的BUG还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂
这些朋友应该怎样才能掌握一个项目所用的知识点呢?至少不至于过了一头半个月就想不起来这个项目是什么东西呢?
1 刚开始运行项目的时候,你别根据视频或现有代码敲,而是得先运行通人家的代码。
自己敲代码的时候,会拘泥于API或模块的细节,多敲代码后反而会一头雾水。而且,你敲代码的时候,很有可能因为敲错一个地方而导致整个系统没法运行,而且这种错误很难排查,往往你用了1天敲完整个系统,跑不通,用了3天时间发现了10个敲错了地方,改了还是跑不通,再用了5天,把所有问题都改了,才跑通,这样就浪费至少1周时间了。
2 找项目,你得找一定能跑通的,比如star比较多的github项目,或者销量比较好的视频教程,或者干脆买书,书上的代码经过出版社加持,大多能跑通。否则你学了半天,找了一个跑不通的项目,再用半个月去调试,这样浪费的时间更多了。
3 找到可以跑通的项目后,根据说明,优先搭建环境,比如选对jdk版本,搭建好mysql数据库环境,创建好MySQL的表,搭建好IDEA集成开发环境,必要的话再搭建好分布式组件,再通过pom.xml文件引入依赖包。环境好环境,再按提示跑系统,可以这样说,系统跑通了,这个项目你就成功一半了。
4 后面很关键,别先理解源码的含义,先结合一个业务流程,跑通增删改查的流程。请注意,别多跑业务流程,因为大多数业务的流程很相似,跑通一个就行了。
从界面上跑通一个流程后,你再去看代码,先看从前端到后端再到数据库的流程,看下请求经过了哪些类,这些类是怎么处理了,最后是怎么落实到数据库里的。
比如现在大多数Java项目,都是spring boot,从控制器到业务逻辑类再到repo层,外带Spring Cloud Alibaba组件,或者nginx,netty,redis等组件。当你跑通一个流程后,你就知道请求怎么被控制器方法处理,控制器方法怎么做参数验证,控制器方法如何调用业务方法,业务方法怎么通过JPA(或其它ORM)访问数据库。总之先理解流程,再理解sprign cloud alibaba组件等枝干。
5 然后你再依样画葫芦,多跑几个业务流程,再结合代码理解整体流程,这时,你可以关注些细节,缺啥补啥。比如你不理解@Service注解,那你就去查,你不理解JPA连接数据库的业务模型类或连接数据库的Repo类的含义,那你也查,这样你就通过运行效果,能对应到具体的代码上,然后能通过看代码,理解相关语法细节。
请注意,一定是先流程再细节,先框架再语法。当你理解流程的时候,一定别拘泥语法,遇到不懂的,先整体上理解,比如先理解,通过业务模型类能做JPA映射,在基础上理解流程,等你理解好流程以后,再去通过业务模型类里面的@Table和@Entity等注解,理解做映射的细节步骤。
6 当你看明白流程和搞清楚流程中的细节语法以后,再去看衍生的组件。比如某个项目的重点是讲Spring Boot整合spring cloud alibaba微服务,那么你先通过看其它资料,知道Nacos,Sentinel等组件是干嘛的,再到项目中找到和Nacos和Sentinel的相关配置,比如Nacos体现在配置文件里,Sentinel体现在xx类和xx注解中。
而且,在项目中,一定是会把Nacos和Sentinel等组件体现到业务中,你可以通过业务,很好地进一步理解Nacos和sentinel的用法和api。
用这种方法,你能很快理解项目的框架和其中的组件,这种方法的操作要点是先搭环境再运行通再结合业务看,看明白以后,你想怎么记就怎么记,用记事本什么都行
但我可以这样说,由于这是学习项目,不是你参与开发过的商业项目,更不是公司用来挣钱的商业项目。所以你只是从人家的项目里理解技能,这样对你提升技能的帮助,也是有限的。你产生似懂非懂的感觉,或者过了一两个月后忘记项目细节,这很正常,也无法避免,更无法缓解和改善。
但是后面你要继续做的,绝不是自己动手从零开始实现这个项目,这也是很多初学者的误区,解释下原因。
1 以初学者的能力,从零开始敲一个项目,难度太大,这样做的结果大多是不了了之。
2 如果从零开始敲项目有效果,那么排查万难硬着头皮敲一个,也不是不可以,但公司里不是这样开发项目的,公司里开发项目的方式一般是根据现有代码改,而不是从零开始敲,所以自己敲一个项目,哪怕用了三个月半年时间敲出来,其实大概率是无用功。
3 有比从零开始敲项目更好的学习方法,所以从零敲项目没必要。
这里说个观点,通过学习项目学习,哪怕这个项目包含的技术要点再多,但充其量只是拾人牙慧。可以靠这种方式入门,但为了高效提升,或者提升到更高的程度,一定得参与商业项目开发,即直接到公司里去做项目。
所以跑通一个Java项目后,如果你感觉把握不大,可以再去找个跑一下,但项目数量别操作3个。跑通后,赶紧去找实习细节。
1 如果是在校生,你直接问你们老师,或者是硕导博导,他们一般有外面公司的项目。你就和他们说,我想学习,能不能晚上周末或假期,到
你们教研室来学做项目,不收钱,只要让我参与就行。
这样老师有了免费劳力,一般都肯,然后你进项目组以后,争取自己动手开发一个项目,说动手开发一个项目也不准确,应该是按现有项目改出一个功能,这样比你运行通5个项目都强。或者可以这样说,你哪怕运行通,或者所谓吃透再多的项目,都比不上自己在商业项目中实现一个功能模块。
2 如果你大三大四,快实习了,你就把你跑通的项目写到简历中,然后出去找实习公司,当然中间是要背面试题。找实习公司也先别看钱,优先获取实践机会,这样等你毕业后,因为你的技能是通过真实项目掌握的,你一定远比通过学习项目的其它人强。
3 如果你已经工作,想要转行到Java开发,那也一样,背面试题,简历上写你运行通的Java项目,优先找个能提供实践的机会,必要的话,你找个培训班,用钱买人家辅导服务,用钱买人家推荐工作的服务。
最后做个总结。
1 如果大家只是运行人家的项目学习,通过人家的java项目学习,哪怕你把人家项目中的每个细节都掌握,面试找工作时,顶多得到的评价是“熟悉xx框架,熟悉xx语法”,但很难证明相关技能的项目开发经验,这样找工作得碰运气。不过这块不能省,很多零基础的学员都这样入门的。
2 这里多说一句,如果你能结合你学习项目的需求,说明xx技术的用法,那倒有可能让面试官感觉你有xx技术的项目实践经验,这样哪怕你之前没做过真实项目,只要你结合项目说的技术到位,再背些面试题,还真有可能找到工作。
3 一定注意,你运行人家的项目,目的是为了找java工作,所以你在通过人家的项目学习时,不仅要做到理解其中的含义,更要把其中学到的技术用到找工作(或找更高级的工作)上,所以通过运行人家代码学习时,一定别拘泥于只搞明白人家项目技术。
这是我的公众号,其中包含了大量面试文章,同时我自己出了多本Python和Java方面的书籍,会定期在公众号里发书的电子版。请大家关注下我的公众号,谢谢了。