炸裂!手摸手教你如何吃透一个 Java 项目,yyds
先说一下大多数新手的情况:就是对着视频敲 Java 项目,其中遇到的 BUG 还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂,应该怎样才能掌握一个项目所用的知识点呢?
先分享一位好朋友丁威的经验吧,他是《RocketMQ技术内幕》一书的作者。他在尝试学习 RocketMQ 之前未曾接触过消息中间件,但硬是通过自己提炼的学习方法,最终成为 RocketMQ 社区的优秀布道师。这让他有了一个非常亮眼的标签,极大提高了职场竞争力。
他的总结有以下四点:
- 了解这个项目的使用场景、以及架构设计中将承担的责任。
- 寻找官方文档,从整体上把握这个项目的设计理念。
- 搭建自己的开发调试环境,运行官方提供 Demo 示例,为后续深入研究打下基础。
- 先主干流程再分支流程,注意切割,逐个击破。
我认为是非常有道理的。记得我一开始参加工作的时候,拿到领导安排的项目后,非常懵逼,完全不知道该如何下手,不知道自己该干嘛。去问领导,领导说没时间,要我自己先研究研究,研究什么呢?
一开始当然毫无头绪,后面就慢慢琢磨出来了一点小心得。
先从项目的需求文档下手,先了解这个项目是干嘛的,了解个大概,就不慌了。然后把这个项目的源码在本地跑起来,“跑起来”,说着简单,真正做的时候还是挺难的,我记得我当时跑第一个项目差不多用了一周多的时间,因为我的开发环境和项目要求的有一些不一样,就导致出了很多问题。
我印象很深刻的问题有两个,第一个就是乱码了,类似下图这种。
第二个就是编译出错,原因很简单,JDK 的版本不一样。
这两个问题虽然简单,但特别常见,真的,新手基本上都会遇到。一开始遇到的时候是很慌的,因为源码肯定不会有问题,有问题的肯定是自己的开发环境。
折腾了一周多的时间,项目终于跑起来了。
我让自己体验了一把测试的角色,就是把能操作的按钮全点一遍,体验一下项目哪些已经开发完成了,哪些还没有。没用多久,我就测出来了两三个新 bug,基本上都是一些非常规操作引起的,虽然我没能解决,但报告给领导后,领导还是很惊讶的,他看我的小眼神,多少有点看吴下阿蒙的感觉,“小伙子,有长进啊!”
然后,我并没有着急去开发领导安排给我的任务,而是去看同事已经完成的代码,当然是带着问题去看的,为什么他会这么写?这么写的好处是什么?如果换做是我,我会怎么实现?这其中的差别是我自己考虑不周吗?
当然了,我不会看太细致,因为有些内容超出了我的技术范围,我看不懂的,只能是“走马观花”,大致看明白是什么意思就“得过且过”了。
这里提醒大家一点的是,千万不要陷入技术细节,尤其是一开始做项目的时候,因为自己不了解业务,再加上技术水平可能达不到,研究技术细节很容易就阵亡了。
另外一点就是,基本功一定要扎实,不要连整体的代码脉络都看不懂,那样就很吃力了。我这里有一份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。
GitHub 星标 115k+的 Java 教程,超级硬核!
尽量花一点时间巩固一下基础,不要让自己太被动。遇到自己生疏的知识点,就主动去查一下。
看源码的时候,自己加一些日志啊,加一些断点啊,去跑一跑。有时候,不加断点,只是去看源码很可能会忽略掉一些关键的技术细节,因为 Java 是多态的,有些地方看源码只能看到类和类之间的层次关系,却看不到子类是怎么重写父类方法的,或者实现类是怎么实现接口的,通过调试就可以看的很明白。
还有一些分支语句啊,如果只是看源码可能不明白进入这个分支的条件是什么。还有一些比较关键的技术细节啊,只看源码可能懵懵懂懂的,跟着断点一步步地深入可能就全明白了。
举个例子,拿 StringBuilder 的 append()
方法来说吧。StringBuilder 的内部是通过字符数组(Java 8)实现的, 如果新添加的字符串长度超出了数组的长度,是要进行扩容的。加了断点后,遇到需要扩容的情况就能看到 JDK 的内部是怎么来进行扩容的啦,如下图所示。
一般来说,项目都是比较庞大的,代码会比较多,这时候最好只关注一个模块,就是自己通过需求文档,或者阅读源码了解最多的模块,尽量把这个模块的整体逻辑给吃透了,如果领导恰好安排你做的这个模块的业务代码,那你的上手难度就大大降低了!
再总结一下:
- 拿到项目后,不要着急动手,先看文档,尤其是需求文档。
- 把项目的源码在本地跑起来。
- 做一些测试,看能不能测出一些边界的 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 来说吧,要了解这个类,直接看类的注释就足够了,写得非常详细。
一个优秀的 Java 项目也应该是这样的,注释必须到位,不然别人怎么吃透,吃不透的。只能说一句,Java 源码的作者,yyds(阴阳大师,hhh)。
我是二哥呀,赞一个可好?
炸裂!手摸手教你如何吃透一个 Java 项目,yyds相关推荐
- 超强使用干货!教你如何吃透一个Java项目
整理了一些Java项目,分享给大家 1. 一款Java开源的Spring Boot即时通讯IM聊天系统 地址:一款Java开源的Spring Boot即时通讯IM聊天系统 2. Java外卖点餐系统[ ...
- 如何真正的吃透一个Java项目?
如何真正的吃透一个Java项目?这里要说吃透一个Java项目的标准就是:下次遇到此类Java项目可以快速使用写过的Java项目的解决方案完成它. 要达到这个的标准,还得从开发一个Java项目的过程来分 ...
- 初学者如何吃透一个Java项目
不少初学者朋友在学习Java过程中,会对着视频敲Java项目,其中遇到的BUG还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂 这些朋友应该怎样才能掌握一个项目所用 ...
- 如何吃透一个java项目
见字如面,我是威哥,一个从普通二本院校毕业,从未曾接触分布式.微服务.高并发到通过技术分享实现职场蜕变,成长为RocketMQ社区优秀布道师.大厂资深架构师,出版<RocketMQ技术内幕> ...
- 【万字长文】手摸手教你shell脚本编程
[万字长文]手摸手教你shell脚本编程 我写这篇文章的目的 前段时间参加了联创团队的春令营, 为期半个多月的春令营做了三个项目, 其中有一个项目是关于shell的, 当时完全没接触过shell脚本编 ...
- 手摸手教你做动态壁纸
手摸手教你做动态壁纸 Android · jeasonwong · 于 5 天前发布 · 最后由 xingstarx 于 2 天前回复 · 440 次阅读 项目地址:https://github.co ...
- 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金
完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...
- 快应用之手摸手,跟我走(1)
快应用发布快两周啦.这两天有空,就捣鼓了一个快应用.整体感觉来说,交互很流畅,基本功能和组件都有.上手也很快.希望官网推广能做好.好了,话不多说,先上 gitHub (传送门) gankQuick-快 ...
- 招聘行业颠覆者【伯小乐】| 手摸手产品研究院
手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告. 作者微信:weihe2416 "伯小乐" 是 ...
- 短视频Gif快手-有点意思 | 手摸手产品研究院
手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告. ...
最新文章
- 前端Vue学习之路(一)-初识Vue
- 如何评判一个深度学习框架?
- UVA - 1252 Twenty Questions (状压dp+vis数组加速)
- Inserting/Removing shutters and filters
- UIColor的封装
- 大数据发展新契机:中国人工智能产业创新联盟在京成立
- 基于墨刀的软件界面原型设计——小说搜索阅读软件
- 硬肝!超详细的Python文件操作知识
- linux中线程的挂起与恢复(进程暂停)
- 新疆师范大学计算机科学学院,新疆师范大学王炜教授亲临计科学院讲学——记计算机科学学院研究生院...
- 第四代双模5G旗舰:vivo X30系列为啥「超有梗」?
- OpenCV-图像金字塔cv::buildPyramid
- Android Testing学习02 HelloTesting 项目建立与执行
- UGUI的Slider
- Oracle10G各版本下载
- excel 比对多列数据
- c语言编程洛谷评测得零分,洛谷试炼场题解记录——洛谷的第一个任务
- 2019新版《龙果学院JavaEE秒杀系统企业级实战应用教程》
- 如何在谷歌上搜索: 31个 Google 高级搜索技巧
- scala trait ,abstract class,case class,class 的一些琐碎注意事项,仅针对3.0以下
热门文章
- LAMP使开放源代码软件安全性提高
- 星岚技术 Win10 x64 装机版 V2021.5【带驱动包】
- C语言用冒泡法对数组元素降序,冒泡法排序c语言
- hfss和python接口_python 与HFSS联合仿真的教程讲解
- Kotlin习惯用语和编码风格[转自Kotlin中文文档]
- python计算bmi指数_python 练习题:计算的BMI指数,并根据BMI指数条件选择
- ofo(小黄车)项目分析
- 软件测试——测试用例设计测试分类详解
- GUI版Hex合并和Hex转换工具-HexMergeTool 取代hex2bin命令行工具
- VB添加TTS语音合成