Java基礎

考察點:

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章