http://jinnianshilongnian.iteye.com/blog/1722513
之前写过一篇《分享我的学习方法——还是坚持+努力》,得到许多朋友的支持,在此感谢下。许诺写这篇文章。写完这篇文章后我就抓紧做《Servlet 3.1规范》的翻译了,希望大家支持,有兴趣的朋友可以站内信我,一起翻译。
来iteye快一年了,回答了1000多个问题,有会的,也有不会的,在这我总结一下我的解决问题的思路,供一些刚入行的朋友参考,希望对你们有帮助。
献给双11的光棍程序员们,加油吧!
思考:为什么提问的问题没有人帮忙回答?
精心提出问题
怎么才能提出自己的问题呢?错误信息越全越容易解决。我的观点是: 问题描述、日志信息或异常堆栈信息(如果有)、环境和配置(如果有)、相关代码。
问题描述
要力求简洁,一针见血。不要搞些没用的。
不好的问题描述:
f、 该如何解决
从以上问题描述中我们看不到到底遇到什么问题,更好的问题描述应该:
1、我从描述中可以看出你所用的技术,如spring,这样我可以有选择的解决问题;
2、如果遇到的问题有异常,直接上异常信息,如果经验足够多,这种问题可能一眼就知道是哪里出的问题;
3、如果实在不知道哪里出错了,把一些关键点写到标题上。
我认为更好的问题描述:
a、配置好SpringMVC拦截器后,JSP不能正常解析,直接原样输出 (这样我知道你使用的技术是什么和大体原因了)
b、使用Spring注解注入时,抛出BeanCreationException (虽然不知道具体原因,但是我知道BeanCreationException的问题是什么)
c、No Spring WebApplicationInitializer types detected on classpath (直接把异常贴出来更有效)
d、请问在使用struts2时,那个attr到底指什么 (告诉我你用的技术,缩小范围)
e、[spring] Cannot convert value of type [$Proxy4 implementing com.service.IUserService (从具体的错误栈中找最核心的错误信息作为标题)
f、 直接把异常贴出来不是更好?
g、Access denied for user 'root'@'localhost' (using password: YES) (直奔主题更好)
……等等,把有用的信息贴出来这就足够了,不要用激将法,如没人会吗? 这些没实际意义,还不如好好把问题想明白。
日志信息或异常堆栈信息
日志的目的包括如审计、监控、数据恢复等等,因此如果是出错了,就应该把相关的日志找出了,越全越容易找到问题所在。而且尽量用文本,如果量大用附件,尽量不要用图片,与人方便就是于己方便。
出问题时,不要这样贴异常:
a、《一个NullpointerException问题》 而且内容中也没有给出具体的描述,只知道空指针,还需要我们回答的人进一步问出在哪一行啊。。。
b、《使用spring注解注入,测试一直报错》,内容中只给出org.springframework.beans.factory.BeanCreationException异常,没有给出详细堆栈,如果能给出详细堆栈,立马就能告诉你问题出在吗?
没有详细的信息,问题就不能诊断,神仙也帮不了你。
环境和配置
环境包括:如系统环境(操作系统是什么等)、项目环境(是普通Java工程还是动态web工程,eclipse开发还是myeclipse)、技术环境(如使用了哪些技术)。
配置包括:如常见的web.xml、spring的配置文件,struts2的配置文件等等。
在提问时把使用的环境和相关配置贴出来能做到事半功倍的效果。当然有时候不是必须的,但贴出来更能帮助找到问题。
如《jbpm4 有谁碰到这个奇怪的问题吗?!!!》 ,异常是贴出来了,如果它告诉我使用的技术环境,如hibernate4+spring3+jbpm4,我立马就能知道原因。
相关代码
如果是代码出错了,就应该把相关代码贴出来,而不是说有错误,而又不告诉别人是哪些代码出错了,这样谁也帮不了你。
先试试自己能不能解决
大部分问题,经过自己的探索都能解决。一上来连思考都没思考,就直接追着别人问,这种行为是不好的,可以按照如下步骤做:
1、先看看遇到的错误之前见过吗?如果见过回忆下之前是怎么解决的。如果像我这种记忆力不好的,可以做个文档记录下来,下次遇到再查一下;
2、查阅相关技术文档,如JDK文档、Spring文档等等,看看具体错误指的是什么,文档中有没有解决方案,此步骤你大体应该能知道是什么错误;
3、还是搞不定,那就搜索(查技术还是用google),查的时候记住关键词是:【使用的技术 问题】,如 【spring No Spring WebApplicationInitializer types detected on classpath 】、【Access denied for user 'root'@'localhost' (using password: YES)】、【java.lang.NoClassDefFoundError: org/springframework/asm/ClassVisitor】,像这些问题只要你动动手搜索下很快就解决了,对于一些不常见的问题反复多查几次,不要只查一两下就放弃,坚持才能胜利;
4、还搞不定那就寻求帮助,如问答频道咨询,或者到相应的群组咨询,更或者直接给某人发站内信咨询。
记住,别人没有义务帮你,尊重帮助自己的人;不要不劳而获,要学会自己试着去解决,慢慢的大部分问题你都能解决(我接触的很多问问题的,比如上午问,我下午才看到,问下说已经解决了)。
常见的错误:
java.lang.NullPointerException:空指针异常,最常问的异常,遇到此异常一定说明有个空指针,如a.test(); 肯定说明a是null,这种问题问的实在太多了。思考下很容易解决的。细心点即可。
java.lang.ClassNotFoundException:类没有找到,一般是所需要的类不在classpath或类名写错了。
……,这些错误只要细心肯定能解决,让我们更加细心起来。
java.lang.NoClassDefFoundError: 只要动动手搜索一下,答案立马出来。
搜索,记住可以搜索类似问题,要学会触类旁通。
真诚而有效的寻求帮助
直奔主题,别搞什么『大神、高手、菜鸟求助』等词吸引眼球,好问题自然有人愿意解决,不愿给你解决的问题说明之前有人已经遇到过了,自己去查查肯定能解决。
把错误相关信息贴全,可以参考下《ITeye提问的智慧》,然后直奔问答频道问问题吧,好多热心人都在等着你的问题呢。
总结为什么
弄明白一个问题,尤其是别人帮你解决的,尽量记录下来,方便以后查阅,也方便其他人出问题查阅。
对于一些经常遇到的问题,一定要知道所以然,不要仅仅解决了就完事了,解决了只是个开始。
会学习的和不会学习的很大的区别我认为是 问为什么!
我的一点忠告
1、你的问题别人没有任何义务帮你解决,学会感恩,不管别人回答的对还是错;
2、不要提『蠢问题』,即遇到问题后立马问别人要解决方案,这样你会天天有很多同样的解决不了的问题;
3、不劳而获可耻,作为一个程序员没有试着去解决自己的问题就提问我认为是很可耻的,而且对自己发展是不利的,学会独立解决问题;
4、要思路不要代码,这样我们学到的更多,自己的事情自己做,当然有时候代码能让思路更清晰,思路为主,代码为辅;
5、不是问题解决了就完事了,试着做个总结方便后人查阅,而且对于一些经常出现的问题要知道为什么错了;
6、『取精华弃糟粕』,从别人的回答中提取有用的,不要一股脑的接受,自己要有分辨能力;
7、『兼听则明,偏信则暗』,学会独立思考,对于有些拿不准的答案要多方咨询保证其正确性,时刻保持怀疑;
8、『书上就是那么写的?』等,权威?没有绝对的权威,有人不犯错误吗?理论指导实践,但实践才能出真知!不要死学习,有时候适当的改变思路,不一定跟书上的一样。
9、『我和书上写的一模一样,怎么结果不对呢?』等,这是傻学,尤其计算机这东西,如果环境不同或有些配置不同可能出现的结果完全不一样,要活学活用,书本上的知识是用于借鉴的,不是照抄的。
10、喜欢遇到问题和解决问题,这就是经验,解决问题越多经验就越多!经验是靠问题堆起来的。不要怕丢人!
11、出问题先找自己的原因,不要抱怨,很多时候的错误都是粗心造成的。
12、出错必有原因,别给自己理由,比如『我本机就行,一到服务器就不行,想想自己是不是忘了哪个东西没部署』。
PS:以上是个人观点,如有错误希望不吝赐教。
为什么提问的问题没有人帮忙回答? 大部分原因是之前他们解决过类似的问题,而这些问题通过自己简单的摸索就能解决。
回答别人的问题的同时其实也是自己能力的提升,参与进来,学到的更多。