首先要明确後端包括哪些職業:dba(數據庫維護優化專家),developer(程序猿),architect(構架師),scrummaster及類似(敏捷開(kāi)發專家),projectmanager(産品狗),maintenance&itsupport(通訊和服務器相關),當然這隻是一(yī)個大(dà)緻的分(fēn)類,并沒有一(yī)個清晰的界限。
按程序猿内功而言:關系型數據庫,領域驅動設計(domain-drivendesign),設計模式designpattern,算法algorithm,面向對象編程oop(solid),線程安全,事件驅動,測試驅動開(kāi)發,依賴注入框架,等等。
對于初學java并且有志(zhì)于後端開(kāi)發的同學來說,需要重點關注以下(xià)幾個部分(fēn):
基礎:比如計算機系統、算法、編譯原理等等
web開(kāi)發:主要是web開(kāi)發相關的内容,包括html/css/js(前端頁面)、servlet/jsp(j2ee)以及mysql(數據庫)相關的知(zhī)識。它們的學習順序應該是從前到後,因此最先學習的應該是html/css/js(前端頁面)。
j2ee:你需要學習的是servlet/jsp(j2ee)部分(fēn),這部分(fēn)是java後端開(kāi)發必須非常精通的部分(fēn),因此這部分(fēn)是這三部分(fēn)中(zhōng)最需要花精力的。關于servlet/jsp部分(fēn)視頻(pín)的選擇,業界比較認可馬士兵的視頻(pín)。
最後一(yī)步,你需要學會使用數據庫,mysql是個不錯的入門選擇,而且java領域裏主流的關系型數據庫就是mysql。這部分(fēn)一(yī)般在你學習servlet/jsp的時候,就會接觸到的,其中(zhōng)的jdbc部分(fēn)就是數據庫相關的部分(fēn)。你不僅要學會使用jdbc操作數據庫,還要學會使用數據庫客戶端工(gōng)具,比如navicat,sqlyog,二選一(yī)即可。
開(kāi)發框架:目前比較主流的是ssm框架,即spring、springmvc、mybatis。你需要學會這三個框架的搭建,并用它們做出一(yī)個簡單的增删改查的web項目。你可以不理解那些配置都是什麽含義,以及爲什麽要這麽做,這些留着後面你去(qù)了解。但你一(yī)定要可以快速的利用它們三個搭建出一(yī)個web框架,你可以記錄下(xià)你第一(yī)次搭建的過程,相信我(wǒ),你一(yī)定會用到的。還要提一(yī)句的是,你在搭建ssm的過程中(zhōng),可能會經常接觸到一(yī)個叫maven的工(gōng)具。這個工(gōng)具也是你以後工(gōng)作當中(zhōng)幾乎是必須要使用的工(gōng)具,所以你在搭建ssm的過程中(zhōng),也可以順便了解一(yī)下(xià)maven的知(zhī)識。在你目前這個階段,你隻需要在網絡上了解一(yī)下(xià)maven基本的使用方法即可,一(yī)些高端的用法随着你工(gōng)作經驗的增加,會逐漸接觸到的。
因此,你需要去(qù)看一(yī)些jdk中(zhōng)的類的源碼,也包括你所使用的框架的源碼。這些源碼能看懂的前提是,你必須對設計模式非常了解。否則的話(huà),你看源碼的過程中(zhōng),永遠會有這樣那樣的疑問,這段代碼爲什麽要這麽寫?爲什麽要定義這個接口,它看起來好像很多餘?由此也可以看出,這些學習的過程是環環相扣的,如果你任何一(yī)個階段拉下(xià)來了,那麽你就真的跟不上了,或者說是一(yī)步慢(màn)步步慢(màn)。而且我(wǒ)很負責的告訴你,我(wǒ)在這個階段的時候,所學習的東西遠多于這裏所羅列出來的。
總而言之,這個階段,你需要做的是深入了解java底層和java類庫(比如并發那本書(shū)就是java并發包java.concurrent的内容),也就是jvm和jdk的相關内容。而且還要更深入的去(qù)了解你所使用的框架,方式比較推薦看源碼或者看官方文檔。
新手java應該怎麽學?
對于想要學習java的新手來說,以下(xià)是一(yī)些建議,希望能夠幫助你更好地入門和掌握這門編程語言。
建議你從基礎開(kāi)始學習。了解java的語法規則、關鍵字和常用類庫等基礎知(zhī)識。可以選擇一(yī)本權威且易懂的教材,或者參加一(yī)些在線課程、視頻(pín)教程等來進行學習。
理論知(zhī)識隻是入門的第一(yī)步,更重要的是實踐。通過編寫簡單的程序來鞏固所學的知(zhī)識,并且逐漸增加難度。可以嘗試解決一(yī)些實際問題,或者參與開(kāi)源項目,以提升編程能力。
多加練習是非常有必要的。可以通過刷題、參與編程競賽等方式來提高自己的編碼水平。這樣不僅能夠鍛煉自己的思維能力,還能夠讓你對java的各種語法和功能有更深入的理解。
除了自學外(wài),也可以考慮加入一(yī)些技術交流社區或者參加一(yī)些線下(xià)培訓班。這樣可以與其他程序員(yuán)進行交流、分(fēn)享經驗,并且獲取更多實戰經驗和技巧。
要不斷關注java的最新動态和發展趨勢。java是一(yī)門不斷更新的語言,随着時間的推移,會有新的功能、庫或者框架出現。要保持學習的熱情和求知(zhī)欲,及時了解并學習這些新的内容,以跟上時代的步伐。
堅持學習是非常重要的。學習編程需要時間和耐心,不一(yī)定能夠一(yī)蹴而就。在學習過程中(zhōng)可能會遇到困難和挫折,但不要氣餒。保持積極的态度,并且相信自己可以掌握這門語言。隻要堅持下(xià)去(qù),你一(yī)定能夠成爲一(yī)名優秀的java程序員(yuán)。
學習java需要掌握基礎知(zhī)識、進行實踐、多加練習、參與交流,并且保持堅持和積極的态度。希望以上建議對你有所幫助!
傳智播客-黑馬程序員(yuán)-java
每個人的學習方法是不同的,一(yī)個人的方法不見得适合另一(yī)個人,我(wǒ)隻能是談自己的學習方法。因爲我(wǒ)學習java是完全自學的,從來沒有問過别人,所以學習的過程基本上完全是自己摸索出來的。我(wǒ)也不知(zhī)道這種方法是否是比較好的方法,隻能給大(dà)家提供一(yī)點參考了。
學習java的第一(yī)步是安裝好jdk
寫一(yī)個hello ?world,其實jdk的學習沒有那麽簡單,關于jdk有兩個問題是很容易一(yī)直困擾java程序員(yuán)的地方:一(yī)個是classpath的問題,其實從原理上來說,是要搞清楚jre的classloader是如何加載class的;另一(yī)個問題是package和import問題,如何來尋找類的路徑問題。把這兩個問題摸索清楚了,就掃除了學習java和使用jdk的最大(dà)障礙。推薦看一(yī)下(xià)王森(sēn)的《java深度曆險》,對這兩個問題進行了深入的探讨。
第二步是學習java的語法
java的語法是類c++的,基本上主流的編程語言不是類c,就是類c++的,沒有什麽新東西,所以語法的學習,大(dà)概就是半天的時間足夠了。唯一(yī)需要注意的是有幾個不容易搞清楚的關鍵字的用法,public,protected,private,static,什麽時候用,爲什麽要用,怎麽用,這可能需要有人來指點一(yī)下(xià),我(wǒ)當初是完全自己琢磨出來的,花了很久的時間。不過後來我(wǒ)看到《thinking in java》這本書(shū)上面是講了這些概念的。
第三步是學習java的面向對象的編程語言的特性的地方。
比如繼承,構造器,抽象類,接口,方法的多态,重載,覆蓋,java的異常處理機制。對于一(yī)個沒有面向對象語言背景的人來說,我(wǒ)覺得這個過程需要花很長很長時間,因爲學習java之前沒有c++的經驗,隻有c的經驗,我(wǒ)是大(dà)概花了一(yī)個月左右吧,才徹底把這些概念都搞清楚,把書(shū)上面的例子反複的揣摩,修改,嘗試,把那幾章内容反複的看過來,看過去(qù),看了不下(xià)5遍,才徹底領悟了。不過我(wǒ)想如果有c++經驗的話(huà),應該一(yī)兩天時間足夠了。那麽在這個過程中(zhōng),可以多看看《thinking in java》這本書(shū),對面向對象的講解非常透徹。可惜的是我(wǒ)學習的時候,并沒有看到這本書(shū),所以自己花了大(dà)量的時間,通過自己的嘗試和揣摩來學會的。
第四步就是開(kāi)始熟悉java的類庫。
java的基礎類庫其實就是jdk安裝目錄下(xià)面jre/lib/rt.jar這個包。學習基礎類庫就是學習 rt.jar。基礎類庫裏面的類非常非常多。據說有3000多個,我(wǒ)沒有統計過。但是真正對于我(wǒ)們來說最核心的隻有4個,分(fēn)别是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;
這四個包的學習,每個包的學習都可以寫成一(yī)本厚厚的教材,而o'reilly也确實是這樣做的。我(wǒ)覺得如果時間比較緊,是不可能通過讀四本書(shū)來學習。我(wǒ)覺得比較好的學習方法是這樣的:
首先要通讀整個package的框架,了解整個package的class,interface,exception的構成,最好是能夠找到介紹整個包框架的文章。這些專門介紹包的書(shū)籍的前幾章應該就是這些總體(tǐ)的框架内容介紹。
對包整體(tǐ)框架的把握并不是要熟悉每個類的用法,記住它有哪些屬性,方法。想記也記不住的。而是要知(zhī)道包有哪些方面的類構成的,這些類的用途是什麽,最核心的幾個類分(fēn)别是完成什麽功能的。我(wǒ)在給人培訓的時候一(yī)般是一(yī)次課講一(yī)個包,所以不可能詳細的介紹每個類的用法,但是我(wǒ)反複強調,我(wǒ)給你們講這些包的不是要告訴你們類的方法是怎麽調用的,也不要求你們記住類的方法調用,而是要你們了解,java給我(wǒ)們提供了哪些類,每個類是用在什麽場合,當我(wǒ)遇到問題的時候,我(wǒ)知(zhī)道哪個類,或者哪幾個類的組合可以解決我(wǒ)的問題,that'all!,當我(wǒ)們具體(tǐ)寫程序的時候,隻要你知(zhī)道該用哪個類來完成你的工(gōng)作就足夠了。編碼的時候,具體(tǐ)的方法調用,是邊寫代碼,邊查documentation,所有的東西都在documentation裏面,不要求你一(yī)定記住,實際你也記不住3000多個類的總共将近10萬個方法調用。所以對每個包的總體(tǐ)框架的把握就變得極爲重要。
第五步,通過上面的學習,如果學的比較紮實的話(huà),就打好了java的基礎了,剩下(xià)要做的工(gōng)作是掃清documentation裏面除了上面4個包之外(wài)的其他一(yī)些比較有用處的類。相信進展到這一(yī)步,java的自學能力已經被培養出來了,可以到了直接學習documentation的水平了。除了要做gui編程之外(wài),jdk裏面其他會有用處的包是這些:
java.text.*;
java.net.*;
javax.naming.*;
這些包裏面真正用的比較多的類其實很少,隻有幾個,所以不需要花很多時間。
第六步,java web 編程
web編程的核心是http協議,http協議和java無關,如果不熟悉http協議的話(huà),雖然也可以學好servlet/jsp編程,但是達不到舉一(yī)反三,一(yī)通百通的境界。所以http協議的學習是必備的。如果熟悉了http協議的話(huà),又(yòu)有了java編程的良好的基礎,學習servlet/jsp簡直易如反掌,我(wǒ)學習servlet/jsp就用了不到一(yī)周的時間,然後就開(kāi)始用jsp來做項目了。
在servlet/jsp的學習中(zhōng),重頭仍然是servlet documentation。servlet api最常用的類很少,花比較少的時間就可以掌握了。把這些類都看一(yī)遍,多寫幾個例子試試。servlet/jsp編程本質就是在反複調用這些類來通過 http協議在web server和brower之間交談。另外(wài)對jsp,還需要熟悉幾個常用jsp的标記,具體(tǐ)的寫法記不住的話(huà),臨時查就是了。
此外(wài)java web編程學習的重點要放(fàng)在web application的設計模式上,如何進行業務邏輯的分(fēn)析,并且進行合理的設計,按照mvc設計模式的要求,運用servlet和jsp分(fēn)别完成不同的邏輯層,掌握如何在servlet和jsp之間進行流程的控制和數據的共享,以及web application應該如何配置和部署。
第七步,j2ee編程
以上的學習過程如果是比較順利的話(huà),進行到這一(yī)步,難度又(yòu)陡然提高。因爲上面的知(zhī)識内容 都是隻涉及一(yī)個方面,而像ejb,jms,jta等核心的j2ee規範往往是幾種java技術的綜合運用的結晶,所以掌握起來難度比較大(dà)。
首先一(yī)定要學習好jndi,jndi是app server定位服務器資(zī)源(ejb組件,datasouce,jms)查找方法,如果對jndi不熟悉的話(huà),ejb,jms這些東西幾乎學不下(xià)去(qù)。 jndi其實就是javax.naming.*這個包,運用起來很簡單。難點在于服務器資(zī)源文件的配置。對于服務器資(zī)源文件的配置,就需要看看專門的文檔規範了,比如web.xml的寫法,ejb-jar.xml的寫法等等。針對每種不同的app server,還有自己的服務資(zī)源配置文件,也是需要熟悉的。
然後可以學習jta,主要是要理解jta對于事務的控制的方法,以及該在什麽場合使用jta。這裏可以簡單的舉個例子,我(wǒ)們知(zhī)道一(yī)般情況可以對于一(yī)個數據庫連接進行事務控制(conn.setautocommit (false),....,conn.commit()),做爲一(yī)個原子操作,但是假設我(wǒ)的業務需求是要把對兩個不同數據庫的操作做爲一(yī)個原子操作,你能做的到嗎(ma)?這時候隻能用jta了。假設操作過程是先往a數據庫插一(yī)條記錄,然後删除b數據庫另一(yī)個記錄,我(wǒ)們自己寫代碼是控制不了把整個操作做爲一(yī)個原子操作的。用jta的話(huà),由app server來完成控制。
在學習ejb之前要學習對象序列化和rmi,rmi是ejb的基礎。接着學習jms和ejb,對于ejb來說,最關鍵是要理解ejb是如何通過rmi來實現對遠端對象的調用的,以及在什麽情況下(xià)要用到ejb。
在學習完ejb,jms這些東西之後,你可能會意識到要急不可待學習兩個領域的知(zhī)識,一(yī)個是uml,另一(yī)個是design pattern。java企業軟件的設計非常重視框架(framework)的設計,一(yī)個好的軟件框架是軟件開(kāi)發成功的必要條件。在這個時候,應該開(kāi)始把學習的重點放(fàng)在設計模式和框架的學習上,通過學習和實際的編程經驗來掌握ejb的設計模式和j2ee的核心模式。
j2ee規範裏面,除了ejb,jms,jta,servlet/jsp,jdbc之外(wài)還有很多很多的企業技術,這裏不一(yī)一(yī)進行介紹了。
另外(wài)還有一(yī)個最新領域web services。web services也完全沒有任何新東西,它像是一(yī)種黏合劑,可以把不同的服務統一(yī)起來提供一(yī)個統一(yī)的調用接口,作爲使用者來說,我(wǒ)隻要獲得服務提供者給我(wǒ)的wsdl(對服務的描述),就夠了,我(wǒ)完全不知(zhī)道服務器提供者提供的服務究竟是ejb組件,還是.net組件,還是什麽corba組件,還是其他的什麽實現,我(wǒ)也不需要知(zhī)道。web services最偉大(dà)的地方就在于通過統一(yī)的服務提供方式和調用方式,實現了整個internet服務的共享,是一(yī)個非常令人激動的技術領域。web services好像目前還沒有什麽很好的書(shū)籍,但是可以通過在網絡上面查資(zī)料的方式來學習。