久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

給予Java初學者的學習路線建議(范文大全)

時間:2019-05-12 11:12:31下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《給予Java初學者的學習路線建議》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《給予Java初學者的學習路線建議》。

第一篇:給予Java初學者的學習路線建議

給Java初學者的學習路線建議

在校學生,務必要在學好基礎(比如計算機系統、算法、編譯原理等等)的前提下,再考慮去進行下面的學習。第一部分:對于尚未做過Java工作的同學,包括一些在校生以及剛準備轉行Java的同學。

一、Java基礎首先去找一個Java的基礎教程學一下,或者你也可以去找相應的視頻。學習Java基礎的時候,應該盡量多動手,很多時候,你想當然的事情,等你寫出來運行一下,你就會發現不是這么回事兒,不信你就試試。了解過以上內容以后,你對Java就應該有一個基本的了解了,你可以用Java語言寫出一些簡單的程序,并且你用的是最簡單的編輯器,比如記事本。這個時候,不要急于進入下一部分,留下幾天好好寫一些程序,盡可能熟悉這些基礎內容。

二、Web開發等你寫上幾天程序以后,你往往會比較迷茫,因為你寫的東西似乎看起來毫無用處,比如實現一個簡單的計算器,讀取一個文件等。這個時候你就應該去學著寫一些讓你覺得有意思的東西了,所以你應該學習更多的知識。這些內容主要是Web開發相關的內容,包括HTML/CSS/JS(前端頁面)、Servlet/JSP(J2EE)以及Mysql(數據庫)相關的知識。它們的學習順序應該是從前到后,因此最先學習的應該是HTML/CSS/JS(前端頁面),這部分內容你可以去上面的那個runoob網站上找。

你可以試著自己寫一些頁面,當然,你可以盡你最大的努力讓它變得最漂亮。這部分內容對于后端Java來說,理論上不是特別重要,但至少要達到可以自己寫出一些簡單頁面的水平。接下來,你需要學習的是Servlet/JSP(J2EE)部分,這部分是Java后端開發必須非常精通的部分,因此這部分是這三部分中最需要花精力的,而且這個時候,你要學會使用開發工具,而不能再使用記事本了,可以選擇eclipse。當你下載安裝好eclipse以后,請視頻中的教程一步一步去學習,一定要多動手。關于Servlet/Jsp部分視頻的選擇,業界比較認可馬士兵的視頻,因此推薦給大家。

當然了,我本人并沒有看過他的視頻,所以不好說的太絕對,如果大家自己有更好的選擇,可以堅持自己的,不要被我干擾。最后一步,你需要學會使用數據庫,mysql是個不錯的入門選擇,而且Java領域里主流的關系型數據庫就是mysql。這部分一般在你學習Servlet/Jsp的時候,就會接觸到的,其中的JDBC部分就是數據庫相關的部分。你不僅要學會使用JDBC操作數據庫,還要學會使用數據庫客戶端工具,比如navicat,sqlyog,二選一即可。

三、開發框架當你學會以上內容以后,這個時候你還不足以參加工作,你還需要繼續深造。公司里為了提高開發的效率,會使用一些Java Web框架,因此你還需要學習一些開發框架。目前比較主流的是SSM框架,即spring、springmvc、mybatis。你需要學會這三個框架的搭建,并用它們做出一個簡單的增刪改查的Web項目。你可以不理解那些配置都是什么含義,以及為什么要這么做,這些留著后面你去了解。

但你一定要可以快速的利用它們三個搭建出一個Web框架,你可以記錄下你第一次搭建的過程,相信我,你一定會用到的。還要提一句的是,你在搭建SSM的過程中,可能會經常接觸到一個叫maven的工具。這個工具也是你以后工作當中幾乎是必須要使用的工具,所以你在搭建SSM的過程中,也可以順便了解一下maven的知識。在你目前這個階段,你只需要在網絡上了解一下maven基本的使用方法即可,一些高端的用法隨著你工作經驗的增加,會逐漸接觸到的。

四、找工作當你完成開發框架的學習以后,你就該找工作了,在校的找實習,畢業的找全職。與此同時,在找工作的同時,你不應該停下你的學習,準確的說,是你在以后都不能停下學習。上面這些內容你只是囫圇吞棗的學會了使用,你可以逐步嘗試著去了解更多的東西。

第二部分:對于參加工作一年以內的同學。恭喜你,這個時候,你已經擁有了一份Java的工作。這個階段是你成長極快的階段,而且你可能會經常加班。但是加班不代表你就可以松懈了,永遠記得我說的那句話,從你入行那一刻起,你就要不停的學習。在這一年里,你至少需要看完《Java編程思想》這本書。這本書的內容是幫助你對于Java有一個更加深入的了解,是Java基礎的升級版。這個階段的核心學習思想就是,在工作中實踐,并且更加深入的了解Java基礎。

第二部分:對于參加工作1年到2年的同學。這部分時間段的同學,已經對Java有了一個更加深入的了解。但是對于面向對象的體會可能還不夠深刻,編程的時候還停留在完成功能的層次,很少會去考慮設計的問題。于是這個時候,設計模式就來了。我推薦《大話設計模式》這本書,而設計模式就是你的開端。

請記住,我所提的基本都是最低要求,因此不要有任何松懈的心理,否則五年后,你不要去羨慕別人高于你的工資,也不要去羨慕別人進入了某公司。這一年,你必須對于設計模式了如指掌,《大話設計模式》可以作為你的開端。此外,設計模式并不是你這一年唯一的任務,你還需要看一些關于代碼編寫優化的書。比如《重構 改善既有代碼的設計》,《effective java》。總而言之,這個階段,你的核心任務就是提高你的代碼能力,要能寫出一手優雅的代碼。

第三部分:對于參加工作2年到3年的同學有的同學在這個時候覺得自己已經很牛逼了,于是忍不住開始慢慢松懈。請記住,你還嫩的多。這個階段,有一本書是你必須看的,它叫做《深入理解Java虛擬機》。這本書絕對是Java開發者最重要的書,沒有之一。在我眼里,這本書的重要性還要高于《Java編程思想》。這本書的內容是幫助你全面的了解Java虛擬機,在這個階段,你一定已經知道Java是運行在JVM之上的。所以,對于JVM,你沒有任何理由不了解它。

另外,在過去2年的工作當中,你肯定或多或少接觸過并發。這個時候,你應該去更加深入的了解并發相關的知識,而這部分內容,我比較推薦《Java并發編程實戰》這本書。只要你把這本書啃下來了,并發的部分基本已經了解了十之六七。與此同時,這個階段你要做的事情還遠不止如此。這個時候,你應該對于你所使用的框架應該有了更深入的了解,對于Java的類庫也有了更深入的了解。

因此,你需要去看一些JDK中的類的源碼,也包括你所使用的框架的源碼。這些源碼能看懂的前提是,你必須對設計模式非常了解。否則的話,你看源碼的過程中,永遠會有這樣那樣的疑問,這段代碼為什么要這么寫?為什么要定義這個接口,它看起來好像很多余?由此也可以看出,這些學習的過程是環環相扣的,如果你任何一個階段拉下來了,那么你就真的跟不上了,或者說是一步慢步步慢。而且我很負責的告訴你,我在這個階段的時候,所學習的東西遠多于這里所羅列出來的。

因此千萬不要覺得你已經學的很多了,我所說的這些都只是最低要求,不光是我,很多人在這個時間段所學習的內容都遠超本文的范圍。如果你不能跟上節奏的話,若干年后,如果不是程序猿市場還不錯的話,你很可能不僅僅是工資比別人低,公司沒別人好,而是根本就找不到工作??偠灾?,這個階段,你需要做的是深入了解Java底層和Java類庫(比如并發那本書就是Java并發包java.concurrent的內容),也就是JVM和JDK的相關內容。而且還要更深入的去了解你所使用的框架,方式比較推薦看源碼或者看官方文檔。另外,還有一種學習的方式,在2年這個階段,也應該啟用了,那就是造輪子。不要聽信那套“不要重復造輪子”的論調,那是公司為了節省時間成本編造出來的。重復造輪子或許對別人沒有價值,因為你造的輪子可能早就有了,而且一般情況下你造出來的輪子還沒有現存的好。

但是對別人沒有價值,不代表對你自己沒有價值。一個造輪子的過程,是一個從無到有的過程。這個過程可以對你進行系統的鍛煉,它不僅考察你的編碼能力,還考察你的框架設計能力,你需要讓你的輪子擁有足夠好的擴展性、健壯性。而且在造輪子的過程中,你會遇到各種各樣的難題,這些難題往往又是你學習的契機。當你把輪子造好的時候,你一定會發現,其實你自己收獲了很多。所以,這個階段,除了上面提到的了解JVM、JDK和框架源碼以外,也請你根據別人優秀的源碼,去造一個任何你能夠想象出來的輪子。

第四部分:參加工作3年到4年的同學這個階段的同學,提升已經是很難了,而且這個階段的學習往往會比較多樣化。因為在前3年的過程中,你肯定或多或少接觸過一些其它的技術,比如大數據、分布式緩存、分布式消息服務、分布式計算、軟負載均衡等等。這些技術,你能精通任何一項,都將是你未來面試時巨大的優勢,因此如果你對某一項技術感興趣的話,這個時候可以深入去研究一下。這項技術不一定是你工作所用到的,但一定是相關的。而且在研究一門新技術時,切忌朝三暮四。有的同學今天去整整大數據,搞搞Hadoop、hbase一類的東西。過不了一段時間,就覺得沒意思,又去研究分布式緩存,比如redis。然后又過不了一段時間,又去研究分布式計算,比如整整Mapreduce或者storm。結果到最后,搞得自己好像什么都會一樣,在簡歷上大言不慚的寫上大數據、分布式緩存、分布式計算都了解,其實任何一個都只是浮于表面。到時候面試官隨便一問,就把你給識破了。

一定要記住,作為一個程序猿,平日里所接觸的技術可能會很多,但是想要讓一門技術成為你的優勢,那么一定是你對這門技術的了解強過絕大多數人才行。因此在這個階段,你就不能再簡單的去學習前3年的內容了,雖然前面的學習如果還不夠深入的話依舊要繼續,但這個時候你應該更多的考慮建立你的優勢,也可以稱為差異性。差異性相信不難理解,就是讓你自己變得與眾不同。你前面三年的學習足夠你成為一名基本合格的Java開發者,但你離成為一名優秀的Java開發者還有很大的距離。

所謂優秀,即能別人所不能。而你前三年所學習的內容,是很多做過幾年的Java開發都能夠掌握的。那么為了讓自己有差異性,你就需要另辟蹊徑,找一個方向深入研究下去,以期在將來,你能夠成為這個領域的專家,比如分布式計算領域的專家,大數據領域的專家,并發領域的專家等等。此外,你除了建立你的差異性之外,還要去彌補你基礎上的不足,直到現在,我都沒有提及基礎知識。原因是基礎是很枯燥無味的,學的太早不僅容易懵逼,而且懵逼的同時還容易產生心理陰影,以至于以后再不想去研究這些基礎。但基礎又是你深入研究一些領域時所必須掌握的,比如你去研究分布式計算,你不懂算法你玩個毛毛?比如你去做分布式緩存,你對計算機系統的內存不了解,你如何去做緩存?

如果你的基礎本來就非常強,那么恭喜你,相信你在之前的工作中已經充分體會到了這些基礎對你的幫助。但我相信大部分人的基礎都很薄弱,哪怕是科班畢業的人,很多人也不敢說自己當初的基礎學的多么強大,比如算法、計算機系統原理、編譯原理這些。但是每個人時間都是有限的,而且這些基礎的書籍每一本讀下來,沒個一年半載的,還真拿不下來,因此還是要有所抉擇的。雖然藝多不壓身,但問題是藝多是有代價的,是需要你付出時間和精力的,而我個人更贊成在同等代價的情況下獲取最大的收獲。

首先,我比較推崇的基礎書籍有三本,分別是《深入理解計算機系統》,《tcp/ip詳解 卷一、二、三》,《數據結構與算法》。其中TCP/IP有三本書,但我們這里把這三本看成是一本大書。這三本分別適合三種人,《深入理解計算機系統》比較適合一直從事Java Web開發和APP后端開發工作的人群。《tcp/ip詳解 卷一、二、三》比較適合做網絡編程的人群,比如你使用netty去開發的話,那么就要對TCP/IP有更深入的了解。而《數據結構與算法》這本書,則比較適合做計算研究工作的人,比如剛才提到的分布式計算。另外,我要強調的是,這里所說的適合,并不是其它兩本對你就沒有用。比如你做Java Web和APP后端開發,《tcp/ip詳解 卷一、二、三》這本書對你的作用也是很大的。這里只是分出個主次關系而已,你要是時間足夠的話,能把三本都精讀那當然最好不過了。

但如果時間有限的話,那么就先挑對你幫助最大的書去讀。理論上來講,這一年你能把這三本其中一本精讀下來,就已經非常厲害了。有了基礎,有了前面的工作經驗,你就可以去開拓屬于你的領域了。在這一年里,一定要規劃好自己的領域,建立好自己的優勢,制造出差異性。如果你對自己的領域不夠清晰的話,隨著你工作的時間日益增多,你接觸的技術會越來越多,這個時候,你很容易被淹死在技術的海洋里,看似接觸的技術越來越多,會用的也越來越多,但你毫無優勢。有的同學可能會問,“我,我也不知道我的領域是什么啊?怎么辦呢?”對于這種人,我只想說,“臥槽,這還問我?要不干脆我替你學習得了,好不好?”

第五部分:參加工作4年到5年的同學經過前面一年的歷練,相信你在自己所鉆研的領域已經有了自己一定的見解,這個時候,技術上你應該已經遇到瓶頸了。這個時候不要著急提高自己的技術,已經是時候提高你的影響力了,你可以嘗試去一些知名的公司去提高你的背景,你可以發表一些文章去影響更多的人。當然,你也可以去Github創建一個屬于你的開源項目,去打造自己的產品。

技術學到這個階段,很容易遇到瓶頸,而且往往達到一定程度后,你再深入下去的收效就真的微乎其微了,除非你是專門搞學術研究的。然而很可惜,大部分程序猿做不到這一步,那是科學家做的事情。這個時候提高影響力不僅僅是因為技術上容易遇到瓶頸,更多的是影響力可以給你創造更多的機會。程序猿在某種程度上和明星很像,一個好的電視劇和電影就可以成就一批明星,程序猿有的時候也是,一個好的項目就可以成就一群程序猿。比如國內幾個膾炙人口的項目,像淘寶、支付寶、QQ、百度、微信等等。這每一個項目,都成就了一批程序猿。我敢說,這里面任何一個項目,如果你是它的核心開發,光是這樣一個Title,就已經是你非常大的優勢。更何況還不止如此,Title說到底也是個名頭,更重要的是,這種項目在做的時候,對你的歷練一定也是非常給力的。

而你如果想要參與這樣的項目,除了靠運氣之外,影響力也是很重要的一個手段。比如你在分布式計算領域有一定的影響力,那么如果有什么好的關于分布式計算的項目,對方就很可能會邀請你。就算人家不邀請你,你自己主動去面試的時候,對方如果知道你在這個領域的影響力,也肯定會起到很大的作用,而這個作用,甚至可能會超過你現在的技術能力。所以,在這個階段,你最大的任務是提高自己的影響力,為自己未來的十年工作生涯那一天做準備。如果你能夠靠你的影響力和以前積累的技術,參與到一個偉大的項目當中,那么你后面的五年也就有著落了。當然了,我現在滿打滿算,做程序猿也就4年半不到,因此關于4年到5年這一部分,我的見解不一定是對的,就算是對的,也不一定是適合任何人的。

所以,希望大家自己有的判斷力,去決定到底該如何度過這一年。結語本文到此就基本結束了,整篇文章很長,但其實主要就說了兩部分內容,一個是社招面試的準備,一個是Java生涯的學習。關于這兩部分,我已經給出了自己的見解,但是還是那句話,每個人吸收知識的時候,都要有抽取精華,去除糟粕的能力。我所說的,可能有些是對的,有些是錯的,有些是適合你的,有些是不太適合你的,你要自己能夠判斷。其實你在生活和工作當中也是一樣的,你身邊的人形形色色,有的人你喜歡,有的人你很討厭。但其實你喜歡的人也有缺點,你討厭的人也有優點。你要學會從你討厭的人身上學會他的優點,千萬不要一棒子打死,這只會讓你失去很多學習成長的機會。好了,說了這么多了,就到此為止吧,希望本文可以幫助到作為程序猿或即將成為程序猿的你。

第二篇:Java學習路線

怎么學習Java,這是很多新手經常會問我的問題,現在我簡單描述下一個Java初學者到就業要學到的一些東西:

首先要明白Java體系設計到得三個方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard Edition,我們經常說到的JDK,就主要指的這個,它是三者的基礎,屬于桌面級應用開發,這部分如果學得好很容易拓展J2EE和J2ME。J2ME,The Micro Edition of the Java 2 Platform。主要用于嵌入式Java,如手機,PDA等等。J2EE,Java 2 Platform,Enterprise Edition,就是所謂的企業級Java,適合企業的大型應用開發。

J2SE:

新手最初學習的時候先要從J2SE開始學起,所包含的內容主要分為:面向對象概念的理解、Java基本語法的學習,Java桌面圖形界面應用程序的開發,掌握常用的Java API等(關鍵是要學會怎樣查閱)。

重點:Java基本語法(循環結構,數據類型,數組,運算符等)、Swing,awt,事件機制、文件輸入輸出流處理等

難點:面向對象思想的理解(接口、類等)、線程、socket網絡編程等

視頻教程推薦:孫鑫的Java基礎視頻教程、張孝祥的Java基礎視頻教程,講的都很細,而且這兩位老師在教學方面都有很好的經驗。

J2EE:

在學習了J2SE之后,你可以嘗試著慢慢過渡到J2EE,當然,學習J2EE海需要很多非JAVA技術的支撐,比如數據庫技術,網頁編程技術等等,待會我會詳細介紹這兩方面的內容。J2EE有三個必學的框架,如果你說你學了J2EE,但又不會這三個框架的話,那會讓人笑掉大牙,這三個框架分別是Struts、Spring和Hibernate,雖然這三個框架應用很廣,但不代表這三個框架就代表了J2EE,J2EE還有很多其他的東西,比如EJB,作為一款重量級(此重量級不是指重量級選手那個意思,此重量級非彼重量級)框架,雖然這個應用慢慢的再被其他框架所取代,但EJB3.0的出現也給它帶回一些生機,作為一個分布式應用的框架,也是大家要去學習和了解的知識。

當然,剛才說到J2EE包含的范圍很廣,即使我把我所了解的所有技術說出來,也并不能代表J2EE,這是一個很深很廣的學問,需要大家以后再工作的時候慢慢去發現了。我所了解的還包括:

JDBC:Java數據庫連接對象,基礎中的基礎,Hibernate也只是對它的封裝而已 JNDI: Java 命名與目錄接口,J2EE重要規范之一 EJBS: 上面已經提到過了

RMI: 提供遠程調用方法的支持,主要用于程序分布式開發 JMS: Java消息服務,中間件技術

JAVA IDL: 提供J2EE平臺與CORBA交互能力和互聯能力的技術 JTS: 組件事務監視器 JTA: 事務劃分的一個技術 JAVAMAIL: Java中的郵件技術 JAF: Java啟動框架,沒研究過 Log4j,一款日志處理的框架應用

Junit:單元測試的好幫手

freemarker、velocity:兩款不錯的模板引擎

與Flash的交互Flex:目前很多的SNS應用就是使用到了這個技術

Web services:想知道我們論壇天氣預報的效果是怎么做的嗎?請關注這個技術 SOA:面向服務架構,未來技術發展的趨勢之一 ……

不過前面介紹到得這些都不是J2EE的基礎,是屬于框架應用級別的.要真正把上面說到的知識掌握好,還是的學習J2EE最核心的東西:JDBC、JSP、servlet和JavaBean,后面三個也是學習SSH的基礎(StrutsSpringHibernate的簡稱).鑒于J2EE的內容太過復雜,建議大家最初只學習: JSP, servlet和JavaBean,等這個基礎掌握好再把SSH學習了,再對其他J2EE技術有個大致的了解就可以出去找工作了。當然,找工作的前提除了把Java學習好,還會有一些其他的技術也是必須要掌握的。數據庫技術:

數據庫幾乎是程序中不可或缺的一部分,在整個軟件開發中更是占據了重要作用.數據庫在整個軟件中扮演的是地基的角色,你要修房子,就要先打好地基,你要做軟件,就要先設計好的數據庫.目前數據庫幾乎都是關系型數據庫,代表的有: SQL Server,目前最新的好像是2008,我不是很喜歡追趕時髦,用的還是2005,不過也很不錯了,在此之前還有2000.MySQL,最知名的開源數據庫之一,我很喜歡它的小巧耐用,學過SQL SERVER數據庫再學它,無師自通,易如反掌.ORACLE.甲骨文公司的產品,大型數據庫,正版的一般公司買不起.只有看看了,不過現在Java開發60%都是會使用到這個數據庫,再加上現在甲骨文已經把sun公司收購了,JAVA和ORACLE得關系更加曖昧,各位得多花些時間在這上面了.除了這些,你還應該了解一些桌面應用軟件開發用到的數據庫,比如說sqlite。你在制作安裝程序的時候可以把這個數據庫打包進你的安裝程序。

網頁編程基礎:

網頁編程基礎要學的內容也比較多,但主要集中在以下這三個技術之上,大家每天看的各種樣式的網頁都是它們呈現的: HTML:超文本標記語言 CSS:層疊樣式表

Javascript:瀏覽器客戶端腳本語言

現在更是流行各種JavaScript庫,比如:Jquery、ExtJs等,你要是會其中的某一個庫的使用,找工作so easy。

J2ME:

如果你在學習了以上技術還不過癮,可以再學習手機程序的開發,就我個人看來,開發手機程序技術其實蠻簡單的,難點在于優化,比如怎么讓你寫的程序盡量的節約手機資源,“代碼誠可貴,手機價更高“,所以不得不比PC機多考慮很多成本和實用性問題。J2ME的學習的話,切忌不要單純的再模擬器上測試,一定要找真機測試,真機和模擬器的效果之間差別是很大的。更多手機開發技術,有興趣的朋友可以和我一起探討。

開發工具:

開發工具的選擇主要還是看大家的習慣,我個人比較喜歡使用eclispe,功能很強大,也很好拓展其他的功能。當讓初學你也可以選擇JCreator,或者最好就直接用記事本。等你熟悉了Java代碼之后,就可以使用JBuilder、eclispe或者netbeans這一類的工具了。

先說到這里先,以后大家一起完善這個帖子。盡量再給大家整理一些學習的資源在這里。也歡迎大家一起整理我文章中提到的一些技術資源和開發工具。最后,再和大家分享一句話:生命欣欣向榮,唯奮斗不息。也和大家分享一幅Java學習路線圖:

第三篇:JAVA學習路線

1.JAVA學習路線

1.1 基礎語法及JAVA原理

基礎語法和JAVA原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當危險的。學習JAVA也是如此,必須要有扎實的基礎,你才能在J2EE、J2ME領域游刃有余。參加SCJP(SUN公司認證的JAVA程序員)考試不失為一個好方法,原因之一是為了對得起你交的1200大洋考試費,你會更努力學習,原因之二是SCJP考試能夠讓你把基礎打得很牢靠,它要求你跟JDK一樣熟悉JAVA基礎知識;但是你千萬不要認為考過了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險的。獲得“真正”的SCJP只能證明你的基礎還過得去,但離實際開發還有很長的一段路要走。

1.2 OO思想的領悟

掌握了基礎語法和JAVA程序運行原理后,我們就可以用JAVA語言實現面向對象的思想了。面向對象,是一種方法學;是獨立于語言之外的編程思想;是CBD基于組件開發的基礎;屬于強勢技術之一。當以后因工作需要轉到別的面向對象語言的時候,你會感到特別的熟悉親切,學起來像喝涼水這么簡單。

使用面向對象的思想進行開發的基本過程是:

●調查收集需求。

●建立用例模型。

●從用例模型中識別分析類及類與類之間的靜態動態關系,從而建立分析模型。

●細化分析模型到設計模型。

●用具體的技術去實現。

●測試、部署、總結。

1.3 基本API的學習

進行軟件開發的時候,并不是什么功能都需要我們去實現,也就是經典名言所說的“不需要重新發明輪子”。我們可以利用現成的類、組件、框架來搭建我們的應用,如SUN公司編寫好了眾多類實現一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調用類中的方法來完成某些功能或繼承它。那么這些類中究竟提供了哪些方法給我們使用?方法的參數個數及類型是?類的構造器需不需要參數?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,JAVA DOC文檔(參考文獻4.4)就是這樣的文檔,它可以說是程序員與程序員交流的文檔。

基本API指的是實現了一些底層功能的類,通用性較強的API,如字符串處理/輸入輸

出等等。我們又把它成為類庫。熟悉API的方法一是多查JAVA DOC文檔(參考文獻4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。

1.4 特定API的學習

JAVA介入的領域很廣泛,不同的領域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做界面開發,那么你需要學習Swing/AWT/SWT等API;如果你進行網絡游戲開發,你需要深入了解網絡API/多媒體API/2D3D等;如果你做WEB開發,就需要熟悉Servlet等API啦。總之,需要根據工作的需要或你的興趣發展方向去選擇學習特定的API。

1.5 開發工具的用法

在學習基礎語法與基本的面向對象概念時,從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時候不要急于上手JBuilder/Eclipse等集成開發環境,以免過于關注IDE的強大功能而分散對JAVA技術本身的注意力。過了這一階段你就可以開始熟悉IDE了。

程序員日常工作包括很多活動,編輯、編譯及構建、調試、單元測試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項活動都有專門的工具,如果獨立使用這些工具的話,你將會很痛苦,你需要在堆滿工具的任務欄上不斷的切換,效率很低下,也很容易出錯。在JBuilder、Eclipse等IDE中已經自動集成編輯器、編譯器、調試器、單元測試工具JUnit、自動構建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進去,又提供了豐富的向導幫助生成框架代碼,讓我們的開發變得更輕松。應該說IDE發展的趨勢就是集成軟件開發中要用到的幾乎所有工具。

從開發效率的角度考慮,使用IDE是必經之路,也是從一個學生到一個職業程序員轉變的里程碑。

JAVA開發使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder占有的市場份額是最大的。JBuilder在近幾年來一直是JAVA集成開發環境中的霸主,它是由備受程序員尊敬的Borland公司開發,在硝煙彌漫的JAVA IDE大戰中,以其快速的版本更新擊敗IBM的Visual Age for JAVA等而成就一番偉業。IBM在Visual Age for JAVA上已經無利可圖之下,干脆將之貢獻給開源社區,成為Eclipse的前身,真所謂“柳暗花明又一村”。浴火重生的Eclipse以其開放式的插件擴展機制、免費開源獲得廣大程序員(包括幾乎所有的骨灰級程序員)的青睞,極具發展潛力。

2.學習要點

確立的學習路線之后,我們還需要總結一下JAVA的學習要點,這些要點在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進行匯總,不要嫌我婆婆媽媽啊。

2.1勤查API文檔

當程序員編寫好某些類,覺得很有成就感,想把它貢獻給各位苦難的同行。這時候你要使用“javadoc”工具(包含在JDK中)生成標準的JAVA DOC文檔,供同行使用。

J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE DOC文檔官方下載地址:。

對待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。

當需要某項功能的時候,你應該先查相應的DOC文檔看看有沒有現成的實現,有的話就不必勞神費心了直接用就可以了,找不到的時候才考慮自己實現。使用步驟一般如下:

●找特定的包,包一般根據功能組織。

●找需要使用類,類命名規范的話我們由類的名字可猜出一二。

●選擇構造器,大多數使用類的方式是創建對象。

●選擇你需要的方法。

2.2 查書/google->寫代碼測試->查看源代碼->請教別人

當我們遇到問題的時候該如何解決?

這時候不要急著問別人,太簡單的問題,沒經過思考的問題,別人會因此而瞧不起你??梢韵日艺視絞oogle中搜一下看看,絕大部分問題基本就解決了。而像“某些類/方法如何使用的問題”,DOC文檔就是答案。對某些知識點有疑惑是,寫代碼測試一下,會給你留下深刻的印象。而有的問題,你可能需要直接看API的源代碼驗證你的想法。萬不得已才去請教別人。

2.3學習開源軟件的設計思想

JAVA領域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對這些工具、框架進行分析,領會其中的設計思想,有朝一日說不定你也能寫一個XXX框架什么的,風光一把。分析開源軟件其實是你提高技術、提高實戰能力的便捷方法。

2.4 規范的重要性

沒有規矩,不成方圓。這里的規范有兩層含義。第一層含義是技術規范,多到

http:///docs/codeconv/,中文的也有,啊,還要問我在哪,請參考3.2.2節。

2.5 不局限于JAVA

很不幸,很幸運,要學習的東西還有很多。不幸的是因為要學的東西太多且多變,沒時間陪老婆家人或女朋友,導致身心疲憊,嚴重者甚至導致抑郁癥。幸運的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達成心愿。

JAVA不要孤立地去學習,需要綜合學習數據結構、OOP、軟件工程、UML、網絡編程、數據庫技術等知識。

軟件工程的由來

據說上個世紀60年代的程序員都是天才,寫程式就像寫日記一樣,吃過晚飯沒事干隨手就可以寫幾個出來玩,第二天還可以拿去賣錢。所以那時候程序員在大家眼中,跟那些搞美術,音樂的是一類的,被稱為“藝術家”。

但事過境遷,就像任何人都不會嫌錢多一樣,永遠都不會有人嫌CPU快的。于是,隨之而來的就是硬件的迅猛發展和越來越變態的軟件。記得以前常去同學家拷游戲,通常幾張軟盤就可以搞定,而現在的游戲,兩三張CD-ROM都算少的了。像如此龐大復雜的怪物,就算你是如何的天才,一個人肯定是搞不定的,否則,等你把程式寫出來,人家Intel連奔騰N都開發出來了。既要開發大型的軟件還要追求速度(這樣才能賺錢),于是很自然地,合作的概念被提了出來。

在開始合作的初期,由于大家都習慣了當很有個性的“藝術家”,結果可想而知,一個是畢加索派的,而另一個是意大利印象派的,再加上一個畫潑墨山水畫的,要是像這樣湊出來的東西都能不出問題的話,那么Bill早就轉行了。所以,那時侯的大型軟件,據說“藍屏”比WINDOWS 98還多。

馬克思告訴我們,萬物都是從量變到質變的。隨著問題的不斷涌現,一些master們開始嘗試去總結經驗,并歸納了一些規范去指導軟件的分析,設計,實現,測試,維護,人員交流協作,項目預算及時限控制等方方面面,這就是軟件工程的前身。

軟件工程到現在已發展了30多年,可以說是相當成熟的了?,F在開發軟件,據說都是一大幫人排排坐,按著一整套的規章制度來干活。于是,軟件開發成了“工程”,程序員也就淪為“工人”了。

最初提出問題的是Dijkstra。他于1968年寫給ACM的一封題為Goto Statement

Considered Harmful 的信中,指出了GOTO語句的負面作用,并提出了解決之道,其引發的一系列效應最終帶來了軟件工程的誕生。(信的原文可在www.tmdps.cn/classics/oct95 上看到,不過,當你看到本文的時候,天知道它還在不在那里?。?/p>

軟件工程的核心

無論是在上個世紀還是在現在,軟件開發所涉及的工作基本上都沒有變化,它們都起始于一個實際需要或某個靈感,然后就是分析,設計,編碼,調試,維護。這些任務以某種方式動態地結合起來就構成了軟件開發的整個過程,這就是所謂的“軟件開發周期”。

但對于這些工作,具體怎樣做,什么時候做,每個人都有自己的一套方式,甚至有的人有幾套方式。這樣,當幾個人合在一起干活的時候,最終的結果就只能是一片混亂。所以就需要一套規則,大家都按規則來辦事,問題就會少得多。好的規則就叫做規范,規范都是由一些master們根據經驗總結的,又經過長時間的歷練,不斷地被補充修正,可以說都是精華,按照規范來干活,對于提高軟件質量和工作效率自然大有幫助。

而軟件工程,說白了,就是這樣一套用于軟件的團隊開發,以提高軟件質量和程序員工作效率為目的的規范。其核心就是,對于軟件開發的5個重要組成部分:需求分析,設計,編碼,調試,維護,如何組織這5個部分的工作,以及如何完成每一個工作。簡單來說,就是對于總體的組織和對于局部的實現。

規范只是提供一個好的例子,以描述一種思想,具體到每一個環節怎樣實現,對于不同的公司或團體則是各有千秋,因為根本就不可能存在一套放之天下皆可行的標準。就像C++,也只是提供了一套標準,不同的編譯器都有各自的實現,對標準的支持程度也互不相同。所以,在不同的公司或團體中,盡管核心思想都是大同小異,但具體到每一個步驟,往往都是不相同的。我手上就有一份GB8567-88的文檔模板,對于那些頂多只有幾千行的小程序來說,假如真按上面的要求全寫上了,簡直就是一種折磨!據說,當前業界最權威的標準是CMM。

軟件開發過程的組織

如何組織軟件開發過程中的每一個步驟,就是軟件開發周期模型要解決的問題。其實開發軟件,就像是解決一個邏輯問題。想想自己平時是怎樣寫程序的。首先是要有一個想法,即我寫的這個程序是要干什么的;然后就是對要實現的核心功能大概構思一種或多種實現方法,并從中選出一種自認為是較好的;接下來就是將涉及的各種主要或次要功能分成各個模塊;最后就是分模塊來編碼和DEBUG。在我看來,除了第一步外,其余的步驟應該是一個循環的過程。在編碼的過程中,你總是需要不斷地回過頭來修改原先的模塊設計,甚至最初選定的實現算法。例如,最簡單的情況是,你通常都會突然發現在兩個成員函數中有相同的代碼,這時,程序員的直覺告訴你,你應該為你的類再添加一個private成員函數并將公共的代碼放于其中;又或者是,你突然發現一個模塊中的某個功能具有很高的通用性,完全可以提取出來作為一個獨立的功能組件,而你也確實應該這樣做;要是倒霉一點的話,你很有可能會在最后調試的時候突然發現,你的程序跑得太慢了,連你自己都無法忍受。于是你找呀找,終于找到了80/20中的那段可惡的20,原來是用了一個O(N)的算法,這時你就得老老實實地換一個更好的算法。

總之,除非你是先知,否則,對于一個具有一定規模和復雜度的軟件來說,在“設計—編碼”這個過程中,實在有太多的不可預知性和變化性,你根本不可能全盤地把握住每一個細節。當然,這是建立在我現時的水平之上的觀點。我不知道是否成為高手以后會有所不同,因為我身邊沒有那樣的人。

既然軟件開發是一個具有不可預知性和變化性的動態的過程,那么,對其每一個步驟的組織,即周期模型,就必須包容它的這種性質。

現在來看一下最古老,最經典,同時也是最倍受批評的瀑布模型。

瀑布模型是一種線性模型,其最大的特點就是簡單直觀。它將軟件開發過程規劃為“分析—設計—編碼—測試—維護”的線性過程,也就是說,你必須首先把你的軟件要干的每一件工作都分析得徹徹底底,再對每一個模塊,每一個接口,事無巨細,都設計得非常完美,然后才開始編碼的工作,并且在編碼的時候就像在對著圖紙砌模型,根本不用再回頭作任何修改,當然,是在把所有的代碼都寫完以后才開始測試的。

整個過程,光想一下就覺得冒冷汗!

瀑布模型完全忽視了軟件開發過程的動態變化??峙轮挥心切┮呀洶l展得非常成熟,且規模不大的系統,例如:用Access做后臺,用VB畫前端的數據庫應用程序,才有瀑布模型一展拳腳的地方。

相比之下,現在常用的一些周期模型則更接近于人的自然思維,例如螺旋模型就是一種我比較喜歡的模型。

軟件開發過程的實現

具體到每一步的工作要怎樣完成,我前面已提到過,是非常靈活的,只要把握住大體的方向就行。在進行分析,設計,編碼,調試,維護這幾部分的工作的時候,最核心的就是文檔的編寫。文檔的作用在于以下3個方面:一是可以幫助整理思路。把要完成的目標,系統的結構,每一個模塊的功能等整理一下,然后分門別類地寫下來,這樣在開發的過程中,就有據可依,在需要回過頭來修改設計的時候,也有證可考。二是便于交流。想象一下開會時的情形。一大幫子人爭先恐后,激烈辯論,然后會終人散,思想靈感也就隨之散了,結果是開了半天會,什么也沒討論出來。這就是后來會議記錄被發明出來的原因。在腦子里的東西一多,就會散而且亂,用語言表達的時候,很容易會丟三落四,別人也很難把握住你的思想。但經過整理寫在紙上以后,則會清晰得多,無論是別人還是自己,看起來都可以一目了然。三是可以作為以后維護時的參考資料。有一句名言:“筆和紙永遠都比大腦可靠”,意思就是說,放在大腦里的東西說不準哪天就忘了,但寫在紙上的東西,只要不發生什么意外,一般是丟不了的。當過了一段時間,你需要再回過頭來修改你的程序的時候,你就會發現,你以前寫下的文檔實在太有價值了。別指望你的源代碼,對于復雜一點的程序來說,單純的源代碼幾乎會扼殺掉你所有的時間。

至于文檔怎樣寫,教科書上大多都是一條一條列得滿滿的,就像一些地方政府的規章制度一樣,其實大可不必,只要能滿足需要就行。如果是在公司,則每個公司大多都有一套自己內部的文檔模板,個人沒有選擇的余地。而對于像我這種業余的,寫個程序除了練練手藝,無非就是供自己和親朋好友玩玩,則根本沒必要搞得過于復雜。以下就是我自己的一份文檔模板的概要,麻雀雖小,但五臟俱全。

可行性分析 就是關于當前項目能不能干的分析結果。主要考慮的方面包括:是否能把這個項目開發出來;假如可以的話,預計需要多少時間,能否滿足客人的時間要求;需要多少人力和資金的投入;最重要的是,這個項目能否賺錢,能賺多少。還要對可能存在的風險進行評估,例如,萬一項目主管被車撞了要怎么辦。當然,這對于我來說毫無意義,我在這里寫上只是為了保持完整而已。

項目描述 這是在決定立項以后,對當前項目的一份扼要說明。必須包括以下幾個方面:

(1)項目的名稱或編號;(2)對客戶方的描述;(3)對開發人員的描述;(4)工程任務的描述;(5)工程的輸入和輸出;(6)開發環境;(7)其他的附加條件。在這里,對工程任務的描述是從整體的角度來說的,例如:能對當前的象棋棋局進行分析并作出最優決策的人工智能系統。而工程的輸入輸出則可以這樣寫:輸入當前的象棋棋局的數據描述;輸出最優的棋步,包括選擇行動的棋子和步法。

需求分析 就是對客戶要求的功能的定義。注意這里用了“定義”這個詞,這就意味著對客戶需求的說明,盡管不一定要是形式定義,但也必須是精確,無歧義的。同時,還要列

出程序的功能模塊和邏輯流程,即與客戶的每一項功能要求對應的程序功能模塊有哪些以及這些功能模塊是按照怎樣的邏輯步驟來逐項完成客戶的要求的。注意這里所說的功能模塊與編碼時所說的程序模塊的區別。對于客戶的一個復雜的功能要求,一般可以用分治法分為一個或多個子功能,每一個子功能對應一個功能模塊,而每一個功能模塊則可以由一個或多個程序模塊來實現。功能模塊是建立在設計邏輯上的,而程序模塊則是直接面向實現的。在用OO編程的時候,我通常以類作為程序模塊劃分的基本單元。綜上所述,這個部分的文檔必須包括3個部分:(1)客戶需求的詳細描述;(2)程序功能模塊的劃分以及其與客戶需求的對應關系;(3)功能模塊的邏輯流程。

軟件設計 這就是對程序的每一個模塊的詳細設計的說明文檔。其由以下幾部分組成:

(1)程序模塊與功能模塊的對應關系和相關描述;(2)實現每個功能模塊的程序模塊的邏輯流程和組織結構;(3)對每一個程序模塊的詳細描述。這個部分的文檔是改動得最多的,如果與螺旋周期模型結合,甚至需要循環地對每一個模塊進行深入設計和細化,所以,為了便于管理,我通常都對每一個較復雜的模塊都單獨立一份文檔。至于模塊的流程圖或結構圖,一直都是我最頭疼的問題,那一大堆琳瑯滿目的畫法和符號往往令人無所適從。其實對于個人來說,只要能把意思表達出來,想怎樣畫都無所謂,關鍵是自己要有一套標準,別在這個圖中,矩形表示過程,而在另一個圖中,則是表示I/O。對每個符號表示的意思進行說明那是必須的,不然別人看起來會一頭霧水。假如嫌麻煩的話,就干脆使用那些被大多數人認可的標準,例如UML圖。但以后如果進到公司,還是老老實實地按公司規矩辦事吧。

開發日志 我一直都認為這是文檔中最有趣的部分。開發日志相當于編碼階段的文檔,它的形式可以很隨意,主要是記錄一些在寫程序時突然萌發的靈感,或對代碼的一些微小的修改,或對程序結構的一些微小變動等,還要對上述這些修改變動作些說明,例如,為什么要改成現在的這個樣子。別小看這些記錄,它往往會成為你以后對程序進行維護時的重要依據。要知道,人的IQ,EQ等,是會隨著人的生理和心理狀態的不同而變化的。在某個時刻,你可能會靈光一閃,做出了一個非常偉大的改動,但過了一段時間,當你再回過頭來重新閱讀同一段代碼的時候,你很有可能只記得在這里的改動是非常明智的,可是卻無論如何也想不起其明智在哪里。這時,一份日志就會省卻你不少的麻煩。

測試分析 用于指出程序存在或潛在的缺陷和錯誤,以及程序性能的數字描述。其包括幾個部分:(1)對被測模塊的描述;(2)測試人員;(3)對該模塊每個功能的測試的詳細描述;(4)指出當前存在或潛在的問題。在測試描述中應該包括輸入的數據集和輸出的結果,還有運行的時間等。對于公司來說,對測試分析的要求是非常嚴格的。但對于我個人來說,我只是將其作為一份模塊測試的文字記錄,以防會忽略掉某些已知的缺陷和錯誤,以及對一些核心模塊的時間和空間效率進行簡單的測試,以便日后翻查。

第四篇:JAVA學習路線

Java是一個通用的編程語言,其實可以干很多事,怎么學Java就看怎么用了。

但有一些一般的步驟:

1.熟悉一種文本編輯器,比如vim, eclipse, notepad++, textmate等。知道哪些是開源的,哪些是閉源的,哪些要收費。養成不用盜版軟件的習慣。

2.安裝JDK(建議用你的Linux發行版自帶的軟件包管理器安裝openjdk,過程中可能需要讀發行版特定的文檔)

3.寫一個Java的Hello world程序,并用命令行工具javac編譯,再用java命令運行這個程序。過程中熟悉源代碼、字節碼、虛擬機這些東西,以及Java的包(package)對.class文件所在的路徑的影響。

3.5.如果這兩個命令行工具使用熟練了,可以開始選一個喜歡的集成開發環境,比如Eclipse。當然,養成不用盜版軟件的習慣。熟悉一下如何建立“工程”,以及快捷鍵的使用。

4.學習Java的面向過程編程,包括基本數據結構、表達式、語句、控制流、函數調用。

5.學習Java的面向對象編程,包括類、引用類型和值類型的區別、成員、方法、訪問控制、繼承、多態、接口、接口實現。順便學習一下面向對象的基本思想,即對象、消息、封裝、繼承、多態等,這些通用的內容不是Java特有的。

5.5 這時候應該已經涉及了Java的垃圾回收。要留意即使有垃圾回收的情況下也會發生的內存泄露(如自己設計數組容器,元素是引用,邏輯上刪除了元素,但并沒有清成null)。

6.學習Java的異常處理,但更重要的是學習什么時候用特殊返回值而不使用異常,什么時候應該拋出異常而不處理異常,知道什么是pokemon catch及其危害,了解為什么Java的checked exception是一個糟糕的特性。如果愿意,同時學習一下Java1.7的try-with-resource語句和AutoCloseable接口。

7.熟悉Java常用的數據結構,如基本的數組類型,以及泛型容器(java.util.*),尤其是java.util.List接口和java.util.ArrayList實現;以及java.util.Map接口和java.util.HashMap實現。(java1.5以前的沒有泛型參數的就不用碰了)同時留意一下基本類型int, double等和裝箱類型Integer和Double的區別,以及它們是如何自動轉換的。

8.熟悉Java標準庫里的各種工具,包括日期時間、字符串格式化、IO等。知道文件要自己在finally子句中close(),或者用Java1.7的try-with-resource,不要妄想垃圾回收器會幫你關掉文件。

9.學習一下Java的命名習慣,以及JavaBeans的常規,知道為什么getter/setter比直接操作成員變量好。按這種方式給Java的變量、方法命名。同時看看你的IDE能不能自動幫你生成getter和setter。

10.使用一個第三方的庫(比如Apache Commons Lang通用工具庫),讓你的程序依賴于它的二進制jar包(而不是直接拷貝源代碼),用命令行編譯、運行(注意classpath等);也熟悉一下如何用你的集成開發環境添加第三方依賴。感受一下手動管理依賴關系的麻煩。

11.學習Maven的使用,試著讓Maven幫你解決依賴關系,再試著讓Maven幫你創建一個Eclipse工程。再試試用Maven打包發布。

12.學習軟件測試,以及JUnit的使用,以及怎么在IDE中使用JUnit。有空看一下coverage工具。

13.讀讀四人幫寫的《設計模式》(這本書是用C++和Smalltalk語言為例子的,但仍然適合Java)。具體的是這本書,http:///Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612 圖書館應該能還借到英文原版,因為我借到過。

接下來就看具體要做哪方面的應用了,看需求。比如(下面的沒有順序)

【....】如果學Java學得不舒服了,學Python。

* 如果對面向對象編程的概念有點不習慣,學Smalltalk。(Ruby也行,但不如Smalltalk經典。Ruby的文檔是一大硬傷。)

* 如果嫌Java太啰嗦,學Python

* 如果嫌Java太啰嗦,又想用JVM,自己又有精力,學Scala

* 如果對對象之間的關系有點暈,學一學UML,以及它的一些圖,可以對程序和運行進行直觀的建模。你的IDE也許有插件可以生成UML圖。但是不要太沉迷于這些方法論。

【調試和輔助工具】學習一下你的集成開發環境提供的調試工具,加一些斷點試試

* 試試用jconsole或者VisualVM監控另一個jvm的狀態。

* 用profiling工具尋找程序中慢的地方。Eclipse有profiling工具。VisualVM也有這樣的功能。(如果不介意使用閉源軟件的話,也試試JProfiler和YourKit)

* 有的JVM允許在運行時更新代碼。Eclipse可以和某些JVM集成。這樣你可以頻繁修改代碼而不用頻繁重啟JVM。對于某些“重型”工程很有用。(如果不介意使用閉源軟件的話,也試試jRebel)

【多線程】學習Java的多線程編程以及lock、condition的用法(包括傳統Java的synchronized語句以及新加的java.util.concurrent.*),學習一下如何讓線程停下來,以及為什么要頻繁確認isInterrupted()而不要用Thread.stop()。了解一下多核處理器、緩存、內存的關系,以及為什么多線程編程這么難。

* 如果還舒服,學習一下Runnable的用法,以及自帶的Executer等基本多線程工具。* 應該已經留意到java.util里面的很多容器不是線程安全的,但是java.util.Collections可以幫你創建一些安全的版本。另外關注一下java.util.concurrent里面有ConcurrentMap等容器可供使用。

* 如果有空的話,看看memory model(內存一致性模型)和無鎖同步(見java memory model和java.util.concurrent.atomic)。

* 如果還有空,再了解一下除了“共享內存多線程編程”以外有沒有別的模型(多進程multi-processing、消息傳遞message passing等)。

【反射、元編程】學習Java的反射機制,以及Annotation的用法。

* 如果還舒服,試試java.lang.reflect.Proxy的用法。

* 如果仍然還舒服,玩一玩CGLib(一個第三方的庫)。

【網絡編程】學習一下IP, TCP協議(計算機專業的應該學過,復習一下),學習Socket編程(注意垃圾回收器不會幫你關掉Socket)。

1.如果不是很關心HTTP,看看java.nio,學習單線程輪詢式IO復用(Selector)。

* 如果有點不明白nio的意圖的話,了解一下c10k問題。

* 如果身體沒有異樣的話,大概了解一下操作系統(包括C語言)提供的select, poll, epoll, kqueue等接口。

* 如果身體仍然沒有異樣的話,試著用java.nio寫一個文件服務器。

* 如果還有精力的話,上網扒一扒有沒有其他的通信庫,如netty等。

2.如果關心Web還有HTTP,就學習一下HTTP協議,以及用Java進行HTTP的客戶端編程。

* 如果還舒服,學學HTML,寫寫HTML的靜態網頁(不需要Java)

* 如果還舒服,用Java寫一個基于DOM、XPath或者CSS Selector的網頁解析器(爬網頁)。

* 如果還舒服,學學Java的Servlet接口(先別學jsp)進行Web服務器端編程。學學標準的Servlet容器怎么用,包括web.xml的用法以及listener、filter等概念。以及某個Servlet容器(如Jetty或者Tomcat)的具體用法。

* 如果仍然還舒服,試著學一種模板語言(如haml, velocity, freemarker,【還有其他更好的框架嗎?我不知道】, String.format,如果真的想學JSP的話JSP倒是也行,但不推薦)。* 如果仍然覺得舒服,學學Spring框架中的Web框架,或者Struts,看你的口味。* 如果還舒服,看看Spring Bean Container以及里面各種亂七八糟的工具。

* 如果還舒服,或者有需求,了解一下什么是RESTful Web Service,復習一下HTTP,找找適合的Java工具。

* 你可能會覺得Jackson是一個解析JSON用的好用的東西。

【數據庫】學習一下關系數據庫(計算機專業的應該學過,復習一下),包括SQL。選一個數據庫管理系統熟悉一下(比如MariaDB,或者(如果你不討厭Oracle的話)用被Oracle收購了的MySQL。先脫離Java單獨學學)。然后看它們的官方文檔教你怎么用Java連接這種數據庫。這中間會涉及到JDBC接口。同時一定要知道SQL注入安全漏洞,以及掌握如何用PreparedStatement防止注入!。建議看 http://bobby-tables.com/

* 可能中間會涉及“事務”問題,讓你不知不覺地開始去了解java transaction api(JTA)。* 如果還舒服,學一學對象關系轉換(如Hibernate)。

* 也可以學學非關系數據庫,以及如何用Java訪問它們。

【日志記錄】學習一下slf4j和logback的用法。

* 如果有精力的話,以及大概知道世界上有多少種Java日志框架,以及slf4j是怎么橋接這些框架的。

【構建(build)系統】學習一下Ant的用法。

* 如果還舒服的話,學習一下用Ivy從Maven的倉庫里下載軟件包,解決依賴關系。

【版本控制】學習一種分布式版本控制器(如Git、Mercurial、Bzr、Darcs等,推薦Git)的基本用法,以及如何用它管理Java工程。希望你已經開始使用Maven了。然后了解一下如何在IDE中使用(Eclipse自帶Git插件)。

* 如果感覺很舒服的話,為你們實驗室搭建一個Linux+SSH+Git服務器,裝個GitLab(一種Web界面)。并說服同事們不要再用SVN、CVS或者SourceSafe等老舊的“集中式版本控制器”了。

* 開設一個GitHub賬戶。如果你不喜歡Git,就用BitBucket等。

【持續集成】自己(或者為你們實驗室)搭建一個持續集成(Continuous Integration)服務器,定期編譯你的程序。

【零碎工具】淘一淘java.nio.files里面有什么好用的東東,然后再淘一淘Apache Commons Lang和Commons IO里有什么好用的工具。Commons Logging就不要再用了,用SLF4j和Logback。

【XML】學學XML、DOM、XPath。XML這東西到處都可能用到。也可以用它寫自己的配置文件。

* 如果覺得不舒服了,就學學JSON和YAML。

* 如果還是不舒服,就學學文本文件解析。

【語法分析和編譯器】學學Antlr或者別的Parser Generator的用法

* 如果覺得舒服,自己寫一個計算器。

* 如果還覺得舒服,自己寫一種Domain-Specific Language(DSL)。

【高效容器】學學FastUtil或者Trove,如果你需要進行大量數值運算的話。

【分布式計算】學學MapReduce的思想以及它的實現。

* 如果還舒服,學學Scala語言以及號稱比MapReduce快得多的Apache Spark。

【進程間通信】看看ActiveMQ、MINA和RMI。

【其他語言(JVM)】學習另一門跑在JVM上的語言或者實現(如Groovy、Scala、Clojure、JRuby、Jython、JavaScript……)

* 如果還舒服,學一學Java Scripting API(注意不是JavaScript。給個鏈接: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/),然后試著在自己的Java程序里嵌入腳本。

【其他語言(非JVM)】學習另一門通用腳本語言(如Python、Ruby,其實perl也行,但不推薦),知道什么時候Java不是最好的選擇。

【Java語言和Java虛擬機】通讀一遍(一目十行地讀,不用細讀)Java Language Specification,以及Java Virtual Machine Specification。

* 了解以下解釋器(interpreter)、編譯器(compiler)、即時編譯器(just-in-time compiler)和優化器(optimiser)的概念。

* 如果對編譯器的話題不感到畏懼,了解一下method JIT和tracing JIT的概念和區別。

【內存管理】學學垃圾回收的幾種基本算法,包括mark-sweep、mark-compact、semi-space、generational、mark-region等,各自的性能,以及為什么樸素的reference counting是不完整的。知道為什么finalizer性能很糟糕,而且標準并不要求finalizer在程序退出前一定會執行。* 如果還舒服,了解一下如何設置Java虛擬機的堆大小限制(如HotSpot虛擬機的-Xmx選項等)。

* 了解一下Java里的WeakReference以及SoftReference和PhantomReference,以及它們什么時候有用,以及為什么它們實現起來有些困難。

* 如果有精力,了解一下Hotspot虛擬機的內存管理算法是什么樣的。

【動態裝載】學學Java的動態裝載(class loading)

* 如果還舒服的話,學學OSGI以及它的一種實現(如Felix或者Equinox)

* 如果仍然很舒服的話,學學寫基于Eclipse平臺的程序。不是Eclipse集成開發環境,只是利用他們的圖形框架,寫自己的應用程序。

* 如果還覺得舒服的話,寫Eclipse集成開發環境的插件。

【本地/外語接口】學習一下Java Native Interface(JNI),試著寫一個Java和C語言混合編程的程序。

* 如果覺得不舒服了或者覺得欲仙欲死,就學一學Java Native Access(JNA),試一試不用任何膠水代碼而從Java直接裝載C庫,直接調用C函數。

* 如果連JNA也懶得學,就學一學SWIG,自動生成綁定。

* 如果覺得舒服,就學一學Java Virtual Machine Tooling Interface(JVMTI),用C程序來監視JVM的狀態。

【密碼學】學一學密碼學,包括編碼、密碼分析、攻擊、對稱密鑰、公鑰系統、數字簽名、哈希算法等,看看Java有沒有實現。

* 如果覺得有點不舒服(你應該不會覺得舒服吧,除非你是學密碼學的,要不然總會覺得自己寫的程序有安全漏洞),就寫一個“人品計算器”來放松一下,要求每次輸入同一個姓名,得到的人品值是固定的,但又要讓人無法用別人的人品值猜自己的人品值。

【移動終端】學一學Android開發。

* 如果有精力的話,看看Dalvik虛擬機是怎么回事。

* 建議買一個iPhone或者iPad,或許你再也不想用Android手機或者平板了。

【歷史】如果覺得有些無聊,就去挖一挖歷史上比較火的可能和Java相關技術,比如:* Applet,想想它比起html5+css3+javascript的缺點在哪里。

* AWT、Swing,想想為什么很少有人用Java寫圖形界面程序。你覺得Swing的程序看上去舒服嗎?中國人和殘疾人喜歡用Swing程序嗎?

* JNDI,想想它比起Spring Bean Container的缺點在哪里。

* JSP,想想它比起MVC結構的缺點在哪里。

* WSDL/SOAP,把它們和XML-RPC、RESTful Web Service比較一下。

* XSLT,以及為什么它是圖靈完備的??墒撬娴谋菾ava本身更好用嗎?

* Log4j、java.util.logging、Apache Commons Logging,各自有什么問題,以及Log4j的作者本人為什么又開發了SLF4j和Logback?

* Java最早是為什么設計的?

* Type erasure是怎么回事?為什么ArrayList不行但ArrayList就可以?挖一挖歷史。

第五篇:Java初學者如何學習(必看)(本站推薦)

這篇文章是我無意中在網上看到的,很有感觸,感覺對初學者肯定會有幫助,打算整理一下再發出來的,可是改了半天,還是沒人家原本的內容連貫,有邏輯性。所以直接拿過來了。希望想學習java朋友可以花點時間看看,看完肯定會有所收獲的,我不多說了,趕緊看看牛人的建議吧。JAVA交流群四一八,三五五,加上五三一。給初學者之一:淺談java及應用 學java不知不覺也已經三年了

每次上網,泡bbs逛論壇,沒少去java相關的版面 總體感覺初學者多,高手少,精通的更少

很多人對java感到茫然,不知所措,不懂java能做什么 即便知道了java很有用,也不清楚該從哪里入手 所以就有了 java入門難 這一說法

ok,那我們就從java到底能做什么聊起 先說什么是java java是一種面向對象語言,真正的面向對象,任何函數和變量都以類(class)封裝起來 至于什么是對象什么是類,我就不廢話了

關于這兩個概念的解釋任何一本面向對象語言的教材里面都有 知道了什么是java,那自然就會對java能干什么感興趣

在說java能做什么之前,先說java作為一個真正面向對象語言的優點 首先第一個,既然是真正的面向對象,那就要做到徹底的封裝

這是java和c++最大的不同,java所有的源碼以及編譯后的文件都以類的形式存在

java沒有所謂的類外部定義,所有的函數(方法)以及變量(屬性)都必須在類內部定義 這樣就不會出現一個類被切割成這里一塊那里一塊的情況,c++就可以,不是么? 這樣做使得整個程序的結構異常清晰,明了

其次第二個,最讓人歡呼雀躍的是完全屏蔽了指針,同時引入了垃圾回收機制 任何一個寫過c/c++代碼的人,都會對內存管理深惡痛絕 因為這使得我們不能把主要精力放在我們關心的事情上 而需要考慮計算機內部的一些事情,作為一個軟件工程師

我想沒有一個人愿意把大量的時間花在內存管理上,畢竟我們不是電子工程師 此時java的優勢體現出來了,它完全屏蔽了內存管理

也就是說,如果你用java寫程序,寫出來的任何一個程序內存上的開銷,都不受你控制 乍一看,似乎你受到了束縛,但實際上不是這樣

因為雖然你的程序無法對內存進行管理,降低了一定的速度 但你的程序會非常非常的安全,因為你無法調用一個空指針 而不像以前寫c的時候那樣,成天因為空指針而擔驚受怕

當然,如果你深入了解這一行,就會發現java其實也無法保證程序不去調用空的指針 但是它會在最大程度上避免空指針的調用

這已經很好了,安全,這是java的最突出的優點

第三個,虛擬機跨平臺,這是java最大的特點,跨平臺 可能所有人都知道windows,但是不是所有人都知道unix 和java一樣,很多人都不知道unix這種操作系統干什么用

我不想多說unix的應用,這不是主要,但是我要說,大部分小型機 工作站,都跑在unix一族的操作系統上,比如linux/solaris unix比起windows有一個最顯著的特點,穩定,這就好比思科和華為 思科的機器慢但穩定,華為的機器快但不穩定,作為服務器這一端來說還是非常有市場的 而且很重要的windows不安全,在ms的宣傳中我想所有人都很少看到安全二字 因為windows操作系統針對的是pc用戶,pc死機就死機咯,大不了重啟 最經常冒出來的就是藍屏,在服務器這一端上因為ms沒有自己的芯片

所以要做系統有些力不從心啊。扯遠了,那么java可以做到在windows上編譯 然后在unix上運行,這是c/c++做不到的 那么說到這里,java能做什么逐漸清晰起來 剛才說到了,java程序有一個的特點是安全

這個安全是針對你的系統來說得,系統在跑了java程序之后會特別地穩定

而且還能跨平臺,那么很明顯,java主要應用于除了windows操作系統以外所有的平臺 比如手機,服務器

想想看,如果你寫的程序要跑在手機上,而手機有多少款用的是windows? 就算有,那如果你用c/c++,是不是要針對每一款手機寫一套程序呢? 累死,那跨平臺的java就不用,做到編譯一次,隨時運行

同樣,在服務器這一端,如果我想給一個網絡門戶站點,比如sina 寫一個應用程序,pc的性能肯定無法滿足sina這樣大站點并發數量的要求 那么它就需要買服務器,那么服務器ms沒有市場,而且windows很不安全 那么十之八九會買一個sun/ibm的機器,或者hp,但不管是誰的機器

它裝的操作系統也不會是windows,因為windows太不安全了,而且多核的支持太差了 這個有空再說,那么如果你要寫一個程序在這樣的機器上跑

難道我們就在這個機器上做開發么?當然不可能,一般程序員開發用的都是pc,windows 那么該怎么辦?寫一個程序,然后再拿到服務器上去編譯,去調試? 肯定不可能,所以我們就希望找到一個語言,編譯完生成程序之后

在pc上調試,然后直接移植到服務器上去,那么此時,我們就會毫不猶豫地選擇java 因為在跨平臺以及安全性來說,java永遠是第一選擇 ok,下面說java的缺點

一慢,這其實是一種誤區,這就好比goto語句一樣

java也拋棄了指針,雖然看上去似乎變慢了,但是在這個兩三年硬件性能就能翻番的年代 速度已經不是我們關心的問題了,而且對于企業級的應用來說

沒有什么比安全穩定更重要的,換句話說,我們可以忍受慢,但是不能忍受死機和藍屏 而且越大型的應用,這種慢的劣勢體現得越模糊

因為當系統項目越做越大,任何一個環節做不好都可能影響全局的情況下 安全尤其重要,而且就像goto語句一樣

這種過分追求速度的主張會給系統開發和糾錯以及維護帶來無可挽回甚至不可避免的損失 把內存交給計算機去管理吧,這種代價值得

我們做的不是pc游戲,沒必要把內存的那一點點消耗當親爹

二難看,又是一個誤區,很多人甚至拿出java swing控件畫出的界面來說 呵呵,其實java不是不能畫得好看,IDEA就是java寫的IDE,挺漂亮的

但為什么難看呢,是因為swing控件它本身就是unix時代的產物,swing控件貼近unix界面

老外看unix界面其實挺順眼的,他們就是吃unix飯長大的

而unix又是吃百家飯的,不像ms那么唯利是圖,所以不怎么對中國人友好 加上我國又沒有公司在做操作系統,所以看上去是不怎么順眼 其實玩過unix的人都知道,unix對中文的支持一直不怎么好 給初學者之二:從JDK說起

在知道了java有什么優點,能做什么之后 就該說一下java該如何去學了

在說java如何去學之前,有必要把java的幾個大方向做一個簡單說明 早在99年的時候

sun公司做出了一個決定,將java應用平臺做一個劃分 畢竟在不同領域,語言應用特性是有區別的

針對不同領域內的應用,sun公司可以發布相關高端標準來統一規范代碼 這三大塊就是J2SE,J2EE以及J2ME 這個舉措今天看來無疑是非常了不起的

正是由于這次革命性的發展,使java從一種小打小鬧游戲性的語言 發展成為今天企業級應用的基礎

這里要特別說明一下J2SE J2EE J2ME中2的意思 其實2就是英文單詞to的諧音,就是to的意思

而不是second edition,當然java 2本身版本號就是1.2,也有點2nd edition的味道 說點題外的,sun公司發布的java版本很有意思

雖然總是寫是1.X但其實外界對這種版的說法也就是X.0 比如java 2,其實就是java 1.2 1.3其實就是3.0,1.4就是4.0,現在所說的5.0 其實就是1.5 只是以前我們更習慣叫1.X而已

可能到了5.0以后,就全改叫X.0而不是1.X了

所以以后聽到別人說java 5.0,千萬別驚訝,其實就是1.5 在這三個J2*E中J2SE是基礎,就是java 2的標準版(java 2 standard edition)也就是最基礎的java語言部分,無論學什么java技術,J2SE都是必須掌握的 要使用J2SE就必須安裝JDK(java development kit)

JDK在sun公司的主頁上可以免費下載,下載后需要安裝,具體安裝流程看教材 JDK包含有五個部分:核心API,集成API,用戶界面API,發布技術還有java虛擬機(JVM)先說運行環境,運行環境最主要要說的就是java虛擬機(JVM)

前面我們說過java是跨平臺的語言,那么如何做到跨平臺呢?畢竟每種操作系統都是不同的

java的設計者們提出了一個虛擬機的概念

在操作系統之上建立一個統一的平臺,這個平臺必須實現某些功能以支持程序的運行 如下圖:

------| program |------| JVM |------| UNIX | Windows | Linux | Solaris |..------程序員所寫的每一個程序都先運行在虛擬機上 所有操作都必須經過虛擬機才能和操作系統交互

這樣做不僅統一了所有操作系統,同時也保證了操作系統的安全 要死機的話,死的是虛擬機(JVM)而操作系統并不會受此影響 而我們所說的java運行環境指的主要是JVM,其他的不說了,省略

下面說說JDK(java development kit)的API,其實用JDK來包括運行環境以及開發工具 個人感覺是不恰當的,因為這三個單詞僅能說明開發工具,也就是幾個標準的API 而沒有讓人感覺到有運行環境的意思在里面,這是題外 那么什么是API? 簡單地說就是Application Programming Interface,應用程序編程接口 在java里面,就是一些已經寫好了的類打成的包

這又要解釋什么是類什么是包了,簡單說一下,包就是類的集合 一個包包含零個或多個類,嗯,具體的可以去看書

這些類是java的基礎類,常用的類,可以簡單理解成java的工具集 最后說一下JDK的發布技術,其實按我的理解,講白了就是編譯器將.java文件轉換成.class文件的一種技術

這三部分組成了JDK,有了JDK,就可以開發出J2SE應用軟件了 最原始的只要用一個記事本寫幾行代碼就可以了

但一般來說我們會使用效果比較好的開發工具,也就是IDE 在J2SE這一塊,特別推薦JCreator這款IDE sun公司的產品,與JDK結合得幾乎是天衣無縫,非常適合初學者使用

教材方面中文的推薦電子工業出版社出版的《java教程》初級與高級篇各一本 還有就是《21天學通java》雖然有人說21天系列是爛書,但個人感覺

對于j2se,這本書翻譯得已經很不錯了,基本沒有什么語法錯誤,語句也很通順 最后要說的就是《thinking in java》

這本書自然很經典,說得比較細,只是我覺得不太適合初學者,其實也不難

初學者直接看也不成問題,但個人感覺還是找本教材也就是前面推薦的兩款來看比較好 基本概念的理解還是用教材的,畢竟thinking in java有的版本翻譯得很爛 而且個人建議還是看原版比較好,當然這幾本都看最好了,但如果沒時間 至少精讀其中一本,然后再看其他兩本就可以,其實三本書內容也差不多

但看問題的角度方式以及面向的讀者也都不同,嗯,怎么說呢,找適合自己的吧 最后要說的是

由于虛擬機的存在,J2SE的大多數軟件的使用會比一般桌面軟件慢一些 效果不盡如人意,現在大概只有swing控件還在使用吧,其它沒怎么聽說 J2EE&J2ME 這是java應用的重中之重,如果想拿高薪,最好把J2EE學好

記得以前在csdn上看過一個調查,月薪上萬的程序員主要從事哪方面的工作 十個中有八個是做J2EE的,其他兩個一個做J2ME,還有一個做嵌入式 也許有些夸張,但也從某一方面說明J2EE人才的稀缺以及應用的廣泛

所以如果想學java,只精通j2se是永遠不夠的,至少還需要時間去了解其它兩個J2*E

給初學者之三:java企業級應用之硬件篇

總算講到企業級應用了,內容開始逐漸有趣起來 java企業級應用分為硬件篇和軟件篇

重點在軟件,硬件是外延,嚴格地說與java沒有必然聯系 但是,由于java是網絡語言,不了解硬件的一些基礎知識

軟件知道再多也沒什么用,不要上了戰場還不知道為什么而打仗

硬件是軟件的基礎,在這個前提下,有必要專門花一點點篇幅來聊一下硬件 硬件,簡單地說就是我們實際生活中看得見摸得著的東西,也就是那些冰冷的機器,比如服務器,個人電腦還有網絡交換機,路由器等等,那么先拋開網絡設備不談,先來說說計算機電腦的歷史

在很早很早以前,人類創造了第一臺電腦,那時候的電腦只是一臺用來計算的機器 無比大,無比重,無比傻,除了算其它屁事不會做,沒有所謂的人工智能與計算機網絡 但是總算是誕生了,雖然以今天的眼光去看那時候的機器巨傻無比 只配叫做計算器而不是電腦,沒有邏輯思維能力,只會死算 但千里之行,始于足下,反正是造出來了 然后隨著時間的推移,制造業發展發展發展

電腦性能逐漸得到提升,速度快了起來,成本也逐漸低了下來

于是人們造出了第二臺,第三臺,第四臺,第五臺……第n臺計算機 人們就造出了無數臺計算機并使其成為一種產品

逐漸應用于許多復雜計算領域,不僅僅是科研,許多生產領域也開始出現計算機的影子 然后又隨著時間的推移,人們發現不可能把所有的計算機都做成一個樣子 因為各行各業對計算機性能的要求各不相同

于是開始把計算機劃分檔次,最簡單地是按照計算機的大小劃分 就是教科書上寫的大型機,中型機,小型機

//個人感覺這樣分純粹扯淡,還以為是小孩子玩球,分為大球,中球和小球 但是不管怎樣,計算機不再是千篇一律一個樣子了

按照性能的不同,在不同領域,出現了滿足符合不同要求的計算機 幾乎在同時,人們也開始考慮計算機之間通訊問題

人們開始考慮將不同的計算機連接起來,于是網線出現了,網絡出現了 又隨著網絡的發展,出現了一下專門為了尋址而存在的機器 這就是路由器和交換機,然后又出現了一些公益性的組織或團體 他們制定了一系列的標準來規范以及管理我們的網絡 于是3w出現了,計算機的網絡時代來臨了

嗯,說到這里,計算機發展到今天的歷史大概說完了,我們來詳細說說網絡時代的計算機以及各個硬件供應商之間的關系

前面說到了,計算機分為大型機,中型機和小型機……

但是現在市場上沒有人這樣分,要是出去買機器,對硬件供應商說

我要買一款中型機,或者說,我要買一款小型機,硬件供應商肯定會問問題

他們會問你買機器干什么用的?科學計算啊還是居家用,是作服務器啊還是圖形設計 但不管怎樣,簡單地說大中小型機已經沒有什么意義了 我們按照使用范疇來劃分 簡單劃分為

服務器,工作站還有微機 服務器(server)

服務器涵蓋了幾乎所有的大型機以及大部分中型機甚至一些小型機 用通俗點話說??衿骶褪悄掣齬??4小時不間斷運行提供服務的機器 比如賣飛機票(中航信),比如酒店預定(攜程)

比如提供門戶站點相關服務(sina),比如電子商務(ebay,amazon,阿里巴巴)這些服務對機器都有一些特定的要求,尤其強調安全和穩定 工作站(workstation)

工作站其實是圖形工作站的簡稱,說白了,就是某種功能極其強大的計算機 用于特定領域,比如工程設計,動畫制作,科學研究等 個人電腦/微機(pc)

計算機網絡的最末端,這個應該不用我說太多了 網絡時代的pc已經普及到千家萬戶

說完了分類,我們就來說說各個硬件供應商 首先是服務器還有工作站

這兩類硬件供應商主要是以下三家 Sun,IBM還有HP(惠普)然后是PC 以前IBM還有PC事業部,現在被聯想吞并了(蛇吞象)

現在國際市場上有聯想和DELL(戴爾),目前戴爾還是國際老大 還有HP康柏

然后是網絡,也就是路由器和交換機

這塊市場嘛,Cisco(思科)Brocade(博科)還有McDATA三足鼎立 內核(CPU)PC內核

主要是AMD和Intel,前者最近與Sun公司合作,Sun也有一部分單雙核服務器用的是AMD的

服務器與工作站內核 這一塊與硬件廠商綁定

還是Sun,IBM,HP三家自己生產 題外

在一些大型主機應用市場,比如賣飛機票

德國的漢莎,中國的中航信,香港的國泰用的都是尤利(美國的公司,英文名我忘了)其它用的是IBM的機器,現在能做大型機的感覺似乎只有IBM可以

尤利已經快倒了,技術太落后了,現在他們的系統還是fortran寫的,連c都不支持 要特別說明的是,一個超大型主機然后多個小終端/pc的結構現在越來越沒市場了 將來的趨勢是用一整個包含多個服務器的分布式操作系統來取代這些大型主機 因為大型主機更新換代極其困難,一旦數據量超過了主機的處理能力 那么就要換主機,這個成本是極大的,但是如果用分布式操作系統 那就只需要增加小服務器就行了

硬件就大概說到這里,與大多數人沒什么關系

因為大多數人壓根不可能進入這些硬件領域,除非做銷售 說了這么多,只是為了給軟件部分打基礎而已 //做嵌入式的除外

給初學者之四:java企業級應用之軟件篇 嗯,說過了硬件就該是軟件了 這篇是這個系列的重中之重

首先我們來說說什么是軟件,統一一下概念 所謂軟件通俗地說就是一套計算機程序 實現了某些功能的計算機程序

在很早很早以前,一臺計算機的軟件是不分層次結構的

一臺計算機只有一個系統,這個系統既是操作系統又是應用軟件,與硬件緊密綁定 后來經過許多年的發展發展發展 人們把一些與硬件緊密相連的又經常用到必不可少的功能做到一套程序中去 這一套程序就被人們稱做操作系統

另外一些可有可無的,不同工作適應不同環境的功能封裝到另外一套程序中去 而這一系列程序被人們稱作應用軟件 如下圖:

------------|應用軟件:falshgat/IE/realplayer/winamp..|------------|操作系統:UNIX/Windows/Linux/Solaris...|------------前一篇我們知道,硬件分為服務器工作站與pc 其實無論哪種硬件的軟件,都有操作系統與應用軟件 ok,那下面我們來談應用軟件

在現在企業級應用中,我們的應用軟件一般分為三層 三層分別是表示層,業務邏輯層,數據持久層------------------------------|表示層|業務邏輯層|數據持久層|------------------------------我們來說說三層中的代表軟件 表示層

這一層一般在客戶端pc機上,最常見的是IE瀏覽器,這就是表示層的軟件 表示層是直接與使用者交互的軟件 業務邏輯層

這一層一般在服務器端,顧名思義,所有業務邏輯處理都在這一層完成

最典型的是appserver,比如IBM的websphere,BEA的weblogic還有tomcat/jboss等 這一層也是三層中的重點,我們要說的大部分內容都是關于這一層的,這個等會再說 這一層就叫做中間層 數據持久層

這一層典型的就是數據庫,一般也在服務器端 但該服務器一般與裝業務邏輯層軟件的服務器分開 當然你也可以用IO輸入輸出流往硬盤上寫東西

但沒人會建議你這么做,因為這樣做你的數據缺乏管理,不管怎樣 這一層要做的就是保存數據,業務邏輯層軟件一般不負責保留數據

或者說業務邏輯層只負責暫時儲存數據,一關機,業務邏輯層數據全部over了 那么數據的持久化(也就是儲存數據)就必須要在這一層完成下面放著這些概念不談,我們來說說將來的趨勢 趨勢一:

瘦客戶端,很早很早以前,當時C/S模式也就是client/server 客戶端軟件大行其道的年代,一個pc用戶,是采用一個傻終端連接到服務器上 然后進行相應的操作,最典型的就是我們上bbs經常用的c-term 這就是那個時代的產物,同樣還有我國現行的機票定座用的e-term 后來呢,瀏覽器變得非常流行,人們發現,瀏覽器也能傳遞一些數據 雖然這些數據并不像那些終端那樣準確,但應付大多數日常需求足夠了

于是人們就提出一個瘦客戶端概念,也就是說,將來表示層所有的其他軟件疾揮? 我們唯一需要的就是一個網頁瀏覽器,然后通過瀏覽器輸入ip地址連接到服務器 然后進行相關的操作,由于網頁瀏覽器一般每個操作系統都有自帶一個 這樣做就達到了給我們客戶端瘦身的目的(不需要安裝額外軟件)這樣模式被稱作B/S模式,也就是browser/server模式

但需要指出的是,雖然瘦客戶端是趨勢,但并不代表胖客戶端沒有市場 尤其是一些復雜的業務操作,還是瀏覽器這種簡單軟件無法勝任的趨勢二:

傻數據庫,ok,首先,我承認,這個名詞是我發明的,但我實在無法找到一個更好的表達 什么是傻數據庫,如果誰對數據庫有所了解的話,就知道,以前的數據庫

有自己的一套管理體系,甚至有自己的客戶端,比如oracle,mysql,sqlserver都有 在某個管理工具上寫什么sql語句查詢數據庫是我們以前常做的事 那么將來我們提倡的是:將所有的業務邏輯封裝到業務邏輯層去 管理的事情由軟件來做,由業務邏輯層的軟件來做 所謂傻數據庫就是說,將來的數據庫什么事都不用做

只用把數據給我保存好就行了,那些復雜的業務邏輯什么外鍵什么關聯 都沒數據庫什么事了,都交給業務邏輯層軟件來做

這樣做的好處就是:我們就不需要這些該死難懂又復雜的數據庫系列管理工具了 而且這些工具每個數據庫都有自己的工具,完全不一樣,亂七八糟,沒有人喜歡面對他們 除了數據庫維護人員,也就是DBA,我們是軟件工程師,維護的事讓他們去做

而且嚴禁數據庫維護人員改動數據庫的數據,他們只做備份,必要時候恢復一下就是了 了解了這兩個趨勢之后,是不是有種砍頭去尾保中間的感覺?

沒錯,未來的趨勢就是中間件時代,中間件工程師將是未來計算機應用的主流 那再次統一一下概念,什么是中間件?

記得我上學的時候,看ibm的教材,看了半天中間件定義,就看懂記住一句話 中間件是做別人不愿意去做的事情,現在想想,狗屁定義,呵呵 什么是中間件,中間件是業務邏輯層的應用軟件 是處理業務數據與客戶端之間業務邏輯的一種應用軟件 一種提供網絡服務的服務器端應用軟件

舉個非常簡單的例子,網上銀行,某個人想用IE進入工行的賬戶,然后轉帳 在這個例子中,客戶端表示層顯然是IE,數據持久層顯然是銀行的核心數據庫 那么中間件是什么?中間件就是提供這種服務的系統 這三層的劃分如下

------------------------------|表示層 | 業務邏輯層 | 數據持久層 |------------------------------| IE | 網上銀行 | 數據庫 |------------------------------給初學者之五:企業級應用之中間件 前面一篇簡單介紹了一下應用軟件的分層

下面重點介紹一下中間件,也就是業務邏輯層的軟件結構 從本系列第二篇我們知道,java程序是跑在虛擬機之上的 大致結構如下:------------| grogram |------------| 虛擬機 |------------| 操作系統 |------------也就是說操作系統先運行一個java虛擬機,然后再在虛擬機之上運行java程序 這樣做的好處前面也說過了,就是安全,一旦出現病毒或是其他什么東西 掛掉的是虛擬機,操作系統并不會受多大影響

這時候有人可能會問,為什么非要虛擬機?把操作系統當成虛擬機為什么不行? 可以,當然可以,但是這樣做某一個應用軟件的bug就可能造成整個操作系統的死亡 比如說我們在某個服務器上安裝了一個收發電子郵件的軟件和java虛擬機 那么一旦黑客通過收發電子郵件的軟件入侵系統,那么操作系統就整個玩完 那么如果黑客通過java程序進行攻擊的話,那么死的將會是虛擬機而不是操作系統 大不了虛擬機崩潰,而操作系統正常運行不受任何影響

舉個簡單例子,比如說最常見的是將數據庫(DB)與中間件放在同一臺服務器上------------------------| program | |-----------| DB | | 虛擬機 | |------------------------| 操作系統 |------------------------那么此時如果沒有虛擬機,黑客病毒攻擊中間件系統,就有可能造成操作系統的死亡 那此時數據庫也有可能跟著一起玩完,那損失可就大咯

那如果此時有虛擬機,那么一旦被攻擊,死的是虛擬機,操作系統與數據庫不受任何影響 嗯,回顧完虛擬機,再來介紹中間件

在很早很早以前,任何一家企業,想要搭建一個局域網系統,他需要請許多個工程師 比如說我們想搭建一個網上銀行,客戶端用瀏覽器,后臺數據庫比如說用oracle 那么搭建這樣一個網上銀行,可能需要用到多少個工程師,我們來算一算

首先,由于客戶端用的是瀏覽器,我們需要一些了解網絡通訊協議以及一些瀏覽器標準的網絡工程師

其次,由于后臺數據庫用的是oracle,那我們還需要請oracle的工程師,因為數據庫這一層每個數據庫公司的接口什么都不 一樣

然后,我們還需要一些操作系統的工程師,因為我們的系統需要跟操作系統直接交互 最后,我們需要一些設計網上銀行系統及其相關業務的工程師

太多了太多了,這樣一個中間件隊伍實在太龐大了,制作維護成本實在太高了 不僅如此,這樣一個中間件就算做出來,他們所寫的代碼也只能滿足這一家公司使用 其它公司統統不能再用,代碼重用率極低,近乎不可能重用 畢竟這個系統中改動任何一個部分都有可能涉及到整個系統的改動 那么如何降低成本? 我舉出了四組的工程師:

網絡工程師,數據庫工程師,操作系統工程師以及設計網上銀行系統的業務工程師 除了最后一組設計網上銀行的業務工程師之外,前面三組工程師是不是每一個項目都需要的?

就算不是每一個項目都需要,至少也是絕大多數項目需要的吧?

哪個項目能夠脫離網絡,數據庫和操作系統?不可能,在這個時代已經很少很少了 好,那既然每個項目都需要,我們是不是可以用一個產品來取代這三組的工程師呢? 我們的業務工程師只需要遵循這個產品所提供的接口,進行相應的開發就行了 人們提出了一種叫做appserver也就是應用服務器的東西

應用服務器是干什么的?按官方的說法,應用服務器是包括有多個容器的軟件服務器 那容器是什么?容器(Container)到底是個什么東西我想多數人還是不清楚 在說這個之前,先介紹一下組件

什么是組件,組件是什么?組件其實就是一個應用程序塊 但是它們不是完整的應用程序,不能單獨運行 就有如一輛汽車,車門是一個組件,車燈也是一個組件 但是光有車燈車門沒有用,它們不能跑上公路

在java中這些組件就叫做javabean,有點像微軟以前的com組件 要特別說明的是,由于任何一個java文件編譯以后都是以類的形式存在 所以javabean肯定也是一個類,這是毫無疑問的 好,那么容器里裝載的是什么呢?就是這些組件 而容器之外的程序需要和這些組件交互必須通過容器

舉個例子,IE發送了一個請求給容器,容器通過調用其中的一個組件進行相關處理之后 將結果反饋給IE,這種與客戶端軟件交互的組件就叫做servlet 但是組件有很多種,那么如何區分這些組件呢?

有多種管理辦法,比如同是同樣是servlet,有些是通過jsp生成的

而有些是開發人員自己寫的,那么通過jsp生成的servlet集中放在一個地方 而開發人員自己寫的則需要在xml里面配置一些基本的參數

同時,不同組件有可能還需要繼承一些特定的父類或者接口,這也是容器管理的需要 還有其他的一些組件,這里就不一一說明舉例了 那么容器有很多種,按照他們裝載的組件類型劃分

比如有裝ejb的ejb容器,有裝servlet與jsp還有靜態頁面的web容器等等 //這種只含有web容器的應用服務器也被叫做web服務器 當表示層的應用軟件通過網絡向appserver發送一個請求的時候

appserver自動找到相應容器中的組件,執行組件中的程序塊,把得到結果返還給客戶 而我們要做的事就是寫組件也就是javabean,然后放到appserver里面去就可以了 至于怎樣與IE通訊,怎樣截獲網絡上的請求,怎樣控制對象的數量等等

這些繁瑣而無味的工作我們都不管,都由appserver去做吧,把注意力集中在業務邏輯上 appserver與其他相關軟件的關系如下圖:

------------------------| 表示層 | 業務邏輯層 | 數據持久層 |------------------------| |-----------------| | | IE | | javabean | | | |->------------------> DB | | client <-appserver <-| | |-------------------------| | | | 虛擬機 | | |--------------|-------------------------|------------| | Windows | Linux/Saloris |LinuxSaloris| |--------------|-------------------------|------------| 圖上可以看出:虛擬機負責處理中間件與操作系統之間的交互 appserver則負責組件的管理以及與其他兩層的業務交互

要說明的是上圖中還包含有應用程序客戶端容器(Application client container)管理應用程序客戶端組件的運行,應用程序客戶端和它的容器運行在客戶機 這種情況比較復雜一般說的是兩個server之間的通訊

比如jsp/servlet容器在一個服務器上,而ejb容器在另外一個服務器上等等 這是分布式操作系統大面積應用的基礎,這個以后再說 嗯,那么話題再回到中間件上去,什么是中間件?

appserver就是所謂的中間件,但是中間件不僅有appserver,還有其他的東西 換句話說,appserver只是中間件的一種

而關于中間件有諸多規范以及遵循這些規范的模型 最流行的規范無非兩種,一個是j2ee還有一個是.net 但是.net幾乎只有微軟在用,所以很多人把.net這個規范就當成是微軟的中間件產品 也不為過,畢竟沒幾個公司喜歡跟著微軟屁股后面跑的 給初學者之六:java企業級應用之綜合篇 我們知道中間件有很多種規范以及相關的模型 最流行的一個是j2ee還有一個是.net 那么各大公司關于這兩套規范各有什么產品以及周邊呢? j2ee: 黃金組合

操作系統:Solaris 應用服務器:Weblogic 數據庫:Oracle 開發工具:JBuilider/IntelliJ IDEA 優點:性能一級棒,大企業大公司做系統的首選,世界五百強幾乎都是這套組合 缺點:極貴 超級組合,也是最安全最酷的黃金組合,硬件采用SUN公司的機器 但是SUN的服務器很貴,同等價格不如去買IBM的機器

SUN的服務器支持Solaris的效果自然不用說,Solaris號稱是世界上最安全的操作系統 Oracle也是世界上最安全,性能最優的數據庫,Weblogic是當今性能最優的appserver JBuilder和IDEA各有所長,JBuilder是Borland公司的招牌之一

是當今世界上最流行的java IDE,用delphi寫的,但網絡上評價似乎不是很好 IDEA擁有插件功能,界面在所有java IDE中最為漂亮,東歐人開發的產品 東歐人嚴謹的作風在這個產品上體現得尤為突出,用java寫的

IDEA甚至號稱自己被業界公認為是最好的IDE//個人保留意見,沒有最好只有更好 但我用JBuilder的時候發現了不少bug,而至今還沒有在IDEA上發現什么bug 個人推薦IDEA 價格方面,Solaris開源,但是SUN的服務器比較貴,Weblogic最高是34萬 oracle標準版要18.6萬,企業版要49萬,JBuilder要2.7萬左右 IDEA零售價大概是500美金,也就是5000多元

另外,雖然理論上這些產品的綜合性能要高于其他選擇,但是必須看到

由于產商之間的利益沖突,比如oracle也有自己的appserver,但是性能不怎樣 使得這幾種產品之間協作的性能要比預想中的要差一點點--開源系列 操作系統:-應用服務器:JBoss 數據庫:MySql 開發工具:Netbeans 優點:便宜,性能未必最佳,但是對付中小企業足夠了 缺點:出了問題自己抗吧

嗯,這是java陣營最大的特色,免費免費,還有在開發工具這一欄Eclipse也是免費的 但后面要說,算了,換個有代表性的開源產品來

tomcat僅有web容器而沒有ejb容器,而jboss已經集成了tomcat 也就是說下載了jboss之后,啟動的同時也就啟動了tomcat jboss在tomcat基礎之上多加了一個ejb容器,使得jboss+tomcat成為和weblogic websphere之外又一個得到廣泛應用的appserver 現在大概是這樣,中小型企業多用jboss,如果應用小一點就用tomcat 只有給那些大型企業做的項目,才會花錢去上一個weblogic或者websphere mysql也是開源的數據庫,做得非常不錯,如果系統對數據庫要求不高 或者安全要求不是非常嚴格,mysql是一個非常不錯的選擇 開發工具方面,netbeans是sun公司極力推廣的一種IDE 聽說在北美市場使用量已經超過eclipse了

操作系統,軟件再不用錢,服務器也要錢,看這臺機器上跑什么操作系統就用什么了--IBM套餐 操作系統:Linux 應用服務器:Websphere 數據庫:DB2 開發工具:Eclipse/WebSphere Studio 優點:服務好,IBM可以提供全套服務,也可以替客戶承擔風險 缺點:把機器數據全部交給IBM,安全什么的都由不得你了 呵呵,IBM全套產品,甚至包括硬件設備IBM的服務器 由于是一個公司的產品,各產品之間的協作自然不錯

價格方面,Linux,DB2,Eclipse都是開源產品,Websphere目前零售價是33.8萬人民幣 IBM服務器不錯,可以考慮--.net: 微軟陣營

操作系統:Windows 應用服務器:.net應用服務器(好像叫IIS)數據庫:SqlServer 開發工具:MS Visual Studio 優點:客戶端的用戶體驗良好,和客戶端諸多微軟產品的兼容性強 缺點:離開了微軟,寸步難行,和其他任何一家公司的產品都不兼容 微軟的東西,怎么說呢,太專橫了 微軟所有的東西都是圍繞著windows來做的

.net其實已經可以實現跨平臺了,但是微軟出于自身商業考慮 在其應用服務器跨平臺的實現上設置了種種障礙 而且針對windows,微軟做了大量的優化,可以這么看.net就是與windows捆綁的一套產品

所以有些人說,微軟的產品離開了windows,就是渣

而且.net開源選擇也少,安全性方面考慮,windows本身就有一堆補丁要打了 sqlserver也不安全,至于.net到底安全不安全我不清楚,畢竟我沒怎么用過 但整體考慮,感覺.net不是大企業的首選,鑒于其濃厚的商業背景 也不是中小企業的首選,但是必須看到

客戶端也就是微機pc市場已經完全被windows所壟斷

所以在一些快速開發,還有和微軟產品兼容性要求較高的領域,.net還是比較有市場的 最后一個visual studio對它之前的版本兼容,且支持c,c++,c#,vb等語言 在其傳統領域,比如寫一些桌面軟件等客戶端應用上,.net還是第一選擇--最后要說明的是 這些組合不是固定不變的

由于J2EE得到了絕大多數IT企業的支持以及JAVA跨平臺的特性 我們可以自由地定制個性化的組合

比如我可以選擇windows+jboss+eclipse+oracle 也可以選擇solaris+websphere+IDEA+mysql 等等,這些自由組合都是可以的,但是有一點必須說明 微軟的東西,一般來說離開了windows就不能用

比如你選擇了.net應用服務器,那操作系統就必須是windows 你選擇了sqlserver,那就必須在windows上用

還有就是遵循j2ee規范的所有的組件都可以在不同的應用服務器上互相移植 比如你可以在測試的時候用jboss 而在正式投產上線的時候使用websphere,只需要在配置文件中作相應改動即可 給初學者之七:java企業級應用之術語篇

在了解完J2ee的相關周邊產品之后需要深入J2ee規范內部去了解一下到底這些規范 這里介紹幾個最常用的規范 再繼續說下去之前有必要說幾個常識

下面進入正題 再談容器

前面介紹過容器,我覺得有必要再補充一點

容器從某種意義上說其實就是一個可運行的java寫的應用程序 猶如c++/c編譯后生成的.exe文件

不同的是java編譯后的文件需要用命令行或者腳本啟動執行 由于容器是由java寫的,所以容器都能夠跨平臺

雖說如此,似乎大部分容器都針對不同的操作系統提供了不同的版本 但可以肯定的一點是,相同容器間的移植組件不需要重新編譯 Servlet web容器組件

Servlet確切地說,就是web容器運行的java組件

與普通javabean不同的是,Servlet定義了一系列方法//比如init()和destroy()供容器調用,調用的主要目的是為了管理

當一個request請求被web容器截獲之后,容器分析該請求地址 然后通過一個配置文件中的映射表//web.xml 調用相應的Servlet組件處理后將結果返還給客戶端 JSP//Java Server Page web容器組件

Servlet出現了之后,人們發現幾乎沒有辦法用一個非常直觀的方式去編寫頁面 畢竟頁面是html語言編寫的

而讓我們用一種流程式的處理方式去逐行教計算機如何寫html代碼太困難 在這種情況下JSP應運而生,JSP將java代碼嵌入html代碼內部

然后存成.jsp文件,再由計算機編譯生成Servlet儲存起來//注意這個過程

所以JSP和Servlet對于web容器來說其實是一種東西,雖然它們編寫遵循的標準有所不同 極大地簡化了代碼同時增加了代碼的可讀性,生產維護成本下降 值得一提的是,在制定JSP規范的過程中,借鑒了ASP的很多規范 寫過ASP并熟悉Java語言的人應該能很快掌握JSP EJB//Enterprise JavaBean ejb容器組件

隨著時間的推移,人們發現普通的JavaBean似乎并不能滿足企業級應用的需要 最典型的就是虛擬機提供的垃圾回收收集機制也就是GC不夠完善 可以優化的余地極大,在這種情況下,EJB應運而生 EJB和其它組件一樣,不過遵循了某些規范而已

但是這些規范更多的是為充分利用機器并提高性能為主要目的的 舉個簡單例子

比如某個web服務器有100個用戶同時連接上

由于網絡連接是瞬時連接,所以很多時候并發數并沒有100那么大 前一秒有可能有30個請求被發送過來并被處理 后一秒可以只有10個請求被發送過來并被處理

只有在非常非常極端的情況下才有可能發生100個請求同時被發送過來并被處理的情況 那么我們是否需要保留100個那么多個對象在服務器的內存里面去處理這些請求呢? 很顯然,不需要,大多數時候//甚至可以說是所有時候,我不相信有那么極端的情況 我們只需要保存其中的10-30%就夠了,那么什么時候需要20%,什么時候需要50% 甚至100%,這個過程就交給容器去管理,這就是ejb容器每天在干的事 管理內存中活躍的對象

恩,必須強調的一點是,由于使用的不成熟 我們經常把規范以及具體的應用兩個名詞混用

舉個簡單例子,我們說Servlet,極有可能說的是Servlet規范 也有可能說的是一個具體的Servlet,這個就要看情況而定了 EJB,JSP也是如此

JDBC 和數據庫的連接

這個嚴格說來是數據庫產商需要關心的事 關于AppServer如何與數據庫的連接

但是也需要開發人員做一點事,因為AppServer不知道什么時候組件需要用到數據庫 同時也需要開發人員告訴AppServer他們使用的是什么數據庫,ip地址等等 JDBC就是關于這一套東東的規范 包括數據庫的產商應提供什么樣的接口 AppServer應用服務器應該如何去連接 開發人員應該如何去配置這些連接等等

還有一些數據源,連接池等概念參考相關數據在此就不再贅述 其它的規范比如JMX等確切地說與開發人員關聯并不大了 這類高級應用只對AppServer應用服務器產商重要 也不再羅嗦了---------記得聽說過這樣一種說法

大一時候不知道自己不知道 大二時候知道自己不知道 大三時候不知道自己知道 大四時候知道自己知道 為什么呢,因為大

一時候剛進大學,什么都不懂,很正常,大家都一樣 大二或者大三時候開始接觸知識,雖然還是不懂,但慢慢地開始學習,開始積累 過了一段時間,知道自己知道了//也就是前一種說法的大四,后一種說法的大三 開始屁癲,開始拽得不得了,覺得自己懷才不遇,千里馬難尋伯樂的那種感覺 有些人是大四畢業了以后開始拽,悟性高一點的,大三就開始拽,因人而異 這幾乎是每一個初學者經過一段時間學習后的必然階段 不管如何,總之開始入門了,這也不是壞事

但最后每個人都會知道自己不知道的,也就是后一種說法的大四階段 //前一種說法里面的那些家伙估計要到工作以后才能明白 因為任何一門學科都博大精深,要是能在兩三年之內就統統搞懂 那不是在吹牛就是坐井觀天,java如此,c如此,c++也是如此 那么到了本系列的第七集,可愛的讀者應該處在什么階段呢? 恭喜,在看完這篇文章之后,你就基本處于知道自己不知道的那種階段 離拽起來還有那么一段距離,因為你們畢竟還沒有學習和積累一定的基礎知識 但是騙騙外行,蒙蒙國企那些吃閑飯的管理人員問題不大

給初學者之八:java高級應用之框架篇 沒錯,我沒敲錯

之所以不再聲稱是企業級應用而稱之為高級應用 是因為下面要講的東西屬于純民間性質 是java具體應用的上層建筑,可用可不用,沒有人強迫你用 首先給框架//framework 下一個定義

我想讀者你可能聽說過.net framework這個概念

沒錯,我們將要說的framework也和這個framework差不多 所不同的是.net framework的競爭對象是j2ee那一系列標準 而我們將要說到的幾個框架則應用在j2ee的不同層面 單就單個框架而言,沒有.net framework管得那么多

但是卻要比它精專多了,而且總量加起來,也遠比微軟那一套框架要廣泛得多 回到正題,框架是什么?

軟件工程之所以被叫做軟件工程就是因為有那么一批人覺得可以用工程學里面 那些管理Project的方法來管理軟件從開發到維護這一系列流程 那么在建筑工程里面框架是什么?

現在建筑多采用鋼筋混凝土結構,注意里面一個很重要的詞匯:鋼筋 托福閱讀中曾有一題聽力就是關于鋼筋結構的誕生,在美國 恩,現代建筑中多在建筑起來之前,先用鋼筋搭建出一個框架出來 然后往鋼筋中間填入混凝土,從而形成一個完成的建筑 而今天要說到的框架就是這么一個東西在每一個軟件中間的實現

框架就是那么一個通過預先寫好代碼從而幫我們建立起一個軟件結構的這么一個東西 這里提一下框架與規范//主要指J2ee規范也就是官方標準的區別 從某種意義上說,J2ee規范本身就是一個框架 無論是web容器也好,還是ejb容器也好,它們都開發了一部分通用的代碼 并且幫助我們搭建起來了一個軟件結構,我們要做的就是往里面填入組件 比如ejb/servlet/jsp等等

沒錯,要這么理解也沒錯,但是為了避免混亂,我們還是嚴格區分開來 本文中將要提到的框架如無特別說明,就是指的是非官方標準的框架 規范是規范,而框架是建立在規范之上的一種東西

可以說是標準的延續,或者說是民間的嘗試,總之是這么一個非官方的東西 說到這里順便提一下JCP組織也就是Java Community Process/Java社區 當初Sun公司在java發布之初,為了提倡開源和共項

同時也出于一個提出合理的標準的目的,而讓廣大的開發者參與標準的制定 而成立了這樣一個社區,現在還健在,網址是jcp.org 每一個新的規范發布之前都會在這個社區廣泛討論,最終對規范的制定產生巨大的影響 其中就包括企業級的參與者,相當有名的JBoss以及我國的金碟公司都是其中的成員 下面介紹一下幾個相當著名的框架,必須要指出的是,雖然框架大多開源 但并不代表所有的框架都開源,比如.net framework,但是java框架大多數開源 言歸正傳

Struts 表示層框架,名字來源于飛機的金屬框架 可能有讀者會提問了 表示層不是客戶端么?

沒錯,但是語言這東西,眾口爍金,別人都這么說你就不好不這么說了 最早表示層說的是客戶端,后來隨著時間的發展 人們也把服務器端直接與客戶端//比如IE 打交道的那部分也稱為表示層//JSP+Servlet 那么表示層框架是干什么的呢?

早先大規模應用JSP的時候,人們發現,JSP里面充斥著邏輯代碼與數據 可讀性極差,于是人們借用很早很早以前的MVC模式的思想 把表示層組件分為V-Viewer,也就是JSP M-Model模型,一般來說是一個JavaBean C-Controller控制器,一般來說是一個Servlet 所有人通過JSP和服務器打交道,發送請求,Viewer把這個請求轉發給Controller Controller通過調用一個Model來處理該請求,然后返回數據到Viewer 這么一個過程,從而達到數據與邏輯的剝離,增強代碼可讀性,降低維護成本 而幫助人們實現這一系列東西的就是Struts框架,就是這么一個東西 Struts的競爭對手主要是產商們極力倡導的JSF也就是Java Server Faces 但是由于Struts出道時間早,所以應用比較多 JSF則是產商們大力支持,前景看好

對于這一層來說,在JSP的html代碼中出現的java語句越少越好 因為java代碼越少說明頁面處理的業務邏輯越少,也越合理 這也是Struts最初的目的,記住這話

Spring 大名鼎鼎的Spring框架

有人曾說2005年一片叫春之聲,指的就是該框架

Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》一書 Rod Johnson認為,J2ee里面的那一套//尤其是ejb 太重了,對于單機的系統來說,沒有必要使用那么復雜的東西 于是就開始設計并引導Spring小組開發出這樣一個構架

不能不說他是個天才,因為的的確確不是所有的系統都是跨多服務器的 沒有必要把一個簡單的系統設計得那么復雜//天才的那幾個共性又體現出來了 Spring從誕生之日起就是針對EJB的,力爭在不少應用上取代EJB 而它也確實達到了這個目的

現在包括WebLogic等主流應用服務器還有主流IDE都開始逐漸接受該框架 并提供相應支持

提到Spring就不能不說控制反轉Ioc//Inversion of Control 和依賴注射DI//Dependency Injection 什么叫控制反轉呢?

套用好萊塢的一句名言就是:你呆著別動,到時我會找你。

Hibernate 名字取材自ORM最早的一句玩笑話//ORM就是OR-Mapping 說用了ORM之后,程序員就可以去冬眠了,而不需要操心那么多事

這里不得不說的是,該框架由于做得太好,以至于被J2ee招安,成為EJB3.0的一部分 替代原有EJB2.X里面關于Entity Bean而成為EJB ORM的工具 這里解釋一下ORM//OR-Mapping 中文名對象關系映射

什么意思呢?我們知道傳統的數據庫都是關系型的

一條條記錄以表格的形式儲存,而表與表之間充斥著是關系/關聯

比如說一個人,名字zhaoce,性別男,年齡23那么數據庫中是這么儲存的 姓名 性別 年齡 zhaoce m 23 某女 f 22 而實際應用服務器中的實體都是以對象的形式存在,一個個對象 zhaoce是以這種形式存在的 Human human=new Human();human.setName(“zhaoce”)human.setSex(“m”);human.setAge(23);這樣的,那么我們知道,傳統的JDBC是通過一個二維字符串將數據取出 需要我們自己將其包裝成對象,在存入的時候,我們還需要將對象拆開 放入sql語句中//Insert into Huamn values('zhaoce','m',23)然后執行該sql語句

太麻煩太麻煩,ORM理念的提出改變了這一切,ORM認為,這些東西應該由框架來做 而不是程序員,程序員做他該做的,不要為這種破事分心,還測試半天 于是就出現了Hibernate,JDO,TopLink等等,甚至.net里面也有ADO.net 過去一段時間是Hibernate和JDO爭風,現在看來Hibernate逐漸成為主流并被官方接納 成為規范標準之一,替代掉原來EJB2.X的ORM EntityBean TopLink則是Oracle公司推出和Oracle數據庫結合的一種ORM 商業用軟件,貴且復雜,不過正在逐漸開放

而象表示層一樣,這一種專門面對數據層的代碼也被稱為數據持久層 所以數據持久層這一概念有時不僅僅指代數據庫

關于ORM,最高的境界應該是在java代碼中不出現任何一句的sql語句 注意,是不包括sql語句,Hibernate的hql以及ejb的ejb-ql不算在內

至于出現不出現hql/ejb-ql等替代ql,這要視具體情況而定,不過最好也是不出現 當然最后所說的過分理想的情況往往不現實,總之一句話

以sql為代表的ql/*還有hql,ejbql等*/語句在代碼中出現得越少越好 記住這話,現在未必能夠理解,學了以后就懂了

這三個是目前最為常用的框架 而目前光已公布的框架就>500 還在不停增加中,不可能一一列舉,有興趣的可以去看相應文檔 要指出的是框架不是應用程序

只是一堆組件的有序復合,應用時不能脫離于應用服務器單獨存在給初學者之九:收尾 最后一篇介紹幾個常見的概念 設計模式

這可不僅是java獨有

我看的書就是c++和smalltalk例子的 先說說什么是設計模式

模式是什么?模式是經驗的總結,潛規則的抽象

什么意思呢?比如說我們坐飛機,上飛機前需要經過幾個步驟 什么安檢領取登機牌之類的,這一套流程能不能改呢?

可以,但為什么幾乎全世界的航空公司登機前都是這一套流程呢? 因為航空公司經過長期實踐之后得出了一堆結論和經驗 并認為這樣做才是最安全,或說是最有效率的 這就是模式,模式是編程高手之間交流的橋梁 兩個編程高手通過統一命名的模式了解對方的思想

當然不借助模式可不可以?當然可以,只是模式無處不在,你不知道而已

又比如吃飯,每吃一口飯,我們要先端碗,拿筷子,張嘴,塞飯入口,咀嚼最后吞咽 這就是一套模式,我們給這套模式命名為吃飯 那么當老爸叫吃飯的時候,我們就能明白什么意思

而不用老爸進來囈囈啊啊并比畫上半天,啞語也不是這么用的 這就是模式,已知的模式有400多種//好象更多,不記得了 比如數據庫有數據庫的設計模式,編程有編程的模式等等

面向對象有常用的21種模式,需要掌握,主要分為創建,行為,結構三類 J2ee有J2ee的模式,Sun公司出了一本書叫《J2EE核心模式》可以拿來看看 必需要指明的是,模式不是規范,比如吃飯模式

沒有人規定你吃飯非得要那么吃,你可以端碗,上拋,張嘴在下落后連碗一起吞咽 這也可以,只要你愿意,同樣,只要你愿意,你就可以不遵循模式

模式之外還有反模式,學模式不可定勢,不要學死,活學活用,無招勝有招才是最高境界 JavaDoc 文檔工具,極其好用

可以根據注釋自動生成HTML文檔 Ant 98年,有一位程序員在從歐洲飛回美國的飛機上想到了這么一個東西 從而改變了整個世界,他的名字叫James Duncan Davidson 組織管理工具,可以這么描述它

比如你想在編譯之后自動再次生成JavaDoc 那么你只需要編輯Ant腳本//對,就像Windows腳本那樣 然后批處理就可以了,不過現在Ant已經廣泛集成到IDE中去 不需要自己手動編寫,不過如果想要炫炫,據說此招百試不爽 JUnit 測試工具,Unit家族可不只有JUnit 還有其它版本的,這個不細說,具體實踐一下就明白了 POJO //Plain Old Java Object 就是傳統的Java對象,也就是一個JavaBean 由虛擬機來掌握其生死

常用的兩個管理構架/規范是Spring和EJB容器 命名由來是某人//名字我忘了

覺得我們使用了太多的規范,以至于我們都忘記了純粹的java對象 以至于我們都忽略了它的存在,所以叫了這么一個名字 以喚醒人們的記憶,這個意義上來說EJB其實不能算是POJO 畢竟遵循了一堆的接口,但是不管怎樣,接口歸接口,還是沒有繼承類 沒有被強加什么//遵循可以寫空方法假遵循 所以說還是POJO也對 但是由于這種東西缺乏管理,不象Servlet有專門的容器管理并繼承了一定的類 而沒有管理的對象在虛擬機中是很危險的,因為垃圾回收機制各個虛擬機不同 而且也不怎樣,極有可能長時間不回收,這樣在企業級的應用中呢 就有可能造成內存大量被占用從而死機,毫無疑問,這種機制需要優化 這種優化就是通過EJB容器或者Spring構架來實現 這么做還有一個好處就是迫使程序員對每一個類做封裝

強迫他做管理,以達到防止內存泄露的目的,內存泄露最經常出現的錯誤就是 引用未釋放,引用最典型體現在new這個關鍵字上,new得越多引用得越多 隨著時間地增長,有可能導致循環,不停new new new new new.....其中哪怕只要有一個new處理不當,虛擬機無法回收內存 那就極有可能完蛋,而且這種小bug越是在大的項目越是難以找到 有可能因為一個人而影響整個項目組,所以不妨記住我的一條經驗 好的系統框架不應該在業務邏輯流程中出現new關鍵字 現在不理解也無所謂,將來有一天會明白的 SOA 面向服務的構架

不說太多,這個屬于上上層建筑

不過不妨記住我的一句話,可以幫助理解這個概念 面向什么就是對什么做封裝 面向對象就是對對象做封裝 面向服務類似,剩下的靠悟性 反射

1.4新增功能,非常強大

通過反射,程序可以解析出類本身的屬性也就是變量

/注意這里說的屬性不是.net里面的屬性,我不喜歡微軟造的新名詞,亂 還有行為也就是方法,然后通過invoke()方法調用該方法 甚至可以新增對象等,java首創,本是其它語言所沒有的

后來被微軟抄了去,利用該功能,開源框架廣泛受益并大量采用,近乎瘋狂地使用 具體就不說了,最后要指出的是,有一種說法是利用反射會降低效率 在早期的時候,的確是,現在不會了,放心使用 容器

5.0以后的版本在J2SE中都出現了容器 各位甚至可以自己嘗試用標準庫去使用容器 書籍

《Thinking in Java》 //實話說,一般,尤其是翻譯后的版本,原版還行 《Java教程》 //電子工業出版社出版的那本,上下冊,很厚,但翻譯得不錯 《21天學通Java》 //入門極好,但是《21天學通j2ee》極爛,不要買 《Mastering EJB》 //翻譯過的書質量我不清楚,估計不怎樣,請看原版書籍 《精通Hibernate》 //看清楚作者,孫衛琴,其它人的別買

其它的可以不用了,網絡上的遠比書上來得多,來得好,雖然也來得雜 最后的建議 一,不要做一個浮躁的人 二,學好英語,很重要 三,閱讀源代碼和文檔

四,共享源代碼,不要做一個功利的人 五,熱愛Java 相信能看到這里的朋友都是真心想學習java,在編程的路上你已經成功的走出了第一步,接下來就是努力的走下去。。加Java學習群四一八,三五五,五三一。

下載給予Java初學者的學習路線建議(范文大全)word格式文檔
下載給予Java初學者的學習路線建議(范文大全).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    java學習的路線

    1、要學java,肯定首先得把Java語言本身給掌握了,萬事開頭難,學java最難的也是java的入門,學習順序是先掌握java的語法(多練就行),再掌握java面向對象的思想(封裝、繼承、多態、接口......

    牛人對初學者學Java的建議

    一個牛人給java初學者的建議 給初學者之一:淺談java及應用 學java不知不覺也已經三年了 從不知java為何物到現在一個小小的j2ee項目經理 雖說不上此道高手,大概也算有點斤兩......

    java初學者學習心得

    學習Java心得體會 學習了一學期的Java課程,覺得是該總結自己的心得體會了。開始學習任何一門課(包括java),興趣最重要。一直覺得自己在學計算機編程語言,學習了很多,但每門語言......

    java學習路線(共5篇)

    1. 學習路線 首先是JAVA基礎JAVA SE 之后是JAVA EE,先學習Servlet、JSP,然后再學習Struts、Hibernate、Spring等框架。 JAVA SE是JAVA EE的基礎,Servlet、JSP是框架的基礎。......

    java WEB 學習路線 v0.1

    1. J2SE 和Eclipse工具的使用 ? 集合類 * List / Set / Map / Iterator ? Java反射機制 ? 正則表達 2. 數據庫 Mysql ? 什么是數據庫 ? 基本語法: 建表刪表、Mysql 字段類型、單......

    Java程序員成長路線

    www.tmdps.cn Java程序員成長路線 Java程序員 高級特性 反射、泛型、注釋符、自動裝箱和拆箱、枚舉類、可變 參數、可變返回類型、增強循環、靜態導入 核心編程......

    Java自學成長路線

    Java自學成長路線 JAVA自學之路 一:學會選擇 決心做軟件的,大多數人選的是java,或是.net,也有一些選擇了手機、嵌入式、游戲、3G、測試等。 JAVA是一種平臺,也是一種程序設計語......

    嵌入式學習路線建議(5篇)

    嵌入式學習是一個循序漸進的過程,如果是希望向嵌入式軟件方向發展的話,目前最常見的是嵌入式Linux方向,關注這個方向,我認為大概分3個階段: 1、嵌入式linux上層應用,包括QT的GUI開......

主站蜘蛛池模板: 久久久久久自慰出白浆| 亚洲乱码日产精品bd在线观看| 精品人妻系列无码人妻免费视频| 苍井空亚洲精品aa片在线播放| 国产成人无码一区二区在线观看| 狠狠色狠狠色综合日日五| 亚洲一区二区三区小说| 国产精品久久久久无码av| 亚洲日韩av无码| 337p日本欧洲亚洲大胆张筱雨| 久久久一本精品99久久精品66| 久久天天躁狠狠躁夜夜avapp| 日本japanese丰满少妇| 成年无码av片在线免缓冲| 午夜成人影片av| 亚洲 欧美 中文 日韩aⅴ手机版| 亚洲一区av无码专区在线观看| 亚洲欧美成人综合图区| 色老汉免费网站免费视频| 国产亚洲第一午夜福利合集| 久久久久99精品成人片欧美| 老熟妇乱子伦牲交视频欧美| 亚洲精品久久久一二三区| 欧美国产亚洲日韩在线二区| 国产精品麻花传媒二三区别| 亚洲成在人线av品善网好看| 日韩国产亚洲高清在线久草| 无码av中文一区二区三区| 国产va免费精品高清在线30页| 国产一卡2卡3卡四卡国色天香| 亚洲爆乳成av人在线视菜奈实| av片在线观看| 色舞月亚洲综合一区二区| 亚洲精品久久66国产高清| 国产精品久久久久7777| 亚洲a∨天堂最新地址| 无码人妻丰满熟妇区96| 久久无码人妻一区二区三区| 米奇777四色精品人人爽| 亚洲日韩av无码| 国产成人精品无码专区|