每日練手10道面試題(一)

每日練手面試題

1.Statement和PreparedStatement有什麼區別?哪個性能fan更好?

  1. 前者可以防止Sql注入,會給變量加上單引號
  2. 每次預編譯,會先往緩存裏面找有沒有之前執行過的,有就重複結果,沒有再重新執行,並存入緩存,所以前者效率更快一些
  3. 前者可以執行帶參數的sql語句

2.說出數據連接池的工作機制是什麼?

這個你可以想象成木桶裝水原理,連接數量主要由最短的連接數量決定,無論是否連接,一直保證有這麼多至少可以連接,而最大連接數決定了這個連接池也就是木桶修好了之後最大裝水量,而在最大裝水之前,修的過程,也就是等待隊列,需要等着,如果超出最大連接數,就會觸發四種拒絕策略

  • 哪裏來,回哪裏執行

  • 直接拋出異常

  • 嘗試與第一個線程競爭資源

  • 直接拒絕

大於最小連接數的數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重複使用或是空閒超時後被釋放。

3.介紹一下Java中的多態。

定義的引用變量指向具體的類型,但是具體指向誰,需要程序運行時纔會知道,通過解析符號引用得知,它的功能主要有向上轉型和向下轉型,

向上轉型: Person p=new Student(); 這樣就是指向了父類,可以使用父類方法,子類方法隱藏,只有重寫方法露出

向下轉型: Person p=new Person();Student s=(Student)p; 這樣就可以使用子類的,也可以使用父類的

所以它提高了代碼的擴展性,可以隨時根據想要執行的類進行轉型

4.throw和throws的區別

前者:顯示拋出一個異常

後者:主要用於指出沒處理的異常,預防可能的錯從而顯示出錯原因,平時都有throw new 自定義異常();

5.類的實例化順序

首先是加載父類的靜態變量,類鏈接的時候會先給靜態準備空間存儲爲了後續實例化賦值

解析的時候會先從父類找起,所以是父類靜態優先,多個按順序,然後子類靜態,然後父類非靜態,然後是子類非靜態,最後是父類構造和子類構造執行

6.請說出你所知道的線程同步的方法

同步是一種各線程間協調使用共享資源的一種方式

這一個可能不算方法,Synchronized可以修飾在方法上保持同步

wait():使線程處於等待狀態,並且釋放所持有的對象的 lock。可以與 notify()方法配套使用。
它有兩種形式,一種是以毫秒爲單位的一段時間作爲參數,另一種是沒有參數。
sleep():使一個正在運行的線程處於阻塞狀態,可以以毫秒爲單位的一段時間作爲參數,它可
以使得線程在設定的時間停止運行,但是在設定的時間一過,線程重新進入可執行狀態。由於
sleep()是一個靜態方法,所以調用此方法要捕捉 InterruptedException 異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某
一個等待狀態的線程,而是由 JVM 確定喚醒哪個線程,而且不是按優先級。
allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓
它們競爭。只有獲得鎖的那一個線程才能進入可執行狀態。

7.關於反射的用途和實現

  1. 反射就是不用通過new能夠獲得類的模板信息

  2. 先是通過class.forname全限定類名

  3. 然後newInstace獲得實例

  4. 接下來就是或者方法getMethod()或者getDeclaredMethod獲得私有的方法,但是需要關閉權限setAccessible(true),同理字段getField和getDeclaredField

  5. 然後可以使用invoke反射直接執行方法

用途:

  • Spring的IOC控制反轉就是利用反射獲取bean實例
  • jdbc連接數據庫裏面也有class.forname
  • 哈哈單例模式給他說個可以用單例破壞

8.線程和進程的區別

  1. 線程是Cpu調度的最小單位,進程是分配系統資源的最小單位

  2. 一個進程可以包括多個線程,線程有自己的堆棧和局部變量表但沒有存儲空間均來自進程

  3. 進程之間切換有上下文的消耗,線程則開銷小

9.什麼是雙親委派機制

這個是類加載的時候經常用來判斷安全的,保護程序安全運行,代碼的可執行性

這時候需要了解四種類加載器,根加載器,擴展加載器,用戶加載器,自定義加載器

當我們運行一個類的時候,會先從根加載器找,如果找不到這時候會給擴展加載器,讓它來找,它也找不到就一層層往下,最後找不到的話就會拋出異常,

之前我寫了toString方法但是沒有重寫,導包自己的包名,但是根加載器找到的toString()不是同一個類,就會一直往下找,找不到會拋出異常,所以這個防止了程序員對jdk在編程時的改動,極大保證了代碼可執行性

10.Mysql的三大範式

  1. 字段具有原子性,不可再分解
  2. 強調記錄唯一性,表必須有一個主鍵,
  3. 其它列要依賴於主鍵,不能無關聯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章