java基礎 小知識點彙總篇

一、&和&& |和|| 的區別?html

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

a&&b,會執行a,若是a false,則不執行b,直接返回false程序員

二、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設計模式

三、switch 是否能做⽤用在byte 上,是否能做⽤用在long 上,是否能做⽤用在String 上?安全

switch表達式後面的數據類型只能是byte,short,char,int四種整形類型,枚舉類型和java.lang.String類型(從java 7才容許),不能是boolean類型服務器

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

2<<2

左移至關於乘以2,右移至關於除以2

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

1)

   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)

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)

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

六、當⼀一個對象被看成參數傳遞到⼀一個⽅方法後,此⽅方法可改變這個對象的屬性,並可返回變化後的結果,那麼這⾥裏里究竟是值傳遞仍是引⽤用傳遞?

其實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

 七、重載(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進行改動。而輻射式設計,好比某個電梯都裝了某種報警器,一旦要更新報警器,就必須所有更新。也就是說對於抽象類,若是須要添加新的方法,能夠直接在抽象類中添加具體的實現,子類能夠不進行變動;而對於接口則不行,若是接口進行了變動,則全部實現這個接口的類都必須進行相應的改動

十一、面向對象的特徵?

抽象

忽略一個主題中與當前目標無關的東西,專一的注意與當前目標有關的方面.(就是把現實世界中的某一類東西,提取出來,用程序代碼表示,抽象出來的通常叫作類或者接口).抽象並不打算了解所有問題,而是選擇其中的一部分,暫時不用部分細節.抽象包括兩個方面,一個數據抽象,而是過程抽象.
 數據抽象 -->表示世界中一類事物的特徵,就是對象的屬性.好比鳥有翅膀,羽毛等(類的屬性)
過程抽象 -->表示世界中一類事物的行爲,就是對象的行爲.好比鳥會飛,會叫(類的方法)

封裝

封裝就是把過程和數據包圍起來,對數據的訪問只能經過特定的界面.如私有變量,用set,get方法獲取   

繼承

一種聯結類的層次模型,而且容許和鼓勵類的重用,提供一種明確表達共性的方法.對象的一個新類能夠從現有的類中派生,這個過程稱爲類繼承.新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),原始類稱爲新類的基類(父類).派生類能夠從它的父類哪裏繼承方法和實例變量,而且類能夠修改或增長新的方法使之更適合特殊的須要.所以能夠說,繼承爲了重用父類代碼,同時爲實現多態性做準備.

多態

多態是指容許不一樣類的對象對同一消息作出響應.多態性包括參數化多態性和包含多態性.多態性語言具備靈活/抽象/行爲共享/代碼共享的優點,很好的解決了應用程序函數同名問題.總的來講,方法的重寫,重載與動態連接構成多態性.java引入多態的概念緣由之一就是彌補類的單繼承帶來的功能不足.
動態連接 -->對於父類中定義的方法,若是子類中重寫了該方法,那麼父類類型的引用將調用子類中的這個方法,這就是動態連接

十二、靜態嵌套類(Static Nested Class)和內部類(Inner Class)的不不同?

嵌套類分爲靜態嵌套類 和 非靜態嵌套類。而非靜態內部類又稱爲內部類

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

靜態嵌套類和內部類的區別:靜態嵌套類只能訪問靜態變量。內部類既能夠訪問非靜態變量,又能夠訪問靜態變量

1三、Java 中會存在內存泄漏漏嗎,請簡單描述

存在

對於應用程序來講,當對象已經再也不被使用,可是Java的垃圾回收器不能回收它們的時候,就產生了內存泄露

防止內存泄漏:

    1. 使用List、Map等集合時,在使用完成後賦值爲null
    2. 使用大對象時,在用完後賦值爲null
    3. 目前已知的jdk1.6的substring()方法會致使內存泄露
    4. 避免一些死循環等重複建立或對集合添加元素,撐爆內存
    5. 簡潔數據結構、少用靜態集合等
    6. 及時的關閉打開的文件,socket句柄等
    7. 多關注事件監聽(listeners)和回調(callbacks),好比註冊了一個listener,當它再也不被使用的時候,忘了註銷該listener,可能就會產生內存泄露

1四、抽象的(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連用

 1五、闡述靜態變量量和實例變量的區別

 語法上
     靜態變量:須要static修飾
     實例變量:不須要static修飾
 被誰全部
     靜態變量:屬於類
     實例變量:屬於對象實例
 初始化時間
     靜態變量:加載類的時候,初始化
     實例變量:建立類的對象時
 存儲位置
     靜態變量:方法區(jdk1.8 元空間)
     實例變量:堆

 1六、是否能夠從⼀一個靜態(static)⽅方法內部發出對⾮非靜態(non-static)⽅方法 的調⽤用?

不能

可是 從非靜態方法內,能夠調用靜態方法

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

接口能夠extends接口

抽象類能夠implements接口

抽象類能夠extends具體類

1八、 一個".java"源⽂文件中是否能夠包含多個類(不不是內部類)?有什什麼限制?

能夠包含多個類

可是隻能有一個public修飾的,而且該類要與文件名相同

JVM虛擬機實例經過調用某個類的main()來執行程序,這個main()必須時public static void 並接受一個字符串做爲參數,可是該類不必定是public類

 1九、 Anonymous Inner Class(匿匿名內部類)是否能夠繼承其它類?是否能夠實 現接口?

匿名內部類在實現時必須藉助一個類或一個接口,若從這個層次上講它是能夠繼承其餘類也能夠實現接口的,但如果經過extends或implements關鍵字那是不可能的

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

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

2一、Error和Exception有什麼區別?

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

2二、 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會被引用(值傳遞&引用傳遞)

http://www.javashuo.com/article/p-hmaxztnf-ec.html

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

throws是拋出異常的聲明,說明有拋異常的可能性,但不必定會拋異常
throw是拋出異常
try是將會發生異常的語句括起來,從而進行異常的處理
catch是若是有異常就會執行他裏面的語句
而finally不管是否有異常都會進行執行的語句

2四、闡述final、finally、finalize的區別

  • final:可修飾類,方法,變量,參數,表示不可變
  • finally:一般和try catch搭配使用,保證無論有沒有發生異常,資源都可以被釋放(釋放鏈接、關閉IO流)
  • Finalize:是object類中的一個方法,子類能夠重寫finalize()方法實現對資源的回收。垃圾回收只負責回收內存,並不負責資源的回收,資源回收要由程序員完成,Java虛擬機在垃圾回收以前會先調用垃圾對象的finalize方法用於使對象釋放資源(如關閉鏈接、關閉文件),以後才進行垃圾回收,這個方法通常不會顯示的調用,在垃圾回收時垃圾回收器會主動調用。

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

list,set是

map不是

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

2六、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) 獲取集合中最小元素

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

TreeSet:要求存放的對象所屬的類必須實現Comparable接口,該接口提供了比較元素的compareTo()方法,當插入元素時會回調該方法比較元素的大小
TreeMap:要求存放的鍵值對映射的鍵必須實現Comparable接口從而根據鍵對元素進行排序
Collections工具類:的sort方法有兩種重載的形式,第一種要求傳入的待排序容器中存放的對象比較實現Comparable接口以實現元素的比較;第二種不強制性的要求容器中的元素必須可比較,可是要求傳入第二個參數,參數是Comparator接口的子類型(須要重寫compare方法實現元素的比較),至關於一個臨時定義的排序規則,其實就是經過接口注入比較元素大小的算法,也是對回調模式的應用(Java中對函數式編程的支持)

2八、闡述 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

 

 2九、 synchronized關鍵字的用法

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

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

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

3一、線程的基本狀態以及狀態之間的關係?

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

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

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

3三、Java中如何實現序列化,有什麼意義

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

3四、 Java中有幾種類型的流?

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

3五、闡述JDBC操做數據庫的步驟

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

3六、 使⽤用JDBC操做數據庫時,如何提高讀取數據的性能?如何提高更更新數據的性能?

3七、 在進行數據庫編程時,鏈接池有什麼做用?

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

3八、 什麼是DAO模式?

       DAO(Data Access Objects)設計模式是屬於J2EE體系架構中的數據層的操做。
  DAO設計模式提供了一種通用的模式,來簡化大量的代碼,加強程序的可移植性。
       DAO組成

在這個模式中DAO主要完成數據的操做,客戶端依靠DAO接口進行操做,服務端要將接口進行具體實現。DAO的主要組成由如下幾個部分組成。
        一、DatabaseConnection:專門負責數據庫打開與關閉操做的類。
        二、VO:主要由屬性、setter、getter方法,VO類中的屬性與數據表中的字段相對應。每個VO對象至關於表中的一條記錄。
        三、DAO接口:主要定義數據庫操做的接口,定義數據庫的原子性操做,如增刪改,按ID查詢。
        四、Impl:DAO的具體實現類,完成具體的數據庫操做,可是不負責數據庫的打開和關閉,接口類的名稱首字母用「I」,表示其是一個接口。
        五、Proxy:代理實現類。主要完成數據庫的打開和關閉,並調用Impl類對象(真實對象類)的操做,之因此增長代理類是爲了之後的拓展,若是一個程序能夠A-B,那麼中間最好加一個過渡,使用A-C-B的形式,能夠有效減小程序的耦合度,使開發結構更加清晰。
        六、Factory:工廠類,經過工廠類取得一個DAO的實例化對象,編寫工廠類也是爲了下降代碼的耦合度,工廠類產生實例的方法一般是靜態函 數,這樣一來就能夠經過工廠類名直接生成實例

3九、 事務的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();

4一、JDBC可否處理理Blob和Clob?

能夠
 CLOB:

Character Large Object 字符大對象
在一些數據庫系統裏,也使用Text 做爲CLOB的別名,好比SQL Server
使用CHAR來保存數據。 如:保存XML文檔

BLOB:

binary large object 二進制大對象
 是一個能夠存儲二進制文件的容器
 使用二進制保存數據。 如:保存圖片

4二、 簡述正則表達式及其用途

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

4三、 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());  
        }  

4四、 得到一個類的類對象有哪些方式?

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一份。不會調用構造方法

反序列化

4五、什麼是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

4六、闡述Servlet

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

4七、經常使用的Web服務器有哪些

IIS
IIS服務是Windows產品自帶的一種免費的Web服務器,安裝配置簡單,主要解析的是ASP程序代碼,對於小型的、利用ASP編程的項目,能夠採用其做爲Web服務器。通常能夠跟Apache整合起來使用。這種服務在配置過程當中須要注意權限的問題。
Apache
世界排名第1、免費開源的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.一、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專業的服務器上

4七、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

4八、理解spiring ioc aop

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

4九、comparable與comparator的區別?

Comparable: 內比較器 若一個類實現了 Comparable 接口,就意味着 「該類支持排序」。

Comparator:  外比較器 咱們若須要控制某個類的次序,能夠創建一個 「該類的比較器」 來進行排序。適用場景:

1)一個對象沒有實現Comparable接口,可是須要比較

2)一個對象實現了Comparable接口,可是開發者認爲compareTo方法中的比較方式並非本身想要的那種比較方式

相關文章
相關標籤/搜索