考察點:
1.基本概念和基本原理
2.實現方式與使用場景
3.經常用到的知識點
4.實際應用中容易犯錯的點
5.與面試的崗位相關的知識點
加分項:
1.知識點與具體業務場景結合
2.以反例來描述實際場景中誤用的危害
3.與知識點相關的優化點
4.與知識點相關的最新技術趨勢
5.如果很瞭解某個知識點,可以儘量回答得深入
1.關於面向對象
Java面向對象編程是一種思想,是現實生活中實際事務的一個抽象化的模型。這個模型包含了該事務的具體屬性。
三大特性:封裝、繼承、多態。(這裏不具體介紹,網上很多相關的文章自行搜索)
延伸問題:
- 不同的訪問權限控制符表示的訪問權限
- super和this關鍵字的用法
- 介紹一下final關鍵字
- 介紹一下override(重寫)和overload(重載)區別,爲什麼不能從返回值區分是否是重載方法
- 重載發生在同一個類中,重寫發生在子類中。
- B繼承A,並重寫test方法,A a = new B(); a.test()是調用A的實現還是B的實現
- 方法調用優先級:子類構造函數(O) > 父類構造函數(O) > 子類重寫的函數A > 父類函數A
- 父類引用變量指向子類實例對象時,通過該引用變量只能調用父類中已經存在的方法或變量,否則只能通過強制轉化爲子類才能調用子類中獨有的變量和方法
- 是否可以繼承多個類,是否可以實現多個接口
2.什麼是變量和常量?成員變量和局部變量?介紹一下靜態變量和實例變量
3.八種基本數據類型
整型:byte、short、int、long,浮點型:float、double,字符型:char,布爾型:boolean
延伸問題:
- 範圍從小到大:byte->short->int->long->float->double
- 介紹類型轉換:自動轉換和強制轉換,表達式類型的自動提升
- 強制轉換的情況:範圍小>範圍大,子類>父類
- 浮點類型是否可以直接用"=="比較,如果不能,應該怎麼進行比較
- char類型是否可以儲存漢字
- 對應的包裝類型
- 介紹一下自動裝箱與拆箱
- Integer和int在自動裝箱拆箱時,使用"=="比較會出現的問題。包裝類的緩存。
- 爲什麼對象比較相同時,使用equals方法,不用"=="
4.常用字符串類 String、StringBuilder、StringBuffer
- 執行速度方面,StringBuilder大於StringBuffer大於String ,String最慢的原因:String爲字符串常量,而StringBuilder和StringBuffer均爲字符串變量,即String對象一旦被創建後該對象是不可更改的,但後兩者的對象是變量,是可以更改的
- 線程安全:StringBuilder是線程不安全的,而StringBuffer是線程安全的(StringBuffer中很多方法帶有synchronized關鍵字)–同步關鍵字
5.Java程序初始化的順序是什麼樣子的?
一般遵循三個原則:
- 1.靜態優先於非靜態
- 2.父類優先於子類
- 3.字段優先於代碼塊,代碼塊優先於構造函數
父類靜態字段初始化
父類靜態代碼塊
子類靜態字段初始化
子類靜態代碼塊
父類普通字段初始化
父類構造代碼塊({//代碼}) –優先於構造函數執行
父類構造函數
子類普通字段初始化
子類構造代碼塊
子類構造函數
很明顯的看出,static字段,代碼塊的在執行順序優先於非static、代碼塊,這是因爲靜態域是屬於類的,在類加載後就一直存在,而普通域則需要創建對象才能訪問。而在創建對象時,要先加載父類,然後再加載子類,因此父類的靜態字段初始化和靜態代碼塊執行優先於子類
6.Java中值的傳遞方式,傳遞基本類型參數和傳遞對象參數的不同
7.在不知道某個類的類型的情況下,將類強制轉化爲另一個類,即:(type)entity,將entity強制轉化爲type類型,怎樣才能保證entity本來就是type類型避免轉化發生異常?
在強制轉化前使用instanceof判斷entity是否是type類型。如果是再繼續強制轉化。用法:boolean result = object instanceof class
8.使用abstract修飾類、方法。
延伸問題
- 接口和抽象類對比
9.內部類、匿名內部類、靜態內部類、內部接口
10.強引用、弱引用、軟引用、虛引用,https://www.cnblogs.com/yw-ah/p/5830458.html
11.Java常見的集合
基於List接口的有:ArrayList、LinkedList、Vector(子類Stack)
基於Set接口的有:HashSet、LinkedHashSet、TreeSet
基於Map的有:HashMap、LinkedHashMap、TreeMap、Hashtable(子類Properties經常使用)
延伸問題:
- 集合中的元素可以使用工具類Collections.sort()方法進行比較,sort方法是重載的方法,一種要求比較的元素實現了Comparable接口,另一種是要求傳入實現了Comparator接口的比較器類
- 比較深入的集合問題:https://www.jianshu.com/p/939b8a672070
12. Java泛型是什麼?
- Java是通過什麼方式實現泛型的?什麼是類型擦除?
- Java中泛型有哪幾種使用方式?泛型類、泛型接口、泛型方法,寫一下他們各自怎麼實現?
- 什麼是限定通配符和非限定通配符?說一下泛型中上下邊界是什麼意思換句話說List<? extends T>和List <? super T>之間有什麼區別 ?
- 可以把List<String>傳遞給一個接受List<Object>參數的方法嗎?
- Java中List<Object>和原始類型List之間的區別?List<String>和原始類型List之間的區別?
13. IO流的分類,根據流向分爲輸入流和輸出流,根據類型分爲字節流和字符流
- 經常使用的輸入流和輸出流(字節流和字符流)有哪些
14.通過try-catch語法來抓取異常和處理異常
- 異常分爲運行時異常和編譯異常?常見的運行時異常有空指針異常,數組越界異常,非法參數異常等等,運行時異常根據具體程序運行時的情況,有可能會出現,有可能不會出現
- 介紹finally關鍵字
15.多線程
16.反射是什麼?
- 反射可以用來做動態代理
- 通過反射是否可以拿到私有屬性和方法?可以,通過getDeclaredField和getDeclaredMethod