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