结束语 问题总比解决办法多 你好,我是傅健,这是专栏的最后一讲。行百里路,我们终于来到了这里,很感谢你的支持和坚持,让你没有在枯燥的源码学习中半路放弃。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 将问题化繁为简

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

  • 耐心积累知识

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

  • 寻求帮助

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

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

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

参考资料

https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/Spring%e7%bc%96%e7%a8%8b%e5%b8%b8%e8%a7%81%e9%94%99%e8%af%af50%e4%be%8b/%e7%bb%93%e6%9d%9f%e8%af%ad%20%e9%97%ae%e9%a2%98%e6%80%bb%e6%af%94%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95%e5%a4%9a.md