先说一下大多数新手的情况:就是对着视频敲 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相关推荐

  1. 超强使用干货!教你如何吃透一个Java项目

    整理了一些Java项目,分享给大家 1. 一款Java开源的Spring Boot即时通讯IM聊天系统 地址:一款Java开源的Spring Boot即时通讯IM聊天系统 2. Java外卖点餐系统[ ...

  2. 如何真正的吃透一个Java项目?

    如何真正的吃透一个Java项目?这里要说吃透一个Java项目的标准就是:下次遇到此类Java项目可以快速使用写过的Java项目的解决方案完成它. 要达到这个的标准,还得从开发一个Java项目的过程来分 ...

  3. 初学者如何吃透一个Java项目

    不少初学者朋友在学习Java过程中,会对着视频敲Java项目,其中遇到的BUG还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂 这些朋友应该怎样才能掌握一个项目所用 ...

  4. 如何吃透一个java项目

    见字如面,我是威哥,一个从普通二本院校毕业,从未曾接触分布式.微服务.高并发到通过技术分享实现职场蜕变,成长为RocketMQ社区优秀布道师.大厂资深架构师,出版<RocketMQ技术内幕> ...

  5. 【万字长文】手摸手教你shell脚本编程

    [万字长文]手摸手教你shell脚本编程 我写这篇文章的目的 前段时间参加了联创团队的春令营, 为期半个多月的春令营做了三个项目, 其中有一个项目是关于shell的, 当时完全没接触过shell脚本编 ...

  6. 手摸手教你做动态壁纸

    手摸手教你做动态壁纸 Android · jeasonwong · 于 5 天前发布 · 最后由 xingstarx 于 2 天前回复 · 440 次阅读 项目地址:https://github.co ...

  7. 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金

    完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...

  8. 快应用之手摸手,跟我走(1)

    快应用发布快两周啦.这两天有空,就捣鼓了一个快应用.整体感觉来说,交互很流畅,基本功能和组件都有.上手也很快.希望官网推广能做好.好了,话不多说,先上 gitHub (传送门) gankQuick-快 ...

  9. 招聘行业颠覆者【伯小乐】| 手摸手产品研究院

    手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告. 作者微信:weihe2416 "伯小乐" 是 ...

  10. 短视频Gif快手-有点意思 | 手摸手产品研究院

    手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告.                                 ...

最新文章

  1. 前端Vue学习之路(一)-初识Vue
  2. 如何评判一个深度学习框架?
  3. UVA - 1252 Twenty Questions (状压dp+vis数组加速)
  4. Inserting/Removing shutters and filters
  5. UIColor的封装
  6. 大数据发展新契机:中国人工智能产业创新联盟在京成立
  7. 基于墨刀的软件界面原型设计——小说搜索阅读软件
  8. 硬肝!超详细的Python文件操作知识
  9. linux中线程的挂起与恢复(进程暂停)
  10. 新疆师范大学计算机科学学院,新疆师范大学王炜教授亲临计科学院讲学——记计算机科学学院研究生院...
  11. 第四代双模5G旗舰:vivo X30系列为啥「超有梗」?
  12. OpenCV-图像金字塔cv::buildPyramid
  13. Android Testing学习02 HelloTesting 项目建立与执行
  14. UGUI的Slider
  15. Oracle10G各版本下载
  16. excel 比对多列数据
  17. c语言编程洛谷评测得零分,洛谷试炼场题解记录——洛谷的第一个任务
  18. 2019新版《龙果学院JavaEE秒杀系统企业级实战应用教程》
  19. 如何在谷歌上搜索: 31个 Google 高级搜索技巧
  20. scala trait ,abstract class,case class,class 的一些琐碎注意事项,仅针对3.0以下

热门文章

  1. LAMP使开放源代码软件安全性提高
  2. 星岚技术 Win10 x64 装机版 V2021.5【带驱动包】
  3. C语言用冒泡法对数组元素降序,冒泡法排序c语言
  4. hfss和python接口_python 与HFSS联合仿真的教程讲解
  5. Kotlin习惯用语和编码风格[转自Kotlin中文文档]
  6. python计算bmi指数_python 练习题:计算的BMI指数,并根据BMI指数条件选择
  7. ofo(小黄车)项目分析
  8. 软件测试——测试用例设计测试分类详解
  9. GUI版Hex合并和Hex转换工具-HexMergeTool 取代hex2bin命令行工具
  10. VB添加TTS语音合成