如何吃透一個 Java 項目?

先說一下大多數新手的狀況:就是對着視頻敲 Java 項目,其中遇到的 BUG 還能解決,但就是每次敲完一個項目,就感受很空虛,項目裏面的知識點感受懂了但又好像沒懂,應該怎樣才能掌握一個項目所用的知識點呢?前端

先分享一位好朋友丁威的經驗吧,他是《RocketMQ技術內幕》一書的做者。他在嘗試學習 RocketMQ 以前不曾接觸過消息中間件,但硬是經過本身提煉的學習方法,最終成爲 RocketMQ 社區的優秀佈道師。這讓他有了一個很是亮眼的標籤,極大提升了職場競爭力。vue

他的總結有如下四點:ios

  • 瞭解這個項目的使用場景、以及架構設計中將承擔的責任。
  • 尋找官方文檔,從總體上把握這個項目的設計理念。
  • 搭建本身的開發調試環境,運行官方提供 Demo 示例,爲後續深刻研究打下基礎。
  • 先主幹流程再分支流程,注意切割,逐個擊破。

我認爲是很是有道理的。記得我一開始參加工做的時候,拿到領導安排的項目後,很是懵逼,徹底不知道該如何下手,不知道本身該幹嗎。去問領導,領導說沒時間,要我本身先研究研究,研究什麼呢?程序員

一開始固然毫無頭緒,後面就慢慢琢磨出來了一點當心得。vue-router

先從項目的需求文檔下手,先了解這個項目是幹嗎的,瞭解個大概,就不慌了。而後把這個項目的源碼在本地跑起來,「跑起來」,說着簡單,真正作的時候仍是挺難的,我記得我當時跑第一個項目差很少用了一週多的時間,由於個人開發環境和項目要求的有一些不同,就致使出了不少問題。vue-cli

我印象很深入的問題有兩個,第一個就是亂碼了,相似下圖這種。數據庫

第二個就是編譯出錯,緣由很簡單,JDK 的版本不同。編程

這兩個問題雖然簡單,但特別常見,真的,新手基本上都會遇到。一開始遇到的時候是很慌的,由於源碼確定不會有問題,有問題的確定是本身的開發環境。axios

折騰了一週多的時間,項目終於跑起來了。後端

我讓本身體驗了一把測試的角色,就是把能操做的按鈕全點一遍,體驗一下項目哪些已經開發完成了,哪些尚未。沒用多久,我就測出來了兩三個新 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)。

我是二哥呀,贊一個可好?

相關文章
相關標籤/搜索