先说一下大多数新手的状况:就是对着视频敲 Java 项目,其中遇到的 BUG 还能解决,但就是每次敲完一个项目,就感受很空虚,项目里面的知识点感受懂了但又好像没懂,应该怎样才能掌握一个项目所用的知识点呢?前端
先分享一位好朋友丁威的经验吧,他是《RocketMQ技术内幕》一书的做者。他在尝试学习 RocketMQ 以前不曾接触过消息中间件,但硬是经过本身提炼的学习方法,最终成为 RocketMQ 社区的优秀布道师。这让他有了一个很是亮眼的标签,极大提升了职场竞争力。vue
他的总结有如下四点:ios
我认为是很是有道理的。记得我一开始参加工做的时候,拿到领导安排的项目后,很是懵逼,彻底不知道该如何下手,不知道本身该干吗。去问领导,领导说没时间,要我本身先研究研究,研究什么呢?程序员
一开始固然毫无头绪,后面就慢慢琢磨出来了一点当心得。vue-router
先从项目的需求文档下手,先了解这个项目是干吗的,了解个大概,就不慌了。而后把这个项目的源码在本地跑起来,“跑起来”,说着简单,真正作的时候仍是挺难的,我记得我当时跑第一个项目差很少用了一周多的时间,由于个人开发环境和项目要求的有一些不同,就致使出了不少问题。vue-cli
我印象很深入的问题有两个,第一个就是乱码了,相似下图这种。数据库
第二个就是编译出错,缘由很简单,JDK 的版本不同。编程
这两个问题虽然简单,但特别常见,真的,新手基本上都会遇到。一开始遇到的时候是很慌的,由于源码确定不会有问题,有问题的确定是本身的开发环境。axios
折腾了一周多的时间,项目终于跑起来了。后端
我让本身体验了一把测试的角色,就是把能操做的按钮全点一遍,体验一下项目哪些已经开发完成了,哪些尚未。没用多久,我就测出来了两三个新 bug,基本上都是一些很是规操做引发的,虽然我没能解决,但报告给领导后,领导仍是很惊讶的,他看个人小眼神,多少有点看吴下阿蒙的感受,“小伙子,有长进啊!”
而后,我并无着急去开发领导安排给个人任务,而是去看同事已经完成的代码,固然是带着问题去看的,为何他会这么写?这么写的好处是什么?若是换作是我,我会怎么实现?这其中的差异是我本身考虑不周吗?
固然了,我不会看太细致,由于有些内容超出了个人技术范围,我看不懂的,只能是“蜻蜓点水”,大体看明白是什么意思就“得过且过”了。
这里提醒你们一点的是,千万不要陷入技术细节,尤为是一开始作项目的时候,由于本身不了解业务,再加上技术水平可能达不到,研究技术细节很容易就阵亡了。
另一点就是,基本功必定要扎实,不要连总体的代码脉络都看不懂,那样就很吃力了。我这里有一份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 全部的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容很少,只讲重点。
GitHub 星标 115k+的 Java 教程,超级硬核!
尽可能花一点时间巩固一下基础,不要让本身太被动。遇到本身生疏的知识点,就主动去查一下。
看源码的时候,本身加一些日志啊,加一些断点啊,去跑一跑。有时候,不加断点,只是去看源码极可能会忽略掉一些关键的技术细节,由于 Java 是多态的,有些地方看源码只能看到类和类之间的层次关系,却看不到子类是怎么重写父类方法的,或者实现类是怎么实现接口的,经过调试就能够看的很明白。
还有一些分支语句啊,若是只是看源码可能不明白进入这个分支的条件是什么。还有一些比较关键的技术细节啊,只看源码可能懵懵懂懂的,跟着断点一步步地深刻可能就全明白了。
举个例子,拿 StringBuilder 的 append()
方法来讲吧。StringBuilder 的内部是经过字符数组(Java 8)实现的, 若是新添加的字符串长度超出了数组的长度,是要进行扩容的。加了断点后,遇到须要扩容的状况就能看到 JDK 的内部是怎么来进行扩容的啦,以下图所示。
通常来讲,项目都是比较庞大的,代码会比较多,这时候最好只关注一个模块,就是本身经过需求文档,或者阅读源码了解最多的模块,尽可能把这个模块的总体逻辑给吃透了,若是领导刚好安排你作的这个模块的业务代码,那你的上手难度就大大下降了!
再总结一下:
我再给你们推荐两个优秀的 Java 开源项目吧,若是你尚未参加工做,能够拿这两个项目做为练手项目。
我以前作的一个电商项目还用了 mall 做为基层的架构!mall 的学习教程很是全面,做者直接作了一个在线的网站,基本上用的技术都讲述得特别明白!
vhr 目前在 GitHub 上已经有 20.8k 的 star,属于很强的那种了。
后端技术栈
...
前端技术栈
...
基本上主流的先后端技术都用到了。做者为初学者特地录了项目的部署视频教程,很贴心~
文档写得特别全,我简单列举下。
基本上每一个知识点都有对应的文档,文档齐全的话,对吃透项目是极好的帮助。
嗯,最后强调一点,你们在作练手项目的时候,必定记得写注释。我在不少地方看到这样一个观点,“请中止写注释,由于只有烂的代码才须要注释。”这个观点很是巧妙,它让我想起了孟子的一句话,“杨氏为我,是无君也;墨氏兼爱,是无父也。无父无君,是禽兽也。”
Java 源码的做者绝对是这个世界上最优秀的程序员,连他们都写注释,那些声称“请中止写注释”的号召者是否是要啪啪啪地打脸,直到打肿为止。
拿 String 来讲吧,要了解这个类,直接看类的注释就足够了,写得很是详细。
一个优秀的 Java 项目也应该是这样的,注释必须到位,否则别人怎么吃透,吃不透的。只能说一句,Java 源码的做者,yyds(阴阳大师,hhh)。
我是二哥呀,赞一个可好?