先說一下大多數新手的狀況:就是對着視頻敲 Java 項目,其中遇到的 BUG 還能解決,但就是每次敲完一個項目,就感受很空虛,項目裏面的知識點感受懂了但又好像沒懂,應該怎樣才能掌握一個項目所用的知識點呢?前端
先分享一位好朋友丁威的經驗吧,他是《RocketMQ技術內幕》一書的做者。他在嘗試學習 RocketMQ 以前不曾接觸過消息中間件,但硬是經過本身提煉的學習方法,最終成爲 RocketMQ 社區的優秀佈道師。這讓他有了一個很是亮眼的標籤,極大提升了職場競爭力。vue
他的總結有如下四點:ios
我認爲是很是有道理的。記得我一開始參加工做的時候,拿到領導安排的項目後,很是懵逼,徹底不知道該如何下手,不知道本身該幹嗎。去問領導,領導說沒時間,要我本身先研究研究,研究什麼呢?程序員
一開始固然毫無頭緒,後面就慢慢琢磨出來了一點當心得。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 的內部是怎麼來進行擴容的啦,以下圖所示。
通常來講,項目都是比較龐大的,代碼會比較多,這時候最好只關注一個模塊,就是本身經過需求文檔,或者閱讀源碼瞭解最多的模塊,儘可能把這個模塊的總體邏輯給吃透了,若是領導剛好安排你作的這個模塊的業務代碼,那你的上手難度就大大下降了!
再總結一下:
我再給你們推薦兩個優秀的 Java 開源項目吧,若是你尚未參加工做,能夠拿這兩個項目做爲練手項目。
我以前作的一個電商項目還用了 mall 做爲基層的架構!mall 的學習教程很是全面,做者直接作了一個在線的網站,基本上用的技術都講述得特別明白!
vhr 目前在 GitHub 上已經有 20.8k 的 star,屬於很強的那種了。
後端技術棧
...
前端技術棧
...
基本上主流的先後端技術都用到了。做者爲初學者特地錄了項目的部署視頻教程,很貼心~
文檔寫得特別全,我簡單列舉下。
基本上每一個知識點都有對應的文檔,文檔齊全的話,對吃透項目是極好的幫助。
嗯,最後強調一點,你們在作練手項目的時候,必定記得寫註釋。我在不少地方看到這樣一個觀點,「請中止寫註釋,由於只有爛的代碼才須要註釋。」這個觀點很是巧妙,它讓我想起了孟子的一句話,「楊氏爲我,是無君也;墨氏兼愛,是無父也。無父無君,是禽獸也。」
Java 源碼的做者絕對是這個世界上最優秀的程序員,連他們都寫註釋,那些聲稱「請中止寫註釋」的號召者是否是要啪啪啪地打臉,直到打腫爲止。
拿 String 來講吧,要了解這個類,直接看類的註釋就足夠了,寫得很是詳細。
一個優秀的 Java 項目也應該是這樣的,註釋必須到位,否則別人怎麼吃透,吃不透的。只能說一句,Java 源碼的做者,yyds(陰陽大師,hhh)。
我是二哥呀,贊一個可好?