實用的Java知識點,實用Java知識點
1.對於一些需要非同步處理的,不要直接new一個thread,應當使用線程池。使用線程池的時候應當對線程數量大小合理設定,一般最大不超過50個,當然還需要考慮你的IO和CPU。
2.分支判斷if…else的時候,最常符合的條件處理放在前面。
3.對象比較的時候常量放前面,減少null 指標的出現。
4.減少synchronized中等待處理的代碼,能放在外面就盡量放在外面。
資料庫:
5.一般查詢比較慢,很有可能是沒有建索引或者索引沒用到,多去檢查一下。
6.兩個大表的關聯查詢,可以使用二次訪問資料庫替代,先查出A表的資料,利用關聯欄位再查B表的。不要一味想著一條sql搞定最好。
7.堅決避免,查全表資料或者數量大的資料,返回list載入到記憶體中,一不小心查了100w資料,又查得比較頻繁,記憶體的爆了。有這種風險的改成分頁查詢。
8.多考慮避免事務裡面有長串連或者長事務,如果大量這種情況出現佔用資料連線,會影響效能。一些無必要的邏輯可以放到事務外執行。
9.對欄位的加減乘除處理放到sql,嚴格避免先get處理,然後運算在set到資料庫裡面,並發情況非常容易導致失真.
10.方法裡面代碼不要太長,注意封裝,命名語義化,代碼整潔。
SQL規範與效能最佳化Mysql11.SQL執行順序:a.檢查文法是否正確。 b.檢查表是否存在、許可權是否滿足等。 c.根據統計資訊(如data length,rows,index length、索引唯一度),產生較優的執行計畫。 d.根據執行計畫,進行資料檢索、過濾、合并、排序等操作。訪問資料時,記憶體中如存在表資料,則直接進行操作;否則,從磁帶讀取表資料,放入記憶體,再進行操作;如記憶體不足,則記憶體中較冷資料涮出記憶體,再從記憶體中讀取資料。12.什麼是執行計畫:a.決定如何訪問表資料,是否通過索引,是否排序等。 b.多表關聯是先訪問哪個表。 c.多表關聯時,使用哪種串連方式,不過現在MySQL只有嵌套串連。(嵌套迴圈,顧名思義就是將一個表為出發點,將該表全部記錄逐條去遍曆另外一張表的記錄)13.索引:查詢的時候如果使用上了索引,可以提高效率,因為建立了索引後,可以理解為資料字典的結構儲存(例如書中的目錄),因此根據條件查詢的時候更加高效。下面看一下MySQL常用的索引類型的概念。a.普通索引:在建立普通索引時,不附加任何限制條件。這類索引可以建立在任何資料類型中,其值是否唯一和非空由欄位本身的完整性條件約束條件決定。建立索引以後,查詢時可以通過索引進行查詢。例如,在student表的stu_id欄位上建立一個普通索引。查詢記錄時,就可以根據該索引進行查詢。b.唯一性索引:使用UNIQUE參數可以設定索引為唯一性索引。在建立唯一性索引時,限制該索引的值必須是唯一的。例如,在student表的stu_name欄位中建立唯一性索引,那麼stu_name欄位的值就必需是唯一的。通過唯一性索引,可以更快速地確定某條記錄。主鍵就是一種特殊唯一性索引。c.單列索引:在表中的單個欄位上建立索引。單列索引只根據該欄位進行索引。單列索引可以是普通索引,也可以是唯一性索引,還可以是全文索引。只要保證該索引只對應一個欄位 即可。d.多列索引:多列索引是在表的多個欄位上建立一個索引。該索引指向建立時對應的多個欄位,可以通過這幾個欄位進行查詢。但是,只有查詢條件中使用了這些欄位中第一個欄位時,索引才會被使用。例如,在表中的id、name和sex欄位上建立一個多列索引,那麼,只有查詢條件使用了id欄位時該索引才會被使用。還有空間索引和全文索引,平時也比較少用。14.一般一張表索引不要超過5個,而且避免重複索引,而且也不是建了索引,根據索引欄位條件查詢,索引就會起作用。15.一般哪些情境會導致索引失效: a.使用like關鍵字匹配字串第一個為”%”的情境。 b.條件中包含or、in、not in、<>關鍵字,預設不走索引的。 c.訪問表上的資料行超出表總記錄數30%,變成全表掃描。 d.查詢條件使用函數在索引列上,或者對索引列進行運算。 e.多列索引中,第一個索引列使用範圍查詢,只能用到部份或無法使用索引。 f.多列索引中,第一個查詢條件不是最左索引列。16.不能同時使用兩個索引,一個過濾資料,一個用於排序(主鍵除外)。17.DML語句如果使用索引,會導致lock全表;如果使用了非唯一索引,可能只是鎖住一定範圍。因此,建議更新/刪除資料盡量用上索引,如果可以最好用上主鍵或唯一索引,另外事務要及時提交。18.如何看執行計畫,分析SQL的效能。參照:http://www.cnblogs.com/xiaoboluo768/p/5400990.html19. 日誌記錄盡量放在獨立事務裡面,避免後面的異常發生導致日誌丟失。 20.
transient修飾該元素不會進行jvm預設序列化,可以自己完成這個元素的序列化。21.多次使用的相同變數最好歸納成常量。22.盡量在迴圈中少做一些可避免的方法調用,這樣可以節省方法棧的建立。for(int i=0;i<list.size();i++){ System.out.println(i);}可以修改為:for(int i=0,size=list.size();i<size;i++){ System.out.println(i);}23.使用基礎資料型別 (Elementary Data Type)來做局部變數類型,因為基本類型的變數是存放在棧中的,封裝類的變數是在堆中,棧的操作速度比堆快很多。24.儘早的將不再使用的變數引用賦給null,這樣做可以協助jvm更快的進行記憶體回收,
釋放記憶體。25.mybate中引用值和字串的使用<#if sortBy??>${"ORDER BY ${sortBy} "}</#if>