大家在公众号后台分别回复 SpringBoot
、Spring
、SpringMVC
、MyBatis
以及 Maven
可以下载松哥手撸的技术干货。有一些小伙伴在学习这些干货的时候,遇到了一些问题,来求助松哥,虽然问题很多,但是大部分都是类似的,因此我决定写一篇文章来和大家聊一聊这个问题。
作为一个有 n 多年看视频学习经验的过来人,松哥有必要给大家传授一些技巧。
我本科学的是管理,Java 也算是半路出家自己学的,大学时候时间充裕,学习 Java 主要就是靠看视频学习的,工作之后,由于已经渐渐入行,有了自己的学习方法论,也因为时间比较紧张,就很少看视频学习了,但是大学四年积累下来的一些看视频学习的经验,我觉得有必要和大家分享一下。
其实大家现在看到的视频质量比松哥那会看的要高很多了,我刚开始看视频的时候,那会百度网盘还没流行开,视频都是通过优酷、土豆这些网站分发的,像素感人,大部分视频也都没有对应的 Demo 和课件,所以大家现在拿着更好的资料,有理由比松哥学的更好。
很多时候,当我收到小伙伴的求助,有的是看松哥自己录制的视频时遇到的问题,有的是看别人录制的视频时遇到的问题,不管是哪一类问题,从大家的提问中,我就能感觉出来有的人在解决问题方面还没形成一套自己的方法,这些方法需要自己去摸索总结,松哥就是这样一步步走过来的,按理说,自己摸索出来的方法,用着肯定更加顺手,别人传授的方法,虽然不用踩坑了,但是得有一个适应的过程。
我说几个我的思路,大家可以在自己平时学习中试试,看有没有效果。
视频和文字不同
看视频学习和看书/看博客学习有一个很大的不同,书和博客都是写好的静态的东西,由于时间久远或者作者疏忽,文字的东西可能不完整(例如作者可能不小心漏掉了一个小细节),这种时候,当你照着无法做出效果时,要考虑的问题就非常多了。
但是视频不一样,代码是作者一行一行敲出来的(这里我们不讨论那种提前写好代码,视频里照着代码讲的,这种视频我一般拿到手顺手就扔了),所有的操作你都能看见,照着写,按理说就能看到相应的结果,学习起来相对来说要容易很多,这也是为什么对于一个新接触的知识点,我建议小伙伴们通过看视频来学习。
然而,即使这种手把手的形式,由于小伙伴们的疏忽,看的不仔细,看完之后,可能还是做不出效果来,这个时候再去寻找问题的原因要容易很多。因为作者在视频里做出来效果了,这个我们是看的清清楚楚的,至少有一点可以证明,视频里的代码没有问题,问题就在于我们自己的代码,可能哪里出了纰漏。
所以,你只要找到自己代码和视频代码不同的地方即可。
由于我们写的是 Java 代码,Java 最大的优势就是跨平台,所以一般来说,只要你的 JDK 版本与 Tomcat 版本(其他的例如 MyBatis 版本、Spring Boot 版本、Spring Cloud 版本等)和视频作者的一致,这个时候代码出问题超过 99.99% 情况下都不是环境问题,就是代码写错了,千万别甩锅给系统环境,平时在公司里甩得一手好锅,要是用到学习中,损失的还是自己。所以首先要相信自己写错了,问题才有解决思路。
为什么我要把这个话题拎出来说呢?因为很多小伙伴有一句口头禅:“我和视频里的代码一样,就是显示不出来。”、“刚才代码还是好的,吃个饭回来就运行不了了”。。。
每次看到这个,我竟无语凝噎。这句话两个意思,要么就是我的代码和视频一样,那就是我的代码没错,既然代码没错,那我觉得问题可以到此结束了,代码没错,那也就没问题呀;要么另一层含义就是视频代码有问题,但是视频里的代码可以运行出效果,这也是你亲眼所见,所以视频代码肯定是没问题的。那么问题就会陷入死循环,无解。
所以,出了问题,确认了不是版本问题,那么基本上就是自己代码问题了,相信自己代码有问题,才有可能解决问题。
松哥以前看视频也会遇到这些问题,有的时候实在找不出问题,那我会跑一遍视频作者提供的 Demo(如果有的话),如果他的 Demo 能运行,那么不用多想了,肯定不是环境问题,就是你自己代码写错了,那就认认真真检查。
二分法
在检查的过程中,我常用的一个办法,我自己给它取名叫做二分法。
有的小伙伴一直不理解做算法题的意义在哪里,仅仅是为了面试?其实不是的,一些典型的算法思想,可以影响我们日常的很多事情的,就比如解决 Bug 这事。
这里我通过两个简单的栗子来给大家说明这种方法的使用。
微人事登录
假如说你现在遇到了登录问题,点击前端登录按钮无法登录成功,那么原因可能有很多种。
假如这问题发生在微人事项目中,那么我们的检查顺序是下面这样的:
- 前端 WebStorm 和后端 IDEA 控制台有没有报错?
- 前端浏览器控制台有没有报错?
- 查看浏览器发送的请求和服务端给出的响应有没有问题?
如果这三处都看不出端倪来,那么就要开始分析了。因为这种前后端分离开发,问题可能出在前端也可能出在后端,我们要先去锁定问题。怎么锁定呢?我画了一张简图:
按照这样的思路,我们一步步去缩小问题的范围,直到解决问题。
乱码问题
这种二分法,还有一个非常典型的场景,就是乱码问题,很多初学者遇到乱码问题,把自己懂的乱么解决方案全部试了一遍,结果发现啥用没有,我相信很多初学的小伙伴遇到可能都有遇到这样的尴尬事,这是因为乱码的原因太多了,找对原因,才能解决问题。
上面这两张图,主要是给大家提供一个问题解决的思路,我们把一个大的问题,不断的拆分,不断的细化,然后一个一个求证,最后就能锁定问题所在。一旦找到问题的原因,解决不过是分分钟的事情。
多动手
二分法,是给大家提供了思路,接下来就是验证了。验证其实是很容易的,Debug 或者打印日志都可以,一定要去动手验证,不能只在脑子里过一遍,想着这里没问题,那里没问题,最终得出结论我的代码没问题。
验证问题的时候有一个问题大家需要注意,要摒弃所有定势思维。不知道大家有没有这样的经历,很多时候你觉得不可能出问题的地方,就忽略检查了,结果折腾了半天,最终发现问题就出在那里。所以我们在验证问题所在的时候,不要跳跃,每一个步骤都去验证下,这样看着很慢,实际上能为大家省下不少时间。
这些思路,主要是针对新手的,如果你经验丰富,其实不用管这些条条框框,结合自己的经验,其实大部分 Bug 都是可以快速搞定的。
好了,下次小伙伴们做前后端分离开发或者看松哥视频学习时,遇到问题,不妨按照上面的思路试一试。