1. 程式人生 > 實用技巧 >python爬蟲容易學嗎,到底要學些什麼東西?

python爬蟲容易學嗎,到底要學些什麼東西?

博主先交代下寫這篇部落格的背景,由於博主最近接手的專案是一個第三方的專案,原始碼質量看上去很是令人頭痛,程式碼基本不分層,從controller層開始堆業務邏輯,service層只是封裝一個直接呼叫dao層的介面,所有的業務邏輯都堆在controller。而且大量的if else巢狀,加上for迴圈的花括號,看的人想打人。仔細一看還有更多的"surprise",for迴圈裡面操作資料庫,全量查詢不分頁,方法最外層加鎖,結果就是使用者卡的苦不堪言,我去後臺查了下介面耗時日誌,最長的達到驚人的十多秒!還好是內部系統,不然使用者早就跑光了!感覺就像是大學生寫的程式碼一樣,沒有規範可言。所以趁最近業務需求不是很多,向老闆提出要做程式碼重構,不然這程式碼真的沒法維護。

我主要從下面幾個方面對程式碼進行重構:

一、包名、類名、變數、常量的命名規範

  詳細的命名規範我就不囉嗦了,建議參考阿里程式碼規範,網上可以下載下來慢慢看,最重要的是工作當中要遵守,知易行難。

二、自動注入規範

  我看大部分人都是用屬性注入,用起來很方便,也很好理解。如下

@Autowired
private AbbService abbService;
細心的同學會發現idea上面會出現警告:Field injection is not recommended,不推薦屬性注入。這是因為spring4.0之後已經不推薦使用屬性注入的方式了,因為不能有效的指明依賴。
建議使用setter注入。
private AbbService abbService;
@Autowired
public void setAbbService(AbbService abbService){
  this.abbService = abbService;
}

三、程式碼結構規範

  後端最起碼要遵守三層規範,業務邏輯放在service層,如果是有的多資料來源,service層不好放業務邏輯,有必要多加一層manager層處理業務邏輯,manager層調service層,service層再呼叫dao層。

  多處使用的程式碼封裝成工具類或者介面,理論上程式碼行數超過一屏就應該封裝成方法。如果大段程式碼都是賦值操作,那麼封裝成一個方法即使行數超過一屏也沒啥關係,因為大家知道是賦值也不會去細看,不影響閱讀。大家看情況靈活運用,保證程式碼看上去舒服就可以。

  現在大多數專案都用springboot微服務了,jdk也都升到8及其以上,建議大家在使用迴圈的時候儘量用stream,不然你升到8幹啥呢對吧。之前博主面試的時候就被問到用了jdk8的哪些新特性,如果你啥都沒用就傻了。很多新特效能用的儘量去用,stream只是jdk新特性之一,stream用習慣了寫程式碼真的不要太爽。

四、DB操作規範

  for迴圈裡面嚴禁執行db操作,嚴重影響效能,資料量大的時候很有可能把cpu打滿了。

  for迴圈裡面查詢、插入、更新資料,都有批量的解決方案,查詢用in語句一次查詢,插入和更新<foreach>插入和更新。如果資料量大一定要分頁查詢,其實超過幾百上千條基本都是因為業務上設計不合理,可以加時間或者其他條件篩選,實在要查幾百上千條資料一定要分頁查詢。

總結:

  博主大部分時間都是在優化DB操作規範,大部分耗時的介面也都是因為不規範的DB操作導致的。一般後臺介面用時超過1-2秒基本都有優化空間,大部分介面響應時間應該控制在1秒內。上述那些超過10秒的介面在優化之後,也可以在一秒之內返回。最後:誰都有接手別人程式碼的時候,如果你接手的程式碼寫的很爛,那麼希望經過你手之後,程式碼執行效率變得更快,程式碼看上去更優雅,這樣你的價值也就提現出來了。在工作當中一定要嚴格要求自己,才能更好的提高自己,遇見更優秀的自己。為了老闆的美好幸福生活,加油吧打工人。