做为一个程序员,把代码写好是本分,但仅仅是写好代码是不够的,工做的过程当中总免不了要与别人打交道。几乎隔一段时间,我就会发现有些人身上出现下面的这两个问题。第一个就是不知道怎么提问,第二个就是有工做对接的时候,有用的信息不实时收集,屡次对一样的问题进行提问。程序员
今天来讲一说如何提问的话题。说到这里,有点同窗确定在想,扯什么扯,提问谁不会呢,十万个为何从小就听,回答问题不必定会,提问谁还不会呢。数据库
可现实真的不是这样的,其实关于如何提问,这个问题由来已久,并且不少人都对此有过总结,甚至有一本书就叫作《提问的艺术》。这里所说的提问固然不是平时生活中所说的“你吃了没有?”、“吃的什么?”这么简单的问题。指的是专业方面的问题,做为程序员来说,那就是关于开发、部署等方面的问题了。服务器
我先来举几个糟糕的提问的例子:微信
有的同窗在群里提问,上来就是:app
一、接口返回404错误,是什么缘由? 二、dubbo 服务启动不了,多是什么缘由呢? 三、昨天还好好的,今天忽然数据库就连不上了,有没有人知道怎么回事?
先别笑,这可不是开玩笑,相信你确定也碰到过相似的提问,碰到这种提问除了让人哭笑不得外,就只能是忽略了,当作什么都没看见。没有质量的提问就至关于垃圾信息,就是噪音,谁会理会噪音呢,除了是你的上司、朋友,可能会劈头盖脸的教育一通,旁人基本上就忽略了。jvm
这种状况多发生在刚刚入门的同窗身上,但也不全是,有些工做了好几年的同窗也好不到哪里去。问题都提很差,我也不认为代码能好到哪里去。ide
记得,有一次,微信一会儿弹出了好几条消息,正好挡住了我正要操做的内容,原本就心生不爽,点进去发现是一个同窗正在群里问问题,五、6条消息发出来,仍然看的人一头雾水,不知所云。搜索引擎
这不废话吗,提问固然是遇到问题了。尤为是作开发,从刚刚入门的那天起,几乎天天都会遇到各类各样的问题。可是,并非全部的问题都要找你的同事、群友来问的。操作系统
遇到问题第一步:看 IDE 提示日志
拿开发来说,碰到的问题就是编译问题、运行时问题、逻辑漏洞,当碰到问题的时候,IDE 必定会给出提示,大部分问题都会根据提示天然而然的解决,例如弱智的少加了一个分号、少加了 @Override
等
遇到问题第二步:看日志
查看错误日志,有一些错误日志能够很明显的给出解释,例如 NPE 等等
遇到问题第三步:找 Google
搜索引擎了解一下,这但是一个巨大的宝藏,尤为是在今天,你遇到的全部问题几乎都有其余的人遇到过,除非你是在作一个历来没有人碰过的领域。建议选择 Google ,百度搜索不太合适开发。
遇到问题第四步:提问
只有前面几步都试过了,仍是没有头绪,才采起这一步,向同事或者群友提问。到了这一步,就涉及到了今天说到的提问的方法。
一、讲清楚问题的背景,包括环境配置、版本说明,例如操做系统版本、Java 版本等,有些问题可能会涉及到 IDE ,也要说清楚;
二、问题的相关错误信息,包括日志信息、结果输出信息;
三、你曾作过什么尝试,针对每种尝试的不一样结果是怎么样的;
四、若是是比较复杂的状况,看看能不能抽象出一个简单的模型,将复杂的问题简单化,方便其余人能够简单的理解,可能会更快的获得别人的回答;
五、还有一点也很重要。可能一个问题会有好多人回答,其中的一个或者多个方法可能行之有效的,那么,你在解决这个问题以后,必定要给回答者反馈。例如若是是在群里,能够@回答者,这个问题已解决,用的是什么什么方法。这样一来,回答者会由于帮人解决了问题而有一些优越感,其余人也会了解这个过程,之后若是遇到相同的问题,也就知道怎么解决了。而提问者,作一个总结,也会给人一个良好的印象。若是别人回答完,就没动静了,至少我下一次再碰到他提问,就不会回答了,对,就是这么小肚鸡肠。
举个例子,假设遇到了一个 jvm OOM 的问题,而且通过一系列的日志分析、搜索引擎的搜索以后,仍然没有解决。那么就开始到群里提问。提问的第一步多是这样的:
各位好,我如今遇到了一个 jvm OOM 的问题。如今的系统环境是这样的:
JDK 版本为 1.8 ,服务器为 CentOS 7.0 64位,机器内存 8 G,8 核,使用的垃圾收集器为 CMS,设置的 JVM 参数为:
-Xmx2688M -Xms2688M -Xmn960M -XX:MaxPermSize=512M -XX:PermSize=512M -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:+CMSScavengeBeforeRemark -XX:ErrorFile=/app/jvmlog/hs_err_pid%p.log -XX:HeapDumpPath=/app/jvmlog -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=9009出现的现象是什么状况的,而后把相关的日志信息提供出来,若是有必须的话,要提供 dump 文件。
而后把你作过的尝试以及尝试以后的结果一一说出来。这很重要。
而后把你猜想可能的缘由说出来,例如项目中有 CPU 密集型任务,或者最近增长了某某功能可能产生什么影响。
这样提问以后,其余同窗才能根据你给出的信息了解一个大体的状况,这时候,热心的同窗或者有相似经验的同窗才会根据你所给出的信息进行进一步分析,这样才能一步步得出解决方案。
一、若是有问题,直接按照上面说的方法把你的问题发出来就好,不要上来讲一些无关痛痒的话,好比:
有人能帮我解决一个问题吗? ==> 对不起,没有
有大佬在吗? ==> 对不起,不在
这个问题不光在提问的时候适用,在其余场合下一样适用,有事情说事情。否则除了浪费双方的时间外,没有任何好处。
二、不要预设前提,好比太相信本身的某些功能或配置必定没有错,相信我,大部分错误都是很愚蠢的。
古时的风筝
,进入公众号能够加入交流群