初學者如何吃透一個Java項目

不少初學者朋友在學習Java過程中,會對著視頻敲Java項目,其中遇到的BUG還能解決,但就是每次敲完一個項目,就感覺很空虛,項目里面的知識點感覺懂了但又好像沒懂
這些朋友應(yīng)該怎樣才能掌握一個項目所用的知識點呢?至少不至于過了一頭半個月就想不起來這個項目是什么東西呢?
1 剛開始運行項目的時候,你別根據(jù)視頻或現(xiàn)有代碼敲,而是得先運行通人家的代碼。
自己敲代碼的時候,會拘泥于API或模塊的細節(jié),多敲代碼后反而會一頭霧水。而且,你敲代碼的時候,很有可能因為敲錯一個地方而導致整個系統(tǒng)沒法運行,而且這種錯誤很難排查,往往你用了1天敲完整個系統(tǒng),跑不通,用了3天時間發(fā)現(xiàn)了10個敲錯了地方,改了還是跑不通,再用了5天,把所有問題都改了,才跑通,這樣就浪費至少1周時間了。
2 找項目,你得找一定能跑通的,比如star比較多的github項目,或者銷量比較好的視頻教程,或者干脆買書,書上的代碼經(jīng)過出版社加持,大多能跑通。否則你學了半天,找了一個跑不通的項目,再用半個月去調(diào)試,這樣浪費的時間更多了。
3 找到可以跑通的項目后,根據(jù)說明,優(yōu)先搭建環(huán)境,比如選對jdk版本,搭建好mysql數(shù)據(jù)庫環(huán)境,創(chuàng)建好MySQL的表,搭建好IDEA集成開發(fā)環(huán)境,必要的話再搭建好分布式組件,再通過pom.xml文件引入依賴包。環(huán)境好環(huán)境,再按提示跑系統(tǒng),可以這樣說,系統(tǒng)跑通了,這個項目你就成功一半了。
4 后面很關(guān)鍵,別先理解源碼的含義,先結(jié)合一個業(yè)務(wù)流程,跑通增刪改查的流程。請注意,別多跑業(yè)務(wù)流程,因為大多數(shù)業(yè)務(wù)的流程很相似,跑通一個就行了。
從界面上跑通一個流程后,你再去看代碼,先看從前端到后端再到數(shù)據(jù)庫的流程,看下請求經(jīng)過了哪些類,這些類是怎么處理了,最后是怎么落實到數(shù)據(jù)庫里的。
比如現(xiàn)在大多數(shù)Java項目,都是spring boot,從控制器到業(yè)務(wù)邏輯類再到repo層,外帶Spring Cloud Alibaba組件,或者nginx,netty,redis等組件。當你跑通一個流程后,你就知道請求怎么被控制器方法處理,控制器方法怎么做參數(shù)驗證,控制器方法如何調(diào)用業(yè)務(wù)方法,業(yè)務(wù)方法怎么通過JPA(或其它ORM)訪問數(shù)據(jù)庫??傊壤斫饬鞒蹋倮斫鈙prign cloud alibaba組件等枝干。
5 然后你再依樣畫葫蘆,多跑幾個業(yè)務(wù)流程,再結(jié)合代碼理解整體流程,這時,你可以關(guān)注些細節(jié),缺啥補啥。比如你不理解@Service注解,那你就去查,你不理解JPA連接數(shù)據(jù)庫的業(yè)務(wù)模型類或連接數(shù)據(jù)庫的Repo類的含義,那你也查,這樣你就通過運行效果,能對應(yīng)到具體的代碼上,然后能通過看代碼,理解相關(guān)語法細節(jié)。
請注意,一定是先流程再細節(jié),先框架再語法。當你理解流程的時候,一定別拘泥語法,遇到不懂的,先整體上理解,比如先理解,通過業(yè)務(wù)模型類能做JPA映射,在基礎(chǔ)上理解流程,等你理解好流程以后,再去通過業(yè)務(wù)模型類里面的@Table和@Entity等注解,理解做映射的細節(jié)步驟。
6 當你看明白流程和搞清楚流程中的細節(jié)語法以后,再去看衍生的組件。比如某個項目的重點是講Spring Boot整合spring cloud alibaba微服務(wù),那么你先通過看其它資料,知道Nacos,Sentinel等組件是干嘛的,再到項目中找到和Nacos和Sentinel的相關(guān)配置,比如Nacos體現(xiàn)在配置文件里,Sentinel體現(xiàn)在xx類和xx注解中。
而且,在項目中,一定是會把Nacos和Sentinel等組件體現(xiàn)到業(yè)務(wù)中,你可以通過業(yè)務(wù),很好地進一步理解Nacos和sentinel的用法和api。
用這種方法,你能很快理解項目的框架和其中的組件,這種方法的操作要點是先搭環(huán)境再運行通再結(jié)合業(yè)務(wù)看,看明白以后,你想怎么記就怎么記,用記事本什么都行
但我可以這樣說,由于這是學習項目,不是你參與開發(fā)過的商業(yè)項目,更不是公司用來掙錢的商業(yè)項目。所以你只是從人家的項目里理解技能,這樣對你提升技能的幫助,也是有限的。你產(chǎn)生似懂非懂的感覺,或者過了一兩個月后忘記項目細節(jié),這很正常,也無法避免,更無法緩解和改善。
但是后面你要繼續(xù)做的,絕不是自己動手從零開始實現(xiàn)這個項目,這也是很多初學者的誤區(qū),解釋下原因。
1 以初學者的能力,從零開始敲一個項目,難度太大,這樣做的結(jié)果大多是不了了之。
2 如果從零開始敲項目有效果,那么排查萬難硬著頭皮敲一個,也不是不可以,但公司里不是這樣開發(fā)項目的,公司里開發(fā)項目的方式一般是根據(jù)現(xiàn)有代碼改,而不是從零開始敲,所以自己敲一個項目,哪怕用了三個月半年時間敲出來,其實大概率是無用功。
3 有比從零開始敲項目更好的學習方法,所以從零敲項目沒必要。
這里說個觀點,通過學習項目學習,哪怕這個項目包含的技術(shù)要點再多,但充其量只是拾人牙慧??梢钥窟@種方式入門,但為了高效提升,或者提升到更高的程度,一定得參與商業(yè)項目開發(fā),即直接到公司里去做項目。
所以跑通一個Java項目后,如果你感覺把握不大,可以再去找個跑一下,但項目數(shù)量別操作3個。跑通后,趕緊去找實習細節(jié)。
1 如果是在校生,你直接問你們老師,或者是碩導博導,他們一般有外面公司的項目。你就和他們說,我想學習,能不能晚上周末或假期,到
你們教研室來學做項目,不收錢,只要讓我參與就行。
這樣老師有了免費勞力,一般都肯,然后你進項目組以后,爭取自己動手開發(fā)一個項目,說動手開發(fā)一個項目也不準確,應(yīng)該是按現(xiàn)有項目改出一個功能,這樣比你運行通5個項目都強?;蛘呖梢赃@樣說,你哪怕運行通,或者所謂吃透再多的項目,都比不上自己在商業(yè)項目中實現(xiàn)一個功能模塊。
2 如果你大三大四,快實習了,你就把你跑通的項目寫到簡歷中,然后出去找實習公司,當然中間是要背面試題。找實習公司也先別看錢,優(yōu)先獲取實踐機會,這樣等你畢業(yè)后,因為你的技能是通過真實項目掌握的,你一定遠比通過學習項目的其它人強。
3 如果你已經(jīng)工作,想要轉(zhuǎn)行到Java開發(fā),那也一樣,背面試題,簡歷上寫你運行通的Java項目,優(yōu)先找個能提供實踐的機會,必要的話,你找個培訓班,用錢買人家輔導服務(wù),用錢買人家推薦工作的服務(wù)。
最后做個總結(jié)。
1 如果大家只是運行人家的項目學習,通過人家的java項目學習,哪怕你把人家項目中的每個細節(jié)都掌握,面試找工作時,頂多得到的評價是“熟悉xx框架,熟悉xx語法”,但很難證明相關(guān)技能的項目開發(fā)經(jīng)驗,這樣找工作得碰運氣。不過這塊不能省,很多零基礎(chǔ)的學員都這樣入門的。
2 這里多說一句,如果你能結(jié)合你學習項目的需求,說明xx技術(shù)的用法,那倒有可能讓面試官感覺你有xx技術(shù)的項目實踐經(jīng)驗,這樣哪怕你之前沒做過真實項目,只要你結(jié)合項目說的技術(shù)到位,再背些面試題,還真有可能找到工作。
3 一定注意,你運行人家的項目,目的是為了找java工作,所以你在通過人家的項目學習時,不僅要做到理解其中的含義,更要把其中學到的技術(shù)用到找工作(或找更高級的工作)上,所以通過運行人家代碼學習時,一定別拘泥于只搞明白人家項目技術(shù)。