請問哪位好友有Java的學習心得分享一下,謝謝?

楊歡64252


題主你好,作為一個自學過來的Java開發希望以下一些個人的學習經驗可以幫到你。

學習路徑

在學習Java的相關知識時,必須先確立一條學習路徑,這方面可以參考國內互聯網公司的Java相關職位的技術要求。個人是一名純Java後端,我建議的學習路徑是Java基礎->Mysql->mybatis->Spring Boot->SpringCloud->Redis,這些都是目前國內大部分互聯網公司都會使用的技術棧。當對這些都有一定了解後個人建議可以去了解一些中間件或擴展知識,如消息中心(RocketMQ、Kafka)、Nginx、ELK(ElasticSearch+Logtash+Kibana)、Docker+Kubernetes+Rancher等。

學習方法

在學習期間一定要多敲代碼操作,個人建議再簡單的知識點最好到敲碼驗證一下,並在敲的過程中要思考清楚這個類/方法的主要作用是什麼,並在此之上思考在實際開發中可以用到什麼地方。

Java基礎

Java基礎類中常見的函數式接口Function、Predicate、Consumer、BiConsumer等,對這些接口有所瞭解的都知道Java的Stream、Map、Optional等類中有不少方法的參數都是這些函數式接口的,最常見的用法就是Map的foreach(BiConsumer)、List的foreach(Consumer)、List.stream()轉Stream後的一系列函數式操作,但從書籍/網站上了解到這些知識以一回事,有沒有實際測試過放到項目中又是另一回事。每次我自己去編碼驗證知識點成功後都會感到成就感,然後會思索能不能再擴展到其它地方使用。


以從List中提取屬性轉Map為例,最原生的做法就是將List轉Stream再函數式提取,如下:

Map<long> idNameMap = list.stream() .collect(Collectors.toMap(Classify::getId, Classify::getName));/<long>

後來覺得這樣需要兩行且需要轉Stream(每調用stream方法後進行換行可以提高流程轉換的可讀性),可不可以通過函數式編程簡化為一行並保證可讀性,於是我寫了一個工具類去完成這件事:

public static Map collectToMap(Collection list, Function keyGetter) { Map propertiesMap = new HashMap<>(list.size()); list.forEach(e -> propertiesMap.put(keyGetter.apply(e), e)); return propertiesMap; }

當時在這過程中用到的Function函數式接口也提高了我對函數式編程的理解,轉換的代碼也成了以下這個樣子:

Map<long> idMap = ListUtils.collectToMap(list,Classify::getId,Classify::getName);/<long>

雖然這不是什麼了不起的知識點與編碼,但實踐過程中帶來的提升遠非僅僅觀看帶來的提升高的。

框架/工具學習

所謂的框架只是基於基礎搭建達到某些功能的工具集合,使用合適的框架可以很好的避免重複造輪子耗費的成本,但對於框架的核心流程還是需要理解的,這樣才可以再實際開發中靈活去使用與擴展,所以個人推薦框架學習的方式是:瞭解其功能->功能的核心加載流程->嘗試根據自己的想法進行擴展。

以SpringBoot為例,SpringBoot為我們大大的縮減了項目搭建所需要的實際,其為大部分開發者都默認設置好了常用的配置值,當默認配置不是我們想要的時候我們只需在配置文件中更改即可。SpringBoot的自動化配置雖然可以省去不少麻煩,但如果我們有些想要的自動化配置SpringBoot沒有提供怎麼辦?那這時我們就需要了解SpringBoot自動化配置的加載流程,並據此方式自定義一套我們自己的自動化配置,所以在學習每個框架前我都會先了解該框架的核心是哪。個人當初在瞭解了SpringBoot的加載流程後也寫了全局參數校驗、Swagger自動化配置、自己使用的SpringBoot common框架,當自己想搭點功能測試時也可以快速的添加自己所需要的腳架依賴。

tips:SpringBoot的自動化配置流程是讀取classpath:META-INF/

spring.factories

(即resources/

spring.factories)文件中的配置類,然後再生成該配置類容器bean,並根據該類的掃描配置生成所需bean,配置文件的提示是根據META-INF/

spring-configuration-

metadata.json

中的內容進行提示的,可以在spring boot的各種集成框架下找到這些文件,spring-boot-autoconfigure依賴包中存放了自動化配置加載流程的功能類。

知識總結

當學習完一套技術知識點後,個人建議可以做一下總結,因為總結的過程是一個知識梳理的過程,可以加深對知識的理解,如我之前在使用RocketMQ作為消息中心編碼測試並項目發佈後也寫了一篇Spring Boot RocketMQ的使用方式與消息中心的架構設計及作用,在總結完後我是可以感到自己在這方面知識理解的提升的。

知識總結個人建議可以總結到筆記軟件(如目前個人的筆記用的是Boostnote)上或者博客上,既能方便日後回顧,又可添加自己的潛在價值(大公司是有一套根據博客點贊與瀏覽量篩選候選人的方式的,即使學歷不足,但只要你的博客展示出你強硬的技術水平,不用擔心找不到想要的面試機會)。

學習編程需要多加思考與編碼驗證,執行合一方可融會貫通,希望以上內容能對題主有用。


Wilson1995


思路決定出路人的學習是無止境的,只有不斷的學習,才能給自己更豐富,更開闊的思路,經過兩天的學習,讓我感悟到很多事情,都是有兩面性的,窮則變,變則通,出路在於變通,當目前的想法不能成功,說明你的想法有可能是錯的,或者是由於沒有改變自己的思路或者是懶於改變自己的思路或者是根本不想改變自己的思路,成功總有方法,想成功就要找方法,而思考是一切正確策略和方法的起源,思考其實就是問與答的過程,當你做一件事情沒有達到目標時,問自己一個為什麼?問自己問題出在了哪裡,然後自己給出答案,學會反思學會換位思考。“沒有不好的孩子,只有不好的教育”,例如,在課堂中,在一日生活中孩子沒有如我們所預想的那樣做一些正確的事情,不能達到我們所要求的目標時,我們只能對孩子著急嗎?與其對孩子發脾氣,不如改變自己的教育觀點理念,反思自己為什麼,不能懶於改變自己的思路,就要求別人去適應自己的思路,我們何不反思自己從事情的另一個角度開始著手,可能會有意外收穫,就像我們經常說的,給孩子機會孩子就會給你驚喜。從中,我還深刻的理解到一個道理,大凡世界上能做大事的人,都能把小事做細,做好,做好了每件小事逐漸積累就會發生質變,小事就會變成大事,任何一件小事只要你把它做規範了,做到位了,做透了,你就會從中發現機會,找到規律,從而成就大事,也就是說,一件事情我會做了,但做好了嗎,做精了嗎,一個人無論從事何種職業,都應該盡心盡責


在行走的駱駝


你好,我是鬍子哥,結合我的經驗給你回答這個問題。

Java是面向對象的一門語言,目前也是在各大互聯網行業和公司主要運用的一門語言。如何學習好,給你一下幾點建議:

  • 制定職業和學習目標
  • 加強基礎知識,熟讀和深入學習源碼
  • 架構思維設計與運用
  • 多向牛人請教,堅持寫技術Blog

一、制定職業和學習目標

你可能會問題為什麼只要制定職業目標和學習目標?有了目標就有了方向,有了航行的路線。在你走向遠方的路上不至於迷茫和焦慮,就像你現在提這個問題一樣,我猜你已經迷茫了。有了目標你會進步很快,走的很充實。制定個人的職業目標和企業的戰略規劃是一樣的,企業在大市場中如果沒有方向或者戰略制定失誤,想在市場上佔領一席之地是很艱難的。到了一定年齡你會失去了核心競爭力,得不償失,後悔莫及。

在前行的路上你要停下來進行深度思考,光靠努力勤奮是不行的為什麼要深度思考那?深度思考是為了保障你向正確的方向發展。努力勤奮是保障你在正確的方向上執行到位。建議你想清楚,避免瞎子摸象,在這個行業的職業路線還是比較成熟的,有跡可循。你可以按照下面的方法去想象自己的目標,如下:

1.未來三年我要在什麼行業達到什麼樣的目標?

2.達到這個目標需要具備什麼樣的能力?

3.目前我處於什麼樣的情況?差距在哪裡?

4.我應該如何做。

為什麼要提行業那,因為每個行業的業務有很大的不同,從垂直行業來說你更有核心競爭力。

二、加強基礎知識,熟讀和深入學習源碼

Java的基礎知識點博大精深,有了良好的底蘊基礎,你在解決一些複雜性的問題上會遊刃有餘。比如說性能優化。為什麼讓你熟讀和深入學習源代碼?源碼涉及的知識要點還是非常廣泛深入的。源碼當中的架構設計理念和實現非常優美,也覆蓋了很多設計模式。比如有類是線程安全的,也有線程不安全的,哪些適用於併發設計,哪些不適合,如果你不熟悉,你的代碼可能會一團糟。在Java裡面最重要的一塊是多線程併發編程,一定要重點掌握。熟讀和深度學習源碼的相關知識對於未來實現中間件架構、業務架構、代碼優化、原有組件擴展都會有很大的幫助,這也是未來發展的基礎。

需要讀哪些框架的代碼哪?比如Javasdk,Spring,SpringBoot,Mybatis等,Javasdk是最基礎也是最重要的.

三、架構思維設計與運用

架構設計思維和你的職業規劃也是一個道理,沒有掌握架構設計思維的人會永遠停留初級階段。架構設計為業務服務,是為了讓服務擴展性、穩定性、可靠性等有良好的支撐,服務走的更遠,支持更多業務的開展。整個系統得不到合理的架構設計規劃,隨著業務的增長,在不遠的將來系統就會變的臃腫,維護性差,冗餘不可複用,Bug多,運行過程可能會導致系統崩潰。
如何掌握架構設計的思維,給你推薦幾本書,架構之美、UML和模式應用、面向模式的軟件架構 (一共5卷,每卷都值得讀,分別是模式系統(卷1),併發和聯網對象模式(卷2),資源管理模式(卷3),分佈式計算的模式語言(卷4),模式與模式語言(卷5))、重構、設計模式、代碼大全。以下是分佈式架構、微服務架構、性能優化的相關知識點彙總希望能給你帶來更多方向和收穫,如圖。

四、多向牛人請教,堅持寫技術Blog

在工作中和平常的生活中多和牛人交流,他們的經驗可以說讓勝讀十年書。一定要保持求知若渴虛心若愚的心態。這樣人家才會教你。另外你可以到一些技術網站上去學習,一般他們都會有Blog,可以去參考學習。學習的網站有Github,CDSN,Stackoverflow,iteye(javaeye),infoq,ifeve(併發編程)等向你推薦下。也可以去多參加一些技術論壇,在技術論壇上,一些大公司的人會針對成熟的解決方案進行分享,同時也可以交朋友。

另外作為一個理工科的程序員來講,可能不願意去寫作。建議養成寫作的習慣,真的很好,知識的沉澱需要有一個承載的地方,它可以幫助你進一步思考和總結,對於代碼實現、架構、技術問題的解決能力都會有一個質的飛躍。當你回頭看的時候,你發現寫Blog真是一件好事情,非常有價值。

就回答到這裡吧,希望能幫到你,覺得不錯的話請給個贊或評論。另外還請您點擊關注,我會保持更多的內容分享,您的助力都是激勵我前行的動力,感謝🙏!


產品鬍子哥


我個人覺得吧,還是上海的java培訓課程比較好,

才能給自己更豐富,更開闊的思路,經過兩天的學習,讓我感悟到很多事情,都是有兩面性的,窮則變,變則通,出路在於變通,當目前的想法不能成功,說明你的想法有可能是錯的,或者是由於沒有改變自己的思路或者是懶於改變自己的思路或者是根本不想改變自己的思路,成功總有方法,想成功就要找方法,而思考是一切正確策略和方法的起源,思考其實就是問與答的過程,當你做一件事情沒有達到目標時,問自己一個為什麼?問自己問題出在了哪裡,然後自己給出答案,學會反思學會換位思考


分享到:


相關文章: