天天看點

java基礎 小知識點彙總篇

1、&和&& |和|| 的差別?

a&b,會執行a,執行b ,得出結論

a&&b,會執行a,如果a false,則不執行b,直接傳回false

2、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

round(x)方法是擷取最進階

Math.round(11.5)= 12

Math.round(-11.5)= -11

該方法的實作:将括号内的數+0.5之後,向下取值,

比如:round(3.4)就是3.4+0.5=3.9,向下取值是3,是以round(3.4)=3;

round(-10.5)就是-10.5+0.5=-10,向下取值就是-10,是以round(-10.5)=-10

3、switch 是否能作⽤用在byte 上,是否能作⽤用在long 上,是否能作⽤用在String 上?

switch表達式後面的資料類型隻能是byte,short,char,int四種整形類型,枚舉類型和java.lang.String類型(從java 7才允許),不能是boolean類型

4、用最有效率的⽅方法計算2乘以8

2<<2

左移相當于乘以2,右移相當于除以2

5、在Java中,如何跳出目前的多重嵌套循環

1)

java基礎 小知識點彙總篇
java基礎 小知識點彙總篇
ok: 
            for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                System.out.println("i=" + i + ",j=" + j);
                if (j == 5)
                    break ok;
            }      

View Code

2)

java基礎 小知識點彙總篇
java基礎 小知識點彙總篇
for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                System.out.println("i=" + i + ",j=" + j);
                if (j == 5)
                    return;
            }
        }      

View Code

3)

java基礎 小知識點彙總篇
java基礎 小知識點彙總篇
boolean isStop=false;
            for (int i = 0; i < 10&&!isStop; i++) {
            for (int j = 0; j < 10; j++) {
                System.out.println("i=" + i + ",j=" + j);
                if (j == 5){
                    isStop=true;
                    break;
                }
            }
        }      

View Code

6、當⼀一個對象被當作參數傳遞到⼀一個⽅方法後,此⽅方法可改變這個對象的屬性,并可傳回變化後的結果,那麼這⾥裡里到底是值傳遞還是引⽤用傳遞?

其實java都是值傳遞

基本資料類型:是将變量的一個副本傳遞到方法中,方法中如何操作該變量副本,都不會改變原變量的值

引用類型:是将引用的拷貝,傳遞給方法,方法操作變量時會找到儲存在該位址的變量,對其進行操作,是以内容會改變。但是将該引用指派,是不會影響原來的對象的

java基礎 小知識點彙總篇
java基礎 小知識點彙總篇
public class MainTest {
    public static void main(String[] args) {
        int a = 5;
        User u=new User();
        test(a,u);
        System.out.println("a:"+a + " user age:" +u.getAge() );
    }

    public static void test(int a, User u) {
        a++;
        u.setAge(u.getAge()+1);
    }
}
class User {
    int age = 3;

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}      

View Code

 7、重載(Overload)和重寫(Override)的差別。重載的⽅方法能否根據傳回 類型進⾏行行區分嗎?

重寫的規則:

    • 重寫方法的參數清單必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載
    • 重寫方法的通路修飾符一定要大于被重寫方法的通路修飾符(public>protected>default>private
    • 重寫的方法的傳回值必須和被重寫的方法的傳回一緻
    • 重寫的方法所抛出的異常必須和被重寫方法的所抛出的異常一緻,或者是其子類
    • 被重寫的方法不能為private,否則在其子類中隻是新定義了一個方法,并沒有對其進行重寫
    • 靜态方法不能被重寫為非靜态的方法(會編譯出錯)

重載的規則:

    • 在使用重載時隻能通過相同的方法名、不同的參數形式實作。不同的參數類型可以是不同的參數類型,不同的參數個數,不同的參數順序(參數類型必須不一樣)
    • 不能通過通路權限、傳回類型、抛出的異常進行重載
    • 方法的異常類型和數目不會對重載造成影響

8)通路修飾符的作用?

控制通路

                               類    包  子類  其他包

        public     ∨    ∨     ∨     ∨          (對任何人都是可用的)

        protect   ∨    ∨     ∨     ×    (繼承的類可以通路以及和private一樣的權限)

        default    ∨   ∨      ×     ×    (包通路權限,即在整個包内均可被通路)

        private    ∨   ×       ×     ×    (除類型建立者和類型的内部方法之外的任何人都不能通路的元素)

9)char變量能不能存儲一個中文漢字,為什麼?

不能

Java 的char用兩位元組存儲,表示範圍從 \'\u0000\' 到 \'\uffff\' ,也就是從0到65535。事實上,一個 char不能表示65535個字元,因為隻有U+0000 到 U+D7FF 和 U+E000 到U+FFFF能用來表示 一個完整的字元,這些叫做 BMP,另外的作為high surrogate和 low surrogate 拼接組成由4位元組表 示的字元。

在UTF-16編碼中,大于U+10000碼位将被編碼為一對16比特長的碼元,即按4個位元組編碼,此時char無法表示。utf16編碼格式

是以Java的char隻能表示utf­16中的bmp部分字元。對于CJK(中日韓統一表意文字)部分擴充字元集則無法表示

10)抽象類和接口的異同?

從語言層面上:

  • 抽象類可以提供成員方法的實作細節,而接口中隻能存在public abstract 方法
  • 抽象類中的成員變量可以是各種類型的,而接口中的成員變量隻能是public static final類型的
  • 接口中不能含有靜态代碼塊以及靜态方法,而抽象類可以有靜态代碼塊和靜态方法
  • 一個類隻能繼承一個抽象類,而一個類卻可以實作多個接口

設計層面上:

  • 抽象類是對一種事物的抽象,即對類抽象,而接口是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是接口卻是對類局部(行為)進行抽象。舉個簡單的例子,飛機和鳥是不同類的事物,但是它們都有一個共性,就是都會飛。那麼在設計的時候,可以将飛機設計為一個類Airplane,将鳥設計為一個類Bird,但是不能将 飛行 這個特性也設計為類,是以它隻是一個行為特性,并不是對一類事物的抽象描述。此時可以将 飛行 設計為一個接口Fly,包含方法fly( ),然後Airplane和Bird分别根據自己的需要實作Fly這個接口。然後至于有不同種類的飛機,比如戰鬥機、民用飛機等直接繼承Airplane即可,對于鳥也是類似的,不同種類的鳥直接繼承Bird類即可。從這裡可以看出,繼承是一個 "是不是"的關系,而 接口 實作則是 "有沒有"的關系。如果一個類繼承了某個抽象類,則子類必定是抽象類的種類,而接口實作則是有沒有、具備不具備的關系,比如鳥是否能飛(或者是否具備飛行這個特點),能飛行則可以實作這個接口,不能飛行就不實作這個接口
  • 設計層面不同,抽象類作為很多子類的父類,它是一種模闆式設計。而接口是一種行為規範,它是一種輻射式設計。什麼是模闆式設計?最簡單例子,大家都用過ppt裡面的模闆,如果用模闆A設計了ppt B和ppt C,ppt B和ppt C公共的部分就是模闆A了,如果它們的公共部分需要改動,則隻需要改動模闆A就可以了,不需要重新對ppt B和ppt C進行改動。而輻射式設計,比如某個電梯都裝了某種報警器,一旦要更新報警器,就必須全部更新。也就是說對于抽象類,如果需要添加新的方法,可以直接在抽象類中添加具體的實作,子類可以不進行變更;而對于接口則不行,如果接口進行了變更,則所有實作這個接口的類都必須進行相應的改動

11、面向對象的特征?

抽象

忽略一個主題中與目前目标無關的東西,專注的注意與目前目标有關的方面.(就是把現實世界中的某一類東西,提取出來,用程式代碼表示,抽象出來的一般叫做類或者接口).抽象并不打算了解全部問題,而是選擇其中的一部分,暫時不用部分細節.抽象包括兩個方面,一個資料抽象,而是過程抽象.

 資料抽象 -->表示世界中一類事物的特征,就是對象的屬性.比如鳥有翅膀,羽毛等(類的屬性)

過程抽象 -->表示世界中一類事物的行為,就是對象的行為.比如鳥會飛,會叫(類的方法)

封裝

封裝就是把過程和資料包圍起來,對資料的通路隻能通過特定的界面.如私有變量,用set,get方法擷取   

繼承

一種聯結類的層次模型,并且允許和鼓勵類的重用,提供一種明确表達共性的方法.對象的一個新類可以從現有的類中派生,這個過程稱為類繼承.新類繼承了原始類的特性,新類稱為原始類的派生類(子類),原始類稱為新類的基類(父類).派生類可以從它的父類哪裡繼承方法和執行個體變量,并且類可以修改或增加新的方法使之更适合特殊的需要.是以可以說,繼承為了重用父類代碼,同時為實作多态性作準備.

多态

多态是指允許不同類的對象對同一消息做出響應.多态性包括參數化多态性和包含多态性.多态性語言具有靈活/抽象/行為共享/代碼共享的優勢,很好的解決了應用程式函數同名問題.總的來說,方法的重寫,重載與動态連結構成多态性.java引入多态的概念原因之一就是彌補類的單繼承帶來的功能不足.

動态連結 -->對于父類中定義的方法,如果子類中重寫了該方法,那麼父類類型的引用将調用子類中的這個方法,這就是動态連結

12、靜态嵌套類(Static Nested Class)和内部類(Inner Class)的不不同?

嵌套類分為靜态嵌套類 和 非靜态嵌套類。而非靜态内部類又稱為内部類

内部類包括:成員内部類,局部内部類,匿名内部類

靜态嵌套類和内部類的差別:靜态嵌套類隻能通路靜态變量。内部類既可以通路非靜态變量,又可以通路靜态變量

13、Java 中會存在記憶體洩漏漏嗎,請簡單描述

存在

對于應用程式來說,當對象已經不再被使用,但是Java的垃圾回收器不能回收它們的時候,就産生了記憶體洩露

防止記憶體洩漏:

    1. 使用List、Map等集合時,在使用完成後指派為null
    2. 使用大對象時,在用完後指派為null
    3. 目前已知的jdk1.6的substring()方法會導緻記憶體洩露
    4. 避免一些死循環等重複建立或對集合添加元素,撐爆記憶體
    5. 簡潔資料結構、少用靜态集合等
    6. 及時的關閉打開的檔案,socket句柄等
    7. 多關注事件監聽(listeners)和回調(callbacks),比如注冊了一個listener,當它不再被使用的時候,忘了登出該listener,可能就會産生記憶體洩露

14、抽象的(abstract)⽅方法是否可同時是靜态的(static),是否可同時是本地 ⽅方法(native),是否可同時被synchronized修飾?

abstract:用來聲明抽象方法,抽象方法沒有方法體,不能被直接調用,必須在子類overriding後才能使用

static:用來聲明靜态方法,靜态方法可以被類及其對象調用

native:用來聲明本地方法,該方法的實作由非java 語言實作,比如C。一般用于java與外環境互動,或與作業系統互動

synchronized:用于防止多個線程同時調用一個對象的該方法,與static連用可防止多個線程同時調用一個類的該方法

static與abstract不能同時使用:用static聲明方法表明這個方法在不生成類的執行個體時可直接被類調用,而abstract方法不能被調用,兩者沖突

native與abstract不能同時使用: 因為 native 暗示這些方法是有實作體的,隻不過這些實作體是非java 的,但是abstract卻顯然的指明這些方法無實作體

abstract與synchronized不能同時使用: 從synchronized的功能也可以看出,用synchronized的前提是該方法可以被直接調用,顯然和abstract連用

 15、闡述靜态變量量和執行個體變量的差別

 文法上:

     靜态變量:需要static修飾

     執行個體變量:不需要static修飾

 被誰所有:

     靜态變量:屬于類

     執行個體變量:屬于對象執行個體

 初始化時間:

     靜态變量:加載類的時候,初始化

     執行個體變量:建立類的對象時

 存儲位置:

     靜态變量:方法區(jdk1.8 元空間)

     執行個體變量:堆

 16、是否可以從⼀一個靜态(static)⽅方法内部發出對⾮非靜态(non-static)⽅方法 的調⽤用?

不能

但是 從非靜态方法内,可以調用靜态方法

17、接口是否可繼承(extends)接口?抽象類是否可實作(implements)接口?抽象類是否可繼承具體類(concrete class)?

接口可以extends接口

抽象類可以implements接口

抽象類可以extends具體類

18、 一個".java"源⽂檔案中是否可以包含多個類(不不是内部類)?有什什麼限制?

可以包含多個類

但是隻能有一個public修飾的,并且該類要與檔案名相同

JVM虛拟機執行個體通過調用某個類的main()來執行程式,這個main()必須時public static void 并接受一個字元串作為參數,但是該類不一定是public類

 19、 Anonymous Inner Class(匿匿名内部類)是否可以繼承其它類?是否可以實 現接口?

匿名内部類在實作時必須借助一個類或一個接口,若從這個層次上講它是可以繼承其他類也可以實作接口的,但若是通過extends或implements關鍵字那是不可能的

20、Java 中的final關鍵字有哪些⽤用法?

http://www.cnblogs.com/amei0/p/8073853.html

21、Error和Exception有什麼差別?

http://www.cnblogs.com/amei0/p/4591770.html

22、 try{}裡有一個return語句句,那麼緊跟在這個try後的finally{}裡的代碼會不會被執行?什麼時候被執行,在return前還是後?如果finally{}裡有return,try{}裡的return會不會執行?如果try裡分别傳回值int a=1;Map map; 在finally{}裡對以上傳回值a,map做了修改。那麼最終的傳回會被影響嗎?

 try{}裡有一個return語句句,那麼緊跟在這個try後的finally{}裡的代碼會不會被執行:finally{}代碼塊始終被執行

在return前還是後:在return後

如果finally{}裡有return,try{}裡的return會不會執行?:不會

如果try裡分别傳回值int a=1;Map map; 在finally{}裡對以上傳回值a,map做了修改。那麼最終的傳回會被影響嗎?:a不會被影響,map會被引用(值傳遞&引用傳遞)

https://www.cnblogs.com/lanxuezaipiao/p/3440471.html

23、Java語言如何進行異常處理,關鍵字:throws、throw、try、catch、 finally分别如何使用?

throws是抛出異常的聲明,說明有抛異常的可能性,但不一定會抛異常

throw是抛出異常

try是将會發生異常的語句括起來,進而進行異常的處理

catch是如果有異常就會執行他裡面的語句

而finally不論是否有異常都會進行執行的語句

24、闡述final、finally、finalize的差別

  • final:可修飾類,方法,變量,參數,表示不可變
  • finally:通常和try catch搭配使用,保證不管有沒有發生異常,資源都能夠被釋放(釋放連接配接、關閉IO流)
  • Finalize:是object類中的一個方法,子類可以重寫finalize()方法實作對資源的回收。垃圾回收隻負責回收記憶體,并不負責資源的回收,資源回收要由程式員完成,Java虛拟機在垃圾回收之前會先調用垃圾對象的finalize方法用于使對象釋放資源(如關閉連接配接、關閉檔案),之後才進行垃圾回收,這個方法一般不會顯示的調用,在垃圾回收時垃圾回收器會主動調用。

25、List、Set、Map是否繼承自Collection接口?

list,set是

map不是

集合詳解:http://www.cnblogs.com/amei0/p/4589243.html

26、Collection和Collections的差別?

java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實作。Collection接口的意義是為各種具體的集合提供了最大化的統一操作方式

 Collection  

├List  

│├LinkedList  

│├ArrayList  

│└Vector  

│ └Stack  

└Set

Collections則是集合類的一個工具類/幫助類,其中提供了一系列靜态方法,用于對集合中元素進行排序、搜尋以及線程安全等各種操作。常用方法如下

Collections.sort(list) 排序

Collections.Shuffling(list) 随機排序

Collections.reverse(list)  反轉

Collections.copy(list,li) 複制

Collections.min(list) 擷取集合中最小元素

27、 TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort() 方法如何比較元素?  

TreeSet:要求存放的對象所屬的類必須實作Comparable接口,該接口提供了比較元素的compareTo()方法,當插入元素時會回調該方法比較元素的大小

TreeMap:要求存放的鍵值對映射的鍵必須實作Comparable接口進而根據鍵對元素進行排序

Collections工具類:的sort方法有兩種重載的形式,第一種要求傳入的待排序容器中存放的對象比較實作Comparable接口以實作元素的比較;第二種不強制性的要求容器中的元素必須可比較,但是要求傳入第二個參數,參數是Comparator接口的子類型(需要重寫compare方法實作元素的比較),相當于一個臨時定義的排序規則,其實就是通過接口注入比較元素大小的算法,也是對回調模式的應用(Java中對函數式程式設計的支援)

28、闡述 sleep(),wait(),yield()

sleep():

Thread類的方法,用于目前線程短暫休眠

用來暫停線程的執行,将CPU放給線程排程器

線程執行sleep()方法後轉入阻塞(blocked)狀态,會給低優先級的線程以運作的機會,休眠時間結束後,直接進入就緒狀态。

不釋放對象鎖,如果有synchronized同步快,其他線程仍然不能通路共享資料

是一個靜态方法,它暫停的是目前執行的線程

如果其他的線程中斷了一個休眠的線程,sleep方法會抛出Interrupted Exception(為什麼要抛出該異常:https://www.ibm.com/developerworks/cn/java/j-jtp05236.html)

休眠的線程在喚醒之後不保證能擷取到CPU,它會先進入就緒态,與其他線程競争CPU

wait():

Object類的方法,用于線程間的通訊

執行wait()方法後轉入等待(阻塞狀态的一種)狀态,一直到被喚醒,被喚醒以後,先要獲得對象鎖,獲得鎖後進入就緒狀态。

釋放對象鎖

wait方法是針對一個被同步代碼塊加鎖的對象

在使用這個方法時,必須處于synchronized代碼塊或者synchronized方法中,否則就會抛出IllegalMonitorStateException異常,這是因為調用這個方法前必須拿到目前對象的螢幕monitor對象,也就是說notify/notifyAll和wait方法依賴于monitor對象

yield():

Thread類的方法

執行yield()方法後轉入就緒(ready)狀态,讓有同樣優先級的正在等待的線程有機會執行

yield方法不保證目前的線程會暫停或者停止,但是可以保證目前線程在調用yield方法時會放棄CPU

java基礎 小知識點彙總篇

 29、 synchronized關鍵字的用法

http://www.cnblogs.com/amei0/p/5051003.html

30、什麼是線程池(thread pool)?

http://www.cnblogs.com/amei0/p/8422800.html

31、線程的基本狀态以及狀态之間的關系?

http://www.cnblogs.com/amei0/p/8473613.html

32、簡述synchronized 和java.util.concurrent.locks.Lock的異同?

http://www.cnblogs.com/amei0/p/8475972.html

33、Java中如何實作序列化,有什麼意義

http://www.cnblogs.com/amei0/p/8480260.html

34、 Java中有幾種類型的流?

http://www.cnblogs.com/amei0/p/8480663.html

35、闡述JDBC操作資料庫的步驟

http://www.cnblogs.com/amei0/p/8480776.html

36、 使⽤用JDBC操作資料庫時,如何提升讀取資料的性能?如何提升更更新資料的性能?

37、 在進行資料庫程式設計時,連接配接池有什麼作用?

http://www.cnblogs.com/amei0/p/8482877.html

38、 什麼是DAO模式?

       DAO(Data Access Objects)設計模式是屬于J2EE體系架構中的資料層的操作。

  DAO設計模式提供了一種通用的模式,來簡化大量的代碼,增強程式的可移植性。

       DAO組成

在這個模式中DAO主要完成資料的操作,用戶端依靠DAO接口進行操作,服務端要将接口進行具體實作。DAO的主要組成由以下幾個部分組成。

        1、DatabaseConnection:專門負責資料庫打開與關閉操作的類。

        2、VO:主要由屬性、setter、getter方法,VO類中的屬性與資料表中的字段相對應。每一個VO對象相當于表中的一條記錄。

        3、DAO接口:主要定義資料庫操作的接口,定義資料庫的原子性操作,如增删改,按ID查詢。

        4、Impl:DAO的具體實作類,完成具體的資料庫操作,但是不負責資料庫的打開和關閉,接口類的名稱首字母用“I”,表示其是一個接口。

        5、Proxy:代理實作類。主要完成資料庫的打開和關閉,并調用Impl類對象(真實對象類)的操作,之是以增加代理類是為了以後的拓展,如果一個程式可以A-B,那麼中間最好加一個過渡,使用A-C-B的形式,可以有效減少程式的耦合度,使開發結構更加清晰。

        6、Factory:工廠類,通過工廠類取得一個DAO的執行個體化對象,編寫工廠類也是為了降低代碼的耦合度,工廠類産生執行個體的方法通常是靜态函 數,這樣一來就可以通過工廠類名直接生成執行個體

39、 事務的ACID是指什麼?

原子性(Atomic):組成事務處理的語句形成了一個邏輯單元,不能隻執行其中的一部分

一緻性(Consistency):在事務處理執行之前和之後,資料是一緻的

隔離性(Isolation):一個事務處理對另一個事務處理沒有影響

持久性(Durabiliy):當事務處理成功執行到結束的時候,其效果在資料庫中被永久紀錄下來

http://www.cnblogs.com/amei0/p/4512573.html

40、JDBC中如何進行事務處理?

設定事務的送出方式為非自動送出:

conn.setAutoCommit(false);

将需要添加事務的代碼放入try,catch塊中

在try塊内添加事務的送出操作,表示操作無異常,送出事務

conn.commit()

在catch塊内添加復原事務,表示操作出現異常,撤銷事務:

conn.rollback();

41、JDBC能否處理理Blob和Clob?

可以

 CLOB:

Character Large Object 字元大對象

在一些資料庫系統裡,也使用Text 作為CLOB的别名,比如SQL Server

使用CHAR來儲存資料。 如:儲存XML文檔

BLOB:

binary large object 二進制大對象

 是一個可以存儲二進制檔案的容器

 使用二進制儲存資料。 如:儲存圖檔

42、 簡述正規表達式及其用途

正規表達式就是記錄文本規則的代碼

43、 Java中是如何支援正規表達式操作的

Java中的String類提供了支援正規表達式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split()

Java中可以用Pattern類表示正規表達式對象,它提供了豐富的API進行各種正規表達式操作

String str = "北京市(朝陽區)(西城區)(海澱區)";  
        Pattern p = Pattern.compile(".*?(?=\\()");  
        Matcher m = p.matcher(str);  
        if(m.find()) {  
            System.out.println(m.group());  
        }        

44、 獲得一個類的類對象有哪些方式?

new:

new操作符的本意是配置設定記憶體。程式執行到new操作符時, 首先去看new操作符後面的類型,因為知道了類型,才能知道要配置設定多大的記憶體空間。配置設定完記憶體之後,再調用構造函數,填充對象的各個域,這一步叫做對象的初始化,構造方法傳回後,一個對象建立完畢

反射

  a:Student  stu = (Student)Class.forName("根路徑.Student").newInstance()

   b:Student stu = Student.class.newInstance()

差別:

  > Class類的newInstance隻能觸發無參數的構造方法建立對象,而構造器類的newInstance能觸發有參數或者任意參數的構造方法來建立對象。

  > Class類的newInstance需要其構造方法是共有的或者對調用方法可見的,而構造器類的newInstance可以在特定環境下調用私有構造方法來建立對象。

  > Class類的newInstance抛出類構造函數的異常,而構造器類的newInstance包裝了一個InvocationTargetException異常。  

clone

先配置設定記憶體,将原來對象記憶體裡的内容copy一份。不會調用構造方法

反序列化

45、什麼是UML

 UML這三個字母的全稱是Unified Modeling Language,直接翻譯就是統一模組化語言,簡單地說就是一種有特殊用途的語言

 UML的分類

 結構型的圖(Structure Diagram)

 類圖(Class Diagram)

 對象圖(Object Diagram)

 構件圖(Component Diagram)

 部署圖(Deployment Diagram)

 包圖(Package Diagram)

 行為型的圖(Behavior Diagram)

 活動圖(Activity Diagram)

 狀态機圖(State Machine Diagram)

 順序圖(Sequence Diagram)

 通信圖(Communication Diagram)

 用例圖(Use Case Diagram)

 時序圖(Timing Diagram)

詳解:http://www.360doc.com/content/15/0322/16/14009801_457172619.shtml

46、闡述Servlet

http://www.cnblogs.com/amei0/p/8485140.html

47、常用的Web伺服器有哪些

IIS

IIS服務是Windows産品自帶的一種免費的Web伺服器,安裝配置簡單,主要解析的是ASP程式代碼,對于小型的、利用ASP程式設計的項目,可以采用其作為Web伺服器。一般可以跟Apache整合起來使用。這種服務在配置過程中需要注意權限的問題。

Apache

世界排名第一、免費開源的Web伺服器軟體,可以安裝運作在絕大多數的計算機平台上,支援大多數語言開發的B/S結構軟體。一般情況下Apache與其他的Web伺服器整合使用,功能非常強大,尤其在靜态頁面處理速度上表現優異。

Tomcat

Tomcat是Apache下的一個核心子項目,是目前使用量最大的免費的JAVA伺服器。主要處理的是JSP頁面和Servlet檔案。Tomcat常常與Apache整合起來使用,Apache處理靜态頁面,比如Html頁面,而Tomcat負責編譯處理JSP頁面與Servlet。在靜态頁面處理能力上,Tomcat不如Apache。由于Tomcat是開源免費、功能強大易用的,很多JAVA的初學者都喜歡用它。當然,也有不少中小企業用其與Apache整合做Web伺服器。熟練掌握Tomcat的使用是非常必要的。可以這麼說,熟練安裝配置Tomcat是軟體測試工程師的必備技能。

Jboss

Jboss是RedHat的産品(RedHat于2006年收購了Jboss)。與Tomcat相比,Jboss要專業些。JBoss是一個管理EJB的容器和伺服器,支援EJB 1.1、EJB 2.0和EJB3.0的規範,本身不支援JSP/Servlet,需要與Tomcat內建才行。一般我們下載下傳的都是這兩個伺服器的內建版。與Tomcat一樣,Jboss也是開源免費的。Jboss在性能上的表現相對于單個Tomcat要好些。當然并非是絕對的,因為Tomcat做成叢集,威力不容忽視。Jboss沒有圖形界面,也不需要安裝,下載下傳後解壓,配置好環境變量後即可使用。

Resin

Resin是CAUCHO公司的産品,它也是一個常用的、支援JSP/Servlet的引擎,速度非常快,不僅在表現在動态内容的處理,還包括靜态頁面的處理上,Tomcat、Jboss在靜态頁面上的處理能力明顯不足,一般都需要跟Apache進行整合使用。而Resin可以單獨使用,當然Resin也可以與Apache,IIS整合使用。

Weblogic

WebLogic是BEA的産品,用于開發、內建、部署和管理大型分布式Web應用、網絡應用和資料庫應用的Java應用伺服器。将Java的動态功能和Java Enterprise标準的安全性引入大型網絡應用的開發、內建、部署和管理之中。與前面的幾種小型Web伺服器相比,更具專業性,但安裝配置也更為複雜。WebLogic是一個商業的軟體,使用是收費的,費用還挺貴的。

WebSphere

WebSphere是IBM的産品,是網際網路的基礎架構軟體,也就是我們通常所說的中間件。它使企業能夠開發、部署和內建新一代電子商務應用(如B2B的電子交易),并且支援從簡單的Web釋出到企業級事務處理的商務應用。比WebLogic更專業,當然價格也更貴。一般部署在IBM專業的伺服器上

47、Java是如何實作跨平台的?

跨平台是怎樣實作的呢?這就要談及Java虛拟機(Java Virtual Machine,簡稱 JVM)。 JVM也是一個軟體,不同的平台有不同的版本。我們編寫的Java源碼

,編譯後會生成一種 .class 檔案,稱為位元組碼檔案。Java虛拟機就是負責将位元組碼⽂檔案翻譯 成特定平台下的機器器碼然後運⾏行行。也就是說,隻要在不同平台上安裝對應的 JVM,就可以運⾏行行位元組碼⽂檔案,運⾏行行我們編寫的Java程式。 ⽽而這個過程中,我們編寫的Java程式沒有做任何改變,僅僅是通過JVM這⼀一”中間 層“,就能在不同平台上運⾏行行,真正實作了了”⼀一次編譯,到處運⾏行行“的⽬目的。 JVM是⼀一個”橋梁梁“,是⼀一個”中間件“,是實作跨平台的關鍵,Java代碼⾸首先被編譯 成位元組碼⽂檔案,再由JVM将位元組碼⽂檔案翻譯成機器器語⾔言,從⽽而達到運⾏行行Java程式 的⽬目的。 注意:編譯的結果不是⽣生成機器器碼,⽽而是⽣生成位元組碼,位元組碼不能直接運⾏行行,必 須通過JVM翻譯成機器器碼才能運⾏行行。不同平台下編譯⽣生成的位元組碼是⼀一樣的,但 是由JVM翻譯成的機器器碼卻不⼀一樣。 是以,運⾏行行Java程式必須有JVM的⽀支援,因為編譯的結果不是機器器碼,必須要經 過JVM的再次翻譯才能執⾏行行。即使你将Java程式打包成可執⾏行行⽂檔案(例例如 .exe),仍然需要JVM的⽀支援。 注意:跨平台的是Java程式,不是JVM。JVM是用C/C++開發的,是編譯後的機 器器碼,不能跨平台,不同平台下需要安裝不同版本的JVM

48、了解spiring ioc aop

IOC:http://blog.csdn.net/qq_22654611/article/details/52606960/

49、comparable與comparator的差別?

Comparable: 内比較器 若一個類實作了 Comparable 接口,就意味着 “該類支援排序”。

Comparator:  外比較器 我們若需要控制某個類的次序,可以建立一個 “該類的比較器” 來進行排序。适用場景:

1)一個對象沒有實作Comparable接口,但是需要比較

2)一個對象實作了Comparable接口,但是開發者認為compareTo方法中的比較方式并不是自己想要的那種比較方式