什么是反射?
Java反射就是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類(lèi),都能夠知道這個(gè)類(lèi)的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意方法和屬性;并且能改變它的屬性。而這也是Java被視為動(dòng)態(tài)(或準(zhǔn)動(dòng)態(tài),為啥要說(shuō)是準(zhǔn)動(dòng)態(tài),因?yàn)橐话愣缘膭?dòng)態(tài)語(yǔ)言定義是程序運(yùn)行時(shí),允許改變程序結(jié)構(gòu)或變量類(lèi)型,這種語(yǔ)言稱為動(dòng)態(tài)語(yǔ)言。從這個(gè)觀點(diǎn)看,Perl,Python,Ruby是動(dòng)態(tài)語(yǔ)言,C++,Java,C#不是動(dòng)態(tài)語(yǔ)言。)語(yǔ)言的一個(gè)關(guān)鍵性質(zhì)。
什么是java序列化?什么情況下需要序列化?
序列化就是一種用來(lái)處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化??梢詫?duì)流化后的對(duì)象進(jìn)行讀寫(xiě)操作,也可將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間。序列化是為了解決在對(duì)對(duì)象流進(jìn)行讀寫(xiě)操作時(shí)所引發(fā)的問(wèn)題。
當(dāng)Java對(duì)象需要在網(wǎng)絡(luò)上傳輸或者持久化存儲(chǔ)到文件中時(shí),就需要對(duì)Java對(duì)象進(jìn)行序列化處理。
動(dòng)態(tài)代理是什么?有哪些應(yīng)用?
動(dòng)態(tài)代理:當(dāng)想要給實(shí)現(xiàn)了某個(gè)接口的類(lèi)中的方法,加一些額外的處理。比如說(shuō)加日志,加事務(wù)等??梢越o這個(gè)類(lèi)創(chuàng)建一個(gè)代理,故名思議就是創(chuàng)建一個(gè)新的類(lèi),這個(gè)類(lèi)不僅包含原來(lái)類(lèi)方法的功能,而且還在原來(lái)的基礎(chǔ)上添加了額外處理的新類(lèi)。這個(gè)代理類(lèi)并不是定義好的,是動(dòng)態(tài)生成的。具有解耦意義,靈活,擴(kuò)展性強(qiáng)。
動(dòng)態(tài)代理的應(yīng)用:Spring的AOP,加事務(wù),加權(quán)限,加日志。
怎么實(shí)現(xiàn)動(dòng)態(tài)代理?
動(dòng)態(tài)代理實(shí)現(xiàn):首先必須定義一個(gè)接口,還要有一個(gè)InvocationHandler(將實(shí)現(xiàn)接口的類(lèi)的對(duì)象傳遞給它)處理類(lèi)。再有一個(gè)工具類(lèi)Proxy(習(xí)慣性將其稱為代理類(lèi),因?yàn)檎{(diào)用他的newInstance()可以產(chǎn)生代理對(duì)象,其實(shí)他只是一個(gè)產(chǎn)生代理對(duì)象的工具類(lèi))。利用到InvocationHandler,拼接代理類(lèi)源碼,將其編譯生成代理類(lèi)的二進(jìn)制碼,利用加載器加載,并將其實(shí)例化產(chǎn)生代理對(duì)象,最后返回。
為什么要使用克???
想對(duì)一個(gè)對(duì)象進(jìn)行處理,又想保留原有的數(shù)據(jù)進(jìn)行接下來(lái)的操作,就需要克隆了。克隆分淺克隆和深克隆,淺克隆后的對(duì)象中非基本對(duì)象和原對(duì)象指向同一塊內(nèi)存,因此對(duì)這些非基本對(duì)象的修改會(huì)同時(shí)更改克隆前后的對(duì)象。深克隆可以實(shí)現(xiàn)完全的克隆,可以用反射的方式或序列化的方式實(shí)現(xiàn)。
如何實(shí)現(xiàn)對(duì)象克隆?
有兩種方式:
1).實(shí)現(xiàn)Cloneable接口并重寫(xiě)Object類(lèi)中的clone()方法;
2).實(shí)現(xiàn)Serializable接口,通過(guò)對(duì)象的序列化和反序列化實(shí)現(xiàn)克隆,可以實(shí)現(xiàn)真正的深度克隆,代碼如下。
深拷貝和淺拷貝區(qū)別是什么?
在有指針成員的情況下,淺拷貝只是將指針指向已存在的內(nèi)存。即兩個(gè)對(duì)象的指針成員指向的是同一內(nèi)存區(qū)域。深拷貝的做法是申請(qǐng)一個(gè)內(nèi)存復(fù)制一份,并將新對(duì)象指針指向備份區(qū)。
安全性:淺拷貝如果修改了指針指向的內(nèi)容,將對(duì)兩個(gè)對(duì)象都有影響。
jsp和servlet有什么區(qū)別?
jsp是html頁(yè)面中內(nèi)嵌的Java代碼,側(cè)重頁(yè)面顯示;
Servlet是html代碼和Java代碼分離,側(cè)重邏輯控制,mvc設(shè)計(jì)思想中jsp位于視圖層,servlet位于控制層Jsp運(yùn)行機(jī)制.
jsp有哪些內(nèi)置對(duì)象?作用分別是什么?
Page,pageContext,request,response,session,application,out,config,exception
Page指的是JSP被翻譯成Servlet的對(duì)象的引用.
pageContext對(duì)象可以用來(lái)獲得其他8個(gè)內(nèi)置對(duì)象,還可以作為JSP的域范圍對(duì)象使用.pageContext中存的值是當(dāng)前的頁(yè)面的作用范圍》
request代表的是請(qǐng)求對(duì)象,可以用于獲得客戶機(jī)的信息,也可以作為域?qū)ο髞?lái)使用,使用request保存的數(shù)據(jù)在一次請(qǐng)求范圍內(nèi)有效。
Session代表的是一次會(huì)話,可以用于保存用戶的私有的信息,也可以作為域?qū)ο笫褂?,使用session保存的數(shù)據(jù)在一次會(huì)話范圍有效
Application:代表整個(gè)應(yīng)用范圍,使用這個(gè)對(duì)象保存的數(shù)據(jù)在整個(gè)web應(yīng)用中都有效。
Response是響應(yīng)對(duì)象,代表的是從服務(wù)器向?yàn)g覽器響應(yīng)數(shù)據(jù).
Out:JSPWriter是用于向頁(yè)面輸出內(nèi)容的對(duì)象
Config:指的是ServletConfig用于JSP翻譯成Servlet后獲得Servlet的配置的對(duì)象.
Exception:在頁(yè)面中設(shè)置isErrorPage=”true”,即可使用,是Throwable的引用.用來(lái)獲得頁(yè)面的錯(cuò)誤信息。
以上就是長(zhǎng)沙達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“經(jīng)典電信Java面試題目匯總”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。