工作總結(jié)-002

  1. 異常捕獲
    service捕獲業(yè)務(wù)異常,自定義BaseException;
    interface捕獲業(yè)務(wù)異常,以及其他異常,用Exception“兜底”。

  2. 參數(shù)校驗
    不要覺得別人的代碼多可靠,該有的校驗要有;“不該有的校驗”也要有。
    考慮因素全面,邏輯嚴(yán)謹(jǐn)。
    記錄的唯一性可以用唯一索引保證。
    alter table table_name add unique key key_name (column1_name ,column2_name);

  3. 少用int
    在需要數(shù)據(jù)轉(zhuǎn)換的場景,如VO轉(zhuǎn)為DTO,DTO最好用基礎(chǔ)數(shù)據(jù)類型的包裝類。
    如果VO用了Integer,而Dto對應(yīng)類型是int,當(dāng)VO的Integer為null時,為Dto相應(yīng)屬性賦值會有問題。

// VO的Integer age
vo.age = null;
// Dto的int age
// ... 下面這行有問題
dto.setAge(vo.getAge());

這里涉及到拆箱問題,通過javap -c 反編譯class文件,可看到調(diào)用了Integer.intValue()。針對dto.setAge(vo.getAge());會執(zhí)行vo.getAge(),因為vo.age = null; null.intValue()會報空指針異常。

  1. dubbo接口使用方式
  • 1)用dubbo注解
自動化配置 @EnableDubboConfiguration
consumer的注解 @DubboConsumer
producer的注解 @Service(import com.alibaba.dubbo.config.annotation.Service)

參考 http://www.itdecent.cn/p/06bfa92f2e20

  • 2)不用Dubbo注解

consumer:

@Bean("ConsumerInterface")
public ReferenceBean<ConsumerInterface> consumerInterface() {
        ReferenceBean<ConsumerInterface> referenceBean = new ReferenceBean<>();
        referenceBean.setInterface(ConsumerInterface.class);
        referenceBean.setCheck(false);
        referenceBean.setVersion("1.0.0");
        referenceBean.setTimeout(5000);
        return referenceBean;
}

producer:

@Resource
private ProducerInterface producerInterfaceImpl;
@Bean
public ServiceBean<ProducerInterface> producerInterface() {
        ServiceBean<ProducerInterface> serviceBean = new ServiceBean<>();
        serviceBean.setInterface(ProducerInterface.class);
        serviceBean.setRef(producerInterfaceImpl);
        referenceBean.setVersion("1.0.0");
        referenceBean.setTimeout(5000);
        return serviceBean;
}
  1. 不要直接使用線程

阿里巴巴Java開發(fā)手冊:

使用線程池的好處是減少在創(chuàng)建和銷毀線程上所花的時間以及系統(tǒng)資源的開銷,解決資源不足的問題。如果不使用線程池,有可能造成系統(tǒng)創(chuàng)建大量同類線程而導(dǎo)致消耗完內(nèi)存或者“過度切換”的問題。
線程池不允許使用Executors去創(chuàng)建,而是通過ThreadPoolExecutor的方式,避資源耗盡風(fēng)險。 Executors返回的線程池對象的弊端如下 :
1)FixedThreadPool和SingleThreadPool: 允許的請求隊列長度為 Integer.MAX_VALUE,可能會堆積大量的請求,從而導(dǎo)致 OOM。
2)CachedThreadPool 和 ScheduledThreadPool: 允許的創(chuàng)建線程數(shù)量為Integer.MAX_VALUE,可能會創(chuàng)建大量的線程,從而導(dǎo)致 OOM。

自己寫線程池工具類 http://note.youdao.com/noteshare?id=30ca03fa9d7f9772e5e8a811089a1fa6

  1. 關(guān)于Autowired
    Autowired annotation is not supported on static fields
    Autowired 與 Resource 的區(qū)別
    Autowired按類型裝配,Resource默認(rèn)按屬性名進(jìn)行裝配

  2. 為什么HashMap初始化時要指定大小?
    避免resize降低效率

  3. 注釋
    發(fā)布文檔,方便其他人了解代碼功能。
    方法的注釋,說明功能、入?yún)?、返參、可能拋出的異常?/p>

/**
 * @author: Ali
 * @date: 2017/12/15
 * @since: java 1.8
 * description: XXXXXX
 * 
 * @param someParam 入?yún)⒚枋? * @return returnParam 返參描述
 * @throws XXXException XXX異常
 */
  1. maven庫引不下來,刪掉本地相應(yīng)倉庫,重新import
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容