java中級面試題及答案_第1頁
java中級面試題及答案_第2頁
java中級面試題及答案_第3頁
java中級面試題及答案_第4頁
java中級面試題及答案_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

java中級面試題及答案XX

Java舍棄了C++的指針對存儲器地址的直接操作,程序運行

時,內(nèi)存由操作系統(tǒng)分配,這樣可以防止病毒通過指針侵入系統(tǒng)。

下面是關于java中級面試題及答案,希翼大家認真閱讀!

1、談談對面向?qū)ο蟮睦斫?;以及三大特征?/p>

面向?qū)ο笫腔谌f物皆對象這個觀點.把一個對象抽象成類,詳

細上就是把一個對象的靜態(tài)特征和動態(tài)特征抽象成屬性和方法,也就

是把一類事物的算法和數(shù)據(jù)構造封裝在一個類之中,程序就是多個對

象和互相之間的通信組成的。

比方把一個人看成一個對象,這個人就會有他的屬性和行為;他

有手、腳、嘴巴等就是他的屬性,或者他會說話、會走路、會吃飯

就是行為,同理我們也可以把這些都看成對象,所以一個對象是可

以由多個對象組成的。

面向?qū)ο缶哂蟹庋b性、繼承性、多態(tài)性。封裝就是隱蔽了對象

內(nèi)部不需要暴露的細節(jié),使得內(nèi)部細節(jié)的變動跟外界脫離,只依靠

接口發(fā)展通信;即不用管這個方法是怎么實現(xiàn)的,只要知道他可以實

現(xiàn)這個功能。封裝性降低了編程的復雜性.通過繼承使得新建一個

類變得容易,一個類繼承了父類,那末父類所有的非私有的方法和

公用屬性可以被這個類所調(diào)用。而繼承和實現(xiàn)接口所產(chǎn)生的多態(tài),

使得不同的類所產(chǎn)生的對象能夠?qū)ο嗤南⒆鞒霾煌姆错?,?/p>

在實現(xiàn)接口的情況下,同一個方法里的行為不同,極大地提高了代

碼的通用性.。

總之,面向?qū)ο蟮奶匦蕴岣吡舜笮统绦虻闹赜眯院涂删S護性。

2、String、StringBuffer>StringBuiIder的區(qū)別;

1.String對象是不可改變的。

2.如果要修改字符串而不創(chuàng)立新的對象,那末可以使用

StringBuilder類。例如,當在一個循環(huán)中將許多字符串聯(lián)接在一

起時,使用

StringBuilder類可以提升性能。

3.由于String的值一旦創(chuàng)立就不能再修改,所以稱它是恒定

的??此颇苄薷腟tring的方法實際上只是返回一個包含修改內(nèi)容

的新String0

4.

StringBuffer可改變的Unicode字符序列,允許并發(fā)操作,是

線程安全的。

5.StringBuilder:可改變的Unicode字符序列操作同

StringBuffer,只是不支持并發(fā)操作,非線程安全的。

6.不考慮線程安全前提下,StringBuilder性能最高,

StringBuffer次之,String比較差。為什么StringBuffer的性能

比String高?主要原因在于String類是不可變類,任何對String

引用指向的字符串作出的修改都會導致生成新的字符串(對象),而

對StringBuffer的修改那末不會導致新對象的產(chǎn)生。

那末為什么StringBuilder的性能比StringBuffer的高呢?這

那末與線程安全有關。StringBuilder是線程非安全的。

3、HashMap、LinkedHashMap、TreeMap的區(qū)別;

HashMap,LinkedHashMap,TreeMap都屬于Map

Map主要用于存儲鍵(key)值(value)對,根據(jù)鍵得到值,因此

鍵不允許鍵重復,但允許值重復。

HashMap是一個最常用的Map,它根據(jù)鍵的HashCode值存儲數(shù)

據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最

多只允許一條記錄的鍵為Null;允許多條記錄的值為NulljHashMap

不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap;可

能會導致數(shù)據(jù)的不一致。如果需要同步,可以用Collections的

synchronizedMap方法使HashMap具有同步的能力。

LinkedHashMap也是一個HashMap,但是內(nèi)部維持了一個雙向鏈

表,可以保持順序;

TreeMap不僅可以保持順序,而且可以用于排序;

詳細操作看文章……

4、ArrayListsLinkedList、vector的區(qū)別;

一、同步性

ArrayList,LinkedList是不同步的,而Vestor是同步的。所

以如果不要求線程安全的話,可以使用ArrayList或者LinkedList,

可以節(jié)省為同步而消耗的開消。但在多線程的情況下,就得使用

Vectoro固然,也可以通過一些方法包裝ArrayList,LinkedList,

使他們也到達同步,但效率可能會有所降低。

二、數(shù)據(jù)增長

從內(nèi)部實現(xiàn)機制來講ArrayList和Vector都是使用Object的

數(shù)組形式來存儲的。

當你向這兩種類型中增加元素的時候,如果元素的數(shù)目超出了

內(nèi)部數(shù)組的長度它們都需要擴展內(nèi)部數(shù)組的長度,Vector缺省情況

下自動增長原來一倍的數(shù)組長度;

ArrayList是原來的50%,所以最后你獲得的這個集合所占的空

間總是比你實際需要的要大。所以要在集合中保存大量的數(shù)據(jù)那末

使用Vector有一些優(yōu)勢。

三、檢索、插入、刪除對象的效率

ArrayList和Vector中,是用下標來檢索一個對象,或者在集

合的末尾插入、刪除一個對象的時間是一樣的。但是,如果在集

合的其他位置增加或者移除元素那末花費的時間會呈線形增長。

LinkedList中,在插入、刪除集合中任何位置的元素所花費的

時間都是一樣的,但它在查詢一個元素的時候比較慢。

普通大家都知道ArrayList和LinkedList的大致區(qū)別:

1.ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)構造,LinkedList

基于鏈表的數(shù)據(jù)構造。

2.對于隨機訪問get和set,ArrayList覺得優(yōu)于

LinkedList,因為LinkedList要挪移指針。

3.對于新增和刪除操作add和remove,LinedList比較占優(yōu)

勢,因為ArrayList要挪移數(shù)據(jù)。

5、抽象類與接口(interface)的區(qū)別;

1.abstractclass在Java語言中表示的是一種繼承關系,一

個類只能使用一次繼承關系。但是,一個類卻可以實現(xiàn)多個

interfaceo

2.在abstractclass中可以有自己的數(shù)據(jù)成員,也可以有非

abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被

修改的數(shù)據(jù)成員(也就是必須是staticfinal的,無非在

interface中普通不定義數(shù)據(jù)成員),所有的成員方法都是abstract

的。

3.abstractclass和interface所反映出的設計理念不同。其

實abstractclass表示的是“is-a〃關系,interface表示的是

“l(fā)ike-a”關系。

4.實現(xiàn)抽象類和接口的類必須實現(xiàn)其中的所有方法。抽象類中

可以有非抽象方法。接口中那末不能有實現(xiàn)方法。

5.接口中定義的變量默認是publicstaticfinal型,且必須

給其初值,所以實現(xiàn)類中不能重新定義,也不能改變其值。

6.抽象類中的變量默認是friendly型,其值可以在子類中重

新定義,也可以重新賦值。

7.接口中的方法默認都是public,abstract類型的。

7、多線程是什么?用什么實現(xiàn)?

多線程是為了同步完成多項任務,不是為了提高運行效率,而

是為了提高資源使用效率來提高系統(tǒng)的效率。線程是在同一時間需

要完成多項任務的時候?qū)崿F(xiàn)的。如:火車是一個進程,而車箱就是

線程,車箱脫離了火車是不能開動的,同理可以由多個車箱,那末

一個進程是有多個線程來提高效率的。

在JAVA中,要開始一個線程,有兩種方式。一是直接調(diào)用

Thread實例的start。方法,繼承Thread類;二是實現(xiàn)Runnable接

口,將Runable實例傳給一個Thread實例然后調(diào)用它的start。方

法。

實現(xiàn)同步也有兩種,一種是用同步方法,一種是用同步塊,

同步方法就是在方法返回類型后面加之synchronized,比

方:publicvoidsynchronizedadd(){...}同步塊就是直接

寫:synchronized(這里寫需要同步的對象){...}

8、概述一下SpringMVC的工作原理。

1、客戶端發(fā)出一個請求給web效勞器,web效勞器對請求發(fā)展

解析,如果匹配DispatcherServlet的請求映射路徑(在web.xml中

指定),web容器將請求轉(zhuǎn)交給DispatcherServlet.

2、DipatcherServlet接收到這個請求之后將根據(jù)請求的信息

(包括URL、Http方法、請求報文頭和請求參數(shù)Cookie等)以及

HandlerMapping的配置找到處理請求的處理器(Handler)。

3-4、DispatcherServlet根據(jù)HandlerMapping找到對應的

Handler,將處理權交給Handler(Handler將詳細的處理發(fā)展封裝),

再由詳細的HandlerAdapter對Handler發(fā)展詳細的調(diào)用。

5、Handler對數(shù)據(jù)處理完成以后將返回一個ModelAndView()對

象給DispatcherServleto

6、Handler返回的ModelAndView()只是一個邏輯視圖并非一

個正式的視圖,DispatcherSevlet通過ViewResolver將邏輯視圖

轉(zhuǎn)化為真正的視圖Viewo

7、Dispatcher通過model解析出ModelAndView()中的參數(shù)進

展解析最終展現(xiàn)出完整的view并返回給客戶端。

9、關于Spring,IOC和A0P的概念;

spring的優(yōu)點?

1.降低了組件之間的耦合性,實現(xiàn)了軟件各層之間的解耦

2.可以使用容易提供的眾多效勞,如事務管理,消息效勞等

3.容器提供單例模式支持

4.容器提供了AOP技術,利用它很容易實現(xiàn)如權限攔截,運行

期監(jiān)控等功能

5.容器提供了眾多的輔助類,能加快應用的開辟

6.spring對于主流的應用框架提供了集成支持,如

hibernate,JPA,Struts等

7.spring屬于低侵入式設計,代碼的污染極低

8.獨立于各種應用效勞器

9.spring的DI機制降低了業(yè)務對象替換的復雜性

10.Spring的高度開放性,并不強制應用徹底依賴于Spring,

開辟者可以自由選擇spring的部份或者全部

什么是DI機制?

依賴注入(DependecyInjection)和控制反轉(zhuǎn)(Inversionof

Control)是同一個概念,詳細的講:當某個角色

需要此外一個角色協(xié)助的時候,在傳統(tǒng)的程序設計過程中,通

常由調(diào)用者來創(chuàng)立被調(diào)用者的實例。但在spring中

創(chuàng)立被調(diào)用者的工作再也不由調(diào)用者來完成,因此稱為控制

反轉(zhuǎn)。創(chuàng)立被調(diào)用者的工作由spring來完成,然后注入調(diào)用者

因此也稱為依賴注入。

spring以動態(tài)靈便的方式來管理對象,注入的兩種方式,設

置注入和構造注入。

設置注入的優(yōu)點:直觀,自然

構造注入的優(yōu)點:可以在構造器中決定依賴關系的順序。

什么是A0P?

面向切面編程(A0P)完善spring的依賴注入(DI),面向切面編

程在spring中主要表現(xiàn)為兩個方面

1.面向切面編程提供聲明式事務管理

2.spring支持用戶自定義的切面

面向切面編程(aop)是對面向?qū)ο缶幊?oop)的補充,

面向?qū)ο缶幊虒⒊绦蚍纸獬筛鱾€層次的對象,面向切面編程將

程序運行過程分解成各個切面。

A0P從程序運行角度考慮程序的構造,提取業(yè)務處理過程的切

面,oop是靜態(tài)的抽象,aop是動態(tài)的抽象,

是對應用執(zhí)行過程中的步驟發(fā)展抽象,,從而獲得步驟之間的

邏輯劃分。

aop框架具有的兩個特征:

1.各個步驟之間的良好隔離性

2.源代碼無關性

10、spring事務怎么配置的。

第一種方式:每一個Bean都有一個代理;

第二種方式:所有Bean共享一個代理基類;

第三種方式:使用攔截器;

第四種方式:使用tx標簽配置的攔截器;

第五種方式:全注解;

詳細見文章……

11、Mybatis與hibernate的區(qū)別。

1.hibernate是全自動,而mybatis是半自動。

hibernate徹底可以通過對象關系模型實現(xiàn)對數(shù)據(jù)庫的操作,

擁有完整的JavaBean對象與數(shù)據(jù)庫的映射構造動生成sqlo而

mybatis僅有根本的字段映射,對象數(shù)據(jù)以及對象實際關系仍然需

要通過手寫sql來實現(xiàn)和管理。

2.hibernate數(shù)據(jù)庫移植性遠大于mybatis。

hibernate通過它強大的映射構造和hql語言,大大降低了對

象與數(shù)據(jù)庫(oracle、mysql等)的耦合性,而mybatis由于需要手

寫sql,因此與數(shù)據(jù)庫的耦合性直接取決于程序員寫sql的方法,

如果sql不具通用性而用了不少某數(shù)據(jù)庫特性的sql語句的話,移

植性也會隨之降低不少,本錢很高。

3.hibernate擁有完整的日志系統(tǒng),mybatis那末欠缺一些。

hibernate日志系統(tǒng)非常健全,涉及廣泛,包括:sql記錄、關

系異常、優(yōu)化警告、緩存提

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論