炸裂!手摸手教你如何吃透一个 Java 项目,yyds

简介: 炸裂!手摸手教你如何吃透一个 Java 项目,yyds

先说一下大多数新手的情况:就是对着视频敲 Java 项目,其中遇到的 BUG 还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂,应该怎样才能掌握一个项目所用的知识点呢?


先分享一位好朋友丁威的经验吧,他是《RocketMQ技术内幕》一书的作者。他在尝试学习 RocketMQ 之前未曾接触过消息中间件,但硬是通过自己提炼的学习方法,最终成为 RocketMQ 社区的优秀布道师。这让他有了一个非常亮眼的标签,极大提高了职场竞争力。


他的总结有以下四点:


了解这个项目的使用场景、以及架构设计中将承担的责任。

寻找官方文档,从整体上把握这个项目的设计理念。

搭建自己的开发调试环境,运行官方提供 Demo 示例,为后续深入研究打下基础。

先主干流程再分支流程,注意切割,逐个击破。

我认为是非常有道理的。记得我一开始参加工作的时候,拿到领导安排的项目后,非常懵逼,完全不知道该如何下手,不知道自己该干嘛。去问领导,领导说没时间,要我自己先研究研究,研究什么呢?


一开始当然毫无头绪,后面就慢慢琢磨出来了一点小心得。


先从项目的需求文档下手,先了解这个项目是干嘛的,了解个大概,就不慌了。然后把这个项目的源码在本地跑起来,“跑起来”,说着简单,真正做的时候还是挺难的,我记得我当时跑第一个项目差不多用了一周多的时间,因为我的开发环境和项目要求的有一些不一样,就导致出了很多问题。


我印象很深刻的问题有两个,第一个就是乱码了,类似下图这种。


image.png


第二个就是编译出错,原因很简单,JDK 的版本不一样。


这两个问题虽然简单,但特别常见,真的,新手基本上都会遇到。一开始遇到的时候是很慌的,因为源码肯定不会有问题,有问题的肯定是自己的开发环境。


折腾了一周多的时间,项目终于跑起来了。


我让自己体验了一把测试的角色,就是把能操作的按钮全点一遍,体验一下项目哪些已经开发完成了,哪些还没有。没用多久,我就测出来了两三个新 bug,基本上都是一些非常规操作引起的,虽然我没能解决,但报告给领导后,领导还是很惊讶的,他看我的小眼神,多少有点看吴下阿蒙的感觉,“小伙子,有长进啊!”


然后,我并没有着急去开发领导安排给我的任务,而是去看同事已经完成的代码,当然是带着问题去看的,为什么他会这么写?这么写的好处是什么?如果换做是我,我会怎么实现?这其中的差别是我自己考虑不周吗?


当然了,我不会看太细致,因为有些内容超出了我的技术范围,我看不懂的,只能是“走马观花”,大致看明白是什么意思就“得过且过”了。


这里提醒大家一点的是,千万不要陷入技术细节,尤其是一开始做项目的时候,因为自己不了解业务,再加上技术水平可能达不到,研究技术细节很容易就阵亡了。


另外一点就是,基本功一定要扎实,不要连整体的代码脉络都看不懂,那样就很吃力了。我这里有一份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。


GitHub 星标 115k+的 Java 教程,超级硬核!


尽量花一点时间巩固一下基础,不要让自己太被动。遇到自己生疏的知识点,就主动去查一下。


看源码的时候,自己加一些日志啊,加一些断点啊,去跑一跑。有时候,不加断点,只是去看源码很可能会忽略掉一些关键的技术细节,因为 Java 是多态的,有些地方看源码只能看到类和类之间的层次关系,却看不到子类是怎么重写父类方法的,或者实现类是怎么实现接口的,通过调试就可以看的很明白。


还有一些分支语句啊,如果只是看源码可能不明白进入这个分支的条件是什么。还有一些比较关键的技术细节啊,只看源码可能懵懵懂懂的,跟着断点一步步地深入可能就全明白了。


举个例子,拿 StringBuilder 的 append() 方法来说吧。StringBuilder 的内部是通过字符数组(Java 8)实现的, 如果新添加的字符串长度超出了数组的长度,是要进行扩容的。加了断点后,遇到需要扩容的情况就能看到 JDK 的内部是怎么来进行扩容的啦,如下图所示。


image.png


一般来说,项目都是比较庞大的,代码会比较多,这时候最好只关注一个模块,就是自己通过需求文档,或者阅读源码了解最多的模块,尽量把这个模块的整体逻辑给吃透了,如果领导恰好安排你做的这个模块的业务代码,那你的上手难度就大大降低了!


再总结一下:


拿到项目后,不要着急动手,先看文档,尤其是需求文档。

把项目的源码在本地跑起来。

做一些测试,看能不能测出一些边界的 bug。

关注一个模块,去研究一下源码,但不要过于深究技术细节。

我再给大家推荐两个优秀的 Java 开源项目吧,如果你还没有参加工作,可以拿这两个项目作为练手项目。


SpringBoot 完整电商系统 Mall:包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现。

vhr:微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发。

我之前做的一个电商项目还用了 mall 作为基层的架构!mall 的学习教程非常全面,作者直接做了一个在线的网站,基本上用的技术都讲述得特别明白!




vhr 目前在 GitHub 上已经有 20.8k 的 star,属于很强的那种了。


后端技术栈


Spring Boot

Spring Security

MyBatis

MySQL

Redis

RabbitMQ

Spring Cache

WebSocket

前端技术栈


Vue

ElementUI

axios

vue-router

Vuex

WebSocket

vue-cli4

基本上主流的前后端技术都用到了。作者为初学者特意录了项目的部署视频教程,很贴心~


文档写得特别全,我简单列举下。


权限数据库设计

服务端环境搭建

动态处理角色和资源的关系

密码加密并加盐

服务端异常的统一处理

axios 请求封装,请求异常统一处理

将请求方法挂到Vue上

登录状态的保存

登录成功后动态加载组件

角色资源关系管理

用户角色关系管理

基本上每个知识点都有对应的文档,文档齐全的话,对吃透项目是极好的帮助。


嗯,最后强调一点,大家在做练手项目的时候,一定记得写注释。我在很多地方看到这样一个观点,“请停止写注释,因为只有烂的代码才需要注释。”这个观点非常巧妙,它让我想起了孟子的一句话,“杨氏为我,是无君也;墨氏兼爱,是无父也。无父无君,是禽兽也。”


Java 源码的作者绝对是这个世界上最优秀的程序员,连他们都写注释,那些声称“请停止写注释”的号召者是不是要啪啪啪地打脸,直到打肿为止。


拿 String 来说吧,要了解这个类,直接看类的注释就足够了,写得非常详细。


image.png


一个优秀的 Java 项目也应该是这样的,注释必须到位,不然别人怎么吃透,吃不透的。只能说一句,Java 源码的作者,yyds(阴阳大师,hhh)。


相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
Java 应用服务中间件 开发工具
苍穹外卖》电商实战项目(java)知识点整理(上)
苍穹外卖》电商实战项目(java)知识点整理(上)
172 3
|
2月前
|
Java Maven
java修改当前项目的maven仓库地址为国内
修改当前项目的maven仓库地址为国内
|
30天前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
36 0
|
2月前
|
JavaScript Java 应用服务中间件
centos部署vue项目(java,tomcat环境的搭建)
centos部署vue项目(java,tomcat环境的搭建)
39 0
|
3月前
|
Java API Maven
JFinal5+Jetty2009+IDEA2020+Java8的非Maven-Demo项目
JFinal5+Jetty2009+IDEA2020+Java8的非Maven-Demo项目
22 1
|
24天前
|
人工智能 监控 算法
java智慧城管源码 AI视频智能分析 可直接上项目
Java智慧城管源码实现AI视频智能分析,适用于直接部署项目。系统运用互联网、大数据、云计算和AI提升城市管理水平,采用“一级监督、二级指挥、四级联动”模式。功能涵盖AI智能检测(如占道广告、垃圾处理等)、执法办案、视频分析、统计分析及队伍管理等多个模块,利用深度学习优化城市管理自动化和智能化,提供决策支持。
142 4
java智慧城管源码 AI视频智能分析 可直接上项目
|
2月前
|
监控 IDE Java
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
40 0
|
22天前
|
Java Maven
运行maven项目出现Error:java: JDK isn‘t specified for module ‘XXX‘
运行maven项目出现Error:java: JDK isn‘t specified for module ‘XXX‘
11 0
|
30天前
|
算法 搜索推荐 Java
利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法)
利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法)
13 1
|
1月前
|
Java Maven Android开发
JAVA Web项目开发创建Web项目(第一天)
JAVA Web项目开发创建Web项目(第一天)