更新時(shí)間:2023-01-10 13:47:49 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2940次
2023年已經(jīng)開始了,接近我們的是大家常說的金三銀四,時(shí)間晃眼就過去,不少同學(xué)開始為新的工作早早做出準(zhǔn)備,不管是臨陣磨槍還是勢在必得,想必看文章的你也正期待著升值漲薪吧,大家不妨來看看小編為大家盤點(diǎn)整理出的java反射面試題。

1、實(shí)現(xiàn)單例設(shè)計(jì)模式(懶漢、餓漢)
//懶漢,顧名思義比較懶,在用的時(shí)候才實(shí)例化
public class Singleton {
//創(chuàng)建實(shí)例,注意,此時(shí)沒有new
private static Singleton instance = null;
//構(gòu)造方法私有化
private Singleton() {}
//公有的靜態(tài)方法,返回實(shí)例對象
public static Singleton getInstance() {
if (instance == null) {
//這里才new
instance = new Singleton();
}
return instance;
}
}
//餓漢,顧名思義很饑餓,創(chuàng)建對象的時(shí)候就直接new
public class Singleton {
//創(chuàng)建實(shí)例的時(shí)候就new
private static Singleton instance = new Singleton();
// 私有化構(gòu)造方法,外部不能new
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
2、簡述Java的反射機(jī)制和使用場景
反射是Java的一種機(jī)制,可以讓我們在運(yùn)行時(shí)獲取類的信息
通過反射我們可以獲取到類的所有信息,比如它的屬性、構(gòu)造器、方法、注解等
適用于需要?jiǎng)討B(tài)創(chuàng)建對象的場景
關(guān)于反射能說的太多,已單獨(dú)出一篇博客來記錄,請出門右轉(zhuǎn)至信不信十分鐘讓你徹底搞懂java反射
3、什么是內(nèi)存泄漏,怎么確定內(nèi)存泄漏?
概念:內(nèi)存泄漏就是指jvm內(nèi)存沒有及時(shí)釋放,用人話說就是使用完的對象沒有被回收,一般造成原因都是編碼不規(guī)范,new了很多值為null的對象,然后又不調(diào)用
怎么確認(rèn):linux有個(gè)工具叫valgrind,一兩句話說不清楚,單獨(dú)拎出來講,移步使用valgrind來檢查內(nèi)存泄漏
4、簡述動(dòng)態(tài)代理和靜態(tài)代理
靜態(tài)代理:
動(dòng)態(tài)代理:
5、Java中接口和抽象類的異同?
先單獨(dú)說一點(diǎn),讓你可以在朋友面前裝逼:接口也能被繼承,只不過是被接口繼承
1、都能包含抽象的方法,這些抽象的方法用于描述類具備的功能,不提供具體的實(shí)現(xiàn)(jdk1.8允許接口有一個(gè)default的實(shí)現(xiàn)方法)
2、接口是對事物行為的抽象,而抽象類是對事務(wù)本質(zhì)的抽象;
3、接口中的變量必須給出初始值,抽象類可以不給;
4、一個(gè)類只能繼承一個(gè)抽象類,但可以實(shí)現(xiàn)多個(gè)接口;
5、抽象類中可以寫非抽象的方法,從而避免在子類中重復(fù)書寫它們,這樣可以提高代碼的復(fù)用性,這是抽象類的優(yōu)勢;接口中只能有抽象的方法;
針對第二點(diǎn)和第四點(diǎn)舉個(gè)例幫助理解:
對于抽象類:比方說有公雞、母雞、公狗、母狗,我們可以抽象出兩個(gè)更高級(jí)的類,雞類和狗類,因?yàn)槟悴荒苡质请u又是狗,所以你只能繼承其中一個(gè),這就是為什么抽象類只能單繼承;
對于接口:眾所周知,雞都會(huì)唱、跳、rap,這時(shí)候就可以把雞的基本操作抽象成一個(gè)接口,而有的雞通過后天練習(xí)可能會(huì)學(xué)會(huì)打籃球,那么就存在一種高端雞,又會(huì)唱跳rap又會(huì)打籃球,這就是為什么接口可以多實(shí)現(xiàn);
6、Java中sleep和wait的區(qū)別?
1、sleep是Thread的方法,wait是Object的方法
2、sleep方法沒有釋放鎖,而wait方法釋放了鎖
3、wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用
4、sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常
7、Java如何進(jìn)行高效的數(shù)組拷貝?
Arrays.copyOf或 System.arraycopy,是自己new數(shù)組, 然后for循環(huán)復(fù)制效率的兩倍左右
為什么快,因?yàn)樗鼈兪莕ative方法;
8、http中g(shù)et和post的區(qū)別?
GET在瀏覽器回退時(shí)是無害的,而POST會(huì)再次提交請求。
GET產(chǎn)生的URL地址可以被Bookmark,而POST不可以。
GET請求會(huì)被瀏覽器主動(dòng)cache,而POST不會(huì),除非手動(dòng)設(shè)置。
GET請求只能進(jìn)行url編碼,而POST支持多種編碼方式。
GET請求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里,而POST中的參數(shù)不會(huì)被保留。
GET請求在URL中傳送的參數(shù)是有長度限制的,而POST么有。
對參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符,而POST沒有限制。
GET比POST更不安全,因?yàn)閰?shù)直接暴露在URL上,所以不能用來傳遞敏感信息。
GET參數(shù)通過URL傳遞,POST放在Request body中。
然而實(shí)際上,它們的本質(zhì)都是 TCP 連接,并無區(qū)別。上面的答案純粹是為了應(yīng)付面試官。真正導(dǎo)致產(chǎn)生區(qū)別的原因是 HTTP 的規(guī)定以及瀏覽器/服務(wù)器的限制,這才導(dǎo)致它們在應(yīng)用過程中可能會(huì)有所不同。
以上就是“90%會(huì)被面試官問到的Java反射面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀