1. 程式人生 > 實用技巧 >測試題10(答案解析)

測試題10(答案解析)

1. MyBatis中collection和assosication區別?

第一個是用來關聯實體類的,第二個是用來關聯集合的,也就是平時的一對一(assocication),一對多(collection)
所以association是用於一對一和多對一,而collection是用於一對多的關係

2. 什麼是MyBatis的一級快取和二級快取?

  1. 一級快取
    Mybatis的一級快取是指Session快取。一級快取的作用域預設是一個SqlSession。Mybatis預設開啟一級快取。
    也就是在同一個SqlSession中,執行相同的查詢SQL,第一次會去資料庫進行查詢,並寫到快取中;第二次以後是直接去快取中取。
    當執行SQL查詢中間發生了增刪改的操作,MyBatis會把SqlSession的快取清空。
    一級快取的範圍有SESSION和STATEMENT兩種,預設是SESSION,如果不想使用一級快取,可以把一級快取的範圍指定為STATEMENT,這樣每次執行完一個Mapper中的語句後都會將一級快取清除。
  2. 二級快取
    Mybatis的二級快取是指mapper對映檔案。二級快取的作用域是同一個namespace下的mapper對映檔案內容,多個SqlSession共享。Mybatis需要手動設定啟動二級快取。
    二級快取是預設啟用的(要生效需要對每個Mapper進行配置),如想取消,則可以通過Mybatis配置檔案中的元素下的子元素來指定cacheEnabled為false。

3. JVM中類的載入過程是怎麼樣的?

  1. 載入(Loading)
  2. 連線(Linking)(驗證(Verification)、準備(Preparation)、解析(Resolution))
  3. 初始化
  4. 使用
  5. 解除安裝

4. 什麼是雙親委派模型?

當需要載入一個類的時候,子類載入器並不會馬上去載入,而是依次去請求父類載入器載入,一直往上請求到最高類載入器:啟動類載入器。當啟動類載入器載入不了的時候,依次往下讓子類載入器進行載入。當達到最底下的時候,如果還是載入不到該類,就會出現ClassNotFound的情況。

好處:保證了程式的安全性。例子:比如我們重新寫了一個String類,載入的時候並不會去載入到我們自己寫的String類,因為當請求上到最高層的時候,啟動類載入器發現自己能夠載入String類,因此就不會載入到我們自己寫的String類了。

5. Lock鎖的使用

synchroniezed:關鍵詞,通過JVM的底層實現,鎖的升級過程(無鎖-》偏向鎖-》輕量級鎖-》重量級鎖)
Lock:介面,通過程式碼實現鎖的過程,狀態+CAS+連結串列(ABC),公平鎖和非公平鎖,可中斷鎖
Lock lock = new ReentrantLock();//預設是非公平鎖
try{
lock.lock();//上鎖
//執行上鎖的程式碼
}finally{
lock.unlock();//釋放鎖
}

6. short s1 = 1;s1 = s1 + 1;報錯嗎?short s1 = 1;s1 += 1,報錯嗎?

  1. 對於short s1 = 1;s1 = s1 + 1; 由於1 是int型別,因此,s1 + 1運算結果也是int()型別,需要強制轉換型別才能賦值給short型別,所以,會報錯。
  2. short s1 = 1; s1+=1;可以正常編譯,因為s1+=1;相當於s1= (short)(s1+1);其中隱含有強制型別轉換。

7. java中this和super的區別

(1)super:它引用當前物件的直接父類中的成員(用來訪問直接父類中被隱藏的父類中的成員資料或函式),基類與派生類中有相同成員定義時如:super.變數名,super.成員函式名(實參)
(2)this:它代表當前物件名(在程式中易產生二義性之處,應使用this來指明當前物件;如果函式的形參與類中的成員資料同名,這時需要用this來指明成員變數名)
(3)super()和this()類似,區別是,super()在子類中呼叫父類的構造方法,this()在本類內呼叫本類的其他構造方法。
(4)super()和this()均需放在構造方法內第一行。儘管可以使用this呼叫一個構造器,但卻不能呼叫兩個。
(5)this和super不能同時出現在一個構造方法中,因為this必然會呼叫其他的建構函式,其他的建構函式必然也會有super語句的存在,所以在同一個建構函式裡面有相同的語句,就失去了語句的意義,編譯器也不會通過。
(6)this()和super()都指的是物件,所以,均不可以在static環境中使用。包括:static變數,static方法,static語句塊。
(7)從本質上講,this是一個指向本物件的指標,然而super是一個Java關鍵字。

8. jsp動態include和及靜態include有什麼區別?

靜態包含:<%@ include file=“檔案”%>
動態包含:<jsp:include page=“檔案” />

9. List l1 = new ArrayList();List l2 = new ArrayList();System.out.println(l1.getClass() == l2.getClass());輸出是啥?

true
原因:泛型擦除,在程式執行中是沒有泛型型別

10. SpringMVC的工作流

流程圖