Java面試題:面向對象,類加載器,JDBC, Spring 基礎概念

1. 爲何說Java是一門平臺無關語言?java

平臺無關實際的含義是「一次編寫處處運行」。Java 可以作到是由於它的字節碼(byte code)能夠運行在任何操做系統上,與底層系統無關。面試

2. 爲何 Java 不是100%面向對象?數據庫

Java 不是100%面向對象,由於它包含8個原始數據類型,例如 boolean、byte、char、int、float、double、long、short。它們不是對象。bootstrap

3. 什麼是 singleton class,如何建立一個 singleton class?安全

Singleton class 在任什麼時候間同一個 JVM 中只有一個實例。能夠把構造函數加 private 修飾符建立 singleton。網絡

4. 什麼是多態?多線程

多態簡單地說「一個接口,多種實現」。多態的出現使得在不一樣的場合同一個接口可以提供不一樣功能,具體地說可讓變量、函數或者對象可以提供多種功能。下面是多態的兩種類型:架構

  1. 編譯時多態
  2. 運行時多態

編譯時多態主要是對方法進行重載(overload),而運行時多態主要經過使用繼承或者實現接口。併發

什麼是運行時多態,也稱動態方法分配?app

在 Java 中,運行時多態或動態方法分配是一種在運行過程當中的方法重載。在這個過程當中,經過調用父類的變量引用被重載的方法。下面是一個例子:

Java面試題:面向對象,類加載器,JDBC, Spring 基礎概念

 

5. Java類加載器包括幾種?它們之間的關係是怎麼樣的?

Java 類加載器有:

  • 引導類加載器(bootstrap class loader):只加載 JVM 自身須要的類,包名爲 java、javax、sun 等開頭。
  • 擴展類加載器(extensions class loader):加載 JAVA_HOME/lib/ext 目錄下或者由系統變量 -Djava.ext.dir 指定位路徑中的類庫。
  • 應用程序類加載器(application class loader):加載系統類路徑 java -classpath 或 -Djava.class.path 下的類庫。
  • 自定義類加載器(java.lang.classloder):繼承 java.lang.ClassLoader 的自定義類加載器。

注意:-Djava.ext.dirs 會覆蓋 Java 自己的 ext 設置,形成 JDK 內建功能沒法使用。能夠像下面這樣指定參數:

Java面試題:面向對象,類加載器,JDBC, Spring 基礎概念

 

它們的關係以下:

  • 啓動類加載器,C++實現,沒有父類。
  • 擴展類加載器(ExtClassLoader),Java 實現,父類加載器爲 null。
  • 應用程序類加載器(AppClassLoader),Java 實現,父類加載器爲 ExtClassLoader 。
  • 自定義類加載器,父類加載器爲AppClassLoader。
  • Java學習交流圈:834962734 ,進羣可免費獲取一份Java架構進階技術精品視頻。(高併發+Spring源碼+JVM原理解析+分佈式架構+微服務架構+多線程併發原理+BATJ面試寶典)

6. 什麼是JDBC驅動?

JDBC Driver 是一種實現 Java 應用與數據庫交互的軟件。JDBC 驅動有下面4種:

  1. JDBC-ODBC bridge 驅動
  2. Native-API 驅動(部分是 Java 驅動)
  3. 網絡協議驅動(所有是 Java 驅動)
  4. Thin driver(所有是 Java 驅動)

7. 使用 Java 鏈接數據庫有哪幾步?

  • 註冊驅動類
  • 新建數據庫鏈接
  • 新建語句(statement)
  • 查詢
  • 關閉鏈接

8. 列舉Spring配置中經常使用的重要註解。

下面是一些重要的註解:

  • @Required
  • @Autowired
  • @Qualifier
  • @Resource
  • @PostConstruct
  • @PreDestroy

9. Spring中的Bean是什麼?列舉Spring Bean的不一樣做用域。

Bean 是 Spring 應用的骨架。它們由 Spring IoC 容器管理。換句話說,Bean 是一個由 Spring IoC 容器初始化、裝配和管理的對象。

下面是 Spring Bean 的5種做用域:

  • Singleton:每一個容器只建立一個實例,也是 Spring Bean 的默認配置。因爲非線程安全,所以確保使用時不要在 Bean 中共享實例變量,一面出現數據不一致。
  • Prototype:每次請求時建立一個新實例。
  • Request:與 prototype 相同,區別在於只針對 Web 應用。每次 HTTP 請求時建立一個新實例。
  • Session:每次收到 HTTP 會話請求時由容器建立一個新實例。
  • 全局 Session:爲每一個門戶應用(Portlet App)建立一個全局 Session Bean。
相關文章
相關標籤/搜索