歡迎光臨
每天分享高質量文章

Java Web技術經驗總結(十四)

  1. try-catch的異常打印原則:(1)優先catch具體異常,最後catch通用異常Exception;(2)異常日誌打印需要將入參、結果和請求打印出來,方便排查問題;

  2. 利用HTTP CLIENT發送GET請求時,必須URL Encode.

  3. MySQL和Mybatis的批量更新操作,最近遇到一種情況,需要給多個欄位更新成不同的值,最後參考:Mybatis之批量更新操作這篇文章搞定的。

  4. 利用MyBatis寫批量插入或者更新的陳述句,假設引數串列的大小為x,則傳回值的範圍是[x,2x]。 INSERT INTO test(fans_id, test_id, openid, nickname, picture,update_time, create_time) VALUES (#{item.fansId}, #{item.testId}, #{item.Openid}, #{item.nickName}, #{item.picture},#{item.updateTime},#{item.createTime}) ON DUPLICATE KEY UPDATE nickname=VALUES(nickname), picture=VALUES(picture), update_time=VALUES(update_time)

  5. 關於斷言的使用:我查了下資料,JVM通過-ea配置項控制斷言是否打開,預設是關閉的。用在生產專案中的時候,一定不能做的事情是用斷言決定業務邏輯,我下午那麼用有風險。準備再梳理一遍代碼,採取兩個方式處理dao層的傳回值:(1)上層業務明確需要知道DB操作是否成功,通過邏輯判斷傳回true or false;(2)上層業務不強關心DB操作是否成功,通過邏輯判斷,如果db操作失敗,僅僅打印warn日誌。

  6. 當你想用Thread.sleep()方法的時候,可以優先使用TimeUnit.SECONDES.sleep(x)接口,代碼可讀性更好。參見:優先使用TimeUnit類中的sleep()

  7. 最近做一點和微信相關的工作,從微信那邊取回來的粉絲昵稱中如果有表情符號,存放到MySQL中的時候出現亂碼,解決的辦法就是:檢查JDBC連接、druid連接、MYSQL表的字符集等方面。參考:微信nickname亂碼(emoji)及mysql編碼格式設置(utf8mb4)解決的過程

  8. 在進行資料遷移的時候,需要從某張表裡查詢一批資料,最先使用了普通的分頁查詢,代碼如下:SELECT * FROM fans WHERE mp_id=#{mpId}LIMIT #{offset},#{count}這個陳述句如果只是查詢前面幾頁,或者是表的資料量不大(小於10萬),就沒有問題,否則就會出現慢查詢。參考文章:【MySQL】 性能優化之 延遲關聯進行了優化。

  9. 今天遇到一個JSON解析失敗的案例,錯誤表現為: “com.alibaba.fastjson.JSONException: unclosed string : ^Z”,最後查出來是fastjson的鍋,我用的fastjson為1.2.0的,版本太低,這個問題在fastjson 1.2.9解決掉了。參考:github issue

赞(0)

分享創造快樂