1劲赠、邏輯判斷調(diào)整順序
if(is吉利車主 && is第一次登陸){
巴拉巴拉巴拉送禮物,彈消息等
}
is吉利車主 大概率為true
is第一次登陸 小概率為true
假設(shè)條件:總流量是100次橄仍,
'is吉利車主'80%通過诬垂,'is第一次登陸'10%通過。兩is方法和送禮物各方面消耗皆為一單位
則:調(diào)用'is吉利車主'100次慷彤,調(diào)用'is第一次登陸'80次娄蔼,最終'送禮物'8次
總消耗單位:188單位
但因?yàn)?如果&&的左邊判false怖喻,則右邊不用進(jìn)行運(yùn)算。
那么如果把概率小的放在前面:
那么調(diào)整一下順序
if(is第一次登陸 && is吉利車主){
巴拉巴拉巴拉送禮物岁诉,彈消息等
}
同樣假設(shè)條件:總流量是100锚沸,
'is第一次登陸'10%通過,'is吉利車主'80%通過唉侄。兩is方法和送禮物各方面消耗皆為一單位
則:調(diào)用'is第一次登陸'100次咒吐,'is吉利車主'調(diào)用10次,最終'送禮物'8次属划。
總消耗單位:118單位
因?yàn)檫@樣減少了"is吉利車主"的調(diào)用
2恬叹、空指針問題
NullPointerException:NPE
user.getFlag().equals("1"); //會(huì)NPE
"1".equals(user.getFlag()); //不會(huì)NPE
3、業(yè)務(wù)代碼寫日志
二維碼掃描付款轉(zhuǎn)賬同眯,入?yún)⑷罩敬蛴≌乐纾蹲疆惓P畔?/p>
4、方法返回空集合
如果返回null须蜗,調(diào)用方在忘記檢測(cè)的時(shí)候硅确,可能會(huì)拋出空指針異常。返回一個(gè)空集合呢明肮,就省去該問題了菱农。
mybatis查詢的時(shí)候,如果返回一個(gè)集合柿估,結(jié)果為空時(shí)也會(huì)返回一個(gè)空集合循未,而不是null。
5秫舌、初始化集合盡量指定大小
new ArrayList<>(int initialCapacity); 默認(rèn)10
阿里巴巴手冊(cè)
【推薦】集合初始化時(shí)的妖,指定集合初始值大小。
說明:HashMap使用HashMap(int initialCapacity) 初始化足陨。
正例:initialCapacity = (需要存儲(chǔ)的元素個(gè)數(shù) / 負(fù)載因子) + 1嫂粟。注意負(fù)載因子(即 loader factor)默認(rèn)為 0.75,如果暫時(shí)無法確定初始值大小墨缘,請(qǐng)?jiān)O(shè)置為 16(即默認(rèn)值)星虹。 反例:HashMap 需要放置 1024 個(gè)元素,由于沒有設(shè)置容量初始大小飒房,隨著元素不斷增加搁凸,容 量 7 次被迫擴(kuò)大,resize 需要重建 hash 表狠毯,嚴(yán)重影響性能护糖。
6、接口冪等性 并發(fā)問題
什么是冪等性:
一次和多次請(qǐng)求某一個(gè)資源對(duì)于資源本身應(yīng)該具有相同的結(jié)果嚼松。
換句話來說:就是任意多次執(zhí)行對(duì)于資源本身產(chǎn)生的影響均和一次執(zhí)行相同嫡良。
int flag = userMapper.select某一個(gè)雇員Employee.getFlag();
if(flag<=0){
userMapper.update這個(gè)雇員employee.setFlag(1);
給這個(gè)雇員Employee年終獎(jiǎng);
}
但可能出現(xiàn)問題锰扶,如果有兩個(gè)相同的請(qǐng)求同時(shí)發(fā)過來,那么可能出現(xiàn):
那么寝受,可能加了兩次年終獎(jiǎng)坷牛,多么讓人快樂!
為了避免這種問題
if(userMapper.update這個(gè)雇員employee.setFlag(1);){
給這個(gè)雇員Employee年終獎(jiǎng);
}
更新操作成功時(shí)很澄,才進(jìn)行業(yè)務(wù)操作京闰。
7、私有化工具類構(gòu)造器
工具類的方法都是靜態(tài)的甩苛,通過類名直接調(diào)用即可
但為了避免“調(diào)用方先實(shí)例化工具類然后調(diào)用實(shí)例工具類的方法” 蹂楣,可以私有工具類的構(gòu)造器
class XXXUtil{
···
private XXXUtil(){}
···
public static void method(){}
}