<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    14個SpringBoot優化小妙招,看完后同事說寫代碼像寫詩!

    VSole2022-09-07 18:19:19

    每次聊到代碼優化,都會有很多人說理論、架構、核心思路,其實我覺得代碼優化這事說簡單了很簡單,說復雜了吧它也有一定的難度,但是我覺得有一個良好的編碼習慣很重要,下面分享一下14個springboot項目中優化代碼的小技巧,讓代碼優化跟容易,就像完成一件小事。

    1. 定義配置文件信息

    有時候我們為了統一管理會把一些變量放到 yml 配置文件中

    例如

    用 @ConfigurationProperties 代替 @Value

    使用方法

    定義對應字段的實體

    @Data
    // 指定前綴
    @ConfigurationProperties(prefix = "developer")
    @Component
    public class DeveloperProperty {
        private String name;
        private String website;
        private String qq;
        private String phoneNumber;
    }
    @Data
    // 指定前綴
    @ConfigurationProperties(prefix = "developer")
    @Component
    public class DeveloperProperty {
        private String name;
        private String website;
        private String qq;
        private String phoneNumber;
    }
    

    使用時注入這個bean

    @RestController
    @RequiredArgsConstructor
    public class PropertyController {
     
        final DeveloperProperty developerProperty;
     
        @GetMapping("/property")
        public Object index() {
           return developerProperty.getName();
        }
    }
    

    2. 用@RequiredArgsConstructor代替@Autowired

    我們都知道注入一個 bean 有三種方式哦(set 注入, 構造器注入, 注解注入),Spring 推薦我們使用構造器的方式注入 Bean,我們來看看上段代碼編譯完之后的樣子

    RequiredArgsConstructor:lombok提供

    3.代碼模塊化

    阿里巴巴 Java 開發手冊中說到每個方法的代碼不要超過 50 行(我沒記錯的話),手冊:https://www.yoodb.com/deployment/handbook/alibaba-java-specification.html

    ,在實際的開發中我們要善于拆分自己的接口或方法, 做到一個方法只處理一種邏輯, 說不定以后某個功能就用到了, 拿來即用。

    4. 拋異常而不是返回

    在寫業務代碼的時候,經常會根據不同的結果返回不同的信息,盡量減少返回,會顯得代碼比較亂。

    反例

    正例

    5. 減少不必要的db

    盡可能的減少對數據庫的查詢,面試推薦公眾 號Java精選,回復java面試,獲取面試資料,支持在線刷題。

    舉例子

    刪除一個服務(已下架或未上架的才能刪除),之前有看別人寫的代碼,會先根據id查詢該記錄,然后做一些判斷。

    反例

    正例

    6. 不要返回 null

    反例

    正例

    別處調用方法時,避免不必要的空指針

    7. if else

    不要太多了if else if,可以試試策略模式代替

    8. 減少controller業務代碼

    業務代碼盡量放到service層進行處理,后期維護起來也好操作而且美觀。

    反例

    正例

    9. 利用好Idea

    目前為止市面上的企業基本都用idea作為開發工具了吧。

    舉一個小例子

    idea會對我們的代碼進行判斷,提出合理的建議

    例如

    它推薦我們用lanbda的形式代替,點擊replace

    10. 閱讀源碼

    一定要養成閱讀源碼的好習慣包括優秀的開源項目GitHub上stars:>1000, 會從中學好好多知識包括其對代碼的設計思想以及高級API,面試加分(好多面試官習慣問源碼相關的知識,推薦公眾 號Java精選,回復java面試,獲取面試資料,支持在線刷題)

    11. 設計模式

    23種設計模式,要嘗試代碼中運用設計模式思想,寫出的代碼即規范又美觀還高大上哈哈。

    12. 擁抱新知識

    像我們這種工作年限少的程序員,我覺得要多學習自己認知之外的知識,不能每天crud,有機會就多用用有點難度的知識,沒有機會(項目較傳統),可以自己下班多些相關demo練習

    13. 基礎問題

    map遍歷

    HashMap<String, String> map = new HashMap<>();
    map.put("name", "du");
    for (String key : map.keySet()) {
        String value = map.get(key);
    }
    map.forEach((k, v) -> {
    });
    // 推薦
    for (Map.Entry<String, String> entry : map.entrySet()) {
    }
    

    optional 判空

    //獲取子目錄列表
    public List<CatalogueTreeNode> getChild(String pid) {
                if (V.isEmpty(pid)) {
                pid = BasicDic.TEMPORARY_DIRECTORY_ROOT;
            }
            CatalogueTreeNode node = treeNodeMap.get(pid);
            return Optional.ofNullable(node)
                    .map(CatalogueTreeNode::getChild)
                    .orElse(Collections.emptyList());
        }
    

    遞歸

    大數據量的遞歸時,避免在遞歸方法里new對象,可以試試把對象當作方法參數進行傳遞使用

    注釋

    類 接口方法 注解 較復雜的方法 注釋都要寫而且要寫清楚, 有時候寫注釋不是給別人看的 而是給自己看的

    14. 判斷元素是否存在

    hashSet 而不是 list,list 判斷一個元素是否存在的代碼

    ArrayList<String> list = new ArrayList<>();
     
    // 判斷a是否在list中
     
    for (int i = 0; i < list.size(); i++)
           if ("a".equals(elementData[i]))
              return i;
    

    由此可見其復雜度為On,而hashSet底層采用hashMap作為數據結構進行存儲,元素都放到map的key(即鏈表中)

    HashSet<String> set = new HashSet<>();
    // 判斷a是否在set中
    int index = hash(a);
    return getNode(index) != null
    

    由此可見其復雜度為O1。

    代碼優化寫代碼
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    每次聊到代碼優化,都會有很多人說理論、架構、核心思路,其實我覺得代碼優化這事說簡單了很簡單,說復雜了吧它也有一定的難度,但是我覺得有一個良好的編碼習慣很重要,下面分享一下14個springboot項目中優化代碼的小技巧,讓代碼優化跟容易,就像完成一件小事。
    看雪論壇作者ID:wx_御史神風
    介紹實戰中由于各種情況,可能會對反序列化Payload的長度有所限制,因此研究反序列化Payload縮小技術是有意義且必要的本文以CommonsBeanutils1鏈為示例,
    如果指定了一個類為final,則該類所有的方法都是final的。此舉能夠使性能平均提高50% 。因為對這些大對象的操作會造成系統大的開銷,稍有不慎,將會導致嚴重的后果。
    V8環境搭建
    2021-09-14 18:00:00
    本文是這個系列的第一篇,主要講解四部分內容。
    源碼分析1、LLVM編譯器簡介LLVM 命名最早源自于底層虛擬機的縮寫,由于命名帶來的混亂,LLVM就是該項目的全稱。LLVM 核心庫提供了與編譯器相關的支持,可以作為多種語言編譯器的后臺來使用。自那時以來,已經成長為LLVM的主干項目,由不同的子項目組成,其中許多是正在生產中使用的各種 商業和開源的項目,以及被廣泛用于學術研究。
    本文講解 Turbofan 的工作流程、梳理 PrepareJob、ExecuteJob 和 FinalizeJob 的主要功能以及重要數據結構。
    此工具是因為看到了Dliv3師傅的Venom工具后,想著自己也一個屬于自己的多級代理工具,故而利用閑暇時間編寫的(是的,我又在重復造輪子), 在此感謝Dliv3師傅 XD。 廢話不多說,我把我的README先搬過來給大家瞅瞅 Stowaway是一個利用go語言編寫的多級代理工具用戶可使用此程序將外部流量通過多個節點代理至內網,并實現管理功能 此工具僅限于安全研究和教學,用戶承擔因使用此
    據外媒報道,韓國科技巨頭三星前不久發生了好幾起由ChatGPT引起的信息泄露事件,設備測量、產量數據、內部會議等機密內容都被傳輸到了海外。但從3月11日起,在認識到需要跟上技術進步后,三星的DS部門批準了使用GPT,并特別在公告中提醒員工 “注意公司內部信息安全,不要輸入敏感內容”。三星公司在知悉這些事件后,緊急采取了一系列緩解措施,例如將上傳內容限制在1024字節以內等。三星目前正向事故相關職員調查原委,必要時給予處罰。
    利用這一上下文,RASP能夠就應用安全做出明智決策,及時遏阻漏洞利用造成損害。因此,真正的RASP應該是零誤報和低延遲的,能夠即時提升性能。真正的RASP需要一系列不可改變的規則,這些規則靠上下文洞悉何時引入了新漏洞,并據此采取相應的措施。RASP出錯的三個方面1、吠犬問題:大多數警報都是誤報WAF的問題在于運行在網絡層,作為應用執行指標而言滯后了。相反,真正的RASP平臺在運行時執行實際保護。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类