欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      牛人對初學(xué)者學(xué)Java的建議

      時間:2019-05-14 02:10:16下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《牛人對初學(xué)者學(xué)Java的建議》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《牛人對初學(xué)者學(xué)Java的建議》。

      第一篇:牛人對初學(xué)者學(xué)Java的建議

      一個牛人給java初學(xué)者的建議 給初學(xué)者之一:淺談java及應(yīng)用 學(xué)java不知不覺也已經(jīng)三年了

      從不知java為何物到現(xiàn)在一個小小的j2ee項目經(jīng)理

      雖說不上此道高手,大概也算有點斤兩了吧

      每次上網(wǎng),泡bbs逛論壇,沒少去java相關(guān)的版面

      總體感覺初學(xué)者多,高手少,精通的更少

      由于我國高等教育制度教材陳舊,加上java自身發(fā)展不過十年左右的時間

      還有一個很重要的原因就是java這門語言更適合商業(yè)應(yīng)用

      所以高校里大部分博士老師們對此語言的了解甚至不比本科生多

      在這種環(huán)境下,很多人對java感到茫然,不知所措,不懂java能做什么

      即便知道了java很有用,也不清楚該從哪里入手

      所以就有了 java入門難 這一說法

      ok,那我們就從java到底能做什么聊起

      先說什么是java

      java是一種面向?qū)ο笳Z言,真正的面向?qū)ο?,任何函?shù)和變量都以類(class)封裝起來

      至于什么是對象什么是類,我就不廢話了

      關(guān)于這兩個概念的解釋任何一本面向?qū)ο笳Z言的教材里面都有

      知道了什么是java,那自然就會對java能干什么感興趣

      在說java能做什么之前,先說java作為一個真正面向?qū)ο笳Z言的優(yōu)點

      首先第一個,既然是真正的面向?qū)ο?,那就要做到徹底的封裝

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

      java沒有所謂的類外部定義,所有的函數(shù)(方法)以及變量(屬性)都必須在類內(nèi)部定義

      這樣就不會出現(xiàn)一個類被切割成這里一塊那里一塊的情況,c++就可以,不是么?

      這樣做使得整個程序的結(jié)構(gòu)異常清晰,明了

      其次第二個,最讓人歡呼雀躍的是完全屏蔽了指針,同時引入了垃圾回收機(jī)制

      任何一個寫過c/c++代碼的人,都會對內(nèi)存管理深惡痛絕

      因為這使得我們不能把主要精力放在我們關(guān)心的事情上

      而需要考慮計算機(jī)內(nèi)部的一些事情,作為一個軟件工程師

      我想沒有一個人愿意把大量的時間花在內(nèi)存管理上,畢竟我們不是電子工程師

      此時java的優(yōu)勢體現(xiàn)出來了,它完全屏蔽了內(nèi)存管理

      也就是說,如果你用java寫程序,寫出來的任何一個程序內(nèi)存上的開銷,都不受你控制

      乍一看,似乎你受到了束縛,但實際上不是這樣

      因為雖然你的程序無法對內(nèi)存進(jìn)行管理,降低了一定的速度

      但你的程序會非常非常的安全,因為你無法調(diào)用一個空指針

      而不像以前寫c的時候那樣,成天因為空指針而擔(dān)驚受怕

      當(dāng)然,如果你深入了解這一行,就會發(fā)現(xiàn)java其實也無法保證程序不去調(diào)用空的指針

      但是它會在最大程度上避免空指針的調(diào)用

      這已經(jīng)很好了,安全,這是java的最突出的優(yōu)點

      第三個,虛擬機(jī)跨平臺,這是java最大的特點,跨平臺

      可能所有人都知道windows,但是不是所有人都知道unix

      和java一樣,很多人都不知道unix這種操作系統(tǒng)干什么用

      我不想多說unix的應(yīng)用,這不是主要,但是我要說,大部分小型機(jī)

      工作站,都跑在unix一族的操作系統(tǒng)上,比如linux/solaris

      unix比起windows有一個最顯著的特點,穩(wěn)定,這就好比思科和華為

      思科的機(jī)器慢但穩(wěn)定,華為的機(jī)器快但不穩(wěn)定,作為服務(wù)器這一端來說

      要的皇怯卸囁歟俏榷?,冬对unix在服務(wù)器端還是非常有市場的

      而且很重要的windows不安全,在ms的宣傳中我想所有人都很少看到安全二字

      因為windows操作系統(tǒng)針對的是pc用戶,pc死機(jī)就死機(jī)咯,大不了重啟

      瘟95最經(jīng)常冒出來的就是藍(lán)屏,在服務(wù)器這一端上因為ms沒有自己的芯片

      所以要做系統(tǒng)有些力不從心啊。扯遠(yuǎn)了,那么java可以做到在windows上編譯

      然后在unix上運(yùn)行,這是c/c++做不到的那么說到這里,java能做什么逐漸清晰起來

      剛才說到了,java程序有一個的特點是安全

      這個安全是針對你的系統(tǒng)來說得,系統(tǒng)在跑了java程序之后會特別地穩(wěn)定

      而且還能跨平臺,那么很明顯,java主要應(yīng)用于除了windows操作系統(tǒng)以外所有的平臺

      比如手機(jī),服務(wù)器

      想想看,如果你寫的程序要跑在手機(jī)上,而手機(jī)有多少款用的是windows?

      就算有,那如果你用c/c++,是不是要針對每一款手機(jī)寫一套程序呢? 累死,那跨平臺的java就不用,做到編譯一次,隨時運(yùn)行

      同樣,在服務(wù)器這一端,如果我想給一個網(wǎng)絡(luò)門戶站點,比如sina

      寫一個應(yīng)用程序,pc的性能肯定無法滿足sina這樣大站點并發(fā)數(shù)量的要求

      那么它就需要買服務(wù)器,那么服務(wù)器ms沒有市場,而且windows很不安全

      那么十之八九會買一個sun/ibm的機(jī)器,或者h(yuǎn)p,但不管是誰的機(jī)器

      它裝的操作系統(tǒng)也不會是windows,因為windows太不安全了,而且多核的支持太差了

      這個有空再說,那么如果你要寫一個程序在這樣的機(jī)器上跑

      難道我們就在這個機(jī)器上做開發(fā)么?當(dāng)然不可能,一般程序員開發(fā)用的都是pc,windows

      那么該怎么辦?寫一個程序,然后再拿到服務(wù)器上去編譯,去調(diào)試?

      肯定不可能,所以我們就希望找到一個語言,編譯完生成程序之后

      在pc上調(diào)試,然后直接移植到服務(wù)器上去,那么此時,我們就會毫不猶豫地選擇java

      因為在跨平臺以及安全性來說,java永遠(yuǎn)是第一選擇

      ok,下面說java的缺點

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

      java也拋棄了指針,雖然看上去似乎變慢了,但是在這個兩三年硬件性能就能翻番的年代

      速度已經(jīng)不是我們關(guān)心的問題了,而且對于企業(yè)級的應(yīng)用來說

      沒有什么比安全穩(wěn)定更重要的,換句話說,我們可以忍受慢,但是不能忍受死機(jī)和藍(lán)屏

      而且越大型的應(yīng)用,這種慢的劣勢體現(xiàn)得越模糊

      因為當(dāng)系統(tǒng)項目越做越大,任何一個環(huán)節(jié)做不好都可能影響全局的情況下

      安全尤其重要,而且就像goto語句一樣 這種過分追求速度的主張會給系統(tǒng)開發(fā)和糾錯以及維護(hù)帶來無可挽回甚至不可避免的損失

      把內(nèi)存交給計算機(jī)去管理吧,這種代價值得

      我們做的不是pc游戲,沒必要把內(nèi)存的那一點點消耗當(dāng)親爹

      二難看,又是一個誤區(qū),很多人甚至拿出java swing控件畫出的界面來說

      呵呵,其實java不是不能畫得好看,IDEA就是java寫的IDE,挺漂亮的

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

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

      而unix又是吃百家飯的,不像ms那么唯利是圖,所以不怎么對中國人友好

      加上我國又沒有公司在做操作系統(tǒng),所以看上去是不怎么順眼

      其實玩過unix的人都知道,unix對中文的支持一直不怎么好

      三我還沒想到,其他人補(bǔ)充

      給初學(xué)者之二:從JDK說起

      在知道了java有什么優(yōu)點,能做什么之后

      就該說一下java該如何去學(xué)了

      在說java如何去學(xué)之前,有必要把java的幾個大方向做一個簡單說明

      早在五年前,嗯,應(yīng)該說是六年前,也就是99年的時候

      sun公司做出了一個決定,將java應(yīng)用平臺做一個劃分

      畢竟在不同領(lǐng)域,語言應(yīng)用特性是有區(qū)別的 針對不同領(lǐng)域內(nèi)的應(yīng)用,sun公司可以發(fā)布相關(guān)高端標(biāo)準(zhǔn)來統(tǒng)一規(guī)范代碼

      這三大塊就是J2SE,J2EE以及J2ME

      這個舉措今天看來無疑是非常了不起的

      正是由于這次革命性的發(fā)展,使java從一種小打小鬧游戲性的語言

      發(fā)展成為今天企業(yè)級應(yīng)用的基礎(chǔ)

      這里要特別說明一下J2SE J2EE J2ME中2的意思

      其實2就是英文單詞to的諧音,就是to的意思

      而不是second edition,當(dāng)然java 2本身版本號就是1.2,也有點2nd edition的味道

      說點題外的,sun公司發(fā)布的java版本很有意思

      雖然總是寫是1.X但其實外界對這種版的說法也就是X.0

      比如java 2,其實就是java 1.2

      1.3其實就是3.0,1.4就是4.0,現(xiàn)在所說的5.0 其實就是1.5

      只是以前我們更習(xí)慣叫1.X而已

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

      所以以后聽到別人說java 5.0,千萬別驚訝,其實就是1.5

      在這三個J2*E中J2SE是基礎(chǔ),就是java 2的標(biāo)準(zhǔn)版(java 2 standard edition)

      也就是最基礎(chǔ)的java語言部分,無論學(xué)什么java技術(shù),J2SE都是必須掌握的

      要使用J2SE就必須安裝JDK(java development kit)

      JDK在sun公司的主頁上可以免費(fèi)下載,下載后需要安裝,具體安裝流程看教材 JDK包含有五個部分:核心API,集成API,用戶界面API,發(fā)布技術(shù)還有java虛擬機(jī)(JVM)

      先說運(yùn)行環(huán)境,運(yùn)行環(huán)境最主要要說的就是java虛擬機(jī)(JVM)

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

      java的設(shè)計者們提出了一個虛擬機(jī)的概念

      在操作系統(tǒng)之上建立一個統(tǒng)一的平臺,這個平臺必須實現(xiàn)某些功能以支持程序的運(yùn)行

      如下圖:

      ------

      |

      program

      |

      ------

      |

      JVM

      |

      ------

      | UNIX | Windows | Linux | Solaris |..------

      程序員所寫的每一個程序都先運(yùn)行在虛擬機(jī)上

      所有操作都必須經(jīng)過虛擬機(jī)才能和操作系統(tǒng)交互

      這樣做不僅統(tǒng)一了所有操作系統(tǒng),同時也保證了操作系統(tǒng)的安全

      要死機(jī)的話,死的是虛擬機(jī)(JVM)而操作系統(tǒng)并不會受此影響

      而我們所說的java運(yùn)行環(huán)境指的主要是JVM,其他的不說了,省略

      下面說說JDK(java development kit)的API,其實用JDK來包括運(yùn)行環(huán)境以及開發(fā)工具

      個人感覺是不恰當(dāng)?shù)?,因為這三個單詞僅能說明開發(fā)工具,也就是幾個標(biāo)準(zhǔn)的API

      而沒有讓人感覺到有運(yùn)行環(huán)境的意思在里面,這是題外

      那么什么是API?

      簡單地說就是Application Programming Interface,應(yīng)用程序編程接口

      在java里面,就是一些已經(jīng)寫好了的類打成的包

      這又要解釋什么是類什么是包了,簡單說一下,包就是類的集合

      一個包包含零個或多個類,嗯,具體的可以去看書

      這些類是java的基礎(chǔ)類,常用的類,可以簡單理解成java的工具集

      最后說一下JDK的發(fā)布技術(shù),其實按我的理解,講白了就是編譯器

      將.java文件轉(zhuǎn)換成.class文件的一種技術(shù)

      這三部分組成了JDK,有了JDK,就可以開發(fā)出J2SE應(yīng)用軟件了

      最原始的只要用一個記事本寫幾行代碼就可以了

      但一般來說我們會使用效果比較好的開發(fā)工具,也就是IDE

      在J2SE這一塊,特別推薦JCreator這款I(lǐng)DE

      sun公司的產(chǎn)品,與JDK結(jié)合得幾乎是天衣無縫,非常適合初學(xué)者使用

      教材方面中文的推薦電子工業(yè)出版社出版的《java教程》初級與高級篇各一本

      還有就是《21天學(xué)通java》雖然有人說21天系列是爛書,但個人感覺

      對于j2se,這本書翻譯得已經(jīng)很不錯了,基本沒有什么語法錯誤,語句也很通順

      最后要說的就是《thinking in java》

      這本書自然很經(jīng)典,說得比較細(xì),只是我覺得不太適合初學(xué)者,其實也不難

      初學(xué)者直接看也不成問題,但個人感覺還是找本教材也就是前面推薦的兩款來看比較好

      基本概念的理解還是用教材的,畢竟thinking in java有的版本翻譯得很爛

      而且個人建議還是看原版比較好,當(dāng)然這幾本都看最好了,但如果沒時間

      至少精讀其中一本,然后再看其他兩本就可以,其實三本書內(nèi)容也差不多

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

      最后要說的是

      由于虛擬機(jī)的存在,J2SE的大多數(shù)軟件的使用會比一般桌面軟件慢一些

      效果不盡如人意,現(xiàn)在大概只有swing控件還在使用吧,其它沒怎么聽說

      J2EE&J2ME

      這是java應(yīng)用的重中之重,如果想拿高薪,最好把J2EE學(xué)好

      記得以前在csdn上看過一個調(diào)查,上萬的程序員主要從事哪方面的工作

      十個中有八個是做J2EE的,其他兩個一個做J2ME,還有一個做嵌入式

      也許有些夸張,但也從某一方面說明J2EE人才的稀缺以及應(yīng)用的廣泛

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

      給初學(xué)者之三:java企業(yè)級應(yīng)用之硬件篇 總算講到企業(yè)級應(yīng)用了,內(nèi)容開始逐漸有趣起來

      java企業(yè)級應(yīng)用分為硬件篇和軟件篇

      重點在軟件,硬件是外延,嚴(yán)格地說與java沒有必然聯(lián)系

      但是,由于java是網(wǎng)絡(luò)語言,不了解硬件的一些基礎(chǔ)知識

      軟件知道再多也沒什么用,不要上了戰(zhàn)場還不知道為什么而打仗 硬件是軟件的基礎(chǔ),在這個前提下,有必要專門花一點點篇幅來聊一下硬件

      硬件,簡單地說就是我們實際生活中看得見摸得著的東西

      也就是那些冰冷的機(jī)器,比如服務(wù)器,個人電腦還有網(wǎng)絡(luò)交換機(jī),路由器等等

      那么先拋開網(wǎng)絡(luò)設(shè)備不談,先來說說計算機(jī)電腦的歷史

      在很早很早以前,人類創(chuàng)造了第一臺電腦,那時候的電腦只是一臺用來計算的機(jī)器

      無比大,無比重,無比傻,除了算其它屁事不會做,沒有所謂的人工智能與計算機(jī)網(wǎng)絡(luò)

      但是總算是誕生了,雖然以今天的眼光去看那時候的機(jī)器巨傻無比

      只配叫做計算器而不是電腦,沒有邏輯思維能力,只會死算

      但千里之行,始于足下,反正是造出來了

      然后隨著時間的推移,制造業(yè)發(fā)展發(fā)展發(fā)展

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

      于是人們造出了第二臺,第三臺,第四臺,第五臺……第n臺計算機(jī)

      人們就造出了無數(shù)臺計算機(jī)并使其成為一種產(chǎn)品

      逐漸應(yīng)用于許多復(fù)雜計算領(lǐng)域,不僅僅是科研,許多生產(chǎn)領(lǐng)域也開始出現(xiàn)計算機(jī)的影子

      然后又隨著時間的推移,人們發(fā)現(xiàn)不可能把所有的計算機(jī)都做成一個樣子

      因為各行各業(yè)對計算機(jī)性能的要求各不相同

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

      //個人感覺這樣分純粹扯淡,還以為是小孩子玩球,分為大球,中球和小球

      但是不管怎樣,計算機(jī)不再是千篇一律一個樣子了

      按照性能的不同,在不同領(lǐng)域,出現(xiàn)了滿足符合不同要求的計算機(jī)

      幾乎在同時,人們也開始考慮計算機(jī)之間通訊問題

      人們開始考慮將不同的計算機(jī)連接起來,于是網(wǎng)線出現(xiàn)了,網(wǎng)絡(luò)出現(xiàn)了

      又隨著網(wǎng)絡(luò)的發(fā)展,出現(xiàn)了一下專門為了尋址而存在的機(jī)器

      這就是路由器和交換機(jī),然后又出現(xiàn)了一些公益性的組織或團(tuán)體

      他們制定了一系列的標(biāo)準(zhǔn)來規(guī)范以及管理我們的網(wǎng)絡(luò)

      于是3w出現(xiàn)了,計算機(jī)的網(wǎng)絡(luò)時代來臨了

      嗯,說到這里,計算機(jī)發(fā)展到今天的歷史大概說完了

      我們來詳細(xì)說說網(wǎng)絡(luò)時代的計算機(jī)以及各個硬件供應(yīng)商之間的關(guān)系

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

      但是現(xiàn)在市場上沒有人這樣分,要是出去買機(jī)器,對硬件供應(yīng)商說

      我要買一款中型機(jī),或者說,我要買一款小型機(jī),硬件供應(yīng)商肯定會問問題

      他們會問你買機(jī)器干什么用的?科學(xué)計算啊還是居家用,是作服務(wù)器啊還是圖形設(shè)計

      但不管怎樣,簡單地說大中小型機(jī)已經(jīng)沒有什么意義了

      我們按照使用范疇來劃分

      簡單劃分為 服務(wù)器,工作站還有微機(jī)

      服務(wù)器(server)

      服務(wù)器涵蓋了幾乎所有的大型機(jī)以及大部分中型機(jī)甚至一些小型機(jī)

      用通俗點話說衿骶褪悄掣齬?4小時不間斷運(yùn)行提供服務(wù)的機(jī)器

      比如賣飛機(jī)票(中航信),比如酒店預(yù)定(攜程)

      比如提供門戶站點相關(guān)服務(wù)(sina),比如電子商務(wù)(ebay,amazon,阿里巴巴)

      這些服務(wù)對機(jī)器都有一些特定的要求,尤其強(qiáng)調(diào)安全和穩(wěn)定

      工作站(workstation)

      工作站其實是圖形工作站的簡稱,說白了,就是某種功能極其強(qiáng)大的計算機(jī)

      用于特定領(lǐng)域,比如工程設(shè)計,動畫制作,科學(xué)研究等

      個人電腦/微機(jī)(pc)

      計算機(jī)網(wǎng)絡(luò)的最末端,這個應(yīng)該不用我說太多了

      網(wǎng)絡(luò)時代的pc已經(jīng)普及到千家萬戶

      說完了分類,我們就來說說各個硬件供應(yīng)商

      首先是服務(wù)器還有工作站

      這兩類硬件供應(yīng)商主要是以下三家

      Sun,IBM還有HP(惠普)

      然后是PC

      以前IBM還有PC事業(yè)部,現(xiàn)在被聯(lián)想吞并了(蛇吞象)

      現(xiàn)在國際市場上有聯(lián)想和DELL(戴爾),目前戴爾還是國際老大

      還有HP康柏

      然后是網(wǎng)絡(luò),也就是路由器和交換機(jī)

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

      內(nèi)核(CPU)

      PC內(nèi)核

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

      服務(wù)器與工作站內(nèi)核

      這一塊與硬件廠商綁定

      還是Sun,IBM,HP三家自己生產(chǎn)

      題外

      在一些大型主機(jī)應(yīng)用市場,比如賣飛機(jī)票

      德國的漢莎,中國的中航信,香港的國泰用的都是尤利(美國的公司,英文名我忘了)

      其它用的是IBM的機(jī)器,現(xiàn)在能做大型機(jī)的感覺似乎只有IBM可以

      尤利已經(jīng)快倒了,技術(shù)太落后了,現(xiàn)在他們的系統(tǒng)還是fortran寫的,連c都不支持

      要特別說明的是,一個超大型主機(jī)然后多個小終端/pc的結(jié)構(gòu)現(xiàn)在越來越?jīng)]市場了

      將來的趨勢是用一整個包含多個服務(wù)器的分布式操作系統(tǒng)來取代這些大型主機(jī)

      因為大型主機(jī)更新?lián)Q代極其困難,一旦數(shù)據(jù)量超過了主機(jī)的處理能力

      那么就要換主機(jī),這個成本是極大的,但是如果用分布式操作系統(tǒng)

      那就只需要增加小服務(wù)器就行了

      硬件就大概說到這里,與大多數(shù)人沒什么關(guān)系

      因為大多數(shù)人壓根不可能進(jìn)入這些硬件領(lǐng)域,除非做銷售

      說了這么多,只是為了給軟件部分打基礎(chǔ)而已

      //做嵌入式的除外

      給初學(xué)者之四:java企業(yè)級應(yīng)用之軟件篇 嗯,說過了硬件就該是軟件了

      這篇是這個系列的重中之重

      首先我們來說說什么是軟件,統(tǒng)一一下概念

      所謂軟件通俗地說就是一套計算機(jī)程序

      實現(xiàn)了某些功能的計算機(jī)程序

      在很早很早以前,一臺計算機(jī)的軟件是不分層次結(jié)構(gòu)的

      一臺計算機(jī)只有一個系統(tǒng),這個系統(tǒng)既是操作系統(tǒng)又是應(yīng)用軟件,與硬件緊密綁定

      后來經(jīng)過許多年的發(fā)展發(fā)展發(fā)展

      人們把一些與硬件緊密相連的又經(jīng)常用到必不可少的功能做到一套程序中去

      這一套程序就被人們稱做操作系統(tǒng) 另外一些可有可無的,不同工作適應(yīng)不同環(huán)境的功能封裝到另外一套程序中去

      而這一系列程序被人們稱作應(yīng)用軟件

      如下圖:

      ------------

      |應(yīng)用軟件:falshgat/IE/realplayer/winamp..|

      ------------

      |操作系統(tǒng):UNIX/Windows/Linux/Solaris...|

      ------------

      前一篇我們知道,硬件分為服務(wù)器工作站與pc

      其實無論哪種硬件的軟件,都有操作系統(tǒng)與應(yīng)用軟件

      ok,那下面我們來談應(yīng)用軟件

      在現(xiàn)在企業(yè)級應(yīng)用中,我們的應(yīng)用軟件一般分為三層

      三層分別是表示層,業(yè)務(wù)邏輯層,數(shù)據(jù)持久層

      ------------------------------

      |表示層|業(yè)務(wù)邏輯層|數(shù)據(jù)持久層|

      ------------------------------

      我們來說說三層中的代表軟件

      表示層

      這一層一般在客戶端pc機(jī)上,最常見的是IE瀏覽器,這就是表示層的軟件

      表示層是直接與使用者交互的軟件

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

      最典型的是appserver,比如IBM的websphere,BEA的weblogic還有tomcat/jboss等

      這一層也是三層中的重點,我們要說的大部分內(nèi)容都是關(guān)于這一層的,這個等會再說

      這一層就叫做中間層

      數(shù)據(jù)持久層

      這一層典型的就是數(shù)據(jù)庫,一般也在服務(wù)器端

      但該服務(wù)器一般與裝業(yè)務(wù)邏輯層軟件的服務(wù)器分開

      當(dāng)然你也可以用IO輸入輸出流往硬盤上寫東西

      但沒人會建議你這么做,因為這樣做你的數(shù)據(jù)缺乏管理,不管怎樣

      這一層要做的就是保存數(shù)據(jù),業(yè)務(wù)邏輯層軟件一般不負(fù)責(zé)保留數(shù)據(jù)

      或者說業(yè)務(wù)邏輯層只負(fù)責(zé)暫時儲存數(shù)據(jù),一關(guān)機(jī),業(yè)務(wù)邏輯層數(shù)據(jù)全部over了

      那么數(shù)據(jù)的持久化(也就是儲存數(shù)據(jù))就必須要在這一層完成下面放著這些概念不談,我們來說說將來的趨勢

      趨勢一:

      瘦客戶端,很早很早以前,當(dāng)時C/S模式也就是client/server

      客戶端軟件大行其道的年代,一個pc用戶,是采用一個傻終端連接到服務(wù)器上

      然后進(jìn)行相應(yīng)的操作,最典型的就是我們上bbs經(jīng)常用的c-term

      這就是那個時代的產(chǎn)物,同樣還有我國現(xiàn)行的機(jī)票定座用的e-term

      后來呢,瀏覽器變得非常流行,人們發(fā)現(xiàn),瀏覽器也能傳遞一些數(shù)據(jù)

      雖然這些數(shù)據(jù)并不像那些終端那樣準(zhǔn)確,但應(yīng)付大多數(shù)日常需求足夠了

      于是人們就提出一個瘦客戶端概念,也就是說,將來表示層所有的其他軟件疾揮? 我們唯一需要的就是一個網(wǎng)頁瀏覽器,然后通過瀏覽器輸入ip地址連接到服務(wù)器

      然后進(jìn)行相關(guān)的操作,由于網(wǎng)頁瀏覽器一般每個操作系統(tǒng)都有自帶一個

      這樣做就達(dá)到了給我們客戶端瘦身的目的(不需要安裝額外軟件)

      這樣模式被稱作B/S模式,也就是browser/server模式

      但需要指出的是,雖然瘦客戶端是趨勢,但并不代表胖客戶端沒有市場

      尤其是一些復(fù)雜的業(yè)務(wù)操作,還是瀏覽器這種簡單軟件無法勝任的

      趨勢二:

      傻數(shù)據(jù)庫,ok,首先,我承認(rèn),這個名詞是我發(fā)明的,但我實在無法找到一個更好的表達(dá)

      什么是傻數(shù)據(jù)庫,如果誰對數(shù)據(jù)庫有所了解的話,就知道,以前的數(shù)據(jù)庫

      有自己的一套管理體系,甚至有自己的客戶端,比如oracle,mysql,sqlserver都有

      在某個管理工具上寫什么sql語句查詢數(shù)據(jù)庫是我們以前常做的事

      那么將來我們提倡的是:將所有的業(yè)務(wù)邏輯封裝到業(yè)務(wù)邏輯層去

      管理的事情由軟件來做,由業(yè)務(wù)邏輯層的軟件來做

      所謂傻數(shù)據(jù)庫就是說,將來的數(shù)據(jù)庫什么事都不用做

      只用把數(shù)據(jù)給我保存好就行了,那些復(fù)雜的業(yè)務(wù)邏輯什么外鍵什么關(guān)聯(lián)

      都沒數(shù)據(jù)庫什么事了,都交給業(yè)務(wù)邏輯層軟件來做

      這樣做的好處就是:我們就不需要這些該死難懂又復(fù)雜的數(shù)據(jù)庫系列管理工具了

      而且這些工具每個數(shù)據(jù)庫都有自己的工具,完全不一樣,亂七八糟,沒有人喜歡面對他們

      除了數(shù)據(jù)庫維護(hù)人員,也就是DBA,我們是軟件工程師,維護(hù)的事讓他們?nèi)プ?/p>

      而且嚴(yán)禁數(shù)據(jù)庫維護(hù)人員改動數(shù)據(jù)庫的數(shù)據(jù),他們只做備份,必要時候恢復(fù)一下就是了

      了解了這兩個趨勢之后,是不是有種砍頭去尾保中間的感覺?

      沒錯,未來的趨勢就是中間件時代,中間件工程師將是未來計算機(jī)應(yīng)用的主流

      那再次統(tǒng)一一下概念,什么是中間件?

      記得我上學(xué)的時候,看ibm的教材,看了半天中間件定義,就看懂記住一句話

      中間件是做別人不愿意去做的事情,現(xiàn)在想想,狗屁定義,呵呵

      什么是中間件,中間件是業(yè)務(wù)邏輯層的應(yīng)用軟件

      是處理業(yè)務(wù)數(shù)據(jù)與客戶端之間業(yè)務(wù)邏輯的一種應(yīng)用軟件

      一種提供網(wǎng)絡(luò)服務(wù)的服務(wù)器端應(yīng)用軟件

      舉個非常簡單的例子,網(wǎng)上銀行,某個人想用IE進(jìn)入工行的賬戶,然后轉(zhuǎn)帳

      在這個例子中,客戶端表示層顯然是IE,數(shù)據(jù)持久層顯然是銀行的核心數(shù)據(jù)庫

      那么中間件是什么?中間件就是提供這種服務(wù)的系統(tǒng)

      這三層的劃分如下

      ------------------------------

      |表示層 | 業(yè)務(wù)邏輯層 | 數(shù)據(jù)持久層 |

      ------------------------------

      | IE | 網(wǎng)上銀行

      | 數(shù)據(jù)庫

      |

      ------------------------------

      給初學(xué)者之五:企業(yè)級應(yīng)用之中間件

      前面一篇簡單介紹了一下應(yīng)用軟件的分層

      下面重點介紹一下中間件,也就是業(yè)務(wù)邏輯層的軟件結(jié)構(gòu) 從本系列第二篇我們知道,java程序是跑在虛擬機(jī)之上的 大致結(jié)構(gòu)如下:------------| grogram |------------| 虛擬機(jī)

      |------------| 操作系統(tǒng) |------------也就是說操作系統(tǒng)先運(yùn)行一個java虛擬機(jī),然后再在虛擬機(jī)之上運(yùn)行java程序 這樣做的好處前面也說過了,就是安全,一旦出現(xiàn)病毒或是其他什么東西 掛掉的是虛擬機(jī),操作系統(tǒng)并不會受多大影響

      這時候有人可能會問,為什么非要虛擬機(jī)?把操作系統(tǒng)當(dāng)成虛擬機(jī)為什么不行? 可以,當(dāng)然可以,但是這樣做某一個應(yīng)用軟件的bug就可能造成整個操作系統(tǒng)的死亡 比如說我們在某個服務(wù)器上安裝了一個收發(fā)電子郵件的軟件和java虛擬機(jī)

      那么一旦黑客通過收發(fā)電子郵件的軟件入侵系統(tǒng),那么操作系統(tǒng)就整個玩完

      那么如果黑客通過java程序進(jìn)行攻擊的話,那么死的將會是虛擬機(jī)而不是操作系統(tǒng) 大不了虛擬機(jī)崩潰,而操作系統(tǒng)正常運(yùn)行不受任何影響

      舉個簡單例子,比如說最常見的是將數(shù)據(jù)庫(DB)與中間件放在同一臺服務(wù)器上------------------------| program |

      |-----------|

      DB

      | | 虛擬機(jī)

      |

      |------------------------|

      操作系統(tǒng)

      |------------------------那么此時如果沒有虛擬機(jī),黑客病毒攻擊中間件系統(tǒng),就有可能造成操作系統(tǒng)的死亡 那此時數(shù)據(jù)庫也有可能跟著一起玩完,那損失可就大咯

      那如果此時有虛擬機(jī),那么一旦被攻擊,死的是虛擬機(jī),操作系統(tǒng)與數(shù)據(jù)庫不受任何影響

      嗯,回顧完虛擬機(jī),再來介紹中間件

      在很早很早以前,任何一家企業(yè),想要搭建一個局域網(wǎng)系統(tǒng),他需要請許多個工程師 比如說我們想搭建一個網(wǎng)上銀行,客戶端用瀏覽器,后臺數(shù)據(jù)庫比如說用oracle

      那么搭建這樣一個網(wǎng)上銀行,可能需要用到多少個工程師,我們來算一算

      首先,由于客戶端用的是瀏覽器,我們需要一些了解網(wǎng)絡(luò)通訊協(xié)議以及一些瀏覽器標(biāo)準(zhǔn)的網(wǎng)絡(luò)工程師

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

      然后,我們還需要一些操作系統(tǒng)的工程師,因為我們的系統(tǒng)需要跟操作系統(tǒng)直接交互 最后,我們需要一些設(shè)計網(wǎng)上銀行系統(tǒng)及其相關(guān)業(yè)務(wù)的工程師 太多了太多了,這樣一個中間件隊伍實在太龐大了,制作維護(hù)成本實在太高了 不僅如此,這樣一個中間件就算做出來,他們所寫的代碼也只能滿足這一家公司使用 其它公司統(tǒng)統(tǒng)不能再用,代碼重用率極低,近乎不可能重用

      畢竟這個系統(tǒng)中改動任何一個部分都有可能涉及到整個系統(tǒng)的改動

      那么如何降低成本?

      我舉出了四組的工程師:

      網(wǎng)絡(luò)工程師,數(shù)據(jù)庫工程師,操作系統(tǒng)工程師以及設(shè)計網(wǎng)上銀行系統(tǒng)的業(yè)務(wù)工程師 除了最后一組設(shè)計網(wǎng)上銀行的業(yè)務(wù)工程師之外,前面三組工程師是不是每一個項目都需要的?

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

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

      應(yīng)用服務(wù)器是干什么的?按官方的說法,應(yīng)用服務(wù)器是包括有多個容器的軟件服務(wù)器 那容器是什么?容器(Container)到底是個什么東西我想多數(shù)人還是不清楚

      在說這個之前,先介紹一下組件

      什么是組件,組件是什么?組件其實就是一個應(yīng)用程序塊 但是它們不是完整的應(yīng)用程序,不能單獨運(yùn)行

      就有如一輛汽車,車門是一個組件,車燈也是一個組件 但是光有車燈車門沒有用,它們不能跑上公路

      在java中這些組件就叫做javabean,有點像微軟以前的com組件 要特別說明的是,由于任何一個java文件編譯以后都是以類的形式存在 所以javabean肯定也是一個類,這是毫無疑問的

      好,那么容器里裝載的是什么呢?就是這些組件

      而容器之外的程序需要和這些組件交互必須通過容器

      舉個例子,IE發(fā)送了一個請求給容器,容器通過調(diào)用其中的一個組件進(jìn)行相關(guān)處理之后 將結(jié)果反饋給IE,這種與客戶端軟件交互的組件就叫做servlet

      但是組件有很多種,那么如何區(qū)分這些組件呢?

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

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

      同時,不同組件有可能還需要繼承一些特定的父類或者接口,這也是容器管理的需要 還有其他的一些組件,這里就不一一說明舉例了

      那么容器有很多種,按照他們裝載的組件類型劃分

      比如有裝ejb的ejb容器,有裝servlet與jsp還有靜態(tài)頁面的web容器等等 //這種只含有web容器的應(yīng)用服務(wù)器也被叫做web服務(wù)器 當(dāng)表示層的應(yīng)用軟件通過網(wǎng)絡(luò)向appserver發(fā)送一個請求的時候

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

      這些繁瑣而無味的工作我們都不管,都由appserver去做吧,把注意力集中在業(yè)務(wù)邏輯上

      appserver與其他相關(guān)軟件的關(guān)系如下圖:

      ------------------------|

      表示層

      |

      業(yè)務(wù)邏輯層

      | 數(shù)據(jù)持久層 |------------------------|

      |

      -----------------

      |

      | |

      IE

      |

      |

      javabean

      |

      |

      | |

      ->

      -----------------

      ->

      DB

      | |

      client

      <-

      appserver <-

      | |

      |-------------------------|

      | |

      |

      虛擬機(jī)

      |

      | |--------------|-------------------------|------------| |

      Windows

      |

      Linux/Saloris

      |LinuxSaloris| |--------------|-------------------------|------------| 圖上可以看出:虛擬機(jī)負(fù)責(zé)處理中間件與操作系統(tǒng)之間的交互 appserver則負(fù)責(zé)組件的管理以及與其他兩層的業(yè)務(wù)交互 附圖: image002.gif(76463 字節(jié))

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

      比如jsp/servlet容器在一個服務(wù)器上,而ejb容器在另外一個服務(wù)器上等等 這是分布式操作系統(tǒng)大面積應(yīng)用的基礎(chǔ),這個以后再說 下面這張相對簡單: 2 附圖: j2ee.gif(8226 字節(jié))

      嗯,那么話題再回到中間件上去,什么是中間件?

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

      而關(guān)于中間件有諸多規(guī)范以及遵循這些規(guī)范的模型 最流行的規(guī)范無非兩種,一個是j2ee還有一個是.net 但是.net幾乎只有微軟在用,所以很多人把.net這個規(guī)范就當(dāng)成是微軟的中間件產(chǎn)品 也不為過,畢竟沒幾個公司喜歡跟著微軟屁股后面跑的

      給初學(xué)者之六:java企業(yè)級應(yīng)用之綜合篇

      我們知道中間件有很多種規(guī)范以及相關(guān)的模型 最流行的一個是j2ee還有一個是.net 那么各大公司關(guān)于這兩套規(guī)范各有什么產(chǎn)品以及周邊呢?

      j2ee:

      黃金組合

      操作系統(tǒng):Solaris 應(yīng)用服務(wù)器:Weblogic 數(shù)據(jù)庫:Oracle 開發(fā)工具:JBuilider/IntelliJ IDEA 優(yōu)點:性能一級棒,大企業(yè)大公司做系統(tǒng)的首選,世界五百強(qiáng)幾乎都是這套組合 缺點:極貴

      超級組合,也是最安全最酷的黃金組合,硬件采用SUN公司的機(jī)器

      但是SUN的服務(wù)器很貴,同等價格不如去買IBM的機(jī)器

      SUN的服務(wù)器支持Solaris的效果自然不用說,Solaris號稱是世界上最安全的操作系統(tǒng) Oracle也是世界上最安全,性能最優(yōu)的數(shù)據(jù)庫,Weblogic是當(dāng)今性能最優(yōu)的appserver JBuilder和IDEA各有所長,JBuilder是Borland公司的招牌之一

      是當(dāng)今世界上最流行的java IDE,用delphi寫的,但網(wǎng)絡(luò)上評價似乎不是很好 IDEA擁有插件功能,界面在所有java IDE中最為漂亮,東歐人開發(fā)的產(chǎn)品 東歐人嚴(yán)謹(jǐn)?shù)淖黠L(fēng)在這個產(chǎn)品上體現(xiàn)得尤為突出,用java寫的

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

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

      由于產(chǎn)商之間的利益沖突,比如oracle也有自己的appserver,但是性能不怎樣 使得這幾種產(chǎn)品之間協(xié)作的性能要比預(yù)想中的要差一點點--開源系列

      操作系統(tǒng):-應(yīng)用服務(wù)器:JBoss 數(shù)據(jù)庫:MySql 開發(fā)工具:Netbeans 優(yōu)點:便宜,性能未必最佳,但是對付中小企業(yè)足夠了 缺點:出了問題自己抗吧

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

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

      操作系統(tǒng),軟件再不用錢,服務(wù)器也要錢,看這臺機(jī)器上跑什么操作系統(tǒng)就用什么了--IBM套餐

      操作系統(tǒng):Linux 應(yīng)用服務(wù)器:Websphere 數(shù)據(jù)庫:DB2 開發(fā)工具:Eclipse/WebSphere Studio 優(yōu)點:服務(wù)好,IBM可以提供全套服務(wù),也可以替客戶承擔(dān)風(fēng)險 缺點:把機(jī)器數(shù)據(jù)全部交給IBM,安全什么的都由不得你了

      呵呵,IBM全套產(chǎn)品,甚至包括硬件設(shè)備IBM的服務(wù)器

      由于是一個公司的產(chǎn)品,各產(chǎn)品之間的協(xié)作自然不錯

      價格方面,Linux,DB2,Eclipse都是開源產(chǎn)品,Websphere目前零售價是33.8萬人民幣 IBM服務(wù)器不錯,可以考慮--.net:

      微軟陣營

      操作系統(tǒng):Windows 應(yīng)用服務(wù)器:.net應(yīng)用服務(wù)器(好像叫IIS)數(shù)據(jù)庫:SqlServer 開發(fā)工具:MS Visual Studio 優(yōu)點:客戶端的用戶體驗良好,和客戶端諸多微軟產(chǎn)品的兼容性強(qiáng) 缺點:離開了微軟,寸步難行,和其他任何一家公司的產(chǎn)品都不兼容

      微軟的東西,怎么說呢,太專橫了

      微軟所有的東西都是圍繞著windows來做的

      .net其實已經(jīng)可以實現(xiàn)跨平臺了,但是微軟出于自身商業(yè)考慮 在其應(yīng)用服務(wù)器跨平臺的實現(xiàn)上設(shè)置了種種障礙 而且針對windows,微軟做了大量的優(yōu)化,可以這么看.net就是與windows捆綁的一套產(chǎn)品

      所以有些人說,微軟的產(chǎn)品離開了windows,就是渣

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

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

      所以在一些快速開發(fā),還有和微軟產(chǎn)品兼容性要求較高的領(lǐng)域,.net還是比較有市場的 最后一個visual studio對它之前的版本兼容,且支持c,c++,c#,vb等語言 在其傳統(tǒng)領(lǐng)域,比如寫一些桌面軟件等客戶端應(yīng)用上,.net還是第一選擇--最后要說明的是

      這些組合不是固定不變的

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

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

      比如你選擇了.net應(yīng)用服務(wù)器,那操作系統(tǒng)就必須是windows 你選擇了sqlserver,那就必須在windows上用

      還有就是遵循j2ee規(guī)范的所有的組件都可以在不同的應(yīng)用服務(wù)器上互相移植 比如你可以在測試的時候用jboss 而在正式投產(chǎn)上線的時候使用websphere,只需要在配置文件中作相應(yīng)改動即可

      給初學(xué)者之七:java企業(yè)級應(yīng)用之術(shù)語篇

      在了解完J2ee的相關(guān)周邊產(chǎn)品之后需要深入J2ee規(guī)范內(nèi)部去了解一下到底這些規(guī)范 這里介紹幾個最常用的規(guī)范

      再繼續(xù)說下去之前有必要說幾個常識

      Java的誕生

      Java之父James Gosling早年從cmu畢業(yè)之后

      從事了一段時間的開發(fā)工作,后來意外碰到一個項目

      這個項目要求他用C++開發(fā),但可愛的JG是天才,凡是天才在某方面特別突出的同時 必然有一些天生的缺陷,恩,或說共性,比如說懶,急躁和傲慢

      JG既然是天才,那就必然具備這些共性,JG懶,以至于他學(xué)不好C++ 不僅他學(xué)不好,當(dāng)年開發(fā)出Java的那個團(tuán)隊也都學(xué)不好C++ 他們急噪,以至于他們中有人甚至威脅以辭職的方式離開這個需要使用CPP開發(fā)的項目 他們傲慢,所以他們決定開發(fā)出一種新的語言來取代那個該死的CPP 更可愛的是,他們一開始居然給這門語言起名C++++--//沒錯,我沒敲錯 叫什么C加加 加加減減,意思是加上一些好東西,減去一些壞東西

      天才的設(shè)定,有時候你會發(fā)現(xiàn)天才和傻瓜真的只有一線之隔

      還好這個可愛的名字沒有被繼承下來,這些天才們給他們的產(chǎn)物起名叫Oak//橡樹 只是后來當(dāng)他們?nèi)プ赃@個名字的時候,發(fā)現(xiàn)這個名字已經(jīng)被注冊了

      于是在Sun公司的一個女職員//mm就是心細(xì),這個說法也是我們公司mm告訴我的 的提議下,把這個可愛的語言起名為Java,就是他們當(dāng)時喝的咖啡的名字 所以我們看到Java的標(biāo)志就是一杯冒著熱氣的咖啡

      JavaBean 了解完Java之后,再來說說什么是JavaBean//華為面試題 JavaBean是什么? 咖啡豆

      ja,更為科學(xué)點的解釋是

      用java語言編寫的可重用的軟件組件//組件的定義前面說過了,不再重復(fù)

      很形象不是么? 將javabean放入杯子//容器,還記得容器的概念么?web容器,ejb容器 就可以沖泡//編譯 成咖啡,供客人們品嘗//運(yùn)行 完美的服務(wù)

      下面進(jìn)入正題 再談容器

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

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

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

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

      Servlet web容器組件

      Servlet確切地說,就是web容器運(yùn)行的java組件

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

      當(dāng)一個request請求被web容器截獲之后,容器分析該請求地址 然后通過一個配置文件中的映射表//web.xml 調(diào)用相應(yīng)的Servlet組件處理后將結(jié)果返還給客戶端

      JSP//Java Server Page web容器組件

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

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

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

      所以JSP和Servlet對于web容器來說其實是一種東西,雖然它們編寫遵循的標(biāo)準(zhǔn)有所不同 極大地簡化了代碼同時增加了代碼的可讀性,生產(chǎn)維護(hù)成本下降 值得一提的是,在制定JSP規(guī)范的過程中,借鑒了ASP的很多規(guī)范 寫過ASP并熟悉Java語言的人應(yīng)該能很快掌握J(rèn)SP

      EJB//Enterprise JavaBean ejb容器組件

      隨著時間的推移,人們發(fā)現(xiàn)普通的JavaBean似乎并不能滿足企業(yè)級應(yīng)用的需要 最典型的就是虛擬機(jī)提供的垃圾回收收集機(jī)制也就是GC不夠完善 可以優(yōu)化的余地極大,在這種情況下,EJB應(yīng)運(yùn)而生

      EJB和其它組件一樣,不過遵循了某些規(guī)范而已

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

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

      由于網(wǎng)絡(luò)連接是瞬時連接,所以很多時候并發(fā)數(shù)并沒有100那么大 前一秒有可能有30個請求被發(fā)送過來并被處理 后一秒可以只有10個請求被發(fā)送過來并被處理 只有在非常非常極端的情況下才有可能發(fā)生100個請求同時被發(fā)送過來并被處理的情況 那么我們是否需要保留100個那么多個對象在服務(wù)器的內(nèi)存里面去處理這些請求呢? 很顯然,不需要,大多數(shù)時候//甚至可以說是所有時候,我不相信有那么極端的情況 我們只需要保存其中的10-30%就夠了,那么什么時候需要20%,什么時候需要50% 甚至100%,這個過程就交給容器去管理,這就是ejb容器每天在干的事 管理內(nèi)存中活躍的對象

      恩,必須強(qiáng)調(diào)的一點是,由于使用的不成熟 我們經(jīng)常把規(guī)范以及具體的應(yīng)用兩個名詞混用

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

      JDBC 和數(shù)據(jù)庫的連接

      這個嚴(yán)格說來是數(shù)據(jù)庫產(chǎn)商需要關(guān)心的事

      關(guān)于AppServer如何與數(shù)據(jù)庫的連接

      但是也需要開發(fā)人員做一點事,因為AppServer不知道什么時候組件需要用到數(shù)據(jù)庫 同時也需要開發(fā)人員告訴AppServer他們使用的是什么數(shù)據(jù)庫,ip地址等等 JDBC就是關(guān)于這一套東東的規(guī)范

      包括數(shù)據(jù)庫的產(chǎn)商應(yīng)提供什么樣的接口

      AppServer應(yīng)用服務(wù)器應(yīng)該如何去連接 開發(fā)人員應(yīng)該如何去配置這些連接等等

      還有一些數(shù)據(jù)源,連接池等概念參考相關(guān)數(shù)據(jù)在此就不再贅述 其它的規(guī)范比如JMX等確切地說與開發(fā)人員關(guān)聯(lián)并不大了 這類高級應(yīng)用只對AppServer應(yīng)用服務(wù)器產(chǎn)商重要 也不再羅嗦了

      ---------記得聽說過這樣一種說法

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

      但最后每個人都會知道自己不知道的,也就是后一種說法的大四階段 //前一種說法里面的那些家伙估計要到工作以后才能明白 因為任何一門學(xué)科都博大精深,要是能在兩三年之內(nèi)就統(tǒng)統(tǒng)搞懂 那不是在吹牛就是坐井觀天,java如此,c如此,c++也是如此

      那么到了本系列的第七集,可愛的讀者應(yīng)該處在什么階段呢?

      恭喜,在看完這篇文章之后,你就基本處于知道自己不知道的那種階段 離拽起來還有那么一段距離,因為你們畢竟還沒有學(xué)習(xí)和積累一定的基礎(chǔ)知識 但是騙騙外行,蒙蒙國企那些吃閑飯的管理人員問題不大

      給初學(xué)者之八:java高級應(yīng)用之框架篇 沒錯,我沒敲錯

      之所以不再聲稱是企業(yè)級應(yīng)用而稱之為高級應(yīng)用 是因為下面要講的東西屬于純民間性質(zhì) 是java具體應(yīng)用的上層建筑,可用可不用,沒有人強(qiáng)迫你用

      首先給框架//framework 下一個定義

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

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

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

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

      現(xiàn)在建筑多采用鋼筋混凝土結(jié)構(gòu),注意里面一個很重要的詞匯:鋼筋 托福閱讀中曾有一題聽力就是關(guān)于鋼筋結(jié)構(gòu)的誕生,在美國

      恩,現(xiàn)代建筑中多在建筑起來之前,先用鋼筋搭建出一個框架出來 然后往鋼筋中間填入混凝土,從而形成一個完成的建筑

      而今天要說到的框架就是這么一個東西在每一個軟件中間的實現(xiàn)

      框架就是那么一個通過預(yù)先寫好代碼從而幫我們建立起一個軟件結(jié)構(gòu)的這么一個東西

      這里提一下框架與規(guī)范//主要指J2ee規(guī)范也就是官方標(biāo)準(zhǔn)的區(qū)別

      從某種意義上說,J2ee規(guī)范本身就是一個框架

      無論是web容器也好,還是ejb容器也好,它們都開發(fā)了一部分通用的代碼 并且?guī)椭覀兇罱ㄆ饋砹艘粋€軟件結(jié)構(gòu),我們要做的就是往里面填入組件 比如ejb/servlet/jsp等等

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

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

      同時也出于一個提出合理的標(biāo)準(zhǔn)的目的,而讓廣大的開發(fā)者參與標(biāo)準(zhǔn)的制定 而成立了這樣一個社區(qū),現(xiàn)在還健在,網(wǎng)址是jcp.org 每一個新的規(guī)范發(fā)布之前都會在這個社區(qū)廣泛討論,最終對規(guī)范的制定產(chǎn)生巨大的影響 其中就包括企業(yè)級的參與者,相當(dāng)有名的JBoss以及我國的金碟公司都是其中的成員

      下面介紹一下幾個相當(dāng)著名的框架,必須要指出的是,雖然框架大多開源 但并不代表所有的框架都開源,比如.net framework,但是java框架大多數(shù)開源 言歸正傳

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

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

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

      JSF則是產(chǎn)商們大力支持,前景看好

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

      Spring 大名鼎鼎的Spring框架

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

      Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》一書 Rod Johnson認(rèn)為,J2ee里面的那一套//尤其是ejb 太重了,對于單機(jī)的系統(tǒng)來說,沒有必要使用那么復(fù)雜的東西 于是就開始設(shè)計并引導(dǎo)Spring小組開發(fā)出這樣一個構(gòu)架

      不能不說他是個天才,因為的的確確不是所有的系統(tǒng)都是跨多服務(wù)器的

      沒有必要把一個簡單的系統(tǒng)設(shè)計得那么復(fù)雜//天才的那幾個共性又體現(xiàn)出來了 Spring從誕生之日起就是針對EJB的,力爭在不少應(yīng)用上取代EJB 而它也確實達(dá)到了這個目的

      現(xiàn)在包括WebLogic等主流應(yīng)用服務(wù)器還有主流IDE都開始逐漸接受該框架 并提供相應(yīng)支持

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

      套用好萊塢的一句名言就是:你呆著別動,到時我會找你。什么意思呢?就好比一個皇帝和太監(jiān)

      有一天皇帝想幸某個美女,于是跟太監(jiān)說,今夜我要寵幸美女 皇帝往往不會告訴太監(jiān),今晚幾點會回宮,會回哪張龍床,他只會告訴太監(jiān)他要哪位美女 其它一切都交由太監(jiān)去安排,到了晚上皇帝回宮時,自然會有美女出現(xiàn)在皇帝的龍床上 這就是控制反轉(zhuǎn),而把美女送到皇帝的寢宮里面去就是注射

      太監(jiān)就是是框架里面的注射控制器類BeanFactory,負(fù)責(zé)找到美女并送到龍床上去 整個后宮可以看成是Spring框架,美女就是Spring控制下的JavaBean 而傳統(tǒng)的模式就是一個饑渴男去找小姐出臺

      找領(lǐng)班,幫助給介紹一個云云,于是領(lǐng)班就開始給他張羅

      介紹一個合適的給他,完事后,再把小姐還給領(lǐng)班,下次再來

      這個過程中,領(lǐng)班就是查詢上下文Context,領(lǐng)班的一個職能就是給客戶找到他們所要的小姐

      這就是lookup()方法,領(lǐng)班手中的小姐名錄就是JNDI//Java Naming and Directory Interface 小姐就是EJB,饑渴男是客戶端,青樓是EJB容器

      看到區(qū)別了么?饑渴男去找小姐出臺很麻煩,不僅得找,用完后還得把小姐給還回去 而皇帝爽翻了,什么都不用管,交給太監(jiān)去處理,控制權(quán)轉(zhuǎn)移到太監(jiān)手中去了 而不是皇帝,必要時候由太監(jiān)給注射進(jìn)去就可以了

      看到Spring的美妙了吧,Spring還提供了與多個主流框架的支持 可以和其它開源框架集成

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

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

      什么意思呢?我們知道傳統(tǒng)的數(shù)據(jù)庫都是關(guān)系型的

      一條條記錄以表格的形式儲存,而表與表之間充斥著是關(guān)系/關(guān)聯(lián)

      比如說一個人,名字zhaoce,性別男,年齡23那么數(shù)據(jù)庫中是這么儲存的 姓名 性別 年齡 zhaoce m 23 某女

      f 22 而實際應(yīng)用服務(wù)器中的實體都是以對象的形式存在,一個個對象 zhaoce是以這種形式存在的 Human human=new Human();human.setName(“zhaoce”)human.setSex(“m”);human.setAge(23);這樣的,那么我們知道,傳統(tǒng)的JDBC是通過一個二維字符串將數(shù)據(jù)取出 需要我們自己將其包裝成對象,在存入的時候,我們還需要將對象拆開 放入sql語句中//Insert into Huamn values('zhaoce','m',23)然后執(zhí)行該sql語句

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

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

      關(guān)于ORM,最高的境界應(yīng)該是在java代碼中不出現(xiàn)任何一句的sql語句 注意,是不包括sql語句,Hibernate的hql以及ejb的ejb-ql不算在內(nèi)

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

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

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

      只是一堆組件的有序復(fù)合,應(yīng)用時不能脫離于應(yīng)用服務(wù)器單獨存在

      給初學(xué)者之九:收尾

      最后一篇介紹幾個常見的概念

      設(shè)計模式

      這可不僅是java獨有

      我看的書就是c++和smalltalk例子的

      先說說什么是設(shè)計模式

      模式是什么?模式是經(jīng)驗的總結(jié),潛規(guī)則的抽象

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

      可以,但為什么幾乎全世界的航空公司登機(jī)前都是這一套流程呢? 因為航空公司經(jīng)過長期實踐之后得出了一堆結(jié)論和經(jīng)驗 并認(rèn)為這樣做才是最安全,或說是最有效率的 這就是模式,模式是編程高手之間交流的橋梁

      兩個編程高手通過統(tǒng)一命名的模式了解對方的思想

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

      又比如吃飯,每吃一口飯,我們要先端碗,拿筷子,張嘴,塞飯入口,咀嚼最后吞咽 這就是一套模式,我們給這套模式命名為吃飯

      那么當(dāng)老爸叫吃飯的時候,我們就能明白什么意思

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

      面向?qū)ο笥谐S玫?1種模式,需要掌握,主要分為創(chuàng)建,行為,結(jié)構(gòu)三類 J2ee有J2ee的模式,Sun公司出了一本書叫《J2EE核心模式》可以拿來看看 必需要指明的是,模式不是規(guī)范,比如吃飯模式

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

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

      可以根據(jù)注釋自動生成HTML文檔

      Ant 98年,有一位程序員在從歐洲飛回美國的飛機(jī)上想到了這么一個東西 從而改變了整個世界,他的名字叫James Duncan Davidson 組織管理工具,可以這么描述它

      比如你想在編譯之后自動再次生成JavaDoc 那么你只需要編輯Ant腳本//對,就像Windows腳本那樣 然后批處理就可以了,不過現(xiàn)在Ant已經(jīng)廣泛集成到IDE中去 不需要自己手動編寫,不過如果想要炫炫,據(jù)說此招百試不爽

      JUnit 測試工具,Unit家族可不只有JUnit 還有其它版本的,這個不細(xì)說,具體實踐一下就明白了

      POJO //Plain Old Java Object 就是傳統(tǒng)的Java對象,也就是一個JavaBean 由虛擬機(jī)來掌握其生死

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

      覺得我們使用了太多的規(guī)范,以至于我們都忘記了純粹的java對象 以至于我們都忽略了它的存在,所以叫了這么一個名字

      以喚醒人們的記憶,這個意義上來說EJB其實不能算是POJO 畢竟遵循了一堆的接口,但是不管怎樣,接口歸接口,還是沒有繼承類 沒有被強(qiáng)加什么//遵循可以寫空方法假遵循 所以說還是POJO也對

      但是由于這種東西缺乏管理,不象Servlet有專門的容器管理并繼承了一定的類 而沒有管理的對象在虛擬機(jī)中是很危險的,因為垃圾回收機(jī)制各個虛擬機(jī)不同 而且也不怎樣,極有可能長時間不回收,這樣在企業(yè)級的應(yīng)用中呢 就有可能造成內(nèi)存大量被占用從而死機(jī),毫無疑問,這種機(jī)制需要優(yōu)化 這種優(yōu)化就是通過EJB容器或者Spring構(gòu)架來實現(xiàn)

      這么做還有一個好處就是迫使程序員對每一個類做封裝

      強(qiáng)迫他做管理,以達(dá)到防止內(nèi)存泄露的目的,內(nèi)存泄露最經(jīng)常出現(xiàn)的錯誤就是 引用未釋放,引用最典型體現(xiàn)在new這個關(guān)鍵字上,new得越多引用得越多 隨著時間地增長,有可能導(dǎo)致循環(huán),不停new new new new new.....其中哪怕只要有一個new處理不當(dāng),虛擬機(jī)無法回收內(nèi)存 那就極有可能完

      第二篇:java初學(xué)者學(xué)習(xí)心得

      學(xué)習(xí)Java心得體會

      學(xué)習(xí)了一學(xué)期的Java課程,覺得是該總結(jié)自己的心得體會了。開始學(xué)習(xí)任何一門課(包括java),興趣最重要。一直覺得自己在學(xué)計算機(jī)編程語言,學(xué)習(xí)了很多,但每門語言都停留在知識邊緣地帶,都沒深入到它們的精華部分,對它們的精華部分知之甚少,于是趁學(xué)校開設(shè)這門課,并且有自己的老師講解,還有了上機(jī)的機(jī)會,比自己自學(xué)省事多了,于是鼓足信心,開始了漫長的java征途。

      還記得我編寫的第一個經(jīng)典程序“hello Word”。從那時起我已開始走進(jìn)Java的世界。當(dāng)時自己不是很理解為什么main方法一定要這樣來定義public static void main(String[] args),能不能不這樣寫?問了好多同學(xué),他們告訴我的答案是一樣的“java本身要求就是這樣子的”,但我自己不甘心,就進(jìn)行了下面的好多操作:把main改個名字運(yùn)行一下,看看報什么錯誤,然后根據(jù)出錯信息進(jìn)行分析;把main的public取掉,在試試看,報什么錯誤;static去掉還能不能運(yùn)行;不知道m(xù)ain方法是否一定要傳一個String[]數(shù)組的,把String[]改掉,改成int[],或者String試試看;不知道是否必須寫args參數(shù)名稱的,也可以把a(bǔ)rgs改成別的名字,看看運(yùn)行結(jié)果如何。結(jié)果把Hello World程序反復(fù)改了七八次,不斷運(yùn)行,分析運(yùn)行結(jié)果,最后就徹底明白為什么了main方法是這樣定義的了。接著在以后的學(xué)習(xí)中我也采用這樣的方法解決問題,卻發(fā)現(xiàn)自己的速度比別人慢了好多,我就把自己的課余時間也分一部分給了java。因為基礎(chǔ)是最重要的,只有基礎(chǔ)牢固才有可能對后面的學(xué)習(xí)有更加深刻的認(rèn)識!

      學(xué)習(xí)一門新的語言,參考書是離不開的。聽老師說訂的教材偏難,不適合我們初學(xué)者,于是我在圖書館借了參考書(一本篇幅較短的入門書來學(xué)習(xí)那些最簡單、最基本的東西,包括學(xué)習(xí)Java語法等)。同時,對一個最簡單的程序也應(yīng)該多去調(diào)試,多想想如果改動一下會出現(xiàn)什么結(jié)果?為什么必須那樣寫?多去想想這些問題然后去操作,會讓你有更多的收獲。這樣反復(fù)地思考是很有用的。

      在學(xué)習(xí)Java的語法時,Java的語法是類似c語言的,所以學(xué)習(xí)的比較輕松。唯一需要注意的是有幾個不容易搞清楚的關(guān)鍵字的用法,public,protected,private,static,什么時候用,為什么要用,怎么用,和同學(xué)一起討論了好久才得以解決。

      在學(xué)習(xí)Java的面向?qū)ο蟮木幊陶Z言的特性。比如繼承,構(gòu)造器,抽象類,接口,方法的多態(tài),重載,覆蓋,Java的異常處理機(jī)制。對于一個沒有面向?qū)ο笳Z言背景的人來說,我覺得這個過程需要花很長很長時間,因為學(xué)習(xí)Java之前沒有C++的經(jīng)驗,只有C語言的經(jīng)驗,花了很長時間,才徹底把這些概念都搞清楚,把書上面的例子反復(fù)的揣摩,修改,嘗試,把那幾章內(nèi)容反復(fù)的看過來,看過去,看了很多遍,才徹底領(lǐng)悟了。

      開始熟悉Java的類庫?;A(chǔ)類庫里面的類非常非常多。據(jù)說有3000多個。但是我真正使用的只有幾個,比如說 java.io.*;java.util.*;java.sql.*;等。此外,我對于static,public,private,Exception,try{ },catch { },finally{ }等等一開始都不是很懂,都是把書上面的例子運(yùn)行成功,然后就開始破壞它,不斷的根據(jù)自己心里面的疑問來重新改寫程序,看看能不能運(yùn)行,運(yùn)行出來是個什么樣子,是否可以得到預(yù)期的結(jié)果。這樣雖然比較費(fèi)時間,不過一個例子程序這樣反復(fù)破壞幾次之后。我就對這個相關(guān)的知識徹底學(xué)通了。有時候甚至故意寫一些錯誤的代碼來運(yùn)行,看看能否得到預(yù)期的運(yùn)行錯誤。這樣對于編程的掌握是及其深刻的。

      在學(xué)習(xí)Java的過程中我得出這樣的結(jié)論:

      1.學(xué)習(xí)中,要養(yǎng)成良好的習(xí)慣(寫括號時要成對,字母大小寫要區(qū)分,單詞拼寫要準(zhǔn)確)。

      2.在學(xué)習(xí)的過程中,最好不是僅僅停留在java表層,不是抄書上的例子運(yùn)行出結(jié)果就可以。要注意,即便對一個簡單的例子也要有耐心去琢磨、調(diào)試、改動。

      3.在學(xué)習(xí)的過程中一定要動手做、試著寫代碼,而不是抱一本書看看就行。很多東西和體會必須自己動手才能真正屬于自己。4.在 Java 的學(xué)習(xí)過程中,可能會遇到形形色色的問題不容易解決,應(yīng)多去專業(yè)論壇了解相關(guān)的知識,書本上的知識有限。要會從網(wǎng)上搜索有用的信息 加以整理,促進(jìn)學(xué)習(xí)的深入和知識水平的提高。

      看了好多網(wǎng)上課程,說學(xué)到一定程度要嘗試著自己做東西,但覺得自己僅僅經(jīng)過一學(xué)期的學(xué)習(xí),還遠(yuǎn)遠(yuǎn)不夠,希望自己在以后學(xué)習(xí)中繼續(xù)努力,能夠真真正正擁有一門編程語言,對自己今后的發(fā)展起到作用。在學(xué)習(xí)java語言的同時,也讓我學(xué)會了如何來發(fā)現(xiàn)問題,如何解決問題,怎樣有效的學(xué)習(xí)等等,相信會對我一生都有幫助。

      第三篇:給予Java初學(xué)者的學(xué)習(xí)路線建議

      給Java初學(xué)者的學(xué)習(xí)路線建議

      在校學(xué)生,務(wù)必要在學(xué)好基礎(chǔ)(比如計算機(jī)系統(tǒng)、算法、編譯原理等等)的前提下,再考慮去進(jìn)行下面的學(xué)習(xí)。第一部分:對于尚未做過Java工作的同學(xué),包括一些在校生以及剛準(zhǔn)備轉(zhuǎn)行Java的同學(xué)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      第四篇:Java初學(xué)者如何學(xué)習(xí)(必看)(本站推薦)

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

      每次上網(wǎng),泡bbs逛論壇,沒少去java相關(guān)的版面 總體感覺初學(xué)者多,高手少,精通的更少

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

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

      關(guān)于這兩個概念的解釋任何一本面向?qū)ο笳Z言的教材里面都有 知道了什么是java,那自然就會對java能干什么感興趣

      在說java能做什么之前,先說java作為一個真正面向?qū)ο笳Z言的優(yōu)點 首先第一個,既然是真正的面向?qū)ο?,那就要做到徹底的封裝

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

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

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

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

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

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

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

      這已經(jīng)很好了,安全,這是java的最突出的優(yōu)點

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

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

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

      這個安全是針對你的系統(tǒng)來說得,系統(tǒng)在跑了java程序之后會特別地穩(wěn)定

      而且還能跨平臺,那么很明顯,java主要應(yīng)用于除了windows操作系統(tǒng)以外所有的平臺 比如手機(jī),服務(wù)器

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

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

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

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

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

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

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

      沒有什么比安全穩(wěn)定更重要的,換句話說,我們可以忍受慢,但是不能忍受死機(jī)和藍(lán)屏 而且越大型的應(yīng)用,這種慢的劣勢體現(xiàn)得越模糊

      因為當(dāng)系統(tǒng)項目越做越大,任何一個環(huán)節(jié)做不好都可能影響全局的情況下 安全尤其重要,而且就像goto語句一樣

      這種過分追求速度的主張會給系統(tǒng)開發(fā)和糾錯以及維護(hù)帶來無可挽回甚至不可避免的損失 把內(nèi)存交給計算機(jī)去管理吧,這種代價值得

      我們做的不是pc游戲,沒必要把內(nèi)存的那一點點消耗當(dāng)親爹

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

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

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

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

      在知道了java有什么優(yōu)點,能做什么之后 就該說一下java該如何去學(xué)了

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

      sun公司做出了一個決定,將java應(yīng)用平臺做一個劃分 畢竟在不同領(lǐng)域,語言應(yīng)用特性是有區(qū)別的

      針對不同領(lǐng)域內(nèi)的應(yīng)用,sun公司可以發(fā)布相關(guān)高端標(biāo)準(zhǔn)來統(tǒng)一規(guī)范代碼 這三大塊就是J2SE,J2EE以及J2ME 這個舉措今天看來無疑是非常了不起的

      正是由于這次革命性的發(fā)展,使java從一種小打小鬧游戲性的語言 發(fā)展成為今天企業(yè)級應(yīng)用的基礎(chǔ)

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

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

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

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

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

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

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

      java的設(shè)計者們提出了一個虛擬機(jī)的概念

      在操作系統(tǒng)之上建立一個統(tǒng)一的平臺,這個平臺必須實現(xiàn)某些功能以支持程序的運(yùn)行 如下圖:

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

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

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

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

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

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

      但一般來說我們會使用效果比較好的開發(fā)工具,也就是IDE 在J2SE這一塊,特別推薦JCreator這款I(lǐng)DE sun公司的產(chǎn)品,與JDK結(jié)合得幾乎是天衣無縫,非常適合初學(xué)者使用

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

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

      這本書自然很經(jīng)典,說得比較細(xì),只是我覺得不太適合初學(xué)者,其實也不難

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

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

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

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

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

      給初學(xué)者之三:java企業(yè)級應(yīng)用之硬件篇

      總算講到企業(yè)級應(yīng)用了,內(nèi)容開始逐漸有趣起來 java企業(yè)級應(yīng)用分為硬件篇和軟件篇

      重點在軟件,硬件是外延,嚴(yán)格地說與java沒有必然聯(lián)系 但是,由于java是網(wǎng)絡(luò)語言,不了解硬件的一些基礎(chǔ)知識

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

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

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

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

      于是人們造出了第二臺,第三臺,第四臺,第五臺……第n臺計算機(jī) 人們就造出了無數(shù)臺計算機(jī)并使其成為一種產(chǎn)品

      逐漸應(yīng)用于許多復(fù)雜計算領(lǐng)域,不僅僅是科研,許多生產(chǎn)領(lǐng)域也開始出現(xiàn)計算機(jī)的影子 然后又隨著時間的推移,人們發(fā)現(xiàn)不可能把所有的計算機(jī)都做成一個樣子 因為各行各業(yè)對計算機(jī)性能的要求各不相同

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

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

      按照性能的不同,在不同領(lǐng)域,出現(xiàn)了滿足符合不同要求的計算機(jī) 幾乎在同時,人們也開始考慮計算機(jī)之間通訊問題

      人們開始考慮將不同的計算機(jī)連接起來,于是網(wǎng)線出現(xiàn)了,網(wǎng)絡(luò)出現(xiàn)了 又隨著網(wǎng)絡(luò)的發(fā)展,出現(xiàn)了一下專門為了尋址而存在的機(jī)器 這就是路由器和交換機(jī),然后又出現(xiàn)了一些公益性的組織或團(tuán)體 他們制定了一系列的標(biāo)準(zhǔn)來規(guī)范以及管理我們的網(wǎng)絡(luò) 于是3w出現(xiàn)了,計算機(jī)的網(wǎng)絡(luò)時代來臨了

      嗯,說到這里,計算機(jī)發(fā)展到今天的歷史大概說完了,我們來詳細(xì)說說網(wǎng)絡(luò)時代的計算機(jī)以及各個硬件供應(yīng)商之間的關(guān)系

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

      但是現(xiàn)在市場上沒有人這樣分,要是出去買機(jī)器,對硬件供應(yīng)商說

      我要買一款中型機(jī),或者說,我要買一款小型機(jī),硬件供應(yīng)商肯定會問問題

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

      服務(wù)器,工作站還有微機(jī) 服務(wù)器(server)

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

      比如提供門戶站點相關(guān)服務(wù)(sina),比如電子商務(wù)(ebay,amazon,阿里巴巴)這些服務(wù)對機(jī)器都有一些特定的要求,尤其強(qiáng)調(diào)安全和穩(wěn)定 工作站(workstation)

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

      計算機(jī)網(wǎng)絡(luò)的最末端,這個應(yīng)該不用我說太多了 網(wǎng)絡(luò)時代的pc已經(jīng)普及到千家萬戶

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

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

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

      然后是網(wǎng)絡(luò),也就是路由器和交換機(jī)

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

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

      服務(wù)器與工作站內(nèi)核 這一塊與硬件廠商綁定

      還是Sun,IBM,HP三家自己生產(chǎn) 題外

      在一些大型主機(jī)應(yīng)用市場,比如賣飛機(jī)票

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

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

      硬件就大概說到這里,與大多數(shù)人沒什么關(guān)系

      因為大多數(shù)人壓根不可能進(jìn)入這些硬件領(lǐng)域,除非做銷售 說了這么多,只是為了給軟件部分打基礎(chǔ)而已 //做嵌入式的除外

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

      首先我們來說說什么是軟件,統(tǒng)一一下概念 所謂軟件通俗地說就是一套計算機(jī)程序 實現(xiàn)了某些功能的計算機(jī)程序

      在很早很早以前,一臺計算機(jī)的軟件是不分層次結(jié)構(gòu)的

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

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

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

      在現(xiàn)在企業(yè)級應(yīng)用中,我們的應(yīng)用軟件一般分為三層 三層分別是表示層,業(yè)務(wù)邏輯層,數(shù)據(jù)持久層------------------------------|表示層|業(yè)務(wù)邏輯層|數(shù)據(jù)持久層|------------------------------我們來說說三層中的代表軟件 表示層

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

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

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

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

      但沒人會建議你這么做,因為這樣做你的數(shù)據(jù)缺乏管理,不管怎樣 這一層要做的就是保存數(shù)據(jù),業(yè)務(wù)邏輯層軟件一般不負(fù)責(zé)保留數(shù)據(jù)

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

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

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

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

      傻數(shù)據(jù)庫,ok,首先,我承認(rèn),這個名詞是我發(fā)明的,但我實在無法找到一個更好的表達(dá) 什么是傻數(shù)據(jù)庫,如果誰對數(shù)據(jù)庫有所了解的話,就知道,以前的數(shù)據(jù)庫

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

      只用把數(shù)據(jù)給我保存好就行了,那些復(fù)雜的業(yè)務(wù)邏輯什么外鍵什么關(guān)聯(lián) 都沒數(shù)據(jù)庫什么事了,都交給業(yè)務(wù)邏輯層軟件來做

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

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

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

      記得我上學(xué)的時候,看ibm的教材,看了半天中間件定義,就看懂記住一句話 中間件是做別人不愿意去做的事情,現(xiàn)在想想,狗屁定義,呵呵 什么是中間件,中間件是業(yè)務(wù)邏輯層的應(yīng)用軟件 是處理業(yè)務(wù)數(shù)據(jù)與客戶端之間業(yè)務(wù)邏輯的一種應(yīng)用軟件 一種提供網(wǎng)絡(luò)服務(wù)的服務(wù)器端應(yīng)用軟件

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

      ------------------------------|表示層 | 業(yè)務(wù)邏輯層 | 數(shù)據(jù)持久層 |------------------------------| IE | 網(wǎng)上銀行 | 數(shù)據(jù)庫 |------------------------------給初學(xué)者之五:企業(yè)級應(yīng)用之中間件 前面一篇簡單介紹了一下應(yīng)用軟件的分層

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

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

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

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

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

      首先,由于客戶端用的是瀏覽器,我們需要一些了解網(wǎng)絡(luò)通訊協(xié)議以及一些瀏覽器標(biāo)準(zhǔn)的網(wǎng)絡(luò)工程師

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

      然后,我們還需要一些操作系統(tǒng)的工程師,因為我們的系統(tǒng)需要跟操作系統(tǒng)直接交互 最后,我們需要一些設(shè)計網(wǎng)上銀行系統(tǒng)及其相關(guān)業(yè)務(wù)的工程師

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

      網(wǎng)絡(luò)工程師,數(shù)據(jù)庫工程師,操作系統(tǒng)工程師以及設(shè)計網(wǎng)上銀行系統(tǒng)的業(yè)務(wù)工程師 除了最后一組設(shè)計網(wǎng)上銀行的業(yè)務(wù)工程師之外,前面三組工程師是不是每一個項目都需要的?

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

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

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

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

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

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

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

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

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

      比如有裝ejb的ejb容器,有裝servlet與jsp還有靜態(tài)頁面的web容器等等 //這種只含有web容器的應(yīng)用服務(wù)器也被叫做web服務(wù)器 當(dāng)表示層的應(yīng)用軟件通過網(wǎng)絡(luò)向appserver發(fā)送一個請求的時候

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

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

      ------------------------| 表示層 | 業(yè)務(wù)邏輯層 | 數(shù)據(jù)持久層 |------------------------| |-----------------| | | IE | | javabean | | | |->------------------> DB | | client <-appserver <-| | |-------------------------| | | | 虛擬機(jī) | | |--------------|-------------------------|------------| | Windows | Linux/Saloris |LinuxSaloris| |--------------|-------------------------|------------| 圖上可以看出:虛擬機(jī)負(fù)責(zé)處理中間件與操作系統(tǒng)之間的交互 appserver則負(fù)責(zé)組件的管理以及與其他兩層的業(yè)務(wù)交互

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

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

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

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

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

      SUN的服務(wù)器支持Solaris的效果自然不用說,Solaris號稱是世界上最安全的操作系統(tǒng) Oracle也是世界上最安全,性能最優(yōu)的數(shù)據(jù)庫,Weblogic是當(dāng)今性能最優(yōu)的appserver JBuilder和IDEA各有所長,JBuilder是Borland公司的招牌之一

      是當(dāng)今世界上最流行的java IDE,用delphi寫的,但網(wǎng)絡(luò)上評價似乎不是很好 IDEA擁有插件功能,界面在所有java IDE中最為漂亮,東歐人開發(fā)的產(chǎn)品 東歐人嚴(yán)謹(jǐn)?shù)淖黠L(fēng)在這個產(chǎn)品上體現(xiàn)得尤為突出,用java寫的

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

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

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

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

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

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

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

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

      .net其實已經(jīng)可以實現(xiàn)跨平臺了,但是微軟出于自身商業(yè)考慮 在其應(yīng)用服務(wù)器跨平臺的實現(xiàn)上設(shè)置了種種障礙 而且針對windows,微軟做了大量的優(yōu)化,可以這么看.net就是與windows捆綁的一套產(chǎn)品

      所以有些人說,微軟的產(chǎn)品離開了windows,就是渣

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

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

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

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

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

      比如你選擇了.net應(yīng)用服務(wù)器,那操作系統(tǒng)就必須是windows 你選擇了sqlserver,那就必須在windows上用

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

      在了解完J2ee的相關(guān)周邊產(chǎn)品之后需要深入J2ee規(guī)范內(nèi)部去了解一下到底這些規(guī)范 這里介紹幾個最常用的規(guī)范 再繼續(xù)說下去之前有必要說幾個常識

      下面進(jìn)入正題 再談容器

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

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

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

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

      Servlet確切地說,就是web容器運(yùn)行的java組件

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

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

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

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

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

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

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

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

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

      由于網(wǎng)絡(luò)連接是瞬時連接,所以很多時候并發(fā)數(shù)并沒有100那么大 前一秒有可能有30個請求被發(fā)送過來并被處理 后一秒可以只有10個請求被發(fā)送過來并被處理

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

      恩,必須強(qiáng)調(diào)的一點是,由于使用的不成熟 我們經(jīng)常把規(guī)范以及具體的應(yīng)用兩個名詞混用

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

      JDBC 和數(shù)據(jù)庫的連接

      這個嚴(yán)格說來是數(shù)據(jù)庫產(chǎn)商需要關(guān)心的事 關(guān)于AppServer如何與數(shù)據(jù)庫的連接

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

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

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

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

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

      給初學(xué)者之八:java高級應(yīng)用之框架篇 沒錯,我沒敲錯

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

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

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

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

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

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

      框架就是那么一個通過預(yù)先寫好代碼從而幫我們建立起一個軟件結(jié)構(gòu)的這么一個東西 這里提一下框架與規(guī)范//主要指J2ee規(guī)范也就是官方標(biāo)準(zhǔn)的區(qū)別 從某種意義上說,J2ee規(guī)范本身就是一個框架 無論是web容器也好,還是ejb容器也好,它們都開發(fā)了一部分通用的代碼 并且?guī)椭覀兇罱ㄆ饋砹艘粋€軟件結(jié)構(gòu),我們要做的就是往里面填入組件 比如ejb/servlet/jsp等等

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

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

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

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

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

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

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

      Spring 大名鼎鼎的Spring框架

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

      Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》一書 Rod Johnson認(rèn)為,J2ee里面的那一套//尤其是ejb 太重了,對于單機(jī)的系統(tǒng)來說,沒有必要使用那么復(fù)雜的東西 于是就開始設(shè)計并引導(dǎo)Spring小組開發(fā)出這樣一個構(gòu)架

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

      現(xiàn)在包括WebLogic等主流應(yīng)用服務(wù)器還有主流IDE都開始逐漸接受該框架 并提供相應(yīng)支持

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

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

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

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

      什么意思呢?我們知道傳統(tǒng)的數(shù)據(jù)庫都是關(guān)系型的

      一條條記錄以表格的形式儲存,而表與表之間充斥著是關(guān)系/關(guān)聯(lián)

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

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

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

      關(guān)于ORM,最高的境界應(yīng)該是在java代碼中不出現(xiàn)任何一句的sql語句 注意,是不包括sql語句,Hibernate的hql以及ejb的ejb-ql不算在內(nèi)

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

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

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

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

      這可不僅是java獨有

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

      模式是什么?模式是經(jīng)驗的總結(jié),潛規(guī)則的抽象

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

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

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

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

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

      面向?qū)ο笥谐S玫?1種模式,需要掌握,主要分為創(chuàng)建,行為,結(jié)構(gòu)三類 J2ee有J2ee的模式,Sun公司出了一本書叫《J2EE核心模式》可以拿來看看 必需要指明的是,模式不是規(guī)范,比如吃飯模式

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

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

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

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

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

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

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

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

      不過不妨記住我的一句話,可以幫助理解這個概念 面向什么就是對什么做封裝 面向?qū)ο缶褪菍ο笞龇庋b 面向服務(wù)類似,剩下的靠悟性 反射

      1.4新增功能,非常強(qiáng)大

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

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

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

      5.0以后的版本在J2SE中都出現(xiàn)了容器 各位甚至可以自己嘗試用標(biāo)準(zhǔn)庫去使用容器 書籍

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

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

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

      第五篇:看牛人如何學(xué)習(xí)JAVA

      看牛人如何學(xué)習(xí)JAVA 第一章 Java語言概述

      終于要開始《Java編程基礎(chǔ)》這門課了,從學(xué)生的眼中可以看到一種期待,但我覺得學(xué)生們都有一種誤解,覺得這門課學(xué)好了就是學(xué)好Java了,對二年的J2EE學(xué)習(xí)會產(chǎn)生決定性的影響??墒菍嶋H上,這門課就像它的名字一樣,只是一個基礎(chǔ),它的目的就是能讓大家掌握J(rèn)ava的基本語法,能夠使用Java語言來實現(xiàn)面向?qū)ο蠖?,從對J2EE學(xué)習(xí)的影響性來說,我覺得這門課的地位還不如《ASP網(wǎng)絡(luò)編程》。

      當(dāng)然我并不是想說Java基礎(chǔ)不重要,只是沒有重要到需要放棄畢業(yè)設(shè)計來聽這門課(是的,有幾個學(xué)生已經(jīng)準(zhǔn)備這么干了)。

      翻了一下這本書的目錄,發(fā)現(xiàn)它可以分為兩個階段——第一階段:使用Java語法來實現(xiàn)面向?qū)ο螅嫦驅(qū)ο蟮幕靖拍钤贑++課程里面已經(jīng)介紹了,我想這部分的進(jìn)行會相對容易,當(dāng)然了,需要給學(xué)生們指出Java和C++在實現(xiàn)面向?qū)ο笊系膮^(qū)別;第二階段:使用Java進(jìn)行圖形編程,簡單說,用Java來實現(xiàn)VB那一套東西,不知道學(xué)生們用慣了VB的可視化編程,能不能適應(yīng)手工生成界面。就這些內(nèi)容可能有些單薄吧,我在想,中心還專門為Java增加了3節(jié)理論課,這樣算下來會有14節(jié)課來介紹Java。嗯??可以用增加的理論課來介紹設(shè)計模式(Design Pattern)!這應(yīng)該是個好主意,能讓學(xué)生們學(xué)到更專業(yè)的開發(fā)知識,不過對于他們來說會不會太難呢?隨著課程進(jìn)行看吧,反正我也不準(zhǔn)備把23種設(shè)計模式都講一遍。

      我制定的Java授課計劃

      好了,開始上課了,課前大鵬問我Java難不難,引用一句古文“人之為學(xué)有難易乎,為之,則難者亦易矣”。

      從頭講起,Java的歷史、發(fā)明者??這些東西我最討厭,一筆代過。開始介紹Java的幾個基本特點: 簡單:沒有的指針操作; 健壯性:無須手工管理內(nèi)存;

      可移植性:地球人都知道Java是跨平臺的。就說這么多吧,關(guān)于Java高性能這部分實在不想多講,搞過Java開發(fā)的人都知道Java也許不是世界上最好的語言,但絕對是運(yùn)行速度最慢的語言。重點要說一下Java虛擬機(jī)(JVM),它是保證Java語言能跨平臺運(yùn)行的關(guān)鍵。想象聯(lián)合國開大會的例子,來自中國,美國,法國,德國的一大群發(fā)言人準(zhǔn)備說話了,為了保證其他人也能聽得懂,需要一個翻譯團(tuán),對翻譯團(tuán)中每個團(tuán)員的要求就是至少懂得英語和另一門語言?,F(xiàn)在中國的發(fā)言人說話了,懂英語和漢語的翻譯會首先將中文翻譯成英文,然后不同語種的翻譯再根據(jù)英文翻譯成各自的文字。如果聯(lián)合國增加了一個成員“土撥國”,他們講“土撥語”,那很簡單,增加一名會說“土撥語”和英語的翻譯就可以了。

      這也就是Java虛擬機(jī)的運(yùn)行模式,我們都知道寫好源代碼以后要進(jìn)行編譯,傳統(tǒng)語言(VB, VC)都會直接將源代碼編譯成能在某固定操作系統(tǒng)下運(yùn)行的EXE程序(我們都知道windows程序不能在Dos下運(yùn)行),而Java則是將源代碼編譯成我們稱之為“字節(jié)碼”的中間文件(我們例子中的英語),OK,就到此為止了。顯然這個中間文件是無法直接執(zhí)行的,現(xiàn)在Java虛擬機(jī)登場了,我們執(zhí)行一個中間文件的流程是:Java虛擬機(jī)將中間文件讀入,翻譯成能在本操作系統(tǒng)下運(yùn)行的文件,然后執(zhí)行之。假如現(xiàn)在我們新增一個操作系統(tǒng),名為“土撥系統(tǒng)2005”(Turbo System 2005),如果想讓我們的Java在上面跑起來,只需要sun公司開發(fā)一個在“土撥系統(tǒng)2005”下運(yùn)行的Java虛擬機(jī)就可以了(Java Virtual Machine for Turbo System 2005)。

      講到這兒發(fā)現(xiàn)一些學(xué)生已面露迷茫之色,趕快講些容易的,從剛才的描述可知,我們開發(fā)Java程序需要先編寫源代碼(*.java文件),然后將源代碼編譯成中間文件(*.class文件),最后通過Java虛擬機(jī)執(zhí)行,對應(yīng)這個過程,我們需要三種武器:編輯器、編譯器和Java運(yùn)行環(huán)境。

      編輯器的目的是讓我們方便的開發(fā)源代碼,好的編輯器支持語法高亮顯示,輸入“.”出現(xiàn)成員列表等功能,當(dāng)前企業(yè)開發(fā)中最常用的編輯器應(yīng)該是Borland公司的 JBuilder,最新版本2005版;還有現(xiàn)在最熱門的開源項目(搜索互聯(lián)網(wǎng),了解開源項目)Eclipse,最新版本3.0;不過作為入門,我讓學(xué)生們先用 JCreator 3.5,注意,它的3.1版本在顯示中文時有問題。編譯器包含在JDK(Java Develop Kits)中,它將源代碼轉(zhuǎn)換成中間文件,在sun公司的官方網(wǎng)站上,可以找到JDK1.4.2版和JDK1.5版,其中1.5版是最新的,里面還附帶了一個叫NetBeans的編輯器,但是速度很慢,我推薦學(xué)生下載JDK1.4.2版,如果英文基礎(chǔ)好的話,還可以同時下載JavaDoc,里面有java的幫助,有點像MSDN,只不過是純英文的。Java運(yùn)行環(huán)境JRE(Java Runtime Environment)中最重要的組成部分就是Java虛擬機(jī),它也已經(jīng)包含在JDK中了,然而,如果我們想確保Java程序能在別人的機(jī)器上運(yùn)行,對方至少應(yīng)該安裝一個JRE。

      最后講講配置問題,我建議學(xué)生先安裝JDK,再安裝編輯器,這樣可以省去很多配置的麻煩。從書上得知要運(yùn)行Java程序還需要配置三個系統(tǒng)參數(shù):Path,ClassPath和Java_Hone,它們指明了JDK的安裝為之;實際上,除非你想在DOS環(huán)境下手工編譯程序,否則你根本不需要它們,因為編輯器是會自己尋找JDK安裝位置的,像JBuilder甚至還自帶了一個JDK。呼~~長舒一口氣,休息一下吧,口干舌燥了。

      第二節(jié)課我先介紹了一下當(dāng)今Java比較流行的三個分支,這些名詞你肯定聽過:J2SE,J2EE和J2ME。

      1.J2SE(Java 2 Platform,Standard Edition)指Java 1.2版以上的標(biāo)準(zhǔn)開發(fā)包

      開發(fā)J2SE程序需要的編譯器為JDK,編輯器有記事本,JCreator, JBuilder(Borland), Eclipse(OpenSource), NetBeans(SUN), Visual Age For Java(IBM)等

      如果要運(yùn)行J2SE程序,需要安裝JRE(Java Runtime Environment)2.J2EE(Java 2 Platform,Enterprise Edition)Java2企業(yè)版由Jsp + Servlet + JavaBean + EJB組成 運(yùn)行企業(yè)版程序需要J2EE容器,比如WebLogic, WebSphere等 3.J2ME(Java 2 Platform,Micro Edition)專門運(yùn)行在移動設(shè)備和無限設(shè)備上的Java,手機(jī)游戲很多用此開發(fā)

      好了,介紹部分就這么多吧,我要開始演示Hello World了,學(xué)生都很奇怪,為什么Java的源文件名要和類名完全一致,哎,記住就行了,管它那么多。大家對main函數(shù)的聲明叫苦不迭,那么長阿。其實我們仔細(xì)分析一下,會發(fā)現(xiàn)里面沒有一個多余的單詞:

      public static void main(String args[]){ ?? } public將main聲明成公用,當(dāng)然了,因為main函數(shù)是程序的起點,由Java虛擬機(jī)自動調(diào)用,如果是私有,不就訪問不到了嘛;下一個是static,將函數(shù)聲明稱靜態(tài),由C++的知識我們知道,只有靜態(tài)函數(shù)可以被直接訪問,這也是為了讓Java虛擬機(jī)能夠方便的開始我們的程序;void說明main函數(shù)沒有返回值,而括號里面的數(shù)組表示了命令行參數(shù),在我們還沒有圖形界面之前,我們幾乎只能靠這種方式來接收用戶的輸入。

      看牛人如何學(xué)習(xí)JAVA-如何學(xué)習(xí)java(一)(二)2007年12月05日 星期三 07:52 P.M.看牛人如何學(xué)習(xí)JAVA

      如何學(xué)習(xí)java(一)最近論壇上看到好幾個朋友都在問,如何學(xué)習(xí)Java的問題,“我已經(jīng)學(xué)習(xí)了J2SE,怎么樣才能轉(zhuǎn)向J2EE?”,“我看完了Thinking in Java,可以學(xué)習(xí)J2EE了么?”。于是就有了寫這篇文章的想法,希望能幫助初學(xué)者少走一些彎路。也算是對自己幾年來學(xué)習(xí)Java的一個總結(jié)吧。

      在開始之前有必要再討論一下J2ME,J2SE,J2EE這些概念。J2ME,The Micro Edition of the Java 2 Platform。主要用于嵌入式Java,如手機(jī),PDA等等。J2SE,Java 2 Platform,Standard Edition,我們通常所說的JDK(Java Development Kit)包含在此,是J2EE的基礎(chǔ)。J2EE,Java 2 Platform,Enterprise Edition,就是所謂的企業(yè)級Java。這些只是從API級別上的劃分,實際上Sun給J2EE的定義是:開發(fā)基于組件的多層的企業(yè)級應(yīng)用的規(guī)范。也就是為各種不同的技術(shù)定義一個Java的規(guī)范,使這些不同的技術(shù)結(jié)合起來,在Java平臺上構(gòu)建強(qiáng)壯的企業(yè)級應(yīng)用。從這一點來看,J2EE這個概念應(yīng)該是涵蓋J2ME,J2SE的。比如一個典型的J2EE應(yīng)用,網(wǎng)上商店,它支持web方式下訂單,也支持手機(jī)下訂單。顯然必須用到J2SE,J2ME。所以也就不存在所謂的從J2SE轉(zhuǎn)向J2EE的問題了,只是后者包含的范圍更廣而已。

      來看看Sun給出的J2EE 相關(guān)技術(shù)主要分為幾大塊。1.Web Service技術(shù)

      -Java API for XML Processing(JAXP)Java API for XML-based RPC(JAX-RPC)Java ServletJavaServer FacesJava Message ServiceJ2EE Deployment SpecificationJ2EE Client ProvisioningJDBCCORBA(Java IDL and Java RMI-IIOP)Transactions 如此之多的技術(shù)難免使初學(xué)者無所適從,望而卻步。即使是一位經(jīng)驗豐富的J2EE開發(fā)者,又有幾個人敢說J2EE相關(guān)的技術(shù)我都熟練掌握了。不過作為一名普通J2EE應(yīng)用程序的開發(fā)者來說,我們只需要重點學(xué)習(xí)其中的一部分技術(shù)就可以了,對于其他部分只要做到心中有數(shù),哪天需要用到了知道跑哪里去找到資料就行了。以我個人的觀點,下面這些技術(shù)是一般J2EE應(yīng)用開發(fā)人員所必須熟練掌握的。Java Server Page,Java Servlet,Enterprise JavaBean,JDBC,Transactions。還有JAXP等XML相關(guān)技術(shù),Java Message Service,Java Mail,JDO等等是最好應(yīng)該掌握的。其他Management Technologies,Connector Architecture等等主要是給容器提供商中間件提供商參考的,應(yīng)用開發(fā)者不需要怎么關(guān)心,等用到了再去學(xué)習(xí)也不遲。

      語言學(xué)習(xí)篇

      首先是J2SE基礎(chǔ)。學(xué)習(xí)一門新技術(shù),無外乎閱讀和實踐了。而一本好的參考書對于初學(xué)者來說顯得格外重要。現(xiàn)在市面上的 Java書籍可以說是鋪天蓋地,質(zhì)量也是良莠不齊,令初學(xué)者無所適從。所以還是先推薦幾本書籍吧。目前對于Java基礎(chǔ)知識,大家一般都比較推薦兩本書,<>和<< Core Java? 2,Volume I: Fundamentals >>。第一本書不必多說了,Bruce Eckel的大作,Jolt獲獎書籍。內(nèi)容比較全面,基本涵蓋了java語言的方方面面。這本書提供了相當(dāng)豐富的例子,非常有利于對學(xué)習(xí)內(nèi)容的了解。另外書中第一部分對于OO基本書籍的介紹,我覺得對于剛接觸OO的人來說幫助會很大。而且此書是Open Source的,可以從作者網(wǎng)上下載http://004km.cn/tomcat/ Jetty: http://jetty.mortbay.org/jetty/ 應(yīng)用服務(wù)器常用的有,Jboss: http://004km.cn/products/index

      Weblogic: http://004km.cn/。對于J2EE項目的具體實施,Rod Johnson的<>也很有價值,該書以作者豐富的實戰(zhàn)經(jīng)驗向我們展示如何用盡可能簡單的解決方案構(gòu)建J2EE 應(yīng)用,書中作者第一次提出這樣的觀點,很多時候,J2EE應(yīng)用完全沒有必要用到EJB,對于言必稱EJB的廣大J2EE開發(fā)者來說,怎么說也有點驚世咳俗的味道。當(dāng)然,作為Servlet和JDO兩個專家組的成員,這可不是作者信口胡騶的。今天風(fēng)靡Java世界的Spring框架最初便是源于此書,而IOC,AOP等概念更是被時下的java開發(fā)者掛在嘴邊。最后,作為對Java的深入學(xué)習(xí),Java技術(shù)的各個Specification也有必要一讀。暫時就寫到這里吧。

      一個牛人給java初學(xué)者的建議(1)2008年03月03日 星期一 20:41 給初學(xué)者之一:淺談java及應(yīng)用

      學(xué)java不知不覺也已經(jīng)三年了

      從不知java為何物到現(xiàn)在一個小小的j2ee項目經(jīng)理

      雖說不上此道高手,大概也算有點斤兩了吧

      每次上網(wǎng),泡bbs逛論壇,沒少去java相關(guān)的版面

      總體感覺初學(xué)者多,高手少,精通的更少

      由于我國高等教育制度教材陳舊,加上java自身發(fā)展不過十年左右的時間

      還有一個很重要的原因就是java這門語言更適合商業(yè)應(yīng)用

      所以高校里大部分博士老師們對此語言的了解甚至不比本科生多

      在這種環(huán)境下,很多人對java感到茫然,不知所措,不懂java能做什么

      即便知道了java很有用,也不清楚該從哪里入手

      所以就有了 java入門難 這一說法

      ok,那我們就從java到底能做什么聊起

      先說什么是java

      java是一種面向?qū)ο笳Z言,真正的面向?qū)ο?,任何函?shù)和變量都以類(class)封裝起來

      至于什么是對象什么是類,我就不廢話了

      關(guān)于這兩個概念的解釋任何一本面向?qū)ο笳Z言的教材里面都有

      知道了什么是java,那自然就會對java能干什么感興趣

      在說java能做什么之前,先說java作為一個真正面向?qū)ο笳Z言的優(yōu)點

      首先第一個,既然是真正的面向?qū)ο?,那就要做到徹底的封裝

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

      java沒有所謂的類外部定義,所有的函數(shù)(方法)以及變量(屬性)都必須在類內(nèi)部定義

      這樣就不會出現(xiàn)一個類被切割成這里一塊那里一塊的情況,c++就可以,不是么?

      這樣做使得整個程序的結(jié)構(gòu)異常清晰,明了

      其次第二個,最讓人歡呼雀躍的是完全屏蔽了指針,同時引入了垃圾回收機(jī)制

      任何一個寫過c/c++代碼的人,都會對內(nèi)存管理深惡痛絕

      因為這使得我們不能把主要精力放在我們關(guān)心的事情上

      而需要考慮計算機(jī)內(nèi)部的一些事情,作為一個軟件工程師

      我想沒有一個人愿意把大量的時間花在內(nèi)存管理上,畢竟我們不是電子工程師

      此時java的優(yōu)勢體現(xiàn)出來了,它完全屏蔽了內(nèi)存管理

      也就是說,如果你用java寫程序,寫出來的任何一個程序內(nèi)存上的開銷,都不受你控制

      乍一看,似乎你受到了束縛,但實際上不是這樣

      因為雖然你的程序無法對內(nèi)存進(jìn)行管理,降低了一定的速度

      但你的程序會非常非常的安全,因為你無法調(diào)用一個空指針

      而不像以前寫c的時候那樣,成天因為空指針而擔(dān)驚受怕

      當(dāng)然,如果你深入了解這一行,就會發(fā)現(xiàn)java其實也無法保證程序不去調(diào)用空的指針

      但是它會在最大程度上避免空指針的調(diào)用

      這已經(jīng)很好了,安全,這是java的最突出的優(yōu)點

      第三個,虛擬機(jī)跨平臺,這是java最大的特點,跨平臺

      可能所有人都知道windows,但是不是所有人都知道unix 和java一樣,很多人都不知道unix這種操作系統(tǒng)干什么用

      我不想多說unix的應(yīng)用,這不是主要,但是我要說,大部分小型機(jī)

      工作站,都跑在unix一族的操作系統(tǒng)上,比如linux/solaris

      unix比起windows有一個最顯著的特點,穩(wěn)定,這就好比思科和華為

      思科的機(jī)器慢但穩(wěn)定,華為的機(jī)器快但不穩(wěn)定,作為服務(wù)器這一端來說

      要的皇怯卸囁歟 俏榷ǎ 評nix在服務(wù)器端還是非常有市場的 而且很重要的windows不安全,在ms的宣傳中我想所有人都很少看到安全二字

      因為windows操作系統(tǒng)針對的是pc用戶,pc死機(jī)就死機(jī)咯,大不了重啟

      瘟95最經(jīng)常冒出來的就是藍(lán)屏,在服務(wù)器這一端上因為ms沒有自己的芯片

      所以要做系統(tǒng)有些力不從心啊。扯遠(yuǎn)了,那么java可以做到在windows上編譯

      一個牛人給java初學(xué)者的建議(2)2008年03月03日 星期一 20:42 那么說到這里,java能做什么逐漸清晰起來

      剛才說到了,java程序有一個的特點是安全

      這個安全是針對你的系統(tǒng)來說得,系統(tǒng)在跑了java程序之后會特別地穩(wěn)定

      而且還能跨平臺,那么很明顯,java主要應(yīng)用于除了windows操作系統(tǒng)以外所有的平臺

      比如手機(jī),服務(wù)器

      想想看,如果你寫的程序要跑在手機(jī)上,而手機(jī)有多少款用的是windows? 就算有,那如果你用c/c++,是不是要針對每一款手機(jī)寫一套程序呢?

      累死,那跨平臺的java就不用,做到編譯一次,隨時運(yùn)行

      同樣,在服務(wù)器這一端,如果我想給一個網(wǎng)絡(luò)門戶站點,比如sina

      寫一個應(yīng)用程序,pc的性能肯定無法滿足sina這樣大站點并發(fā)數(shù)量的要求

      那么它就需要買服務(wù)器,那么服務(wù)器ms沒有市場,而且windows很不安全

      那么十之八九會買一個sun/ibm的機(jī)器,或者h(yuǎn)p,但不管是誰的機(jī)器

      它裝的操作系統(tǒng)也不會是windows,因為windows太不安全了,而且多核的支持太差了

      這個有空再說,那么如果你要寫一個程序在這樣的機(jī)器上跑

      難道我們就在這個機(jī)器上做開發(fā)么?當(dāng)然不可能,一般程序員開發(fā)用的都是pc,windows

      那么該怎么辦?寫一個程序,然后再拿到服務(wù)器上去編譯,去調(diào)試?

      肯定不可能,所以我們就希望找到一個語言,編譯完生成程序之后

      在pc上調(diào)試,然后直接移植到服務(wù)器上去,那么此時,我們就會毫不猶豫地選擇java

      因為在跨平臺以及安全性來說,java永遠(yuǎn)是第一選擇

      ok,下面說java的缺點

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

      java也拋棄了指針,雖然看上去似乎變慢了,但是在這個兩三年硬件性能就能翻番的年代

      速度已經(jīng)不是我們關(guān)心的問題了,而且對于企業(yè)級的應(yīng)用來說

      沒有什么比安全穩(wěn)定更重要的,換句話說,我們可以忍受慢,但是不能忍受死機(jī)和藍(lán)屏

      而且越大型的應(yīng)用,這種慢的劣勢體現(xiàn)得越模糊

      因為當(dāng)系統(tǒng)項目越做越大,任何一個環(huán)節(jié)做不好都可能影響全局的情況下

      安全尤其重要,而且就像goto語句一樣

      這種過分追求速度的主張會給系統(tǒng)開發(fā)和糾錯以及維護(hù)帶來無可挽回甚至不可避免的損失

      把內(nèi)存交給計算機(jī)去管理吧,這種代價值得 我們做的不是pc游戲,沒必要把內(nèi)存的那一點點消耗當(dāng)親爹

      二難看,又是一個誤區(qū),很多人甚至拿出java swing控件畫出的界面來說

      呵呵,其實java不是不能畫得好看,IDEA就是java寫的IDE,挺漂亮的但為什么難看呢,是因為swing控件它本身就是unix時代的產(chǎn)物,swing控件貼近unix界面

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

      而unix又是吃百家飯的,不像ms那么唯利是圖,所以不怎么對中國人友好

      加上我國又沒有公司在做操作系統(tǒng),所以看上去是不怎么順眼

      其實玩過unix的人都知道,unix對中文的支持一直不怎么好

      三我還沒想到,其他人補(bǔ)充

      一個牛人給java初學(xué)者的建議(3)2008年03月03日 星期一 20:44 給初學(xué)者之二:從JDK說起

      在知道了java有什么優(yōu)點,能做什么之后

      就該說一下java該如何去學(xué)了

      在說java如何去學(xué)之前,有必要把java的幾個大方向做一個簡單說明

      早在五年前,嗯,應(yīng)該說是六年前,也就是99年的時候

      sun公司做出了一個決定,將java應(yīng)用平臺做一個劃分

      畢竟在不同領(lǐng)域,語言應(yīng)用特性是有區(qū)別的

      針對不同領(lǐng)域內(nèi)的應(yīng)用,sun公司可以發(fā)布相關(guān)高端標(biāo)準(zhǔn)來統(tǒng)一規(guī)范代碼

      這三大塊就是J2SE,J2EE以及J2ME 這個舉措今天看來無疑是非常了不起的

      正是由于這次革命性的發(fā)展,使java從一種小打小鬧游戲性的語言

      發(fā)展成為今天企業(yè)級應(yīng)用的基礎(chǔ)

      這里要特別說明一下J2SE J2EE J2ME中2的意思

      其實2就是英文單詞to的諧音,就是to的意思

      而不是second edition,當(dāng)然java 2本身版本號就是1.2,也有點2nd edition的味道

      說點題外的,sun公司發(fā)布的java版本很有意思

      雖然總是寫是1.X但其實外界對這種版的說法也就是X.0 比如java 2,其實就是java 1.2

      1.3其實就是3.0,1.4就是4.0,現(xiàn)在所說的5.0 其實就是1.5 只是以前我們更習(xí)慣叫1.X而已

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

      所以以后聽到別人說java 5.0,千萬別驚訝,其實就是1.5

      在這三個J2*E中J2SE是基礎(chǔ),就是java 2的標(biāo)準(zhǔn)版(java 2 standard edition)也就是最基礎(chǔ)的java語言部分,無論學(xué)什么java技術(shù),J2SE都是必須掌握的要使用J2SE就必須安裝JDK(java development kit)JDK在sun公司的主頁上可以免費(fèi)下載,下載后需要安裝,具體安裝流程看教材

      JDK包含有五個部分:核心API,集成API,用戶界面API,發(fā)布技術(shù)還有java虛擬機(jī)(JVM)

      一個牛人給java初學(xué)者的建議(4)2008年03月03日 星期一 20:45 先說運(yùn)行環(huán)境,運(yùn)行環(huán)境最主要要說的就是java虛擬機(jī)(JVM)

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

      java的設(shè)計者們提出了一個虛擬機(jī)的概念

      在操作系統(tǒng)之上建立一個統(tǒng)一的平臺,這個平臺必須實現(xiàn)某些功能以支持程序的運(yùn)行

      如下圖:

      ------| program |------| JVM |------

      | UNIX | Windows | Linux | Solaris |..------

      程序員所寫的每一個程序都先運(yùn)行在虛擬機(jī)上

      所有操作都必須經(jīng)過虛擬機(jī)才能和操作系統(tǒng)交互

      這樣做不僅統(tǒng)一了所有操作系統(tǒng),同時也保證了操作系統(tǒng)的安全

      要死機(jī)的話,死的是虛擬機(jī)(JVM)而操作系統(tǒng)并不會受此影響

      而我們所說的java運(yùn)行環(huán)境指的主要是JVM,其他的不說了,省略

      下面說說JDK(java development kit)的API,其實用JDK來包括運(yùn)行環(huán)境以及開發(fā)工具

      個人感覺是不恰當(dāng)?shù)?,因為這三個單詞僅能說明開發(fā)工具,也就是幾個標(biāo)準(zhǔn)的API

      而沒有讓人感覺到有運(yùn)行環(huán)境的意思在里面,這是題外

      那么什么是API?

      簡單地說就是Application Programming Interface,應(yīng)用程序編程接口

      在java里面,就是一些已經(jīng)寫好了的類打成的包

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

      這些類是java的基礎(chǔ)類,常用的類,可以簡單理解成java的工具集

      最后說一下JDK的發(fā)布技術(shù),其實按我的理解,講白了就是編譯器

      將.java文件轉(zhuǎn)換成.class文件的一種技術(shù)

      這三部分組成了JDK,有了JDK,就可以開發(fā)出J2SE應(yīng)用軟件了

      最原始的只要用一個記事本寫幾行代碼就可以了

      但一般來說我們會使用效果比較好的開發(fā)工具,也就是IDE 在J2SE這一塊,特別推薦JCreator這款I(lǐng)DE

      sun公司的產(chǎn)品,與JDK結(jié)合得幾乎是天衣無縫,非常適合初學(xué)者使用

      教材方面中文的推薦電子工業(yè)出版社出版的《java教程》初級與高級篇各一本

      還有就是《21天學(xué)通java》雖然有人說21天系列是爛書,但個人感覺

      對于j2se,這本書翻譯得已經(jīng)很不錯了,基本沒有什么語法錯誤,語句也很通順

      最后要說的就是《thinking in java》

      這本書自然很經(jīng)典,說得比較細(xì),只是我覺得不太適合初學(xué)者,其實也不難

      初學(xué)者直接看也不成問題,但個人感覺還是找本教材也就是前面推薦的兩款來看比較好

      基本概念的理解還是用教材的,畢竟thinking in java有的版本翻譯得很爛

      而且個人建議還是看原版比較好,當(dāng)然這幾本都看最好了,但如果沒時間

      至少精讀其中一本,然后再看其他兩本就可以,其實三本書內(nèi)容也差不多

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

      最后要說的是

      由于虛擬機(jī)的存在,J2SE的大多數(shù)軟件的使用會比一般桌面軟件慢一些

      效果不盡如人意,現(xiàn)在大概只有swing控件還在使用吧,其它沒怎么聽說

      J2EE&J2ME

      這是java應(yīng)用的重中之重,如果想拿高薪,最好把J2EE學(xué)好

      記得以前在csdn上看過一個調(diào)查,月薪上萬的程序員主要從事哪方面的工作

      十個中有八個是做J2EE的,其他兩個一個做J2ME,還有一個做嵌入式

      也許有些夸張,但也從某一方面說明J2EE人才的稀缺以及應(yīng)用的廣泛

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

      給初學(xué)者之三:java企業(yè)級應(yīng)用之硬件篇 總算講到企業(yè)級應(yīng)用了,內(nèi)容開始逐漸有趣起來

      java企業(yè)級應(yīng)用分為硬件篇和軟件篇

      重點在軟件,硬件是外延,嚴(yán)格地說與java沒有必然聯(lián)系 但是,由于java是網(wǎng)絡(luò)語言,不了解硬件的一些基礎(chǔ)知識 軟件知道再多也沒什么用,不要上了戰(zhàn)場還不知道為什么而打仗

      硬件是軟件的基礎(chǔ),在這個前提下,有必要專門花一點點篇幅來聊一下硬件

      硬件,簡單地說就是我們實際生活中看得見摸得著的東西

      也就是那些冰冷的機(jī)器,比如服務(wù)器,個人電腦還有網(wǎng)絡(luò)交換機(jī),路由器等等 那么先拋開網(wǎng)絡(luò)設(shè)備不談,先來說說計算機(jī)電腦的歷史

      在很早很早以前,人類創(chuàng)造了第一臺電腦,那時候的電腦只是一臺用來計算的機(jī)器

      無比大,無比重,無比傻,除了算其它屁事不會做,沒有所謂的人工智能與計算機(jī)網(wǎng)絡(luò)

      但是總算是誕生了,雖然以今天的眼光去看那時候的機(jī)器巨傻無比 只配叫做計算器而不是電腦,沒有邏輯思維能力,只會死算 但千里之行,始于足下,反正是造出來了

      然后隨著時間的推移,制造業(yè)發(fā)展發(fā)展發(fā)展

      電腦性能逐漸得到提升,速度快了起來,成本也逐漸低了下來 于是人們造出了第二臺,第三臺,第四臺,第五臺??第n臺計算機(jī) 人們就造出了無數(shù)臺計算機(jī)并使其成為一種產(chǎn)品

      逐漸應(yīng)用于許多復(fù)雜計算領(lǐng)域,不僅僅是科研,許多生產(chǎn)領(lǐng)域也開始出現(xiàn)計算機(jī)的影子

      然后又隨著時間的推移,人們發(fā)現(xiàn)不可能把所有的計算機(jī)都做成一個樣子 因為各行各業(yè)對計算機(jī)性能的要求各不相同

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

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

      按照性能的不同,在不同領(lǐng)域,出現(xiàn)了滿足符合不同要求的計算機(jī) 幾乎在同時,人們也開始考慮計算機(jī)之間通訊問題

      人們開始考慮將不同的計算機(jī)連接起來,于是網(wǎng)線出現(xiàn)了,網(wǎng)絡(luò)出現(xiàn)了 又隨著網(wǎng)絡(luò)的發(fā)展,出現(xiàn)了一下專門為了尋址而存在的機(jī)器 這就是路由器和交換機(jī),然后又出現(xiàn)了一些公益性的組織或團(tuán)體 他們制定了一系列的標(biāo)準(zhǔn)來規(guī)范以及管理我們的網(wǎng)絡(luò) 于是3w出現(xiàn)了,計算機(jī)的網(wǎng)絡(luò)時代來臨了

      嗯,說到這里,計算機(jī)發(fā)展到今天的歷史大概說完了

      我們來詳細(xì)說說網(wǎng)絡(luò)時代的計算機(jī)以及各個硬件供應(yīng)商之間的關(guān)系 前面說到了,計算機(jī)分為大型機(jī),中型機(jī)和小型機(jī)??

      但是現(xiàn)在市場上沒有人這樣分,要是出去買機(jī)器,對硬件供應(yīng)商說

      我要買一款中型機(jī),或者說,我要買一款小型機(jī),硬件供應(yīng)商肯定會問問題 他們會問你買機(jī)器干什么用的?科學(xué)計算啊還是居家用,是作服務(wù)器啊還是圖形設(shè)計

      但不管怎樣,簡單地說大中小型機(jī)已經(jīng)沒有什么意義了 我們按照使用范疇來劃分 簡單劃分為

      服務(wù)器,工作站還有微機(jī)

      服務(wù)器(server)

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

      比如提供門戶站點相關(guān)服務(wù)(sina),比如電子商務(wù)(ebay,amazon,阿里巴巴)這些服務(wù)對機(jī)器都有一些特定的要求,尤其強(qiáng)調(diào)安全和穩(wěn)定

      工作站(workstation)

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

      計算機(jī)網(wǎng)絡(luò)的最末端,這個應(yīng)該不用我說太多了 網(wǎng)絡(luò)時代的pc已經(jīng)普及到千家萬戶

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

      這兩類硬件供應(yīng)商主要是以下三家 Sun,IBM還有HP(惠普)

      然后是PC 以前IBM還有PC事業(yè)部,現(xiàn)在被聯(lián)想吞并了(蛇吞象)現(xiàn)在國際市場上有聯(lián)想和DELL(戴爾),目前戴爾還是國際老大 還有HP康柏

      然后是網(wǎng)絡(luò),也就是路由器和交換機(jī)

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

      內(nèi)核(CPU)PC內(nèi)核

      主要是AMD和Intel,前者最近與Sun公司合作,Sun也有一部分單雙核服務(wù)器用的是AMD的 服務(wù)器與工作站內(nèi)核 這一塊與硬件廠商綁定 還是Sun,IBM,HP三家自己生產(chǎn) 題外

      在一些大型主機(jī)應(yīng)用市場,比如賣飛機(jī)票

      德國的漢莎,中國的中航信,香港的國泰用的都是尤利(美國的公司,英文名我忘了)

      其它用的是IBM的機(jī)器,現(xiàn)在能做大型機(jī)的感覺似乎只有IBM可以

      尤利已經(jīng)快倒了,技術(shù)太落后了,現(xiàn)在他們的系統(tǒng)還是fortran寫的,連c都不支持

      要特別說明的是,一個超大型主機(jī)然后多個小終端/pc的結(jié)構(gòu)現(xiàn)在越來越?jīng)]市場了

      將來的趨勢是用一整個包含多個服務(wù)器的分布式操作系統(tǒng)來取代這些大型主機(jī) 因為大型主機(jī)更新?lián)Q代極其困難,一旦數(shù)據(jù)量超過了主機(jī)的處理能力 那么就要換主機(jī),這個成本是極大的,但是如果用分布式操作系統(tǒng) 那就只需要增加小服務(wù)器就行了

      硬件就大概說到這里,與大多數(shù)人沒什么關(guān)系

      因為大多數(shù)人壓根不可能進(jìn)入這些硬件領(lǐng)域,除非做銷售 說了這么多,只是為了給軟件部分打基礎(chǔ)而已 //做嵌入式的除外

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

      首先我們來說說什么是軟件,統(tǒng)一一下概念

      所謂軟件通俗地說就是一套計算機(jī)程序 實現(xiàn)了某些功能的計算機(jī)程序 在很早很早以前,一臺計算機(jī)的軟件是不分層次結(jié)構(gòu)的

      一臺計算機(jī)只有一個系統(tǒng),這個系統(tǒng)既是操作系統(tǒng)又是應(yīng)用軟件,與硬件緊密綁定

      后來經(jīng)過許多年的發(fā)展發(fā)展發(fā)展

      人們把一些與硬件緊密相連的又經(jīng)常用到必不可少的功能做到一套程序中去 這一套程序就被人們稱做操作系統(tǒng)

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

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

      在現(xiàn)在企業(yè)級應(yīng)用中,我們的應(yīng)用軟件一般分為三層 三層分別是表示層,業(yè)務(wù)邏輯層,數(shù)據(jù)持久層------------------------------|表示層|業(yè)務(wù)邏輯層|數(shù)據(jù)持久層|------------------------------我們來說說三層中的代表軟件 表示層 這一層一般在客戶端pc機(jī)上,最常見的是IE瀏覽器,這就是表示層的軟件 表示層是直接與使用者交互的軟件 業(yè)務(wù)邏輯層

      這一層一般在服務(wù)器端,顧名思義,所有業(yè)務(wù)邏輯處理都在這一層完成 最典型的是appserver,比如IBM的websphere,BEA的weblogic還有tomcat/jboss等

      這一層也是三層中的重點,我們要說的大部分內(nèi)容都是關(guān)于這一層的,這個等會再說

      這一層就叫做中間層 數(shù)據(jù)持久層

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

      但沒人會建議你這么做,因為這樣做你的數(shù)據(jù)缺乏管理,不管怎樣 這一層要做的就是保存數(shù)據(jù),業(yè)務(wù)邏輯層軟件一般不負(fù)責(zé)保留數(shù)據(jù)

      或者說業(yè)務(wù)邏輯層只負(fù)責(zé)暫時儲存數(shù)據(jù),一關(guān)機(jī),業(yè)務(wù)邏輯層數(shù)據(jù)全部over了 那么數(shù)據(jù)的持久化(也就是儲存數(shù)據(jù))就必須要在這一層完成

      下面放著這些概念不談,我們來說說將來的趨勢 趨勢一:

      瘦客戶端,很早很早以前,當(dāng)時C/S模式也就是client/server 客戶端軟件大行其道的年代,一個pc用戶,是采用一個傻終端連接到服務(wù)器上 然后進(jìn)行相應(yīng)的操作,最典型的就是我們上bbs經(jīng)常用的c-term 這就是那個時代的產(chǎn)物,同樣還有我國現(xiàn)行的機(jī)票定座用的e-term 后來呢,瀏覽器變得非常流行,人們發(fā)現(xiàn),瀏覽器也能傳遞一些數(shù)據(jù) 雖然這些數(shù)據(jù)并不像那些終端那樣準(zhǔn)確,但應(yīng)付大多數(shù)日常需求足夠了 于是人們就提出一個瘦客戶端概念,也就是說,將來表示層所有的其他軟件疾揮? 我們唯一需要的就是一個網(wǎng)頁瀏覽器,然后通過瀏覽器輸入ip地址連接到服務(wù)器

      然后進(jìn)行相關(guān)的操作,由于網(wǎng)頁瀏覽器一般每個操作系統(tǒng)都有自帶一個 這樣做就達(dá)到了給我們客戶端瘦身的目的(不需要安裝額外軟件)這樣模式被稱作B/S模式,也就是browser/server模式

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

      傻數(shù)據(jù)庫,ok,首先,我承認(rèn),這個名詞是我發(fā)明的,但我實在無法找到一個更好的表達(dá)

      什么是傻數(shù)據(jù)庫,如果誰對數(shù)據(jù)庫有所了解的話,就知道,以前的數(shù)據(jù)庫 有自己的一套管理體系,甚至有自己的客戶端,比如oracle,mysql,sqlserver都有

      在某個管理工具上寫什么sql語句查詢數(shù)據(jù)庫是我們以前常做的事 那么將來我們提倡的是:將所有的業(yè)務(wù)邏輯封裝到業(yè)務(wù)邏輯層去 管理的事情由軟件來做,由業(yè)務(wù)邏輯層的軟件來做 所謂傻數(shù)據(jù)庫就是說,將來的數(shù)據(jù)庫什么事都不用做

      只用把數(shù)據(jù)給我保存好就行了,那些復(fù)雜的業(yè)務(wù)邏輯什么外鍵什么關(guān)聯(lián) 都沒數(shù)據(jù)庫什么事了,都交給業(yè)務(wù)邏輯層軟件來做

      這樣做的好處就是:我們就不需要這些該死難懂又復(fù)雜的數(shù)據(jù)庫系列管理工具了 而且這些工具每個數(shù)據(jù)庫都有自己的工具,完全不一樣,亂七八糟,沒有人喜歡面對他們

      除了數(shù)據(jù)庫維護(hù)人員,也就是DBA,我們是軟件工程師,維護(hù)的事讓他們?nèi)プ?而且嚴(yán)禁數(shù)據(jù)庫維護(hù)人員改動數(shù)據(jù)庫的數(shù)據(jù),他們只做備份,必要時候恢復(fù)一下就是了

      了解了這兩個趨勢之后,是不是有種砍頭去尾保中間的感覺?

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

      記得我上學(xué)的時候,看ibm的教材,看了半天中間件定義,就看懂記住一句話 中間件是做別人不愿意去做的事情,現(xiàn)在想想,狗屁定義,呵呵 什么是中間件,中間件是業(yè)務(wù)邏輯層的應(yīng)用軟件 是處理業(yè)務(wù)數(shù)據(jù)與客戶端之間業(yè)務(wù)邏輯的一種應(yīng)用軟件 一種提供網(wǎng)絡(luò)服務(wù)的服務(wù)器端應(yīng)用軟件

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

      ------------------------------|表示層 | 業(yè)務(wù)邏輯層 | 數(shù)據(jù)持久層 |------------------------------| IE | 網(wǎng)上銀行 | 數(shù)據(jù)庫 |------------------------------給初學(xué)者之五:企業(yè)級應(yīng)用之中間件 前面一篇簡單介紹了一下應(yīng)用軟件的分層

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

      這時候有人可能會問,為什么非要虛擬機(jī)?把操作系統(tǒng)當(dāng)成虛擬機(jī)為什么不行? 可以,當(dāng)然可以,但是這樣做某一個應(yīng)用軟件的bug就可能造成整個操作系統(tǒng)的死亡

      比如說我們在某個服務(wù)器上安裝了一個收發(fā)電子郵件的軟件和java虛擬機(jī) 那么一旦黑客通過收發(fā)電子郵件的軟件入侵系統(tǒng),那么操作系統(tǒng)就整個玩完 那么如果黑客通過java程序進(jìn)行攻擊的話,那么死的將會是虛擬機(jī)而不是操作系統(tǒng)

      大不了虛擬機(jī)崩潰,而操作系統(tǒng)正常運(yùn)行不受任何影響

      舉個簡單例子,比如說最常見的是將數(shù)據(jù)庫(DB)與中間件放在同一臺服務(wù)器上------------------------| program | |-----------| DB | | 虛擬機(jī) | |------------------------| 操作系統(tǒng) |------------------------那么此時如果沒有虛擬機(jī),黑客病毒攻擊中間件系統(tǒng),就有可能造成操作系統(tǒng)的死亡

      那此時數(shù)據(jù)庫也有可能跟著一起玩完,那損失可就大咯

      那如果此時有虛擬機(jī),那么一旦被攻擊,死的是虛擬機(jī),操作系統(tǒng)與數(shù)據(jù)庫不受任何影響

      嗯,回顧完虛擬機(jī),再來介紹中間件

      在很早很早以前,任何一家企業(yè),想要搭建一個局域網(wǎng)系統(tǒng),他需要請許多個工程師

      比如說我們想搭建一個網(wǎng)上銀行,客戶端用瀏覽器,后臺數(shù)據(jù)庫比如說用oracle 那么搭建這樣一個網(wǎng)上銀行,可能需要用到多少個工程師,我們來算一算 首先,由于客戶端用的是瀏覽器,我們需要一些了解網(wǎng)絡(luò)通訊協(xié)議以及一些瀏覽器標(biāo)準(zhǔn)的網(wǎng)絡(luò)工程師

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

      然后,我們還需要一些操作系統(tǒng)的工程師,因為我們的系統(tǒng)需要跟操作系統(tǒng)直接交互

      最后,我們需要一些設(shè)計網(wǎng)上銀行系統(tǒng)及其相關(guān)業(yè)務(wù)的工程師

      太多了太多了,這樣一個中間件隊伍實在太龐大了,制作維護(hù)成本實在太高了 不僅如此,這樣一個中間件就算做出來,他們所寫的代碼也只能滿足這一家公司使用

      其它公司統(tǒng)統(tǒng)不能再用,代碼重用率極低,近乎不可能重用 畢竟這個系統(tǒng)中改動任何一個部分都有可能涉及到整個系統(tǒng)的改動 那么如何降低成本? 我舉出了四組的工程師: 網(wǎng)絡(luò)工程師,數(shù)據(jù)庫工程師,操作系統(tǒng)工程師以及設(shè)計網(wǎng)上銀行系統(tǒng)的業(yè)務(wù)工程師

      除了最后一組設(shè)計網(wǎng)上銀行的業(yè)務(wù)工程師之外,前面三組工程師是不是每一個項目都需要的?

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

      哪個項目能夠脫離網(wǎng)絡(luò),數(shù)據(jù)庫和操作系統(tǒng)?不可能,在這個時代已經(jīng)很少很少了

      好,那既然每個項目都需要,我們是不是可以用一個產(chǎn)品來取代這三組的工程師呢?

      我們的業(yè)務(wù)工程師只需要遵循這個產(chǎn)品所提供的接口,進(jìn)行相應(yīng)的開發(fā)就行了 人們提出了一種叫做appserver也就是應(yīng)用服務(wù)器的東西

      應(yīng)用服務(wù)器是干什么的?按官方的說法,應(yīng)用服務(wù)器是包括有多個容器的軟件服務(wù)器

      那容器是什么?容器(Container)到底是個什么東西我想多數(shù)人還是不清楚 在說這個之前,先介紹一下組件

      什么是組件,組件是什么?組件其實就是一個應(yīng)用程序塊 但是它們不是完整的應(yīng)用程序,不能單獨運(yùn)行

      就有如一輛汽車,車門是一個組件,車燈也是一個組件 但是光有車燈車門沒有用,它們不能跑上公路

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

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

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

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

      同時,不同組件有可能還需要繼承一些特定的父類或者接口,這也是容器管理的需要

      還有其他的一些組件,這里就不一一說明舉例了 那么容器有很多種,按照他們裝載的組件類型劃分

      比如有裝ejb的ejb容器,有裝servlet與jsp還有靜態(tài)頁面的web容器等等 //這種只含有web容器的應(yīng)用服務(wù)器也被叫做web服務(wù)器 當(dāng)表示層的應(yīng)用軟件通過網(wǎng)絡(luò)向appserver發(fā)送一個請求的時候

      appserver自動找到相應(yīng)容器中的組件,執(zhí)行組件中的程序塊,把得到結(jié)果返還給客戶

      而我們要做的事就是寫組件也就是javabean,然后放到appserver里面去就可以了

      至于怎樣與IE通訊,怎樣截獲網(wǎng)絡(luò)上的請求,怎樣控制對象的數(shù)量等等 這些繁瑣而無味的工作我們都不管,都由appserver去做吧,把注意力集中在業(yè)務(wù)邏輯上

      appserver與其他相關(guān)軟件的關(guān)系如下圖:

      ------------------------| 表示層 | 業(yè)務(wù)邏輯層 | 數(shù)據(jù)持久層 |------------------------| |-----------------| | | IE | | javabean | | | |->------------------> DB | | client <-appserver <-| | |-------------------------| | | | 虛擬機(jī) | | |--------------|-------------------------|------------| | Windows | Linux/Saloris |LinuxSaloris| |--------------|-------------------------|------------| 圖上可以看出:虛擬機(jī)負(fù)責(zé)處理中間件與操作系統(tǒng)之間的交互 appserver則負(fù)責(zé)組件的管理以及與其他兩層的業(yè)務(wù)交互 1 附圖: image002.gif(76463 字節(jié))

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

      比如jsp/servlet容器在一個服務(wù)器上,而ejb容器在另外一個服務(wù)器上等等 這是分布式操作系統(tǒng)大面積應(yīng)用的基礎(chǔ),這個以后再說 下面這張相對簡單: 附圖: j2ee.gif(8226 字節(jié))

      嗯,那么話題再回到中間件上去,什么是中間件?

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

      而關(guān)于中間件有諸多規(guī)范以及遵循這些規(guī)范的模型 最流行的規(guī)范無非兩種,一個是j2ee還有一個是.net 但是.net幾乎只有微軟在用,所以很多人把.net這個規(guī)范就當(dāng)成是微軟的中間件產(chǎn)品

      也不為過,畢竟沒幾個公司喜歡跟著微軟屁股后面跑的 給初學(xué)者之六:java企業(yè)級應(yīng)用之綜合篇 我們知道中間件有很多種規(guī)范以及相關(guān)的模型 最流行的一個是j2ee還有一個是.net 那么各大公司關(guān)于這兩套規(guī)范各有什么產(chǎn)品以及周邊呢? j2ee: 黃金組合

      操作系統(tǒng):Solaris 應(yīng)用服務(wù)器:Weblogic 數(shù)據(jù)庫:Oracle 開發(fā)工具:JBuilider/IntelliJ IDEA 優(yōu)點:性能一級棒,大企業(yè)大公司做系統(tǒng)的首選,世界五百強(qiáng)幾乎都是這套組合 缺點:極貴

      超級組合,也是最安全最酷的黃金組合,硬件采用SUN公司的機(jī)器 但是SUN的服務(wù)器很貴,同等價格不如去買IBM的機(jī)器

      SUN的服務(wù)器支持Solaris的效果自然不用說,Solaris號稱是世界上最安全的操作系統(tǒng)

      Oracle也是世界上最安全,性能最優(yōu)的數(shù)據(jù)庫,Weblogic是當(dāng)今性能最優(yōu)的appserver JBuilder和IDEA各有所長,JBuilder是Borland公司的招牌之一

      是當(dāng)今世界上最流行的java IDE,用delphi寫的,但網(wǎng)絡(luò)上評價似乎不是很好 IDEA擁有插件功能,界面在所有java IDE中最為漂亮,東歐人開發(fā)的產(chǎn)品 東歐人嚴(yán)謹(jǐn)?shù)淖黠L(fēng)在這個產(chǎn)品上體現(xiàn)得尤為突出,用java寫的 IDEA甚至號稱自己被業(yè)界公認(rèn)為是最好的IDE//個人保留意見,沒有最好只有更好

      但我用JBuilder的時候發(fā)現(xiàn)了不少bug,而至今還沒有在IDEA上發(fā)現(xiàn)什么bug 個人推薦IDEA 價格方面,Solaris開源,但是SUN的服務(wù)器比較貴,Weblogic最高是34萬 oracle標(biāo)準(zhǔn)版要18.6萬,企業(yè)版要49萬,JBuilder要2.7萬左右 IDEA零售價大概是500美金,也就是5000多元

      另外,雖然理論上這些產(chǎn)品的綜合性能要高于其他選擇,但是必須看到 由于產(chǎn)商之間的利益沖突,比如oracle也有自己的appserver,但是性能不怎樣

      使得這幾種產(chǎn)品之間協(xié)作的性能要比預(yù)想中的要差一點點

      下載牛人對初學(xué)者學(xué)Java的建議word格式文檔
      下載牛人對初學(xué)者學(xué)Java的建議.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        java的建議

        假設(shè)你是正在開發(fā)和維護(hù)一個包含2000個類并使用了很多框架的Java開發(fā)人員。你要如何理解這些代碼?在一個典型的Java企業(yè)項目小組中,大 部分能夠幫你的高級工程師看起來都很忙......

        給英語口語初學(xué)者的建議(模版)

        英語(論壇)學(xué)習(xí)中,口語一直是困擾大多數(shù)人的問題。對于初學(xué)者尤其如此。理由歸納有三:缺乏語言環(huán)境;難以所學(xué)為所用;基礎(chǔ)薄弱,詞匯量少,句型單調(diào)。以下將對自身英語學(xué)習(xí)、教學(xué)中出......

        GSM網(wǎng)絡(luò)優(yōu)化初學(xué)者建議

        GSM網(wǎng)絡(luò)優(yōu)化初學(xué)者建議(2009-07-22 11:41:41) 標(biāo)簽:gsm 網(wǎng)絡(luò)優(yōu)化 基站 中國移動 廣分類:GSM 東無線 it WCDMA、TD、CDMA2000 Ev_DO的工程網(wǎng)優(yōu)正在如火如荼的進(jìn)行,但由于GSM系統(tǒng)......

        關(guān)于初學(xué)者的鋼琴建議(五篇范文)

        關(guān)于鋼琴,我個人認(rèn)為,這跟汗水是密不可分的。練鋼琴跟學(xué)習(xí)一樣,練習(xí)是非常重要的。 對于初學(xué)者來說,要非常注重手指素質(zhì)的練習(xí)。比如對哈農(nóng)這本書的練習(xí),我認(rèn)為是每天都需要練習(xí)......

        初學(xué)者練習(xí)英語口語的一點建議

        最權(quán)威的國際教育服務(wù)平臺 初學(xué)者練習(xí)英語口語的一點建議 英語學(xué)習(xí)中,口語一直是困擾大多數(shù)人的問題。對于初學(xué)者尤其如此。理由歸納有三:缺乏語言環(huán)境;難以所學(xué)為所用;基礎(chǔ)薄弱......

        英語初學(xué)者建議(優(yōu)秀范文5篇)

        Learning is a skill and it can be improved. 英語學(xué)習(xí)是一項技巧并可以不斷改進(jìn)。 一、Your path to learning effectively is through knowing: 要找到有效的學(xué)習(xí)途徑,你......

        向日語初學(xué)者提幾點建議

        向日語初學(xué)者提幾點建議 日本和中國是一衣帶水的有好鄰邦,這種地理位置決定了兩國的交往必然非常頻繁。加之日本是世界上的發(fā)達(dá)國家,中國是世界上發(fā)展速度最快的發(fā)展中國家,隨......

        對非牛人申請的一系列建議與方法

        早申的好處,總結(jié)如下幾條: 1) 有些學(xué)校截止日期非常早,如果你早申,競爭的人很少,你贏的機(jī)會很大; 2) 有些學(xué)校需要“預(yù)申請”,即pre-application,它的原意非常好,就是在你不交申......