先說一下大多數新手的情況:就是對著視頻敲 Java 專案,其中遇到的 BUG 還能解決,但就是每次敲完一個專案,就感覺很空虛,專案里面的知識點感覺懂了但又好像沒懂,應該怎樣才能掌握一個專案所用的知識點呢?
先分享一位好朋友丁威的經驗吧,他是《RocketMQ技術內幕》一書的作者,他在嘗試學習 RocketMQ 之前未曾接觸過訊息中間件,但硬是通過自己提煉的學習方法,最終成為 RocketMQ 社區的優秀布道師,這讓他有了一個非常亮眼的標簽,極大提高了職場競爭力,
他的總結有以下四點:
- 了解這個專案的使用場景、以及架構設計中將承擔的責任,
- 尋找官方檔案,從整體上把握這個專案的設計理念,
- 搭建自己的開發除錯環境,運行官方提供 Demo 示例,為后續深入研究打下基礎,
- 先主干流程再分支流程,注意切割,逐個擊破,
我認為是非常有道理的,記得我一開始參加作業的時候,拿到領導安排的專案后,非常懵逼,完全不知道該如何下手,不知道自己該干嘛,去問領導,領導說沒時間,要我自己先研究研究,研究什么呢?
一開始當然毫無頭緒,后面就慢慢琢磨出來了一點小心得,
先從專案的需求檔案下手,先了解這個專案是干嘛的,了解個大概,就不慌了,然后把這個專案的原始碼在本地跑起來,“跑起來”,說著簡單,真正做的時候還是挺難的,我記得我當時跑第一個專案差不多用了一周多的時間,因為我的開發環境和專案要求的有一些不一樣,就導致出了很多問題,
我印象很深刻的問題有兩個,第一個就是亂碼了,類似下圖這種,

第二個就是編譯出錯,原因很簡單,JDK 的版本不一樣,
這兩個問題雖然簡單,但特別常見,真的,新手基本上都會遇到,一開始遇到的時候是很慌的,因為原始碼肯定不會有問題,有問題的肯定是自己的開發環境,
折騰了一周多的時間,專案終于跑起來了,
我讓自己體驗了一把測驗的角色,就是把能操作的按鈕全點一遍,體驗一下專案哪些已經開發完成了,哪些還沒有,沒用多久,我就測出來了兩三個新 bug,基本上都是一些非常規操作引起的,雖然我沒能解決,但報告給領導后,領導還是很驚訝的,他看我的小眼神,多少有點看吳下阿蒙的感覺,“小伙子,有長進啊!”
然后,我并沒有著急去開發領導安排給我的任務,而是去看同事已經完成的代碼,當然是帶著問題去看的,為什么他會這么寫?這么寫的好處是什么?如果換做是我,我會怎么實作?這其中的差別是我自己考慮不周嗎?
當然了,我不會看太細致,因為有些內容超出了我的技術范圍,我看不懂的,只能是“走馬觀花”,大致看明白是什么意思就“得過且過”了,
這里提醒大家一點的是,千萬不要陷入技術細節,尤其是一開始做專案的時候,因為自己不了解業務,再加上技術水平可能達不到,研究技術細節很容易就陣亡了,
另外一點就是,基本功一定要扎實,不要連整體的代碼脈絡都看不懂,那樣就很吃力了,我這里有一份 GitHub 上星標 115k+ 的 Java 教程,里面涵蓋了 Java 所有的知識點,包括 Java 語法、Java 集合框架、Java IO、Java 并發編程和 Java 虛擬機,內容不多,只講重點,
GitHub 星標 115k+的 Java 教程,超級硬核!
盡量花一點時間鞏固一下基礎,不要讓自己太被動,遇到自己生疏的知識點,就主動去查一下,
看原始碼的時候,自己加一些日志啊,加一些斷點啊,去跑一跑,有時候,不加斷點,只是去看原始碼很可能會忽略掉一些關鍵的技術細節,因為 Java 是多型的,有些地方看原始碼只能看到類和類之間的層次關系,卻看不到子類是怎么重寫父類方法的,或者實作類是怎么實作介面的,通過除錯就可以看的很明白,
還有一些分支陳述句啊,如果只是看原始碼可能不明白進入這個分支的條件是什么,還有一些比較關鍵的技術細節啊,只看原始碼可能懵懵懂懂的,跟著斷點一步步地深入可能就全明白了,
舉個例子,拿 StringBuilder 的 append() 方法來說吧,StringBuilder 的內部是通過字符陣列(Java 8)實作的, 如果新添加的字串長度超出了陣列的長度,是要進行擴容的,加了斷點后,遇到需要擴容的情況就能看到 JDK 的內部是怎么來進行擴容的啦,如下圖所示,

一般來說,專案都是比較龐大的,代碼會比較多,這時候最好只關注一個模塊,就是自己通過需求檔案,或者閱讀原始碼了解最多的模塊,盡量把這個模塊的整體邏輯給吃透了,如果領導恰好安排你做的這個模塊的業務代碼,那你的上手難度就大大降低了!
再總結一下:
- 拿到專案后,不要著急動手,先看檔案,尤其是需求檔案,
- 把專案的原始碼在本地跑起來,
- 做一些測驗,看能不能測出一些邊界的 bug,
- 關注一個模塊,去研究一下原始碼,但不要過于深究技術細節,
我再給大家推薦兩個優秀的 Java 開源專案吧,如果你還沒有參加作業,可以拿這兩個專案作為練手專案,
- SpringBoot 完整電商系統 Mall:包括前臺商城系統及后臺管理系統,基于 SpringBoot+MyBatis 實作,
- vhr:微人事是一個前后端分離的人力資源管理系統,專案采用 SpringBoot+Vue 開發,
我之前做的一個電商專案還用了 mall 作為基層的架構!mall 的學習教程非常全面,作者直接做了一個在線的網站,基本上用的技術都講述得特別明白!

vhr 目前在 GitHub 上已經有 20.8k 的 star,屬于很強的那種了,
后端技術堆疊
- Spring Boot
- Spring Security
- MyBatis
- MySQL
- Redis
- RabbitMQ
- Spring Cache
- WebSocket
…
前端技術堆疊
- Vue
- ElementUI
- axios
- vue-router
- Vuex
- WebSocket
- vue-cli4
…
基本上主流的前后端技術都用到了,作者為初學者特意錄了專案的部署視頻教程,很貼心~
檔案寫得特別全,我簡單列舉下,
- 權限資料庫設計
- 服務端環境搭建
- 動態處理角色和資源的關系
- 密碼加密并加鹽
- 服務端例外的統一處理
- axios 請求封裝,請求例外統一處理
- 將請求方法掛到Vue上
- 登錄狀態的保存
- 登錄成功后動態加載組件
- 角色資源關系管理
- 用戶角色關系管理
基本上每個知識點都有對應的檔案,檔案齊全的話,對吃透專案是極好的幫助,
嗯,最后強調一點,大家在做練手專案的時候,一定記得寫注釋,我在很多地方看到這樣一個觀點,“請停止寫注釋,因為只有爛的代碼才需要注釋,”這個觀點非常巧妙,它讓我想起了孟子的一句話,“楊氏為我,是無君也;墨氏兼愛,是無父也,無父無君,是禽獸也,”
Java 原始碼的作者絕對是這個世界上最優秀的程式員,連他們都寫注釋,那些聲稱“請停止寫注釋”的號召者是不是要啪啪啪地打臉,直到打腫為止,
拿 String 來說吧,要了解這個類,直接看類的注釋就足夠了,寫得非常詳細,

一個優秀的 Java 專案也應該是這樣的,注釋必須到位,不然別人怎么吃透,吃不透的,只能說一句,Java 原始碼的作者,yyds(陰陽大師,hhh),

我是二哥呀,贊一個可好?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/286940.html
標籤:其他
上一篇:RuoYI-Cloud后端專案修改為自己的專案從0搭建程序(二次開發搭建)
下一篇:回爐重造的C之指標+結構體
