本身學習 Java 將近兩年了,本身水平還很淺,妄不敢說這篇文章是學習 Java 的金言。也是藉着老師讓我給學弟學妹們分享本身學習 Java 的經驗的機會,同時也是對本身學習 Java 的總結和反思,大佬們不喜勿噴。前端
下面我就從五個方面來談。java
我是從大二下學期開始學習 Java 的,那時咱們尚未上 Java 這門課,因此就自學嘍。也正好遇上找到了指導老師,老師就給我一個練手的項目,仿學校的醫院管理系統。原程序是 C++ 寫的,用的 MFC,Win10 上面跑不了,沒法看到實際效果,我就看着文檔中系統截圖思考功能。在此以前只有一點 PHP Web 方面的經驗,搞清作這個系統所需的技術後,我就開始學習相關的知識,Java 基礎、Java Swing 界面編程,MySQL 數據庫。一個學期邊學習邊寫這個系統,那時候連 MVC 結構都不知道,也不會用任何的框架,就用了一個鏈接 MySQL 的 jar 包。雖然整個系統很 「精心」 的設計,但系統結構劃分和代碼仍是一團糟。憑藉着百度和琢磨,我仍是寫出來系統的大部分功能,固然 BUG 也是有的,這個系統就到此爲止了,後來電腦重裝系統,數據庫文件沒備份,系統就只剩個界面了,有時間還想重寫一下這個系統,畢竟這是我 Java 夢開始的系統。git
大二暑假,指導老師讓我模仿一個學長畢業設計作的實驗室管理系統,C# 寫的,.NET 平臺。有一星半點 Web 基礎的我,學習了一個星期的 Java Web(準確的說是 JSP),就開始寫這個系統了,當初還找了幾我的組了個團隊,但後來仍是我一我的來寫。前端到後端,界面到數據庫設計,都是不小的考驗,不用說了,界面作的醜,代碼也是又臭又長。那時不懂界面重用,大量重複的代碼,沒有用任何框架,總共擼了有一萬多行吧😭。Java Web 的基礎都沒打好,後來我看書又從新學習了一遍 Java Web。這個系統好像還躺在個人電腦裏,可是再也沒打開過了。這個項目真的感受很失敗,都想放棄學習 Java Web了,後來老師開導我,我開始學習框架。程序員
大三上學期,我開始學習 SSH 框架,一邊看視頻,一邊本身實際操做,還寫了十幾篇SSH框架的學習筆記,自認爲學的還不錯,寫個簡單的管理系統是沒什麼問題了,這時搭建框架仍是手動導入相關的 jar 包,還不會用 Maven。在老師的建議下,我申請了學校的創業創新項目,名字起的還很高大上,《跨平臺的開放式實驗室管理系統》,項目時間爲兩年,本身做爲項目的負責人,仍是以前的那些隊員。這學期後段忙着項目申請書和項目開題的事,項目沒真正開始寫,仍是調查研究階段,咱們查閱了大量的資料文獻,我也有了一個大體的思路,但同時也發現了這個系統的難點所在。咱們要作的這個系統當時寫的是面向全校的,人員的權限就是一個大問題,並非簡單的增刪改查這麼簡單,系統要可以靈活的分配權限,權限對應的纔是功能。還有一個實驗預定功能,不知道是咱們想的太複雜的,仍是怎麼滴,沒有一點頭緒,在 GitHub 上也找了一些相關的項目,運行測試後,都沒有實際用途,達不到要求。這個項目就這樣停滯了,直到大三下學期。面試
做爲負責人的我,大三下學期剛開學就不敢有絲毫鬆懈,全力研究系統中的權限控制,我先是在網上找資料,發現能夠框架作(spring security、shiro),但以爲學框架太費時間,何況本身用的是 SSH 框架,框架也只是入門,框架太多,本身也駕馭不住。本身當時也瞭解到利用 RBAC 模型能夠作權限控制,數據庫是能設計出來,可是界面權限樹搞不定呀,留下了 JS 和 Jquery 薄弱的淚水。終於功夫不負有心人,我找到了一個 OA 系統的視頻,視頻中用的框架也是 SSH,系統中的權限控制也和咱們系統中的相似,心中一陣竊喜,可是視頻真的有些老了,09 年的,用的技術就更老了。咱們系統前端頁面用的 Bootstrap 框架,爲了體現出系統的跨平臺性,沒用 EasyUI 這類簡單易用的框架,項目的技術選型都是我來作的,我當時是以爲 EasyUI 寫的界面不靈活很差看😔,固然也有懶得再用框架增長負擔。當時 JSP 和 Bootstrap 的結合,我都想了很久,唉~,研究了一個月的視頻,跟着視頻作出了系統權限控制功能,還寫了篇博客,發給老師看,老師說這個放到項目中就能夠發篇論文了,我開始把權限控制移植到咱們的系統中,這時才以爲框架真香,在 GitHub 上找了一個後臺管理系統的框架,也是基於 Bootstrap的,裏面使用的大量的插件,我研究了一天,修修改改用到咱們的項目中。在權限控制移植到咱們的系統中,我又發現了新的問題,系統中還有分院系管理的限制,不一樣的院系確定只能管理本身本院系的事情,還須要在原來 RBAC 模型數據表的基礎上添加院系表和相關的字段,這一改,傷筋動骨啊,半個月我都在設計和寫代碼,終於算是完成了系統的權限控制功能。又忙了一個月,不斷的修改論文,以前還覺得代碼寫出來就懂了,論文的邏輯寫的很殘缺,在老師的指導下,邏輯才逐漸清晰,這時中文版的論文才算是落地,後面就把論文改爲英文的,程序界面也須要改,最終才把論文發表。你可能會問,團隊的其餘的人?漸漸這個項目作成了個人項目,而不是咱們的項目,系統的設計到具體的編碼,前端到後端,從設計師到苦逼碼農,這其中的滋味只有我一人知道。這期間我也在想系統的架構,咱們用的仍是 JSP,這就須要寫前端不只要會 HTML 和 CSS,還要會 JSP 的標籤,展現數據用的是 JSP 的邏輯標籤呀。這學期我也學習了微信小程序開發,和一個老師辦公室的小夥伴合做了一個微信小程序,兩我的一個前端一個後端(我),前端就很少說了,看微信小程序的官方文檔,WXML,WXSS,JS,後端我考慮後用的是 PHP,沒用框架,由於不會也沒學,兩我的折騰了一個月仍是搞出來上線了。後來我一想,咱們作微信小程序採用的不就是先後端分離,先後端之間用 JSON 傳輸數據,合做開發時,我做爲後端感受很爽,由於程序功能不復雜,數據庫也不難,我想若是咱們這個系統中也作成先後端分離,精力就能夠更集中開發本身的那部分,本身精力真的有限,先後端都寫,結果都玩不轉。本身思考了不少,把 Java Web 又從新看了一篇,進行了一些知識總結,就這樣這個系統開發了一半,問題就只剩下實驗預定了。算法
如今是大四上學期,我沒有接着開發這個系統,而是轉向了看書,由於也要準備校招和麪試了。以前老是疲於作開發,書讀得不多,都是爲了完成程序中的功能,書是看不進去的。在看書中,我纔看到本身的知識是那麼脆弱,不少都是隻動個皮毛,根本沒有深刻進去,因而我開始惡啃書籍,《深刻理解 Java 虛擬機》,並作了一些筆記。以前老師給的李剛老師的《瘋狂 Java 講義》又拿出來看了看,以前看以爲寫的很好,由於 Java 相關的東西基本都講到了,包括一些高級特性。如今看已經知足不了本身的求知慾了,不少東西講的仍是太淺了,也正是這時我才感受到 Java 真是太深了。因而對於一些類,我開始看源碼,看不懂的就看網上的解讀,對於概念性的知識有了全新的認識,並寫了相應的筆記。spring
個人我的經歷,看起來是邊學邊作,可是對於這種被動的作,被動的學。個人基礎打的並不牢固,如今也是惡補,看不少的書。往者不可諫,來者猶可追,如今能作的就是把以前碎片化的知識概括成系統,也是不斷的寫筆記整理總結。數據庫
我學習了不止一門語言,如今是把 Java 做爲個人主語言,結合我的的經歷,我以爲學習 Java 仍是要分階段學習的。我以爲最好的入門方式,就是買一本相對基礎但有比較系統的書(不要求深刻,每一個知識點都有例子就能夠)結合着視頻(推薦培訓結構的視頻)來看,在學習的過程當中,把書中的每一個例子最好都敲一遍,不要拿着源碼運行一遍就完事了,必定要手敲,既能夠熟悉語言又能夠提升編碼速度,熟能生巧。入門後想要提升,就要多思考,對問題進行總結,好比 Java中的抽象類和接口有什麼區別,這個階段能夠編一些簡單的管理系統,寫一個就能夠,功能不要求複雜,常常看看 java 的 API 手冊,英文好的直接看英文,英文很差的能夠中英文對照着看,由於有些地方翻譯的真的很差,英文閱讀能力絕對值得提升,不是吹,外國人的文檔水平真是比咱們好太多。推薦書的話,我推薦《Effect Java》,《Java 編程思想》也是經典書籍,可是真的是有些舊了,書中的思想也不是一年半載能夠消化的,往後能夠再讀,因此這個階段不太推薦。進階階段,能夠深刻了解一下的 Java 的高級特性,總有一天你會發現框架都是來源於這些高級特性,也能夠閱讀一些常見類的源碼,如 Object、Math、String、ArrayList、HashMap 等等,這其中或許還要配合着設計模式和算法來看。更深刻的階段,設計模式、Java 虛擬機、算法與數據結構、Java 多線程編程。框架就很少說了,真的太多了,SSH、SSM、Spring等。如今的大數據時代,也對 Java 程序員提出了更高的要求,Hadoop、HSFD、Spark、HBASE、Zookeeper,分佈式架構,Spring Cloud 全家桶、阿里巴巴的 Dubbo 框架。固然疲於學框架,效果確定很差,每一個框架都是有應用場景的,這也是框架爲何出現的緣由。學習任何東西,都要先搞清楚哲學上的三個問題,這個是什麼?爲何要學習它?怎麼學習?第三個問題或許是學完後你才能回答,固然能夠看看別的答案。學習框架,不只僅是框架的用法,再深刻的話就是框架中的思想,框架中是怎麼實現思想的,這就要看框架的源碼了,再甚至本身寫一個框架。編程
我的經驗,我總結爲下面四條:小程序
上面四點經驗,有刻意總結的味道,但有些確實是本身在堅持的,如寫做。和老師的交流中,我常常能夠發現本身認識不足的地方,也有靈感閃現的時候,有時候也發現本身認爲的懂了居然說不出來。看書真的是種享受,如今才體會到,心太急是讀很差的書的,看書能夠帶着目的性或者是問題,但不要帶着浮躁。
由於面對的是沒有基礎的學弟學妹,大神大佬們能夠跳過😄。
Java IDE:
一、Eclipse:大多數人的第一款 Java IDE,優勢是開源免費,適合新手,代碼提示少,能夠多敲代碼,對電腦的性能要求也不是很高。缺點是,又少許的 Bug,對使用框架支持也不是很好,須要另外裝一些插件,固然不想裝,也能夠用 MyEclipse,可是不推薦,由於和下面的 IDE 相比,真的被秒爆。而且在查看源碼時,還須要手動導入源碼,這點很不爽。
二、Intellj IDEA:神同樣的 IDE 吧,優勢是商業收費,有教育優惠,學生老師均可以用學校的 edu 郵箱免費申請正版的專屬激活碼,代碼提示很全,對框架的支持也很好,自帶的反編譯功能使查看源碼很方便,用起來真的很爽。缺點就是太吃電腦性能了,對 CPU 和內存的要求比較高。
數據庫管理工具:
Navicat:支持多種數據庫,在大學你所能用到的數據庫這個軟件都是支持的,如 MySQL、Oracle、SQL Server、SQLite 等數據庫。
多個版本的 JDK:
個人電腦上是裝了 JDK六、JDK七、JDK八、JDK九、JDK10,不一樣的 JDK 固然仍是有區別的,這點你在看源碼時就會發現不一樣版本JDK的差別和改進了。Java9 引入的相似 Python 的交互式編程環境 JShell,能夠用於簡單的 Java 代碼測試,而不用再建立一個 Java 文件。因此你也能夠根據本身須要,安裝多個版本的 JDK,使用 Java 語言的新特性。
其餘工具:
Typora:Markdown 寫做工具,和市面上大多數分左右兩欄,一欄編寫一欄預覽不一樣,Typora 是單欄實時預覽,我比較喜歡這種方式。
Maven:當你用到框架時,你就會發現 Java 中的 jar 包不少,而 Maven 是項目搭建利器,以配置文件的方式自動下載和引入 jar 包,切換不一樣版本的框架很方便。
Git:版本管理工具,結合 GitHub 使用效果很棒!
見學弟學妹,空着手,我這個作學長確定也很差呀,因此我給學弟學妹們準備了 Java 學習大禮包,有書籍也有視頻,直接看圖吧。
這些資料我都放在了個人微信公衆號:」編程心路「 裏,你們能夠先關注領取完資料,再取消關注均可以,固然我會在這裏分享本身的 Java 總結筆記,感興趣的也能夠來看看。
後臺回覆 」Java書籍「、」Java視頻「 便可獲取上面所有的學習資料。
後臺回覆 」PPT「,也能夠獲得今天 Java 學習經驗分享 PPT 文稿。
也歡迎你和我交流 Java,除了微信公衆號 你能夠在這些地方找到我:
GitHub:weizhiwen
簡書:Wizey
掘金:Wizey
嗶哩嗶哩:Wizey
學習交流羣:558719561
很是感謝你能耐心的看完。