一个面试考题,请进!

friendy 2002-03-23 11:11:23
请描述J2EE和.NET的相同和不同处?

这个问题该怎样回答才好呢?
...全文
66 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
alexzhou 2002-03-23
如果WindowsXP的安全性和稳定性大大提高的话,
.net绝对有前途
回复
baozhen 2002-03-23
http://www.csdn.net/expert/cxy/net_j2ee.shtm
回复
hexiaofeng 2002-03-23
[技術短文]
比較 Microsoft .NET 和 J2EE 的構成技術
即使你不在微軟的平台上寫程式,你可能也聽過 Microsoft 推出的「.NET」平台,此技術是用來對付非微軟陣營的兵器。如果你讀過微軟的新聞稿,或者你瀏覽過 MSDN 的內容,還是你出席了微軟的專業程式員會議(也就是「.NET」平台現身的地方),你可能仍有兩個疑問:

「.NET」平台到底是什麼?
「.NET」架構和 J2EE 有哪些差異?

如果你想得更遠一點,你還會有第三個問題:

我們能從「.NET」架構中學到一些哪些有助於推展企業軟體開發的思維?

目前,「.NET」架構尚嫩,許多細節仍有待微軟的「.NET」小組釐清。雖然如此,我們仍然能夠從現有的資訊中得到上述問題的解答。

「.NET」平台到底是什麼?
現今大家對於「.NET」平台的看法有點類似寓言「瞎子摸象」,觀點不同,自有不同的想法。有些人說「.NET」是微軟的下一代 Visual Studio 開發環境;有些人說它是一個新的程式語言(C#);還有些人說它是以 XML 和 SOAP 為基礎的資料交換與傳遞訊息的機制。其實,上述三者都是「.NET」想扮演的角色,而且還不止於此。

讓我們先得到一些較具體的觀念。下面列出「.NET」平台內部的組成:

C# 是一個「新程式語言」,用來撰寫類別和元件。C# 融合了 C/C++ 和 Java 的特色,還多了一些其它的特色,比方說 metadata tag。
一個「通用語言的執行時期系統(common language runtime)」,用來執行 IL 格式的程式碼。任何語言的原始程式只要被編譯成 IL 格式之後,就可在「.NET」平台執行。
一組「基礎元件」,提供多樣的功能(例如:網路),以供執行時期系統使用。
「ASP+」,是新版的 ASP,能讓 ASP 被編譯成 IL 的格式。
「Win Form」和「Web Form」,是一組新的 UI 元件骨架,供 Visual Studio 使用。
「ADO+」,是新版的 ADO,使用 XML 和 SOAP 來進行資料存取和資料交換。
「.NET」和 J2EE 有哪些差異?
如你所見,「.NET」平台是一堆技術的組合。微軟把這些技術當作現有技術(例如:J2EE 和 CORBA)的另一種選擇,但實際上比較起來又是如何呢?下面是我們的一些分析比較:

Microsoft.NET
J2EE
主要差異

C# 程式語言
Java 程式語言
C# 和 Java 都源自 C/C++。兩者有相當多共同的主要特色(包括:自動記憶體管理、階層式名字空間)。C# 從J avaBeans 學來一些元件觀念(propertie/attribute、event),還新增了一些特色(比方說 metadata tag),但是使用不同的語法。

Java 可以在任何有 Java 虛擬機器的平台上執行。C# 目前只能在 Windows 上執行。

C# 使用IL的執行時期系統。透過 just-in-time (JIT) 的編譯方式或原生碼編譯方式來執行。Java 程式是透過 Java 虛擬機器來執行,但是也可以編譯成原生碼。

「.NET」通用元件
Java core API
高階的「.NET」元件將支援透過 XML 和 SOAP 來存取。(請看下面 ADO+ 的介紹)

Active Server Pages+ (ASP+)
Java ServerPages (JSP)
ASP+ 將可以使用 Visual Basic、C#、和其它語言來撰寫程式片斷,然後被編譯成IL的格式(不像以前的 ASP 每次都需要直譯)。JSP 使用 Java 的程式碼,編譯成 Java 的 bytecode(可以需要時才編譯,也可以預先編譯好)。

IL 執行時期系統
Java 虛擬機器、CORBA IDL、CORBA ORB
「.NET」允許不同的程式語言使用 Windows 上的同一套元件。

Java 允許 Java bytecode 在相容的虛擬機器上都可以執行。

CORBA 允許不同語言和不同平台的物件互相溝通(必須有適合的 ORB)。J2EE 中可以使用CORBA,但兩者的整合度不算是很緊密。

Win Form 和 Web Form
Java Swing
類似的 Web 元件在標準的 Java 平台中付之闕如,有些其它廠商在 Java IDE 中提供一些元件。

MS Visual Studio IDE 提供 Win Form 和 Web Form 的 RAD 工具,目前尚未有其它廠商宣稱要支援 Win Form 和 Web Form。許多 Java IDE 工具都支援 Swing。

ADO+ 和 SOAP 的Web 服務
JDBC、EJB、JMS 和 Java XML 程式庫(XML4J、JAXP)
ADO+ 允許透過 HTTP 進行 XML 資料交換(在遠端資料物件和多層的程式之間),也就是SOAP。「.NET」的 Web 服務使用 SOAP 的訊息模型。EJB、JDBC 等則是把資料交換的通訊協定交由程式員自行決定,用 HTTP、RMI/JRMP 或 IIOP 都可以。


上面是各項技術的比較,下面是兩者的整體比較:

特色:「.NET」和 J2EE 都提供許多相似的特色,雖然方法不見得完全一樣。
 
可移植性:「.NET」只能在 Windows 上運作,但是理論上可以支援許多語言。而且,「.Net」支援 SOAP,使得不同平台的元件可以和「.NET」的元件交換訊息。雖然「.NET」中有些技術(比方說 SOAP 和其 discovery 與 lookup 機制)是公開的規格,核心的技術(比方說 IL 執行時期系統、ASP+、Win Form 與 Web Form)都還是由微軟所把持,而且微軟將會是「.NET」完整開發工具和平台的唯一提供廠商。
J2EE 則可以在任何有 JVM 的平台上執行,只要有相容的服務(比方說:EJB 容器、JMS 等)即可。J2EE 的一切標準都是公開的,許多廠商都提供相容的產品和開發工具。但是 J2EE 是一個單一語言的平台,如果要和其它語言平台溝通必須透過 CORBA(目前 J2EE 平台上不見得有支援 CORBA)。

整體來看
上面的各項分析指出「.NET」和 J2EE 的主要差異。微軟正在「.NET」上做兩件值得注意的事:開放「.NET」給其它程式語言的使用者,並開放「.NET」給非「.NET」元件的使用者(透過 XML 和 SOAP)。

因為「.NET」允許其它語言的元件整合進來,「.NET」賦予 Perl、Eiffel、Cobol 和其它語言的程式員在微軟的平台上做事。各種語言的愛好者尤其喜歡這點,因為他們中多數人才不在乎微軟和 Sun 以及開放陣營之間的戰火。

大家的反應如何?
對微軟的程式員來說:
如果你一直守著微軟的架構,那麼「.NET」的出現是一件好事。ASP+ 比 ASP 好;ADO+ 比 ADO 好;C# 比 C/C++ 好。「.NET」平台差不多要到 2001 才會現身,所以你還有時間準備。毫無疑問地,它將會變成微軟預設的開發環境。如果你現在正在使用微軟的開發工具,未來移轉到「.NET」之後,你也會享受到這種種好處。

然而,「.NET」平台的一些目的太過崇高,不保證能達得到(至少短期內是如此)。比方說,IL 執行系統有一些很明顯的難題待克服,想整合進此系統的每個語言必須清楚地定義如何對應到 IL,以及 IL 所需的 metadata。某語言要相容於 IL 來必須提供編譯器(x 語言轉 IL,和 IL 轉 x 語言)。

這有前例可尋。有許多編譯器可將非 Java 語言轉成 JVM 可執行的程式,這些語言包括了 JPython、PERCobol、the Tcl/Java project,有趣的是,連 Bertrand Meyer 和一些 Eiffel 語言的傢伙也早在幾年前就做出 Eiffel-to-JavaVM 的工具。其中只有 JPython 是成功的,其它的工具好像都沒人在用,甚至連這些語言本身的族群都不用,雖然這些工具的出現使得他們能使用最愛的語言來寫 Java 程式。為什麼就是無法引起大家的熱誠?我相信這是因為人們懷疑混合兩種異質的語言環境會水土不服。如果他們想寫在 JVM 上執行的程式,他們寧可花時間去學 Java 語言。我想,同樣的情況也會出現在「.NET」平台上,人們寧可花時間去學 C# 來寫「.NET」程式,而非使用其它語言。

還有一點要注意的:「.NET」使用的 SOAP 架構的性能值得觀察。SOAP 使用 HTTP 來傳遞 XML。HTTP 不是有效率的通訊協定,而且 XML 還需要額外的文件剖析(parse),這又是計算上的負擔。兩者的結合會使得交易的速度大大低於其它方案。XML 是一個用途廣、健全、又具涵義的訊息機制,而 HTTP 是一個廣泛又能避免許多關於防火牆的問題,但是如果效率對你來說很重要,那麼你應該多瞧瞧其它的方式,而不要用 SOAP。

對 Java 和 Open Source 族群來說:
「.NET」很容易被視為微軟基於市場需求所推出的解決方案。其實,「.NET」是微軟開始策略改變的徵兆。以往微軟在面對其它架構和平台有不錯的戰果,現在他們面對了來自 Java 和 open source 的壓力,開始有了「開放」的跡象,也試著直接去滿足程式員的需求,這可是和以往的老大作風大不相同。如果你是 Java 或 open source 的愛好者,請注意:這場戰爭的本質已經有所改變了。

而且,微軟的 IL 執行時期系統有一點值得注意的目標:消弭程式語言和 API 之間的藩籬。Java 消弭了平台間的藩籬,但是如果你想使用 J2EE,你就必須搭配 Java 語言。「.NET」想讓你使用你喜愛的語言來開發「.NET」程式,這點是很了不起的(但結果是否會成真仍是個大問號)。從這點來看,J2EE 就比不上「.NET」,但是這點應該不算太重要。

J2EE 如果想迎戰「.NET」,有幾個議題應該立刻被注意到。首先,J2EE 應該將 XML 好好地整合進來。我不是指制定 XML SAX/DOM 的 API,也不是指拿 XML 當作設定檔格式,我說的是 XML 的訊息交換和處理應該被加進 J2EE。當然,目前你可以用 XML 格式當作 JMS 訊息內容,但整個 J2EE 卻不會因此受益。XML 是一堆標準的集合,包括業界標準的 API 和 DTD,這應該都是資料交換時可以享受到的好處才是。

但是微軟把賭注下在 SOAP 上,而且正積極地將 SOAP 的相關資訊傳送給程式員。J2EE 也應該如此,我想到的方法之一是在 JMS 上加一層 XML messaging provider,並整合進 Java Naming and Directory Interface(JNDI)和 LDAP、NIS、COS Naming 等技術。這樣就等於是結合了 SOAP/BizTalk provider、ebXML provider 等技術。


本文作者:Jim Farley,著有 Java Distributed Computing、Java Enterprise in a Nutshell(合著)
本文譯者:蔡學鏞
張貼日期:9/7/00
回复
maleangel 2002-03-23
to  GJA106(中文字符)
这个网页是tw的繁码,连MAGICWIN也翻不过来

有没有简体中文的
谢谢了
回复
GJA106 2002-03-23
看看http://www.oreilly.com.tw/sleepless/net_j2ee.htm
回复
Patrick_DK 2002-03-23
没意思
回复
hello_wyq 2002-03-23
变态的题目。
一点价值都没有!
回复
相关推荐
综教楼后的那个坑用双向链表实现 描述   在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。   从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:    *            * :    *            * :    *            * 8    *    **      * 7    *    **      * 6    *    **      * 5    *    ********* 4 <- 高度    *    ********* 3    ************** 2    ************** 1 平面 |  1  |2|   3    | 每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤ Wi ≤ 1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。   请你计算每个平面被水覆盖的时间。    灌水 水满后自动扩散 | | * | * * | * * * * V * * V * * * * * * .... * *~~~~~~~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~**~~~~~~* *~~~~**~~~~~~* * ********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* ************** ************** ************** ************** ************** **************    4 分钟后    26 分钟后        50 分钟后    平面 1 被水覆盖     平面 3 被水覆盖    平面 2 被水覆盖输入   输入的第一行是一个整数 N,表示平面的数量。从第二行开始的 N 行上分别有两个整数,分别表示平面的宽度和高度。 输出   输出每个平面被水覆盖的时间。
发帖
非技术区
创建于2007-09-28

2.3w+

社区成员

Java 非技术区
申请成为版主
帖子事件
创建了帖子
2002-03-23 11:11
社区公告
暂无公告