<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 4822字,需瀏覽 10分鐘

           ·

          2022-11-10 20:05

          ???? 關(guān)注后回復(fù)?“進群”?,拉你進程序員交流群 ????


              
                  
          作者: 國濤i

          來源:blog.csdn.net/weixin_44912855/article/details/120866194

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

          1. 定義配置文件信息

          有時候我們?yōu)榱私y(tǒng)一管理會把一些變量放到 yml 配置文件中

          例如

          6b317f876c60e64bf802dd9de8efea20.webp

          用 @ConfigurationProperties 代替 @Value

          使用方法

          定義對應(yīng)字段的實體

                
                  @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 注入, 構(gòu)造器注入, 注解注入),Spring 推薦我們使用構(gòu)造器的方式注入 Bean,我們來看看上段代碼編譯完之后的樣子

          5e0519259cf6ee7c8197f34151366874.webp

          RequiredArgsConstructor:lombok提供

          3.代碼模塊化

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

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

          8ff71c23e1a1cb0cae830656b669cf9e.webp

          4. 拋異常而不是返回

          在寫業(yè)務(wù)代碼的時候,經(jīng)常會根據(jù)不同的結(jié)果返回不同的信息,盡量減少返回,會顯得代碼比較亂。

          反例

          eaa4268fe4286310e70e38978be240db.webp

          正例

          bcb1fe217e886533fe0ebe064c466672.webp

          5. 減少不必要的db

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

          舉例子

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

          反例

          191903c0f004d87ca7c9ae11f6b5d026.webp

          正例

          0057dc104106c0544187d6618ed4170c.webp

          6. 不要返回 null

          反例

          e1a3b748895645708edd2363cc0595c2.webp

          正例

          652f68b1288555e6da0d0ed52ea780fe.webp

          別處調(diào)用方法時,避免不必要的空指針

          7. if else

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

          8. 減少controller業(yè)務(wù)代碼

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

          反例

          af215551410dd867128c4b61644f63aa.webp

          正例

          a49c6e1593879cfc6aec47bd7e06d22d.webp

          9. 利用好Idea

          目前為止市面上的企業(yè)基本都用idea作為開發(fā)工具了吧。

          舉一個小例子

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

          例如

          12dfdd2022483241d03f08e24abfeaa8.webp

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

          3aa6144bbca15aeaa18269fda07c7757.webp

          10. 閱讀源碼

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

          11. 設(shè)計模式

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

          12. 擁抱新知識

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

          13. 基礎(chǔ)問題

          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());
          ????}

          遞歸

          大數(shù)據(jù)量的遞歸時,避免在遞歸方法里new對象,可以試試把對象當(dāng)作方法參數(shù)進行傳遞使用

          注釋

          類 接口方法 注解 較復(fù)雜的方法 注釋都要寫而且要寫清楚, 有時候?qū)懽⑨尣皇墙o別人看的 而是給自己看的

          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;

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

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


          由此可見其復(fù)雜度為O1。

          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?面試題?資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

          6ca735455d50b884f5fa562664abf7c5.webp

          點擊??卡片,關(guān)注后回復(fù)【面試題】即可獲取

          在看點這里 0a44de3e94b82ea630ec4b313492f195.webp好文分享給更多人↓↓

          瀏覽 68
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄免费视频网站 | 女人18毛片90分钟 | 91乱子伦国产乱子伦 | 欧美久久一级片 | 国产曹逼性感美女视频 |