首先务必了解自己的目的,带着目的去github、码云、B站找相关的开源项目或视频。目的可能为:
- 学习一个框架
- 学习一个项目基础架构
- 学习一个解决方案
- 学习一个工具
找到一个star数比较多(github、码云)或者播放量比较大(B站)的项目,项目介绍比较丰富的,至少包含但不限于如下内容:
- 项目功能介绍
- 项目架构
- 项目技术栈
- 项目模块划分
- 如何部署代码(将项目跑起来的教程介绍)
了解完项目介绍之后,将项目跑起来。必须能正常运行才可以进行下一步。
如果遇到一些需要你去调试修复bug才可以正常跑起来的项目,请尽快脱坑,更换另外的项目。没必要为这些项目浪费自己的时间。
熟悉项目功能,可以通过操作项目不同页面达到尽快熟悉项目功能的目的。用截图工具snipaste记录一些页面截图。包含但不限于:
- 自己感兴趣的功能
- 自己不知道怎么实现的功能
接下来就是阅读项目源码了,打开浏览器的开发者工具(F12键),再跑一次功能,找到自己感兴趣的功能(或自己不知道怎么实现的功能)对应的后台接口,然后在IDEA工具中找到对应的接口代码所在处,根据如下步骤去了解该功能的完整实现流程。
- 控制器
- 请求怎么被控制器方法处理
- 控制器方法怎么做参数验证
- 控制器方法怎么调用业务方法
- 业务逻辑类
- 业务方法怎么通过MyBatis(或其他ORM)访问数据库
- repo层:数据访问层(Data Access Layer),处理与数据存储相关的操作和逻辑。它提供了对数据存储的访问接口,隐藏了具体的数据存储细节,使上层的业务逻辑模块能够以统一的方式进行数据的增删改查。repo层通常包含如下内容:
- 数据库操作:插入、更新、删除和查询
- 事务管理:保证数据一致性
- 缓存处理:repo层可以使用缓存技术(如Redis、Memcached等),以减少对数据库的访问压力,并提高数据的读取速度。它可以处理缓存的读取、写入和刷新等操作。
然后你再依样画葫芦,多跑几个业务流程,再结合代码理解整体流程,这时,你可以关注些细节,缺啥补啥。比如:
- 你不理解 @Bean 注解,那你就去查
- 你不理解 MyBatis 连接数据库的业务模型类或连接数据库的Repo类的含义,那你也查
- 当你理解流程的时候,一定别拘泥语法,遇到不懂的,先整体上理解,比如先理解,通过业务模型类能做 MyBatis 映射,在基础上理解流程,等你理解好流程以后,再去通过业务模型类里面的@Table和@Entity等注解,理解做映射的细节步骤。
当你看明白流程和搞清楚流程中的细节语法以后,再去看衍生的组件。
比如某个项目的重点是讲Spring Boot整合spring cloud alibaba微服务,那么你先通过看其它资料,知道Nacos,Sentinel等组件是干嘛的,再到项目中找到和Nacos和Sentinel的相关配置,比如Nacos体现在配置文件里,Sentinel体现在xx类和xx注解中。
比如这个项目用到了Redis,那么你就去找“Spring Boot如何引入Redis”博客资料,知道如何在项目里进行redis配置,如何调用redis进行缓存写入和删除。
接下来你要做的绝不是自己动手从零开始实现这个项目,毕竟时间成本不允许,而且公司代码一般是根据现有代码修改。你应该这么做:
- 试着删除某个模块的代码,然后自己去实现这个模块的功能。
- 扩展这个项目功能,模仿着该项目的代码风格去实现新的功能模块。
- 所以跑通一个Java项目后,如果你感觉把握不大,可以再去找个跑一下,但项目数量别超过3个。跑通后,赶紧去找公司开始工作,参与到商业项目中,只有在商业项目中你会遇到很多学习遇不到的问题,这也是你成长提升的契机。
通过项目学习之后,你应该学会复盘,将这个项目的介绍、学习目的、功能、技术栈、项目目录结构、项目解读、遇到问题、值得学习的点、项目结论等九个方面进行记录。写成一篇博客,好记性不如烂笔头,这样你就算隔了一个月之后忘记了这个项目的内容,通过这篇博客你可以花最少的时间迅速回忆起这个项目。
如果你已经工作,想要转行到Java开发,背面试题,简历上写你运行通的Java项目,优先找个能提供实践的机会。
总结:
- 如果大家只是运行人家的项目学习,通过人家的java项目学习,哪怕你把人家项目中的每个细节都掌握,面试找工作时,顶多得到的评价是“熟悉xx框架,熟悉xx语法”,所以你要结合你学习项目的需求,说明xx技术的用法,那倒有可能让面试官感觉你有xx技术的项目实践经验,这样哪怕你之前没做过真实项目,只要你结合项目说的技术到位,再背些面试题,还真有可能找到工作。
- 一定注意,你运行人家的项目,目的是为了找java工作,所以你在通过人家的项目学习时,不仅要做到理解其中的含义,更要把其中学到的技术用到找工作(或找更高级的工作)上,所以通过运行人家代码学习时,一定别拘泥于只搞明白人家项目技术。
参考博客:
初学者如何吃透一个Java项目