程式設計好習慣

白色彩虹發表於2020-12-23

1、修改完程式碼,記得自測一下

2、放入入參儘量都檢驗一下

你的方法處理,必須先校驗引數,比如入參是否允許為空,入參長度是否符合你的預期長度。

3、修改老介面的時候,思考介面的相容性

//老介面
void oldService(A,B);{
  //相容新介面,傳個null代替C
  newService(A,B,null);
}

//新介面,暫時不能刪掉老介面,需要做相容。
void newService(A,B,C);

4、對於複雜的程式碼邏輯,新增清楚的註釋

5、使用完IO資源流,需要關閉

FileInputStream fdIn = null;
try {
    fdIn = new FileInputStream(new File("/jay.txt"));
} catch (FileNotFoundException e) {
    log.error(e);
} catch (IOException e) {
    log.error(e);
}finally {
    try {
        if (fdIn != null) {
            fdIn.close();
        }
    } catch (IOException e) {
        log.error(e);
    }
}

6、程式碼採取措施避免執行時錯誤

日常開發中,我們需要採取措施規避「陣列邊界溢位,被零整除,空指標」等執行時錯誤。

String name = list.get(1).getName(); //list可能越界,因為不一定有2個元素哈
if(CollectionsUtil.isNotEmpty(list)&& list.size()>1){
  String name = list.get(1).getName(); 
}

7、儘量不要在迴圈裡遠端呼叫、或者資料庫操作,優先考慮批量進行

remoteBatchQuery(param);
for(int i=0;i<n;i++){
  remoteSingleQuery(param)
}

8、寫完程式碼腦洞一下多執行緒執行會怎麼樣,注意一些併發一致性問題

9.獲取物件的屬性,先判斷物件是否為空

if(object!=null){
   String name = object.getName();
}

10、多執行緒非同步優先考慮恰當的執行緒池,而不是new thread,同時考慮執行緒池是否隔離

為什麼優先使用執行緒池?使用執行緒池有這幾點好處呀
它幫我們管理執行緒,避免增加建立執行緒和銷燬執行緒的資源損耗。
提高響應速度。
重複利用。

11手動寫完程式碼業務的SQL,先拿去資料庫跑一下,同時也explain看下執行計劃。

12.呼叫第三方介面,需要考慮異常處理,安全性,超時重試這幾個點。

異常處理(比如,你調別人的介面,如果異常了,怎麼處理,是重試還是當做失敗)
超時(沒法預估對方介面一般多久返回,一般設定個超時斷開時間,以保護你的介面)
重試次數(你的介面調失敗,需不需要重試,需要站在業務上角度思考這個問題
簡單一個例子,你一個http請求別人的服務,需要考慮設定connect-time,和retry次數。
如果是轉賬等重要的第三方服務,還需要考慮「簽名驗籤」,「加密」等

13.介面需要考慮冪等性

冪等(idempotent、idempotence)是一個數學與計算機學概念,常見於抽象代數中。
在程式設計中.一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函式,或冪等方法,是指可以使用相同引數重複執行,並能獲得相同結果的函式。
查詢操作
唯一索引
token機制,防止重複提交
資料庫的delete刪除操作
樂觀鎖
悲觀鎖
Redis、zookeeper 分散式鎖(以前搶紅包需求,用了Redis分散式鎖)
狀態機冪等

14. 多執行緒情況下,考慮線性安全問題

在「高併發」情況下,HashMap可能會出現死迴圈。因為它是非線性安全的,可以考慮使用ConcurrentHashMap。所以這個也儘量養成習慣,不要上來反手就是一個new HashMap();

15.主從延遲問題考慮

一般資料庫都是有主庫,從庫的。寫入的話是寫主庫,讀一般是讀從庫。如果發生主從延遲,很可能出現你插入成功了,但是卻查詢不到的情況。
如果是重要業務,需要考慮是否強制讀主庫,還是再修改設計方案。
但是呢,有些業務場景是可以接受主從稍微延遲一點的,但是這個習慣還是要有吧。
寫完運算元據庫的程式碼,想下是否存在主從延遲問題。

16.使用快取的時候,考慮快取跟DB的一致性,還有(快取穿透、快取雪崩和快取擊穿)

快取雪崩:指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。
快取穿透:指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,進而給資料庫帶來壓力。
快取擊穿:指熱點key在某個時間點過期的時候,而恰好在這個時間點對這個Key有大量的併發請求過來,從而大量的請求打到db

17 減少SQL語句的侵入,在業務層進行sql語句的判讀

相關文章