主頁 > 軟體設計 > 炸裂!手摸手教你如何吃透一個 Java 專案,yyds

炸裂!手摸手教你如何吃透一個 Java 專案,yyds

2021-06-13 07:13:24 軟體設計

先說一下大多數新手的情況:就是對著視頻敲 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之指標+結構體

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more