曾經乙個穩定執行的老專案突然崩了,線上由於歷史原因專案框架配置不完善,執行日誌都被吞掉了,問題現象是涉及一張業務表的查詢介面查不到資料。第一反應是先把日誌搞出來,最後是拋了乙個sqlexception:incorrect decimal value: 『0』 for column 『』 at row -1,看字面意思是資料值的意思不對,網上對這個問題的解決辦法是更改sql-mode,改變sql語句執行時的檢查模式,忽略一些資料檢驗的異常,因為根本沒有人動過伺服器和**,平白無故更改資料庫配置,有點將信將疑,但是還是去做了,結果並沒有解決問題。回頭自己分析,異常資訊只體現了資料不能轉化,但並沒有告訴字段,但decimal型別在sql中有兩處使用,sql語句中使用了cast型別轉換函式,目標轉化型別是decimal,於是排查cast執行前字段的值,最終定位於由於在批量匯入時未對該字段做格式檢查,使用者未按格式要求填寫,最終提交了一堆null,導致cast時不能順利轉化。
鏈路層定位問題:很多bug是邏輯方面的問題,如在前端頁面看到資料不對,接下來排查是否前端邏輯錯誤或顯示錯誤,往下排查介面傳入引數與響應結果是否有誤,再往下排查快取或資料庫層面是否有錯誤,最後執行時的sql語句是否符合預期,sql執行結果是否符合預期。自頂向下定位出問題地方,在乙個呼叫鏈路較長時,應當先排查出問題的環節,再進一步除錯查詢問題。
除錯定位問題:通過除錯工具,一步步執行**,找到出問題的地方。
經驗排查:根據問題情況結合自己或他人經驗列出最可能發生問題的地方,經驗可能來自相同問題也可能來自同類問題的遷移,最終多翻嘗試解決問題。
在經驗不充足時,個人認為當注重培養資料查詢能力,另外就是問題表述能力,只有能夠很好的把問題表述給他人,給搜尋引擎,才能更快的找到答案。
在排查問題時如何證明乙個地方有問題?目前用到的主要是對比法,根據輸入輸出結果對比或者設定參照物,參照對比。
面對問題的心態:逢山開路、遇水搭橋;另闢蹊徑、換一條路;描述問題、專人解決;得過且過、聽之任之
靜下心深入分析問題,尋找思考最優解決方案,評估解決方案,同時還需要考慮到解決方案可能帶來的***,是否會對穩定的模組產生影響,解決問題的徹底性,解決方案需要付出的成本代價等
基本功紮實
遇到問題後總結問題,盡量上公升乙個高度解決一類問題
react 路由巢狀3 x版本
路由巢狀 在乙個路由中載入多個子路由 1 在主入口路由檔案引入子路由 2 將子路由放入對應的父路由內,且子路由名稱是在父路由名字基礎上追加,否則跳轉時會因跳轉路徑問題報錯 3 在父路由對應的元件內,新增link標籤設定跳轉,別忘了引入link 4 在父元件中新增 在 新增,子路由元件內容就顯示在 5...
python2 x和3 x的區別
這個星期開始學習python了,因為看的書都是基於python2.x,而且我安裝的是python3.1,所以書上寫的地方好多都不適用於python3.1,特意在google上search了一下3.x和2.x的區別。特此在自己的空間中記錄一下,以備以後查詢方便,也可以分享給想學習python的frie...
HttpClient4 X和3 X傳送資料
首先需要說明,httpclient4.x支援jdk1.5及以上,httpclient3.x支援1.5以下的。4.x和3.x的區別在於4.x的httpclient是乙個介面,3.x的httpclient是乙個類,4.x更多的是基於介面的實現方式。4.x需要jar httpclient 4.5.3.ja...