1. 程式人生 > >面經總結:框架

面經總結:框架

客戶 責任 view 如果 單引號 name 捕獲 覆蓋 面向對象

  • Spring核心功能?

核心功能是IoC反轉控制和AOP面向切面編程; AOP(Aspect-OrientedProgramming,面向方面編程),可以說是OOP(Object-Oriented Programing,面向對象編程)的補充和完善。OOP引入封裝、繼承和多態性等概念來建立一種對象層次結構,用以模擬公共行為的一個集合。當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關系,但並不適合定義從左到右的關系。例如日誌功能。日誌代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系。對於其他類型的代碼,如安全性、異常處理和透明的持續性也是如此。這種散布在各處的無關的代碼被稱為橫切(cross-cutting)代碼,在OOP設計中,它導致了大量代碼的重復,而不利於各個模塊的重用。 而AOP技術則恰恰相反,它利用一種稱為“橫切”的技術,剖解開封裝的對象內部,並將那些影響了多個類的公共行為封裝到一個可重用模塊,並將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來,便於減少系統的重復代碼,降低模塊間的耦合度,並有利於未來的可操作性和可維護性。
  • AOP如何實現?

實現AOP的技術,主要分為兩大類:一是采用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;二是采用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼。

  • jdk代理和cglib代理的區別?

JDK動態代理和CGLIB字節碼生成的區別?
* JDK動態代理只能對實現了接口的類生成代理,而不能針對類
* CGLIB是針對類實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法。

  • Spring的實例保存在哪?

定義bean的方式? 1)XML配置方式;2)註解方式; bean存儲? 利用java反射機制,生成bean實例,實例化的單例bean放入HashMap存儲,id作為key;
  • Spring MVC工作流程

以DispatcherServlet(前端控制器)為中心的工作:1.DispatcherServlet; 2.HandlerMapping; 3.HandlerAdapter 4.ViewReslover

1)首先用戶向服務器發送請求,被DS捕獲;(用戶->DS 請求)

2)DS收到請求,調用HandlerMapping(處理器映射器)獲得Handler相關對象(處理器)(包括Handler及HandlerInterceptor),以HanderExecutionChain對象的形式返回; (DS->HM HM->DS H/HI/HEC)

3)DS根據獲得的Handler找到合適的HandlerAdapter(處理器適配器),調用具體的Controller,Controller執行結果ModelAndView返回給DS; (DS->HA Controller; HA->DS MAV)

4)DS將MAV傳給ViewReslover(視圖解析器),VR解析後返回View,DS根據Model和View渲染視圖,渲染結果返回客戶端; (DS->VR MAV; VR->DS View; DS->客戶端 Model View)

  • MyBatis的#和$的區別?

(1.屬性; 2.性能;3.註入;4.表名;5.不變) 1.屬性:#{para}是預編譯,${para}是字符串替換; 2.性能:預編譯的sql可以重復利用;所以#{}性能較優; 3.註入:${}是字符串替換,會存在sql註入問題;比如select * from table where name = ${smith or 1 = 1},這樣無論是否匹配,都能查到結果; 4.表名:表名必須使用${tablename},因為預編譯的占位符進行變量替換後會帶上單引號。而表名不能加單引號; 5.不變:如果插入不改變的字符串,比如order by ${para} 那麽就可以用${};

面經總結:框架