日常開發需要規避的注意點

2021-09-29 04:32:22 字數 3091 閱讀 3912

根據自己系統的領域模型去判斷需要那些pojo的規範

pojo

所處領域

說明do

dao層

與資料庫表結構一一對應,通過 dao 層向上傳輸資料源物件

dtoservice層或manager層

資料傳輸物件, service 或 manager 向外傳輸的物件。

boservice層

業務物件。 由 service 層輸出的封裝業務邏輯的物件。

aoweb層或service層

應用物件。 在 web 層與 service 層之間抽象的復用物件模型,極為貼近展示層,復用度不高。

voweb層

顯示層物件,通常是 web 向模板渲染引擎層傳輸的物件。

query

通用資料查詢物件,各層接收上層的查詢請求。 注意超過 2 個引數的查詢封裝,禁止使用 map 類來傳輸

駝峰命名

常量全部大寫

抽象類命名使用 abstract 或 base 開頭, 異常類命名使用 exception 結尾; 測試類命名以它要測試的類的名稱開始,以 test 結尾.用到設計模式的以設計模式單詞結尾,比如***factory表示工廠模式.列舉類名建議帶上 enum 字尾,列舉成員採用大寫加下劃線方式.

pojo類中不要出現is開頭的字段

基本型別判斷相等可以用==,引用型別都用equals,不要用object的equals方法,確定值寫在前,變數寫在後,可以用objects.equals方法去比較.

不要修改 serialversionuid 字段

string 的 split 方法得到的結果需要驗證是否存在空字串的情況

因為 set 儲存的是不重複的物件,依據 hashcode 和 equals 進行判斷,所以 set 儲存的物件必須重寫equals和 hashcode,只要重寫 equals,就必須重寫 hashcode.map的key也需要重寫

arraylist的sublist結果不可強轉成arraylist,否則會丟擲 classcastexception異常,因為sublist 返回的是 arraylist 的內部類 sublist,並不是 arraylist,所以需要new乙個新集合去儲存.

使用集合轉陣列的方法,必須使用集合的 toarray(t array),不可強轉,若強轉其它型別陣列將出現 classcastexception 錯誤.

使用工具類 arrays.aslist()把陣列轉換成集合時,不能使用其修改集合相關的方法,它的 add/remove/clear 方法會丟擲 unsupportedoperationexception 異常.

不要在 foreach 迴圈裡進行元素的 remove/add 操作。 remove 元素請使用 iterator方式,如果併發操作,需要對 iterator 物件加鎖.

使用 entryset 遍歷 map 類集合 kv,而不是 keyset 方式進行遍歷,keyset底層會遍歷兩次,造成資源浪費.

map的key和value是null的問題,見下表

集合類keyvalue

super

說明hashtable

不允許為 null

不允許為 null

dictionary

執行緒安全

concurrenthashmap

不允許為 null

不允許為 null

abstractmap

鎖分段技術(jdk8:cas)

treemap

不允許為 null

允許為 null

abstractmap

執行緒不安全

hashmap

允許為 null

允許為 null

abstractmap

執行緒不安全

建立執行緒必須指定有意義的執行緒名

執行緒池避免使用 executors 去建立,最好通過 threadpoolexecutor 的方式去建立.

在 switch 塊內,每個 case 都要通過 break/return 等來終止

盡量讓if-else保持在3層以內,盡量通過否條件加return的方式避免多層條件判斷

try-catch塊盡量細分,不要把明確不會拋異常的**也放到catch塊裡,做到細粒度,針對什麼異常處理什麼異常,不要全部用exception去處理,必要的時候可以封裝自己的業務異常

日誌保留時間看需求而定,推薦保留15天

日誌列印用slf4j 中的 api來統一,利用門面模式框架便於維護.

日誌命名最好起的有意義,推薦以[ 應用-型別-目的-日期.log ]的方式命名,或者通過資料夾的方式.

日誌要適量列印,不要過度列印日誌浪費資源,遇到集合類資訊,可選擇列印長度而不是整個集合等類似問題,引數效驗的問題可選擇warn級別日誌,業務問題可選擇info級別,測試日誌用debug級別,明確的資料錯誤或異常可以採用error級別,強制要求採用佔位符的方式填寫日誌引數,不要用字串拼接的方式,因為那樣會造成資源浪費,就算不是debug模式,底層也會執行debug日誌的字串拼接,佔位符則不會.

錯誤日誌的列印方式盡量不要用e.printstacktrace();它在高併發環境下有概率產生死鎖的問題,推薦用log.error(「業務內容-」+e.getmessage(), e);的方式去列印.

高併發伺服器建議調小 tcp 協議的 time_wait 超時時間,作業系統預設 240 秒後,才會關閉處於 time_wait 狀態的連線,在高併發訪問下,伺服器端會因為處於 time_wait 的連線數太多,可能無法建立新的連線,所以需要在伺服器上調小此等待值, 在 linux 伺服器上請通過變更/etc/sysctl.conf 檔案去修改該預設值(秒) :net.ipv4.tcp_fin_timeout = 30

給 jvm 設定-xx:+heapdumponoutofmemoryerror 引數,讓 jvm 碰到 oom 場景時輸出dump 資訊

明確欄位的型別和大小,不要過度設定長度,比如varchar都設定成255

聯合索引根據業務訪問情況去設定索引的前後順序

mybatis的xml中不要使用$傳入引數,避免sql注入,強制用#傳參

會建立索引的字段必須not null,因為null值會影響索引

表以及表字段的字符集要強制統一,以免在join的時候發生不走索引的情況.

android日常開發記憶體優化注意點

1.盡量的少使用資源,多使用shape畫圖或者.9.png 3.context不要被長時間引用,例如 執行緒引用了context,並且在無限迴圈 雖然介面退出去,activity被摧毀,但context還在被執行緒引用,當前activity的資源就不會被 4.context沒被長時間引用情況下,只要...

Mysql日常開發注意要點

1 mysql儲存引擎介紹 myisam 低版本mysql預設的mysql外掛程式式儲存引擎,儲存檔案易損壞,不支援事務。innodb 目前預設的mysql儲存引擎,用於事務處理應用程式,具有眾多特性,包括acid事務支援 建表語句建議使用 engine innodb 字段,例如 create ta...

日常開發注意篇心得總結。

最近工作有些忙,但不忘做些日常總結,溫故而知新嘛。盡量使用php內建方法,因為二維陣列使用了個 導致php版本不相容 git限制重要配置不要提交到版本庫,因為測試環境,本地環境,線上環境等都不相同,每個人電腦也不同 中不要寫死 因為涉及到負載均衡,等多web伺服器的時候,特別是多同事協作的時候,太難...