天天看點

Java經典面試題整理及答案詳解(三)

上一篇:Java經典面試題整理及答案詳解(二)

Java面試真題第三彈接住!相信通過前兩節的學習,大家對于Java多少有些了解。學習Java建議還是多動手練習,很多時候你會發現想的和寫出來運作的不是一回事兒,本節内容大家可以根據題目自己練習看看~

1.使用MyBatis做模糊查詢的時候,在日志中看到執行了sql語句,但是查詢不到結果。

面對這樣的問題,如果可以看到背景的日志出現有相關的資訊顯示,那麼就表示現在的整體環境搭建是沒有任何問題的,但是為什麼資料沒有呢?

個人經驗總結有如下幾點:

(1) 你的資料庫裡沒有符合條件的資料,觀察你的事務問題,更換一個新的用戶端連接配接;

(2) 你在使用模糊查詢的時候,所傳遞的參數可能就有問題,這個時候最好的解決方案,就是觀察資料層裡面傳入的内容是否正确;

(3) 在使用模糊查詢的時候千萬要記住在關鍵字的左右增加一個“%”,如果沒有加,那麼就不叫模糊查詢了;

(4) 你現在所連接配接的資料庫并不是你真正的資料庫。

2.在MyBatis的sql語句中使用if判斷傳遞過來的某參數是不是null是有效的,但是卻不能判斷空字元串“ ’’’’ ”。

動态SQL是依靠配置實作的,它隻能夠判斷null。你可以在業務層的處理上追加一些判斷功能,例如:如果發現有内容為空字元串( ’’’’),那麼你就為其設定null。

動态SQL很有幫助。

3.MyBatis和Hibernate中的set方法

MyBatis開發裡面主要的核心是要求使用者自己來定義使用的SQL語句。而Hibernate特點由于其要考慮其可移植性的問題,是以在Hibernate處理之中,它所需要考慮的就是一個自動生成SQL問題。

現在所有問題都放在了POJO類(VO)、Hibernate下,如果該POJO類的對象處于持久态狀态,那麼每一次調用setter方法都會更新資料(如果你的事務是手工控制,則在若幹個setter調用後才會發出更新操作),而MyBatis沒有這樣的功能,因為Hibernate之中搞的這種對象的狀态設計有些糟糕,而且這也是Hibernate本身性能低的原因。追究其起源,主要是因為傳統的EJB(EntityBean)影響。

4.Resource與Autowired差別

在使用Spring的自動的Annotation注解的時候經常會見到兩類的注解:@Resource(個人常用)、@Autowired ,如果你想要了解這兩個的差別,最好的做法是先認真學完了spring依賴注入的時候講解過的自動配置操作,在spring裡面自動配置的模式有兩類:按照類型、按照名稱。

@Autowired:則表示按照類型進行自動注入,缺點是如果類型相同,則無法注入;

@Resource:具備按照類型自動注入的特點,而後如果現在類型相同,則可以設定一個名稱,也就是說你使用@Component、@Service等注解設定自動掃描的時候可以設定一個名字,而這個名字就可在@Resource中使用了;

SpringBoot裡面,因為其自動支援一些環境配置,如果使用的是Autowired,那麼配置多個相同類型的Bean的話,将無法進行準确的注入操作。必須使用@Resource完成。

5.Hibernate控制反轉

現在所說的是Hibernate中針對關系的配置處理,控制反轉就是把控制權交給了對方,這種情況一般出現在資料的級聯關系配置上:一對多、多對多。

以一個程式的分析為例:一個人有多本書,在Hibernate的世界裡充滿了神奇,它可以自動将沒有的資料進行增加處理。正常的流程,首先要有一個人,這個人會有一個編号,在進行書的資訊添加的時候就需要把這個人的編号一起儲存進去。

如果不配置控制反轉,它的處理:

——增加人的資訊;

——增加所有書的資訊,但此時人的儲存的關聯字段内容是null;

——再更新所有書的資訊,将人的關系的内容儲存進來。

正常的流程(控制反轉,将子表與父表關聯字段的使用控制權交給子表自己控制)是:

——儲存人的資訊,同時取得人的編号,将這些編号設定到書的内容裡面;

——儲存書的資訊

更多專業知識,面試技巧就在面試一點通,持續更新中……

感謝浏覽~

本内容來源于

阿裡雲大學-Java面試技巧