10年java架構師教你如何快速打好Java基礎?

從大學到如今,我使用Java已經將近10年,平常也帶實習生,還在公司內部作training,因此能夠分享下個人經驗,但願對你有用。

由於是在工做中培訓,就必然有兩個約束:實用、時間緊,所以就不能像大學那樣,把全部的知識點都面面俱到的講到。而只能挑基礎的,實用的,難理解的講。至於其餘邊邊角角的知識,就一筆帶過。一則沒有時間,二則不經常使用,再則既使講了,學生印象也不深入。總之一句話:「好鋼用在刀刃上」。前端

下面,就根據個人實踐,具體談下學習過程:java

1.基礎知識程序員

我學習java的時候,先是通讀了《Java編程思想》,而後是《Java核心技術》。當時這兩本書還不像如今這麼厚,而剛纔我把案頭的《Java核心技術》第9版翻了翻,上下兩冊已經1700多頁了,可想而知,若是要把它通讀一遍,且不說把全部的代碼都調通,就是當小說讀,估計也須要些時間。web

但我如今教學依然首推《Java核心技術》,主要是體系完整,實例多,可操做性強。但對初學者,我通常是隻講前6章,也就是下面的內容:面試

Java程序設計概述
Java程序設計環境
Java的基礎程序設計結構
對象與類
繼承
接口與內部類

就《Java核心技術》第9版來講,也就是到250頁爲止,加把勁,1個月拿下徹底沒問題。數據庫

由於你是自學,因此建議你必定要把其中的代碼都調通,課後的做業儘可能去作。除此以外,還有兩點特別重要:編程

#.學習筆記後端

由於你是自學,不像在企業中學了就可以實踐,印象天然特別深入。而自學由於沒有實踐的及時反饋,因此記筆記就顯得特別重要。由於記筆記就像寫做同樣,是整理思路的絕佳方法。同時學習筆記也是你之後開發,面試的絕好資料。瀏覽器

學習編程,人跟人是不同的,別人以爲難理解的東西,對你卻不必定;而你以爲難理解的東西,別人可能又會以爲特簡單。而學習筆記就是本身專有的「難點手冊」,有點像高考時的「錯題本」,之後不管是在面試前,仍是在平常工做中,隨時均可以翻出來看看,自是獲益匪淺。app

#.分門別類保存demo

學習筆記是很好的文字資料,但編程界有句話說的特別好,所謂「no code, no text」,意思就是說:千言萬語都沒有一段代碼來的實在。

以個人經驗,在你在學習的過程當中,就某個知識點,不管當時理解的多透徹,調試的多棒,只要時間一長,等到了實用的時候,確定會碰到各類各樣的問題,一些看似簡單的東西,此時死活就是調不通,正所謂人到事中迷。這個時候,若是你手頭恰有運行良好的demo,打開參考一下(甚至直接拷貝過來),問題天然迎刃而解。並且由於這些demo都是你親手調試出來,印象天然特別深入,一碰到問題,在腦子中自會馬上涌現。

因此說,在學習的過程,必定要善待你調通的demo,千萬不要用完了就扔,等後來碰到困難,想要用時卻找不到,追愧莫及。正確的作法就是把全部調通的demo,分門別類的保存起來,到時候查起來自是駕輕就熟。

人都說「書到用時方恨少」,其實代碼也是這樣,所謂「demo用時方恨少」。

2.Spring

目前在Java EE開發中,Spring已經成爲和Java核心庫同樣的基礎設施,因此說若是想成爲一個合格的Java程序員,Spring確定繞不開。另外一方面,若是掌握了Spring體系,Java基本上就算入門了,就有能力進行一些實用級的開發了。

但Spring自己也是日漸複雜,衍生項目愈來愈多,但最最核心的概念依舊是IOC和AOP,掌握了這兩個概念,再把Spring MVC學會,再學習其餘的衍生項目就會平滑不少。

同時,由於Spring自己就應用了許多優雅的設計理念,因此學習Spring的過程,也是增強Java基礎知識學習的過程。所以等你掌握了Spring,原來不少你理解不透徹的Java特性,此時就會恍然大悟,包括接口、抽象類等。

我學習Spring,讀的第一本書是《Spring實戰》,坦率的說,書很通常,但市面上比它好的書,我卻沒有遇到過。還有一本《Spring源碼深度解析》也不錯,對Spring的設計理念講的尤爲透徹,雖然整本書讀起來有些艱澀,但前幾章卻生動有趣,也是整本書的精華。因此建議你在學習Spring以前,先把該書的前幾章通讀一下,而後再回過頭來學習《Spring實戰》會順利不少。

以我經驗,要學透Spring,終極的方法仍是閱讀源碼(我當時就是這麼幹的),待把Spring的核心源碼通讀了,人就真的自由了(所謂無真相不自由),不只是對Spring,而是對整個Java體系。之後再遇到其餘框架,大概一眼就能看出其中的脈絡,所謂到了「看山不是山」的境界。但這都是後話,能夠做爲之後你努力的方向。

和學習Java基礎知識同樣,學習Spring也必定要記筆記,必定要分門別類保存demo。

老實說,Spring對初學者不算簡單,所以最好能有個好老師帶一下,不用太長時間,2個課時便可,而後就是在你遇到大的困難時,能及時的點撥下。

以個人經驗,要初步掌握Spring,大概須要1到1個半月的時間。

3.其餘知識

Spring是Java編程的基礎設施,但真要進入到實際項目的開發,還有些東西繞不過,包括 MySql,Mybatis,Redis,Servlet等,但若是你通過Spring的洗禮,這些東西相對就簡單多了,以個人經驗,1個月的時間足夠了。

4.實踐

學習Java,光學不練確定是不行的。但由於是自學,因此就沒有實際的產品讓你練手,但也沒有關係,誰大學尚未作過畢業設計呢?以個人經驗,你們最愛的「學生管理系統」依舊是個很好的練手系統。

別看「學生管理系統」邏輯簡單,但麻雀雖小五臟俱全,其中數據庫設計、Mybatis,Spring、SpringMVC,Servlet、Tomcat一個都不缺,絕對的練手好伴侶。

還有,雖然你的學習重點在Java,由於要作一個完整的demo,前端的配合確定少不了。所以就免少不了要學一些簡單的JS、HTML知識,但由於前端本就是個很大的topic,因此必定要控制好邊界,千萬不要顧此失彼。就「學生管理系統」來講,在前端上,只要實現一個包含table、textbox、button,能發送REST請求到server,能實現學生的「增刪改查」的簡單頁面便可。

做爲一個練手項目,目標就是把Java的主要技能點串起來,因此自不求盡善盡美(也不可能),因此1個月時間足夠了。

按照上面的過程,4個月的時間剛恰好。固然Java的體系是很龐大的,還有不少更高級的技能須要掌握,但不要着急,這些徹底能夠放到之後工做中邊用別學。

學習編程就是一個由混沌到有序的過程,因此你在學習過程當中,若是一時碰到理解不了的知識點,大可沒必要沮喪,更不要氣餒,這都是正常的不能再正常的事情了,不過是「人同此心,心同此理」的暫時而已。

在平常的教學中,我常把下面這句話送給學員們,今天也把它送給你:

「道路是曲折的,前途是光明的!」

祝你好運!

最後,主要談一下那些Java知識「已通過時」,不必繼續學習了。您也能夠把本文看作上篇文章的補充。

我判斷的依據主要有如下幾點:

實際開發可否用到?
是否有助於加深對技術的理解?
對面試是否有用?

JSP

JSP在實際開發中,主要是做爲MVC模型中的V(View)層出現的。固然,View層的渲染技術除了JSP,還有FreeMaker、Velocity等。

JSP做爲頁面模板,在後端經過MVC框架渲染成HMTL,而後再發送到客戶端(例如瀏覽器)來呈現。這也就是咱們常說的「先後端不分離」,「混合式」開發。

而當前,包括我所在的公司,以及大部分互聯網公司。要麼已經拋棄這種模式,要麼正在拋棄的路上,而轉向完全的「先後端分離」。

在「先後端分離」模式下,後端只負責提供服務接口(例如REST),而前端(例如HTML5)經過接口發送/獲取,呈現數據(例如JSON格式)。

這樣,在後端,原來的MVC框架,某種意義上已經演變爲MC框架。所以,與V(View)相關的一切模板技術都失去了學習的必要,其中固然也包括JSP。因此,後來的Java學習者,個人建議是:

「徹底能夠放棄對JSP的學習。」
Struts

在Java後端開發中,MVC模型仍是主流。而Struts做爲一個MVC框架,單從技術上來講,仍是很優秀的。

可是,如今Spring實在是太強勢了,愈來愈成爲Java開發中的「一站式」工具包,其中的一個利器就是Spring MVC。

望名知意,Spring MVC也是一個MVC框架。並且由於它是Spring的親兒子,天然和Spring契合的很是完美。

同時,在設計之初,Spring MVC就參照了其餘MVC框架的優缺點(包括Struts),因此用起來很是爽。所以,在MVC框架領域,Spring MVC大有一統天下的趨勢。

所以如今,不少公司,老的Struts項目還在維護。但新的項目開發,更多轉向了Spring MVC。所以,若是你是Java新手,正在學習中,個人建議是:

「不要再學習Struts了,從Spring MVC開始吧!」

Hibernate

Hibernate做爲老牌的OR映射框架,功能很是強大,涵蓋面很是廣。但這既是它的優勢,同時也成爲它的「負擔」,是開發人員「不能承受之重」。

Hibernate的設計初衷,是爲了最大程度的解放程序員,徹底隔離數據庫,實現完全的OR映射。程序員甚至能夠不寫一行SQL語句,單經過配置就能實現對數據庫的操做。

固然,爲了實現這個目標,Hibernate也設計的很是複雜、很是精巧。就不可避免的帶來如下反作用:

學習成本高
配置複雜
調優困難

前兩點不難理解,單說「調優困難」。

由於Hibernate的設計目標是完全的OR映射,完全的隔離SQL語句。但必然會帶來必定的性能損失。大部分狀況下,應用若是對性能不敏感,Hibernate也沒問題。但應用一旦對性能敏感,有SQL級別調優的需求,Hibernate的優勢反而成爲缺點。

雖然Hibernate也支持SQL級別的調優,但由於框架設計的過於複雜和精巧,這就須要開發人員對Hibernate理解的很是透徹,這就帶來了更高的學習成本。

而如今最流行的MyBatis,做爲一個「混合式」,輕量級OR映射框架,既繼承了Hibernate的優勢,同時也吸收了他的教訓。在支持配置的同時,又能接觸SQL,從而帶來了更多靈活性(包括調試、優化)。

當前,在實際開發中,Hibernate使用的愈來愈少了。你們更偏心MyBatis這種輕量級框架。因此,對後來學習者,個人建議是:

「不須要再學習Hibernate了,學MyBatis就夠了。」

Servlet(要精通)

固然,如今不會有任何公司,再用純粹的Servlet來時實現整個Web應用,而是轉向一些更高級的技術(例如各類MVC框架)。所以,會給人一種錯覺:Servlet已通過時,後來者就不須要再學習了。

在這裏,我能夠很是負責任的說:這種觀點是極端錯誤,極端不負責任的。

Servlet不只要學,並且要學深,學透。

當前,Servlet雖然再也不是一個主流web開發技術,但依然是Java Web開發技術的基礎,是Java Web容器的基石,是行業標準。而如今流行的各類MVC框架(包括SpringMVC),在最底層,仍是以 Servlet爲基礎的。

爲此,我畫了一個簡單的圖(不許確,會意便可):

clipboard.png

因此,若是你想要完全掌握某個MVC框架,則必須完全理解Servlet。

並且,Servlet做爲一個基礎設施。精通它,不只有助於理解各類MVC框架。即便Servlet自己,也有不少實用價值。

若是你深入理解了Servlet的生命週期,就能夠在底層作不少事情。譬如在Request進來的時候,進行攔截,進行權限的斷定。也能夠在Response發出的時候,進行攔截,統一檢查、統一附加。

因此,若是你正在學習Java,對Servlet,個人建議是:

「Servlet不只要學,並且要學深,學透。」

其餘

目前在國內,Java更可能是做爲web後端技術出現的。所以在實際學習中,不少技術就不符合「國情」,學習的現實意義不大。下面我就簡單列舉下。

1.Applet

做爲頁面插件技術,不用多說,連flash都快被淘汰了,更不管從未流行的applet。

2.Swing

做爲桌面UI框架。且不說自己設計的咋樣。現實開發中,我接觸的桌面應用,要麼用C++(例如MFC),要麼用C#(Winform、WPF)。因此,Swing就沒有學習的必要了。

3.JDBC

做爲較低層的數據庫基礎設施,JDBC被不少框架(例如MyBatis)支持。但在實際開發中,程序員即便不瞭解也無大礙。所以,雖然我不能建議你放棄JDBC學習,但若是你時間有限,徹底能夠把它的優先級排低一點。

4.XML

XML如今還在普遍應用。但做爲一個web數據傳輸格式,正在逐漸被JSON替代。因此,對Java後端學習來講,XML簡單瞭解便可。至於龐雜的XML操做API(例如XPath),徹底沒必要學習。未來真要用到,再查也不遲。

clipboard.png

相關文章
相關標籤/搜索