Java開發工程師面試-基礎
JDK、JRE、JVM有什麼區別?
- JDK:Java Development Kit 針對Java程序員的產品
- JRE:Java Runtime Environment是運行Java的環境集合
- JVM:Java虛擬機用於運行Java位元組碼文件,跨平台的核心
常用數字類型的區別
寫出程序執行結果,並說明原因
- 打印結果:yes
- 分析:
float類型在內存中的存儲形式為科學計算法,表達為4.2123456E7,只保留了小數點後7位。 - 補充:
- 浮點數存儲分為三部分:
符號位(Sign):0代表正數,1代表負數
指數位(Exponent):用於存儲科學計數法中的指數部分
尾數位(Mantissa):用於存儲尾數部分 - 單精度是1位符號,8位指數,23位小數
- 雙精度是1位符號,11位指數,52位小數
編程題:隨機生成30~100之間的整
面向對象的三大特徵
- 封裝:將同一類事物的功能包裝在一起,只對外提供訪問接口
好處:
1. 實現專業的分工(你是使用者只需要關心怎麼使用就行,無需了解具體實現細節)
2. 減少代碼耦合(面向接口開發,互不干擾)
3. 可以自由修改類的內部結構(只要不影響使用者的功能,都可以隨意改造) - 繼承:從已有的類派生出新的類,新的類可以有已有類的屬性和行為,並拓展新的功能
- 多態:
多態是同一個行為具有多個不同表現形式或形態的能力
多態是同一個接口,使用不同的實例而執行不同操作
接口和抽象類的異
靜態和實例變量(方法)的區別:
- 語法區別:靜態變量前要加static關鍵字,實例則不用
- 隸屬區別:實例變量屬於某個對象的屬性,而靜態屬於類
- 運行區別:靜態變量在JVM加載類時創建,實例變量在實例化對象時創建
- 位置區別:靜態變量存放在JVM方法區,無法被回收;實例變量存放在堆中,不用就被回收
父子類實例化過程分析
- 輸出結果順序為:13682457910
- 三個原則:
靜態優先
父類優先
非靜態塊優先於構造函數 - 注意:
靜態變量和靜態代碼塊,誰寫前面誰先執行
非靜態變量和非靜態代碼塊,誰寫前面誰先執行
JAVA異常體系
String中「==」 和equals程序分析
- 結果:
true
true
false
true
false - 分析:
==比較的是地址,equals比較的是值
創建後就不可變(被final修飾),保存在方法區中的常量池
s2是引用類型,Java編譯器在編譯期間無法確定數值,只有在運行時才能確定具體的值,所以s2+”def”會產生一個新的內存地址,分配給s5
new String()創建的字符串不保存在常量池
String、StringBuilder、StringBuffer的區別
List和Set的區別
Lsit比較
Set比較
Object類hashCode()和equals()的區別
- equals()方法用來判斷兩個對象是否相同
- hashCode()返回一個int,代表該對象的內部地址
Java IO中有幾種類型的流
JVM的內存組成
- 共享區:對於所有線程都可以訪問的
- 堆:用於保存程序運行時的變量
- 方法區:包含靜態內容
- 私有區:對於線程來說是私有的,其他線程無法直接訪問
- 程序計數器:行號計數器,在程序跳轉時,我們要記住跳轉行號是多少,方便程序進行還原
- 虛擬機棧:包含方法執行時的狀態,每個方法都會形成一個棧幀
- 本地方法棧:用於在調用操作系統級別的底層方法,才會存放方法的棧幀
Java垃圾回收
- GC(Garbage Collection)用於回收不再使用的內存
- GC負責3項任務:分配內存、確保引用、回收內存
- GC回收是依據某個沒有任何引用,則可以被回收
- 通過有向圖記錄對象,判斷是否可達
垃圾回收(GC)算法
- 標記-清除算法
- 複製算法
- 標記-整理算法
- 分代收集算法
詳細可看//www.cnblogs.com/huozhonghun/p/JVM2.html
Java中內存泄露的場景
- 靜態集合類
- 各種連接
- 監聽器
- 不合理的作用域
對象的淺複製與深複製區別
- 淺複製:只對對象及變量值進行複製,引用對象地址不變
- 深複製:不僅對象及變量值進行複製,引用對象也進行複製
感謝耐心觀看!!!
如有不足,歡迎指出,一起成長!
如有幫助,請點贊給予支持,感謝!