反例:java
// BigDecimal 反例 BigDecimal decimal = new BigDecimal(11.801D); System.out.println("decimal:"+decimal);
正例:正則表達式
// BigDecimal 正例 BigDecimal bDecimal = BigDecimal.valueOf(11.801D); System.out.print("bDecimal:"+bDecimal);
執行結果:數據庫
decimal:11.8010000000000001563194018672220408916473388671875 bDecimal:11.801
使用字符串String 的plit 方法時,傳入的分隔字符串是正則表達式,則部分關鍵字(好比 .[]()| 等)須要轉義。性能
2.1 優化
String str = "small.sun.shine"; String[] strSplit = str.split("."); // .須要轉義,反例 String[] strSplit1 = str.split("\\.");// 正例 String[] strSplit2 = str.split("[.]");// 正例 System.out.println("strSplit:" + Arrays.toString(strSplit)); System.out.println("strSplit1:" + Arrays.toString(strSplit1)); System.out.println("strSplit2:" + Arrays.toString(strSplit2));
執行結果:orm
strSplit:[] strSplit1:[small, sun, shine] strSplit2:[small, sun, shine]
2.2blog
String str = "small|sun|shine"; String[] strSplit = str.split("|"); // | 須要轉義,反例 String[] strSplit1 = str.split("\\|");// 正例 String[] strSplit2 = str.split("[|]");// 正例 System.out.println("strSplit:" + Arrays.toString(strSplit)); System.out.println("strSplit1:" + Arrays.toString(strSplit1)); System.out.println("strSplit2:" + Arrays.toString(strSplit2));
執行結果:索引
strSplit:[] strSplit1:[small, sun, shine] strSplit2:[small, sun, shine]
當循環中只須要獲取Map 的主鍵key時,迭代keySet() 是正確的;可是,當須要主鍵key 和取值value 時,迭代entrySet() 纔是更高效的作法,其比先迭代keySet() 後再去經過get 取值性能更佳。ci
//Map 獲取value 反例: HashMap<String, String> map = new HashMap<>(); for (String key : map.keySet()){ String value = map.get(key); }
正例:字符串
//Map 獲取key & value 正例: HashMap<String, String> map = new HashMap<>(); for (Map.Entry<String,String> entry : map.entrySet()){ String key = entry.getKey(); String value = entry.getValue(); }
當遇到多個查詢條件,使用where 1=1 能夠很方便的解決咱們的問題,可是這樣極可能會形成很是大的性能損失,由於添加了 「where 1=1 」的過濾條件以後,數據庫系統就沒法使用索引等查詢優化策略,數據庫系統將會被迫對每行數據進行掃描(即全表掃描) 以比較此行是否知足過濾條件,當表中的數據量較大時查詢速度會很是慢;此外,還會存在SQL 注入的風險。
反例:
<select id="queryBookInfo" parameterType="com.tjt.platform.entity.BookInfo" resultType="java.lang.Integer"> select count(*) from t_rule_BookInfo t where 1=1 <if test="title !=null and title !='' "> AND title = #{title} </if> <if test="author !=null and author !='' "> AND author = #{author} </if> </select>
正例:
<select id="queryBookInfo" parameterType="com.tjt.platform.entity.BookInfo" resultType="java.lang.Integer"> select count(*) from t_rule_BookInfo t <where> <if test="title !=null and title !='' "> title = #{title} </if> <if test="author !=null and author !='' "> AND author = #{author} </if> </where> </select>