一個牛人給java初學者的建議(1)

一個牛人給java初學者的建議



給初學者之一:淺談java及應用

學java不知不覺也已經三年了

從不知java爲何物到現在一個小小的j2ee項目經理

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

每次上網,泡bbs逛論壇,沒少去java相關的版面

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


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

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

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

在這種環境下,很多人對java感到茫然,不知所措,不懂java能做什麼

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

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


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


先說什麼是java


java是一種面嚮對象語言,真正的面向對象,任何函數和變量都以類(class)封裝起來

至於什麼是對象什麼是類,我就不廢話了

關於這兩個概念的解釋任何一本面嚮對象語言的教材裏面都有

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


在說java能做什麼之前,先說java作爲一個真正面嚮對象語言的優點

首先第一個,既然是真正的面向對象,那就要做到徹底的封裝

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

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

這樣就不會出現一個類被切割成這裏一塊那裏一塊的情況,c++就可以,不是麼?

這樣做使得整個程序的結構異常清晰,明瞭


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

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

因爲這使得我們不能把主要精力放在我們關心的事情上

而需要考慮計算機內部的一些事情,作爲一個軟件工程師

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

此時java的優勢體現出來了,它完全屏蔽了內存管理

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

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

因爲雖然你的程序無法對內存進行管理,降低了一定的速度

但你的程序會非常非常的安全,因爲你無法調用一個空指針

而不像以前寫c的時候那樣,成天因爲空指針而擔驚受怕

當然,如果你深入瞭解這一行,就會發現java其實也無法保證程序不去調用空的指針

但是它會在最大程度上避免空指針的調用

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


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

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

和java一樣,很多人都不知道unix這種操作系統幹什麼用

我不想多說unix的應用,這不是主要,但是我要說,大部分小型機

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

unix比起windows有一個最顯著的特點,穩定,這就好比思科和華爲

思科的機器慢但穩定,華爲的機器快但不穩定,作爲服務器這一端來說

要的皇怯卸囁歟俏榷ǎ評nix在服務器端還是非常有市場的

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

因爲windows操作系統針對的是pc用戶,pc死機就死機咯,大不了重啓

瘟95最經常冒出來的就是藍屏,在服務器這一端上因爲ms沒有自己的芯片

所以要做系統有些力不從心啊。扯遠了,那麼java可以做到在windows上編譯

然後在unix上運行,這是c/c++做不到的


那麼說到這裏,java能做什麼逐漸清晰起來

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

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

而且還能跨平臺,那麼很明顯,java主要應用於除了windows操作系統以外所有的平臺

比如手機,服務器

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

就算有,那如果你用c/c++,是不是要針對每一款手機寫一套程序呢?

累死,那跨平臺的java就不用,做到編譯一次,隨時運行

同樣,在服務器這一端,如果我想給一個網絡門戶站點,比如sina

寫一個應用程序,pc的性能肯定無法滿足sina這樣大站點併發數量的要求

那麼它就需要買服務器,那麼服務器ms沒有市場,而且windows很不安全

那麼十之八九會買一個sun/ibm的機器,或者hp,但不管是誰的機器

它裝的操作系統也不會是windows,因爲windows太不安全了,而且多核的支持太差了

這個有空再說,那麼如果你要寫一個程序在這樣的機器上跑

難道我們就在這個機器上做開發麼?當然不可能,一般程序員開發用的都是pc,windows

那麼該怎麼辦?寫一個程序,然後再拿到服務器上去編譯,去調試?

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

在pc上調試,然後直接移植到服務器上去,那麼此時,我們就會毫不猶豫地選擇java

因爲在跨平臺以及安全性來說,java永遠是第一選擇


ok,下面說java的缺點


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

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

速度已經不是我們關心的問題了,而且對於企業級的應用來說

沒有什麼比安全穩定更重要的,換句話說,我們可以忍受慢,但是不能忍受死機和藍屏

而且越大型的應用,這種慢的劣勢體現得越模糊

因爲當系統項目越做越大,任何一個環節做不好都可能影響全局的情況下

安全尤其重要,而且就像goto語句一樣

這種過分追求速度的主張會給系統開發和糾錯以及維護帶來無可挽回甚至不可避免的損失

把內存交給計算機去管理吧,這種代價值得

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


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

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

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

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

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

加上我國又沒有公司在做操作系統,所以看上去是不怎麼順眼

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


三我還沒想到,其他人補充


給初學者之二:從JDK說起

在知道了java有什麼優點,能做什麼之後

就該說一下java該如何去學了


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

早在五年前,嗯,應該說是六年前,也就是99年的時候

sun公司做出了一個決定,將java應用平臺做一個劃分

畢竟在不同領域,語言應用特性是有區別的

針對不同領域內的應用,sun公司可以發佈相關高端標準來統一規範代碼

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

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

正是由於這次革命性的發展,使java從一種小打小鬧遊戲性的語言

發展成爲今天企業級應用的基礎


這裏要特別說明一下J2SEJ2EE J2ME中2的意思

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

而不是secondedition,當然java 2本身版本號就是1.2,也有點2nd edition的味道


說點題外的,sun公司發佈的java版本很有意思

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

比如java 2,其實就是java 1.2

1.3其實就是3.0,1.4就是4.0,現在所說的5.0 其實就是1.5

只是以前我們更習慣叫1.X而已

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

所以以後聽到別人說java5.0,千萬別驚訝,其實就是1.5


在這三個J2*E中J2SE是基礎,就是java 2的標準版(java 2standard edition)

也就是最基礎的java語言部分,無論學什麼java技術,J2SE都是必須掌握的

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

JDK在sun公司的主頁上可以免費下載,下載後需要安裝,具體安裝流程看教材

JDK包含有五個部分:核心API,集成API,用戶界面API,發佈技術還有java虛擬機(JVM)


先說運行環境,運行環境最主要要說的就是java虛擬機(JVM)

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

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

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

如下圖:

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

|             program               |

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

|                JVM                |

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

| UNIX | Windows | Linux | Solaris |..

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

程序員所寫的每一個程序都先運行在虛擬機上

所有操作都必須經過虛擬機才能和操作系統交互

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

要死機的話,死的是虛擬機(JVM)而操作系統並不會受此影響

而我們所說的java運行環境指的主要是JVM,其他的不說了,省略


下面說說JDK(javadevelopment kit)的API,其實用JDK來包括運行環境以及開發工具

個人感覺是不恰當的,因爲這三個單詞僅能說明開發工具,也就是幾個標準的API

而沒有讓人感覺到有運行環境的意思在裏面,這是題外

那麼什麼是API?

簡單地說就是ApplicationProgramming Interface,應用程序編程接口

在java裏面,就是一些已經寫好了的類打成的包

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

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

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


最後說一下JDK的發佈技術,其實按我的理解,講白了就是編譯器

將.java文件轉換成.class文件的一種技術

這三部分組成了JDK,有了JDK,就可以開發出J2SE應用軟件了

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

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

在J2SE這一塊,特別推薦JCreator這款IDE

sun公司的產品,與JDK結合得幾乎是天衣無縫,非常適合初學者使用


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

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

對於j2se,這本書翻譯得已經很不錯了,基本沒有什麼語法錯誤,語句也很通順

最後要說的就是《thinkingin java》

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

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

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

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

至少精讀其中一本,然後再看其他兩本就可以,其實三本書內容也差不多

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

最後要說的是

由於虛擬機的存在,J2SE的大多數軟件的使用會比一般桌面軟件慢一些

效果不盡如人意,現在大概只有swing控件還在使用吧,其它沒怎麼聽說


J2EE&J2ME

這是java應用的重中之重,如果想拿高薪,最好把J2EE學好

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

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

也許有些誇張,但也從某一方面說明J2EE人才的稀缺以及應用的廣泛

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


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

總算講到企業級應用了,內容開始逐漸有趣起來


java企業級應用分爲硬件篇和軟件篇

重點在軟件,硬件是外延,嚴格地說與java沒有必然聯繫

但是,由於java是網絡語言,不瞭解硬件的一些基礎知識

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

硬件是軟件的基礎,在這個前提下,有必要專門花一點點篇幅來聊一下硬件


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

也就是那些冰冷的機器,比如服務器,個人電腦還有網絡交換機,路由器等等


那麼先拋開網絡設備不談,先來說說計算機電腦的歷史


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

無比大,無比重,無比傻,除了算其它屁事不會做,沒有所謂的人工智能與計算機網絡

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

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

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


然後隨着時間的推移,製造業發展發展發展

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

於是人們造出了第二臺,第三臺,第四臺,第五臺……第n臺計算機

人們就造出了無數臺計算機並使其成爲一種產品

逐漸應用於許多複雜計算領域,不僅僅是科研,許多生產領域也開始出現計算機的影子


然後又隨着時間的推移,人們發現不可能把所有的計算機都做成一個樣子

因爲各行各業對計算機性能的要求各不相同

於是開始把計算機劃分檔次,最簡單地是按照計算機的大小劃分

就是教科書上寫的大型機,中型機,小型機

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

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

按照性能的不同,在不同領域,出現了滿足符合不同要求的計算機


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

人們開始考慮將不同的計算機連接起來,於是網線出現了,網絡出現了

又隨着網絡的發展,出現了一下專門爲了尋址而存在的機器

這就是路由器和交換機,然後又出現了一些公益性的組織或團體

他們制定了一系列的標準來規範以及管理我們的網絡

於是3w出現了,計算機的網絡時代來臨了


嗯,說到這裏,計算機發展到今天的歷史大概說完了

我們來詳細說說網絡時代的計算機以及各個硬件供應商之間的關係


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

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

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

他們會問你買機器幹什麼用的?科學計算啊還是居家用,是作服務器啊還是圖形設計

但不管怎樣,簡單地說大中小型機已經沒有什麼意義了

我們按照使用範疇來劃分

簡單劃分爲

服務器,工作站還有微機


服務器(server)

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

用通俗點話說務器就是某個公?4小時不間斷運行提供服務的機器

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

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

這些服務對機器都有一些特定的要求,尤其強調安全和穩定


工作站(workstation)

工作站其實是圖形工作站的簡稱,說白了,就是某種功能極其強大的計算機

用於特定領域,比如工程設計,動畫製作,科學研究等


個人電腦/微機(pc)

計算機網絡的最末端,這個應該不用我說太多了

網絡時代的pc已經普及到千家萬戶


說完了分類,我們就來說說各個硬件供應商

首先是服務器還有工作站

這兩類硬件供應商主要是以下三家

Sun,IBM還有HP(惠普)


然後是PC

以前IBM還有PC事業部,現在被聯想吞併了(蛇吞象)

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

還有HP康柏


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

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


內核(CPU)

PC內核

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

服務器與工作站內核

這一塊與硬件廠商綁定

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


題外

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

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

其它用的是IBM的機器,現在能做大型機的感覺似乎只有IBM可以

尤利已經快倒了,技術太落後了,現在他們的系統還是fortran寫的,連c都不支持


要特別說明的是,一個超大型主機然後多個小終端/pc的結構現在越來越沒市場了

將來的趨勢是用一整個包含多個服務器的分佈式操作系統來取代這些大型主機

因爲大型主機更新換代極其困難,一旦數據量超過了主機的處理能力

那麼就要換主機,這個成本是極大的,但是如果用分佈式操作系統

那就只需要增加小服務器就行了


硬件就大概說到這裏,與大多數人沒什麼關係

因爲大多數人壓根不可能進入這些硬件領域,除非做銷售

說了這麼多,只是爲了給軟件部分打基礎而已

//做嵌入式的除外

給初學者之四:java企業級應用之軟件篇

嗯,說過了硬件就該是軟件了

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


首先我們來說說什麼是軟件,統一一下概念


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

實現了某些功能的計算機程序

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

一臺計算機只有一個系統,這個系統既是操作系統又是應用軟件,與硬件緊密綁定

後來經過許多年的發展發展發展

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

這一套程序就被人們稱做操作系統

另外一些可有可無的,不同工作適應不同環境的功能封裝到另外一套程序中去

而這一系列程序被人們稱作應用軟件

如下圖:

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

|應用軟件:falshgat/IE/realplayer/winamp..|

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

|操作系統:UNIX/Windows/Linux/Solaris... |

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

前一篇我們知道,硬件分爲服務器工作站與pc

其實無論哪種硬件的軟件,都有操作系統與應用軟件


ok,那下面我們來談應用軟件

在現在企業級應用中,我們的應用軟件一般分爲三層

三層分別是表示層,業務邏輯層,數據持久層

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

|表示層|業務邏輯層|數據持久層|

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

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

表示層

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

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

業務邏輯層

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

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

這一層也是三層中的重點,我們要說的大部分內容都是關於這一層的,這個等會再說

這一層就叫做中間層

數據持久層

這一層典型的就是數據庫,一般也在服務器端

但該服務器一般與裝業務邏輯層軟件的服務器分開

當然你也可以用IO輸入輸出流往硬盤上寫東西

但沒人會建議你這麼做,因爲這樣做你的數據缺乏管理,不管怎樣

這一層要做的就是保存數據,業務邏輯層軟件一般不負責保留數據

或者說業務邏輯層只負責暫時儲存數據,一關機,業務邏輯層數據全部over了

那麼數據的持久化(也就是儲存數據)就必須要在這一層完成


下面放着這些概念不談,我們來說說將來的趨勢

趨勢一:

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

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

然後進行相應的操作,最典型的就是我們上bbs經常用的c-term

這就是那個時代的產物,同樣還有我國現行的機票定座用的e-term

後來呢,瀏覽器變得非常流行,人們發現,瀏覽器也能傳遞一些數據

雖然這些數據並不像那些終端那樣準確,但應付大多數日常需求足夠了

於是人們就提出一個瘦客戶端概念,也就是說,將來表示層所有的其他軟件疾揮?

我們唯一需要的就是一個網頁瀏覽器,然後通過瀏覽器輸入ip地址連接到服務器

然後進行相關的操作,由於網頁瀏覽器一般每個操作系統都有自帶一個

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

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

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

尤其是一些複雜的業務操作,還是瀏覽器這種簡單軟件無法勝任的


趨勢二:

傻數據庫,ok,首先,我承認,這個名詞是我發明的,但我實在無法找到一個更好的表達

什麼是傻數據庫,如果誰對數據庫有所瞭解的話,就知道,以前的數據庫

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

在某個管理工具上寫什麼sql語句查詢數據庫是我們以前常做的事

那麼將來我們提倡的是:將所有的業務邏輯封裝到業務邏輯層去

管理的事情由軟件來做,由業務邏輯層的軟件來做

所謂傻數據庫就是說,將來的數據庫什麼事都不用做

只用把數據給我保存好就行了,那些複雜的業務邏輯什麼外鍵什麼關聯

都沒數據庫什麼事了,都交給業務邏輯層軟件來做

這樣做的好處就是:我們就不需要這些該死難懂又複雜的數據庫系列管理工具了

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

除了數據庫維護人員,也就是DBA,我們是軟件工程師,維護的事讓他們去做

而且嚴禁數據庫維護人員改動數據庫的數據,他們只做備份,必要時候恢復一下就是了


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

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

那再次統一一下概念,什麼是中間件

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

中間件是做別人不願意去做的事情,現在想想,狗屁定義,呵呵

什麼是中間件,中間件是業務邏輯層的應用軟件

是處理業務數據與客戶端之間業務邏輯的一種應用軟件

一種提供網絡服務的服務器端應用軟件

舉個非常簡單的例子,網上銀行,某個人想用IE進入工行的賬戶,然後轉帳

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

那麼中間件是什麼?中間件就是提供這種服務的系統


這三層的劃分如下

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

|表示層| 業務邏輯層| 數據持久層|

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

| IE   |  網上銀行 |   數據庫 |

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章