SSM常見面試題


一:有哪些不同類型的IOC (依賴注入)方式?解釋說明下

答:1.Setter方法注入

屬性需要封裝Setter方法

2.構造方法注入

public UserServiceImpl(UserDao dao) {
this.dao=dao;
}
<bean id="service" class="service.impl.UserServiceImpl">
<constructor-arg><ref bean="dao"/></constructor-arg>
</bean>
3.p命名空間注入

p命名空間注入也是基於Setter方法的一種注入方式,他需要在xml文件里引用命名空間

xmlns:p="http://www.springframework.org/schema/p"

在bean節點的屬性里使用p:屬性名="值"  或者 p:屬性名-ref="Bean的id"的方式進行注入的

4.注解注入

 @Resource或者@Autowire

@Autowired是spring自己定義的注解,@Resource是J2EE的,由JSR-250規范定義

  1. @Autowired默認byType自動注入,如果實例結果不唯一,那么將會拋出異常
  2. @Resource默認按byName自動注入
    但是@Resource有兩個屬性是比較重要的,分別是name和type;
    如果使用name屬性,則使用byName的自動注入策略; .
    而使用type屬性時則使用byType自動注入策略;

二.最佳實踐中,通常一個Xml映射文件,都會寫一個Dao接口與之對應,請問,這個Dao接口的工作原理是什么?Dao接口里的方法,參數不同時,方法能重載嗎?

xml映射文件中的namespace值就是Dao接口的全限名,接口的方法名,就是映射文件中MappedStatement的id值,接口方法內的參數,就是傳遞給sql的參數。Mapper接口是沒有實現類的,當調用接口方法時,接口全限名+方法名拼接字符串作為key值,可唯一定位一個MappedStatement

Dao接口里的方法,是不能重載的,因為是全限名+方法名的,保存和尋找策略。

Dao接口的工作原理是JDK動態代理,Mybatis運行時會使用JDK動態代理為Dao接口生成代理proxy對象,代理對象proxy會攔截接口方法,轉而執行MappedStatement所代表的sql,然后將sql執行結果返回。

三:Mybatis是如何進行分頁的?分頁插件的原理是什么?

Mybatis使用RowBounds對象進行分頁,它是針對ResultSet結果集執行的內存分頁,而非物理分頁,可以在sql內直接書寫帶有物理分頁的參數來完成物理分頁功能,也可以使用分頁插件來完成物理分頁。

分頁插件的基本原理是使用Mybatis提供的插件接口,實現自定義插件,在插件的攔截方法內攔截待執行的sql,然后重寫sql,根據dialect方言,添加對應的物理分頁語句和物理分頁參數。

四:java中9大隱式對象有哪些?


  對象        類型                       用法

  1. request             javax.servlet.http.HttpServletRequest                  該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據
  2. response           javax.servlet.ServletResponse response             代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端
  3. session             HttpSession session                   對象是由服務器自動創建的與用戶請求相關的對象。服務器為每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。
  4. out                JspWriter out                             對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩沖區
  5. pageContext           繼承JspContext                               pageContext 對象的作用是取得任何范圍的參數
  6. config           ServletConfig config                        對象的主要作用是取得服務器的配置信息。
  7. page            Object page                           對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針
  8. exception           Throwable                對象的作用是顯示異常信息,只有在包含 isErrorPage=“true” 的頁面中才可以被使用
  9. application       ServletContext                     對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命周期更長,類似於系統的“全局變量”。

五:數據庫里 面的索引和約束是什么?

索引索引在MySQL中也叫是一種“鍵”,是存儲引擎用於快速找到記錄的一種數據結構。索引對於良好的性能非常關鍵,尤其是當表中的數據量越來越大時,索引對於性能的影響愈發重要。
索引優化應該是對查詢性能優化最有效的手段了。索引能夠輕易將查詢性能提高好幾個數量級。
索引相當於字典的音序表,如果要查某個字,如果不使用音序表,則需要從幾百頁中逐頁去查。

數據庫約束是防止非法記錄的規則,約束保存在數據字典(data
dictionary)中,約束可以被定義在列級或者表級。

數據庫常用的五大約束

  1、主鍵約束(Primay Key Coustraint) 唯一性,非空性
  2、唯一約束 (Unique Counstraint)唯一性,可以空,但只能有一個
  3、檢查約束 (Check Counstraint)對該列數據的范圍、格式的限制(如:年齡、性別等)
  4、默認約束 (Default Counstraint)該數據的默認值
  5、外鍵約束 (Foreign Key Counstraint)需要建立兩表間的關系並引用主表的列

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM