Java面试常考的面试题整理
1、用10分來評估你自己——你在Java方面有多好?
如果您對自己或?qū)ava的熟練程度不太確定,那么這是一個非常棘手的問題。如果你是Java專家,你應(yīng)該放低一點。在這之后,你可能會根據(jù)你所承認的水平得到問題。因此,例如,如果您說了10,但不能回答一個相當(dāng)困難的問題,那么這將是一個缺點。
2、解釋Java 7和Java 8的區(qū)別。
老實說,有很多不同之處。在這里,如果你能列出最重要的,就足夠了。您應(yīng)該解釋Java 8中的新特性。有關(guān)完整列表,請訪問原始網(wǎng)站:Java 8 JDK。
你應(yīng)該知道的最重要的一點是:
Lambda表達式,一個新的語言特性,已經(jīng)在這個版本中引入。Lambda表達式允許您將功能視為方法參數(shù)或代碼視為數(shù)據(jù)。Lambda表達式允許您更緊湊地表達單方法接口的實例(稱為函數(shù)接口)。
Method references(方法引用)為已經(jīng)有名稱的方法提供了易于閱讀的lambda表達式。
Default methods(默認方法)允許將新功能添加到庫的接口中,并確保與為這些接口的舊版本編寫的代碼的二進制兼容性。
Repeating annotations提供了將相同注釋類型多次應(yīng)用于相同聲明或類型使用的能力。
Type annotations 類型注釋提供了在使用類型的任何地方應(yīng)用注釋的能力,而不僅僅是在聲明中。與可插入類型系統(tǒng)一起使用時,該特性支持改進的代碼類型檢查。
3、 java中wait和sleep有什么區(qū)別?多線程條件下如何保證數(shù)據(jù)安全?
答:最大區(qū)別是等待時wait會釋放鎖,而sleep會一直持有鎖,wait通常用于線程時交,互,sleep通常被用于暫停執(zhí)行。
4、 java中volatile和synchronized有什么區(qū)別?
1).volatile本質(zhì)是在告訴jvm當(dāng)前變量在寄存器(工作內(nèi)存)中的值是不確定的,需要從主存中讀取;synchronized則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞住。
2).volatile僅能使用在變量級別;synchronized則可以使用在變量、方法、和類級別的。
3).volatile僅能實現(xiàn)變量的修改可見性,并不能保證原子性;而synchronized則可以保證變量的修改可見性和原子性。
4).volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞。
5).volatile標(biāo)記的變量不會被編譯器優(yōu)化;synchronized標(biāo)記的變量可以被編譯器優(yōu)化。
5、 有了解java的原子類?實現(xiàn)原理是什么?
答:采用硬件提供原子操作指令實現(xiàn)的,即CAS。每次調(diào)用都會先判斷預(yù)期的值是否符合,才進行寫操作,保證數(shù)據(jù)安全。
6、為什么String對象在Java中是不可變的?
1、因為字符串在Java中是不可變的,才能有String pool。通過這種方式,Java運行時節(jié)省了大量Java堆空間,因為不同的字符串變量可以引用池中的相同字符串變量。如果String不是不可變的,那么String interning就不可能實現(xiàn),因為如果任何變量改變了值,它就會反映在其他變量中。
2、如果字符串不是不可變的,那么它將對應(yīng)用程序造成嚴重的安全威脅。例如,數(shù)據(jù)庫用戶名和密碼作為字符串傳遞,以獲得數(shù)據(jù)庫連接、套接字編程主機和作為字符串傳遞的端口詳細信息。因為String是不可變的,所以它的值不能更改。否則,任何黑客都可能更改引用值,從而導(dǎo)致應(yīng)用程序中的安全問題。
3、由于String是不可變的,所以它對于多線程是安全的,并且單個字符串實例可以在不同的線程之間共享。為了線程安全,避免使用同步;字符串是隱式線程安全的。
4、字符串在Java類加載器中使用,不可變性提供了正確的類被類加載器加載的安全性。例如,考慮一個您試圖加載java.sql的實例。連接類,但引用的值被更改為myhacking。連接類,可以對數(shù)據(jù)庫執(zhí)行不需要的操作。
5、因為String是不可變的,所以它的hashcode會在創(chuàng)建時緩存,不需要再次計算。這使它成為映射中鍵的一個很好的候選對象,而且它的處理速度比其他HashMap鍵對象快。這就是為什么String是HashMap鍵最常用的對象。
7、Final、Finally和Finalize的區(qū)別是什么?
這個問題是我最喜歡的。
final 關(guān)鍵字在幾個上下文中用于定義一個只能分配一次的實體。
Java finally塊是用來執(zhí)行重要代碼的塊,例如關(guān)閉連接、流等。無論是否處理異常,Java finally塊總是被執(zhí)行。Java finally塊跟隨try或catch塊。
Finalize是 GarbageCollector(垃圾收集器)在刪除/銷毀對象之前調(diào)用的方法,對象有資格進行垃圾收集以執(zhí)行清理活動。
8、diamond的問題是什么?
diamond問題反映了為什么不允許在Java中進行多次繼承。如果有兩個類具有具有特定方法的共享超類,那么它將在兩個子類中被重寫。然后,如果您決定從這兩個子類繼承,那么如果您想調(diào)用該方法,語言無法決定您想調(diào)用哪個方法
9、 java抽象類和接口有什么區(qū)別?項目中怎么去使用它們?
相同點:
A. 兩者都是抽象類,都不能實例化。
B. interface實現(xiàn)類及abstractclass的子類都必須要實現(xiàn)已經(jīng)聲明的抽象方法。
不同點:
A. interface需要實現(xiàn),要用implements,而abstractclass需要繼承,要用extends。
B. 一個類可以實現(xiàn)多個interface,但一個類只能繼承一個abstractclass。
C. interface強調(diào)特定功能的實現(xiàn),而abstractclass強調(diào)所屬關(guān)系。
D. 盡管interface實現(xiàn)類及abstrctclass的子類都必須要實現(xiàn)相應(yīng)的抽象方法,但實現(xiàn)的 形式不同。interface中的每一個方法都是抽象方法,都只是聲明的 (declaration, 沒有方 法體),實現(xiàn)類必須要實現(xiàn)。而abstractclass的子類可以有選擇地實現(xiàn)
使用:
abstract:在既需要統(tǒng)一的接口,又需要實例變量或缺省的方法的情況下,使用abstract;
interface:使用: 類與類之前需要特定的接口進行協(xié)調(diào),而不在乎其如何實現(xiàn)。作為能 夠?qū)崿F(xiàn)特定功能的標(biāo)識存在,也可以是什么接口方法都沒有的純粹標(biāo)識。需要將一組類 視為單一的類,而調(diào)用者只通過接口來與這組類發(fā)生聯(lián)系。需要實現(xiàn)特定的多項功能, 而這些功能之間可能完全沒有任何聯(lián)系。
10、 對socket熟悉?TCP通訊有幾次握手?有使用過哪些socket框架?
答:3次握手,客戶端-->服務(wù)端,服務(wù)端-->客戶端,客戶端-->服務(wù)端,當(dāng)這些過程完成之后,才真正建立起通信。java中比較有名的socket框架有:mina,netty,都是韓國小棒子寫的。
11、了解java反射機制?反射生成類,能訪問私有變量?
答:即動態(tài)生成java的實例,可以
12. RPC是什么?有使用過哪些RPC框架?
答:即遠程進程調(diào)用,本地機器調(diào)用遠程的服務(wù),在項目規(guī)模大到一定程度,需要使用RPC相關(guān)框架進行服務(wù)化部署。如:hessian 、webservice等
IT技術(shù)分享社區(qū)
個人博客網(wǎng)站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協(xié)助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎(chǔ)知識硬件:斷路器、接觸器、繼電器基礎(chǔ)知識
總結(jié)
以上是生活随笔為你收集整理的Java面试常考的面试题整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画图灰白_python 站点
- 下一篇: Java技术:为什么不推荐使用BeanU