你好,我是傅健,这是专栏的最后一讲。行百里路,我们终于来到了这里,很感谢你的支持和坚持,让你没有在枯燥的源码学习中半路放弃。

本专栏虽然只有 20 多讲,但是覆盖的知识面还是比较广泛的,不仅有 Spring 最基础的应用,也涉及 Spring Data 等层次高一点的应用。通过学习,你会发现,遇到的问题肯定远远超过我列举的 50 多个。而通过解决一个又一个的问题,你还会发现 Spring 原理的重要性

谈及学习 Spring 的感受,可以说,当你初学 Spring 时,你会觉得它是一个好用的“黑盒”,而当你稍微深入应用 Spring 时,你又会觉得它像一团“迷雾”,看起来很美,但却很容易让人迷失,不知所措。那么通过系统的学习之后,虽然我们还是无法解决所有的问题,但是已经算有了件衬手的兵器,通关进阶咫尺之遥。通过剖析各种问题所涉及的源码,你能从量到质有一个转化式的提升!

但话说回来,有个问题我不知道你有没有思考过,我们为什么会遇到那么多的问题?是基本功不扎实吗?还是实践经验不够?

举个例子,在日常开发中,我们经常会发现,新手能很快地完成一个任务,而且完成的功能貌似也能运行良好。但是随着时间的推移,很多问题会慢慢暴露出来。

我记得之前我的某位新手同事会随手在产品代码中使用"System.out.println"去输出日志。当我发现这个问题时,这个程序已经上线一个月了,并且很稳定。我也仔细查看过系统,这样输出的 Console 日志最终也会被设置的归档系统按天归档到其他挂载的 NFS 磁盘上,貌似也不需要太担心它会一直变大。但是有一天,本地磁盘还是报警容量不足了,苦逼的是,我使用了很多的 Linux 命令都无法确定哪个文件很大,明明看到的所有文件都是很小的,磁盘怎么会满呢?

最后,还是比较幸运的,我用 lsof 命令去查询了“删除”的文件,果然占用空间很大,根源就在于同事当初的"System.out.println"导致了一个文件不断变大,而因为存在归档(删除),所以我们很难立马找到它。

仔细复盘这个问题,你会发现,新手有个特点,对于每行代码背后的原理是什么,怎么写最合适,并没有太深入的研究。遇到问题时,也习惯于通过各种搜索引擎去解决,在尝试一个方案失败后,往往会继续迭加使用其他的方案,最终勉强可以工作了,但等再次出现问题时你会发现,他的代码是真心复杂啊,很难避免更多问题的产生。

**见微知著,基本功非一日之功,实践也非一蹴而就。**我的建议就是:当你去书写代码时,多问自己几句,我使用的代码书写方式是正确的么?我的解决方案是正规的套路么?我解决问题的方式会不会有其他的负面影响?等等。

从另外一个角度看,如果你去翻阅 StackOverflow 上的各式各样的问题,你会发现很多问题都描述的“天花乱坠”,很复杂,但是问题的根源往往是极其简单的。你还可以尝试去除问题复杂的无关的部分,把它简化成一个“迷你”版本,这样更容易定位“根源”,这才是最重要的。

你看,这不就是我们这门课程的设计思路吗?用一些简化的案例,让你了解问题的核心,从而避免踩坑。这是一种很好的学习方式!

所以,我们也不妨总结下,面对无穷无尽的问题,我们到底该如何应对?

我认为,问题总比解决办法多。换句话说,问题是可归类的,所以导致问题出现的根源是有限的,那么对应的解决办法自然也是可总结的。

当你遇到一个问题时,你可以先思考这样 3 点:

  1. 这个问题是不是别人也还没有解决过?
  2. 是不是问题本身就很难?
  3. 是不是自己当前的知识储备不够?

千万不要一上来就给自己贴一个“能力不够”的标签,因为等你工作个 10 来年以后,或许曾经那些让你泪奔的问题,你仍然解决不了。因为一些问题就是很难呀,我们无法在指定的时间内解决也是很正常的一件事,说白了,你要先对自己有信心

其次,我们可以尝试一些方式方法,毕竟老板掏钱养员工可不是让我们来培养自信的,对吧!

  1. 将问题化繁为简

很多问题很难搞定,在于有很多无关的东西掩盖了真相。但是你要相信,不管表象多复杂,出错的根源可能都不会太复杂。就像前苏联的一次火箭发射失败,也只是因为一个小数点错误而已。所以,当你碰到一个棘手的问题时,你一定要不断地把这个问题做“简化”,直到简化成一个最简单的问题模型,你就能很容易地定位到问题根源了。

  1. 耐心积累知识

当你已经定位到问题的大概范围,但仍然解决不了时,往往是因为欠缺相关的知识和技能。就像让你去写一个 Eclipse/IDEA 插件,但是你都没有使用过它们,你觉得可能么?这个时候,你一定要学会查缺补漏,把自己的知识网络构建起来。当然,这样做可能无法立竿见影,但长期来看对你的个人发展是大有裨益的。

  1. 寻求帮助

如果靠自己实在解决不了,寻求他人帮助也是可以的。但我建议你先努力尝试一下再去求助,学习就像打游戏,每解决一个问题都像升级一次,他人帮助就像开了外挂,治标不治本。另外就是求助也是有技巧的,切忌扬汤止沸,去寻求一个定位和解决问题的思路是更好的方式。

最后的最后,非常感谢各位同学的信任,这门课程我为你提供了很多的问题场景以及解决问题的思路,希望能帮助你在技术之路上越走越远!在学习的过程中,如果你有什么意见或者建议,也欢迎通过下方的结课问卷告知我,我会正视大家的声音。

我是傅健,我们江湖再见!