【轉載】分享我是如何解決問題的—尊重每一個回答問題的人

JerryZhou_發表於2012-12-18

 轉自:http://jinnianshilongnian.iteye.com/blog/1722513

思考:為什麼提問的問題沒有人幫忙回答?

精心提出問題

怎麼才能提出自己的問題呢?錯誤資訊越全越容易解決。我的觀點是:  問題描述、日誌資訊或異常堆疊資訊(如果有)、環境和配置(如果有)、相關程式碼。

 

問題描述

要力求簡潔,一針見血。不要搞些沒用的。

 

不好的問題描述:

a、關於springmvc3.0的問題  

b、使用spring註解,測試一直報錯

c、Spring3.1問題

d、請問這個attr從何而來?謝謝

e、springAOP代理

f、 該如何解決

g、Mysql 連線錯誤

 

 

從以上問題描述中我們看不到到底遇到什麼問題,更好的問題描述應該:

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:以上是個人觀點,如有錯誤希望不吝賜教。

 

為什麼提問的問題沒有人幫忙回答? 大部分原因是之前他們解決過類似的問題,而這些問題通過自己簡單的摸索就能解決。

相關文章