【學心法】如何從源碼角度體會作者的設計思想?

我們在做項目時候一般會遇到下面的問題:

  • 問題一是不知道如何去設計,比如剛入職場時,來一個需求需做概要設計,不知如何下手,不得不去看當前系統類似需求是如何設計的,然後仿照去設計。
  • 問題二是設計的時候,考慮問題不周全,相比職場新手,這類人對一個需求依靠自己的經驗已經能夠拿出一個概要設計,但是設計中經常會遺漏一些異常細節,比如使用多線程有界隊列執行任務,遇到機器宕機了,如果隊列裏面的任務不存盤的話,那麼機器下次啓動時候這些任務就丟失了。

對於這些問題,說到底主要是因爲經驗不夠,而經驗主要從項目實踐中積累,所以招聘單位一般都會限定工作時間大於 3 年,因爲這些人的項目經驗相對較豐富,項目中遇到的場景相對較多。工作經驗的積累來自於年限與實踐,然而看源碼可以擴展我們的思路,這是變相增加我們經驗的不錯方法。雖然不能短時間內通過時間積累經驗,但是可以通過學習開源框架、開源項目來獲取。

  • 另外進職場後一般都要先熟悉現有系統,如果有文檔還好,沒文檔的話就得自己去翻代碼研究。如果大家之前對閱讀源碼有經驗,那麼在研究新系統的代碼邏輯時就不會那麼費勁了。
  • 還有一點就是當你使用框架或者工具做開發時,如果你對它的實現有所瞭解,就能最大化的減少出故障的可能。比如併發隊列 ArrayBlockingQueue 裏面元素入隊有個 offer 和 put 方法,雖然某個時間點你知道使用 offer 方法時,當隊列滿了就會丟棄要入隊的元素,之後 offer 方法會返回 false,而不會阻塞當前線程;使用 put 方法時當隊列滿了,則會掛起當前線程,直到隊列有空閒元素,入隊成功後才返回。但是人是善忘的,當你一段時間不使用,就會忘記他們的區別,這時當你使用時,需進入 offer 和 put 的源碼看他們的實現。進入 offer 方法一看,哦,原來隊列滿後直接返回了 false;進入 put 方法一看,哦,原來隊列滿後,直接使用條件變量的 await 方法掛起了當前線程;知道了他們的區別,你就可以根據自己的需求來選擇了。

看源碼最大的好處是可以開闊思維,提升架構設計能力。有些東西僅靠書本和自己思考是很難學到的,必須通過看源碼,看別人如何設計,然後思考爲何這樣設計才能獲取。能力的提高不在於你寫了多少代碼,做了多少項目,而在於給你一個業務場景時,你是否能拿出幾種靠譜的解決方案,並且說出各自的優缺點。而如何才能拿出來,一來靠經驗,二來靠歸納總結,而看源碼可以快速增加你的經驗。

更多源碼級調優研習參考:https://docs.qq.com/doc/DQnVueFhibEF4eEha

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章