一、背景

老手,大牛都是从新手走过来的,偶尔也会在群里解答一些问题。

但是确实很多新手的提问让人摸不着头脑。

常见的是问题很笼统,好像大神都会特异功能,都可以穿越时空,逆转到过去来到他的电脑旁看到了事情的经过一样。

描述不清楚,没有配图,没有交代清楚背景等等。

本文结合自己的体会,提几点建议。

 

二、建议

2.1 参考

这篇github描述《高效提问》写的就不错

https://github.com/mmflys/blog/blob/master/common/EffectiveAsking.md

强调描述环境、操作描述、期望、现象

注重问题的清晰度给出更多的线索,阐述的顺序根据序号递增,根据重要性递减。

2.2 我的建议

 

(1)自己先做出一些尝试!!

   最重要的一点是,要分析不要猜测,分析可能的情况,然后去印证!!!

  1. F12大法,根据请求参数,响应码,响应数据等定位是前端还是后端问题。
  2. code review分析代码逻辑是否有问题
  3. 使用各种命令辅助排错,比如dubbo命令查看服务是否可调通,git命令拉新分支尝试解决问题,mvn或gradle命令编译是否可以通过,查看依赖树等等。
  4. 控制变量法,比如新增了3个类出错,可以依次删除,看哪一步开始报错。
  5. debug大法:断点、查看变量,单步,watch,查看调用栈等
  6. 日志大法:查看日志或者打日志方便排错
  7. 单元测试大法:编程的时候就应该多写单元测试,尤其推荐mokito来mock接口检查逻辑是否正确。
  8. 换环境大法:换浏览器,换个项目等等
  9. 先本地测试好再发预发或者线上
  10. 官方文档大法:如果是用法问题,配置问题,尽量查官方文档,看看这一块怎么用,是不是自己用错了。
  11. 搜索引擎大法:自己分析不出来把报错信息复制到搜索引擎,看看别人的分析步骤和解决方案。能科学上网尽量先谷歌,不行再百度。外国人的答案更多,更靠谱。
  12. 寻求帮助,最后才是寻求帮助

  通过这些步骤,绝大多数问题都已经被解决。如果需要寻求帮助,去群里提问也可以给出自己的排查方法,给出更多的线索。

 重点参考我这两篇文章

《代码排错和避免错误的正确姿势》https://blog.csdn.net/w605283073/article/details/89197668

《记一次maven jar包冲突的排查和解决过程,干货分享》https://blog.csdn.net/w605283073/article/details/90648055

 

(2)描述问题自己先想如果自己不了解背景,单纯看描述自己是否清楚是啥意思?

如果自己都描述不清楚,别人怎么给你解决问题呢?

如果觉得有歧义换一个说法,如果觉得笼统,举个栗子。

很多人问了半天,想问的和自己发的完全不是一回事。

比如“前端调用一个接口不通,咋回事呢?”

那么别人会想:

  1. 调用的是dubbo还是http接口?
  2. 如果是http请求,请求的Url是啥?响应码是啥?参数是啥?
  3. 如果是dubbo接口,自己在服务器或者本地先telnet调用看看是否成功

如果你能够给出,f12的截图,响应码是404 显然极可能是url写错了,或者如果是新的接口,可能后端分支发布错了等等。

我们既然是请教别人的问题,本来认真回答的就没几个,要让解答的人能够更快速的了解我们的情况,帮助解决问题。

(3)重点给出哪些信息?

如果是具体的错误:重点是报错信息,以及涉及到的自己代码截图。

(4)如果别人没有给出好的解决方案

如果没有能够给出好的解决方案,最终通过某篇博客,或者最终自己解决了,一定主动在群里分享解决的方法。这样其他人也可以增长经验。

 

三、感受

(1)我们提问要力求精准,描述清楚,让别人可以快速了解自己的问题。

(2)一方面我们要特别重视排错积累和实践方法。要分析问题,而是瞎猜。

因为开发就会遇到千奇百怪的问题,如果不能掌握排错的方法总是依赖别人,就很难进步了,而且不可能有人一直闲着一直帮你。

很多人加群总潜意识里认为是来学东西的。真正分享点排错的文章,反而也没几个人重视。也没几个人看,没几个人点赞收藏。

(3)加强基础知识的学习,很多问题都是Java基础不扎实,不熟悉一些框架的用法和原理导致的。写业务代码的同时,私底下要主动学习。