posts - 4, comments - 5, trackbacks - 0, articles - 10

          java面試收集(持續更新)-1 原貼編輯太慢了

          Posted on 2005-11-28 15:24 勇敢的心 閱讀(241) 評論(0)  編輯  收藏 所屬分類: Java
          91、應用服務器與WEB SERVER的區別?
          通俗的講,Web服務器傳送(serves)頁面使瀏覽器可以瀏覽,然而應用程序服務器提供的是客戶端應用程序可以調用(call)的方法(methods)。確切一點,你可以說:Web服務器專門處理HTTP請求(request),但是應用程序服務器是通過很多協議來為應用程序提供(serves)商業邏輯(business logic)。

          92、BSCS的聯系與區別。
          C/SClient/Server的縮寫。服務器通常采用高性能的PC、工作站或小型機,并采用大型數據庫系統,如OracleSybaseInformix SQL Server。客戶端需要安裝專用的客戶端軟件。
          B/
          S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape NavigatorInternet Explorer,服務器安裝OracleSybaseInformix SQL Server等數據庫。在這種結構下,用戶界面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要事務邏輯在服務器端實現。瀏覽器通過Web Server 同數據庫進行數據交互。
          C/S
          B/S 區別:
          1.硬件環境不同:
            C/S 一般建立在專用的網絡上, 小范圍里的網絡環境, 局域網之間再通過專門服務器提供連接和數據交換服務.
            B/S 建立在廣域網之上的, 不必是專門的網絡硬件環境,例與電話上網, 租用設備. 信息自己管理. 有比C/S更強的適應范圍, 一般只要有操作系統和瀏覽器就行
          2.對安全要求不同
            C/S 一般面向相對固定的用戶群, 對信息安全的控制能力很強. 一般高度機密的信息系統采用C/S 結構適宜. 可以通過B/S發布部分可公開信息.
            B/S 建立在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。
          3.對程序架構不同
            C/S 程序可以更加注重流程, 可以對權限多層次校驗, 對系統運行速度可以較少考慮.
            B/S 對安全以及訪問速度的多重的考慮, 建立在需要更加優化的基礎之上. C/S有更高的要求 B/S結構的程序架構是發展的趨勢, MS.Net系列的BizTalk 2000 Exchange 2000, 全面支持網絡的構件搭建的系統. SUN IBM推的JavaBean 構件技術等,使 B/S更加成熟.
          4.軟件重用不同
            C/S 程序可以不可避免的整體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好.
            B/S 對的多重結構,要求構件相對獨立的功能. 能夠相對較好的重用.就入買來的餐桌可以再利用,而不是做在墻上的石頭桌子
          5.系統維護不同 
            C/S 程序由于整體性, 必須整體考察, 處理出現的問題以及系統升級. 升級難. 可能是再做一個全新的系統
            B/S 構件組成,方面構件個別的更換,實現系統的無縫升級. 系統維護開銷減到最小.用戶從網上自己下載安裝就可以實現升級.
          6.處理問題不同
            C/S 程序可以處理用戶面固定, 并且在相同區域, 安全要求高需求, 與操作系統相關. 應該都是相同的系統
            B/S 建立在廣域網上, 面向不同的用戶群, 分散地域, 這是C/S無法作到的. 與操作系統平臺關系最小.
          7.用戶接口不同
            C/S 多是建立的Window平臺上,表現方法有限,對程序員普遍要求較高
            B/S 建立在瀏覽器上, 有更加豐富和生動的表現方式與用戶交流. 并且大部分難度減低,減低開發成本.
          8.信息流不同
            C/S 程序一般是典型的中央集權的機械式處理, 交互性相對低
            B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。

          二、JAVA代碼查錯

          1.
          abstract class Name {
             private String name;
             public abstract boolean isStupidName(String name) {}
          }
          大俠們,這有何錯誤?
          答案: 錯。abstract method必須以分號結尾,且不帶花括號。
          2.
          public class Something {
             void doSomething () {
                 private String s = "";
                 int l = s.length();
             }
          }
          有錯嗎?
          答案: 錯。局部變量前不能放置任何訪問修飾符 (privatepublic,和protected)final可以用來修飾局部變量
          (final
          如同abstractstrictfp,都是非訪問修飾符,strictfp只能修飾classmethod而非variable)
          3.
          abstract class Something {
             private abstract String doSomething ();
          }
          這好像沒什么錯吧?
          答案: 錯。abstractmethods不能以private修飾。abstractmethods就是讓子類implement(實現)具體細節的,怎么可以用privateabstract
          method
          封鎖起來呢? (同理,abstract method前不能加final)
          4.
          public class Something {
             public int addOne(final int x) {
                 return ++x;
             }
          }
          這個比較明顯。
          答案: 錯。int x被修飾成final,意味著x不能在addOne method中被修改。
          5.
          public class Something {
             public static void main(String[] args) {
                 Other o = new Other();
                 new Something().addOne(o);
             }
             public void addOne(final Other o) {
                 o.i++;
             }
          }
          class Other {
             public int i;
          }
          和上面的很相似,都是關于final的問題,這有錯嗎?
          答案: 正確。在addOne method中,參數o被修飾成final。如果在addOne method里我們修改了oreference
          (
          比如: o = new Other();),那么如同上例這題也是錯的。但這里修改的是omember vairable
          (
          成員變量),而oreference并沒有改變。
          6.
          class Something {
              int i;
              public void doSomething() {
                  System.out.println("i = " + i);
              }
          }
          有什么錯呢? 看不出來啊。
          答案: 正確。輸出的是"i = 0"int i屬於instant variable (實例變量,或叫成員變量)instant variabledefault valueintdefault value0
          7.
          class Something {
              final int i;
              public void doSomething() {
                  System.out.println("i = " + i);
              }
          }
          和上面一題只有一個地方不同,就是多了一個final。這難道就錯了嗎?
          答案: 錯。final int i是個finalinstant variable (實例變量,或叫成員變量)finalinstant variable沒有default value,必須在constructor (構造器)結束之前被賦予一個明確的值。可以修改為"final int i = 0;"
          8.
          public class Something {
               public static void main(String[] args) {
                  Something s = new Something();
                  System.out.println("s.doSomething() returns " + doSomething());
              }
              public String doSomething() {
                  return "Do something ...";
              }
          }
           
          看上去很完美。
          答案: 錯。看上去在maincall doSomething沒有什么問題,畢竟兩個methods都在同一個class里。但仔細看,mainstatic的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能訪問non-static instant variable
          9.
          此處,Something類的文件名叫OtherThing.java
          class Something {
              private static void main(String[] something_to_do) {       
                  System.out.println("Do something ...");
              }
          }
           
          這個好像很明顯。
          答案: 正確。從來沒有人說過JavaClass名字必須和其文件名相同。但public class的名字必須和文件名相同。
          10

          interface  A{
             int x = 0;
          }
          class B{
             int x =1;
          }
          class C extends B implements A {
             public void pX(){
                System.out.println(x);
             }
             public static void main(String[] args) {
                new C().pX();
             }
          }
          答案:錯誤。在編譯時會發生錯誤(錯誤描述不同的JVM有不同的信息,意思就是未明確的x調用,兩個x都匹配(就象在同時import java.utiljava.sql兩個包時直接聲明Date一樣)。對于父類的變量,可以用super.x來明確,而接口的屬性默認隱含為 public static final.所以可以通過A.x來明確。
          11.
          interface Playable {
              void play();
          }
          interface Bounceable {
              void play();
          }
          interface Rollable extends Playable, Bounceable {
              Ball ball = new Ball("PingPang");
          }
          class Ball implements Rollable {
              private String name;
              public String getName() {
                  return name;
              }
              public Ball(String name) {
                  this.name = name;       
              }
             public void play() {
                  ball = new Ball("Football");
                  System.out.println(ball.getName());
              }
          }
          這個錯誤不容易發現。
          答案: 錯。"interface Rollable extends Playable, Bounceable"沒有問題。interface可繼承多個interfaces,所以這里沒錯。問題出在interface Rollable里的"Ball ball = new Ball("PingPang");"。任何在interface里聲明的interface variable (接口變量,也可稱成員變量),默認為public static final。也就是說"Ball ball = new Ball("PingPang");"實際上是"public static final Ball ball = new Ball("PingPang");"。在Ball類的Play()方法中,"ball = new Ball("Football");"改變了ballreference,而這里的ball來自Rollable interfaceRollable interface里的ballpublic static final的,finalobject是不能被改變reference的。因此編譯器將在"ball = new Ball("Football");"這里顯示有錯。



          主站蜘蛛池模板: 鹿泉市| 保康县| 漠河县| 满洲里市| 承德市| 芜湖市| 诏安县| 山东省| 越西县| 虞城县| 赣州市| 东丽区| 西和县| 双流县| 通许县| 伊吾县| 洛南县| 海林市| 四会市| 乡宁县| 松滋市| 周口市| 洛南县| 霍州市| 双城市| 云南省| 青海省| 康平县| 鄂托克旗| 翁源县| 宾川县| 五峰| 临洮县| 西乌| 凤翔县| 石渠县| 四会市| 泰州市| 南投市| 湖北省| 苏尼特左旗|