好程序員-千鋒教育旗下高端IT職業教育品牌

400-811-9990
我的賬戶
好程序員

專注高端IT職業培訓

親愛的猿猿,歡迎!

已有賬號,請

如尚未注冊?

[JavaEE] 好程序員Java教程分享Spring常見面試題

[復制鏈接]
200 0
葉子老師 發表于 2019-10-15 16:00:51 | 只看該作者 |閱讀模式 打印 上一主題 下一主題
本章面試題內容由好程序員Java教程為大家整理分享,希望對大家有所幫助。
  問:SpringIOC原理闡述
  答:把對象的創建、初始化、銷毀等工作交給Spring容器來完成。我們可以把IOC容器的工作模式看做是工廠模式的升華,可以把IOC容器看作是一個工廠,這個工廠里要生產的對象都在配置文件中給出定義,然后利用編程語言的的反射編程,根據配置文件中給出的類名生成相應的對象。從實現來看,IOC是把以前在工廠方法里寫死的對象生成代碼,改變為由配置文件來定義,也就是把工廠和對象生成這兩者獨立分隔開來,目的就是提高靈活性和可維護性。
  問:SpringAOP原理
  答:1)面向對象的設計沒有辦法解決重復代碼的問題
  2)SpringAOP使用動態代理技術在運行期植入增強的代碼,aspectj是在編譯器織入橫切代碼的形式來實現代理技術的
  3)SpringAOP使用了兩種代理機制,一種是基于JDK的動態代理,一種是基于CGLib的動態代理
  4)JDK1.3以后java提供了動態代理的技術,運行開發者在運行期創建接口的代理實例
  5)jdk的動態代理主要涉及java.lang.reflect包中的兩個類ProxyInvcoationHandler
  6)InvcoationHandler是一個接口,通過實行該接口可以訂閱橫切邏輯,并通過反射機制調用目標類的代碼,動態講橫切邏輯和業務邏輯編織在一起
  7)Proxy利用InvocationHandler動態創建一個符號某一接口的實例,生成目標類的代理對象
  8)cglib采用非常底層的字節碼技術,可以為一個類創建子類,并在子類中采用方法攔截技術攔截所有的父類方法的調用,并順勢織入橫切邏輯
  問:AOP中的概念解釋
  答:切面:Aspect,連接點:Joinpoint,增強:Advice,切入點:Pointcut,目標對象:Target,代理:Proxy,其中增強包括:前置增強,后置增強,返回會增強,環繞增強,拋出異常后增強
  問:使用SpringAOP可以基于兩種方式
  答:一種是比較方便和強大的注解方式,使用注解配置SpringAOP總體分為兩步,第一步是在xml文件中聲明激活自動掃描組件功能,同時激活自動代理功能,一種則是中規中矩的xml配置方式
  問:Spring的事務傳播機制
  答:1)REQUIRED(默認):支持使用當前事務,如果當前事務不存在,創建一個新事務。
  2)SUPPORTS:支持使用當前事務,如果當前事務不存在,則不使用事務。
  3)MANDATORY:中文翻譯為強制,支持使用當前事務,如果當前事務不存在,則拋出Exception
  4)REQUIRES_NEW:創建一個新事務,如果當前事務存在,把當前事務掛起。
  5)NOT_SUPPORTED:無事務執行,如果當前事務存在,把當前事務掛起。
  6)NEVER:無事務執行,如果當前有事務則拋出Exception
  7)NESTED:嵌套事務,如果當前事務存在,那么在嵌套的事務中執行。如果當前事務不存在,則表現跟REQUIRED一樣。
  問:Spring的事務實現方式
  答:1)編程式事務管理對基于POJO的應用來說是唯一選擇。我們需要在代碼中調用beginTransaction()commit()rollback()等事務管理相關的方法,這就是編程式事務管理。
  2)基于TransactionProxyFactoryBean的聲明式事務管理
  3)基于@Transactional的聲明式事務管理
  4)基于AspectjAOP配置事務
  問:Spring通過單實例化Bean簡化多線程問題
  答:由于Spring的事務管理器是通過線程相關的ThreadLocal來保存數據訪問基礎設施(也即Connection實例)web容器本身就是多線程的,web容器為一個http請求創建一個獨立的線程(實際大多數采用線程池),所以bean也是運行在多線程的環境下,在大多數情況下,Springbean都是單例的,單例的好處就是線程無關性,不存在多線程并發問題,Spring是通過ThreadLocal將有狀態的變量本地線程化,達到另一個層面上的線程無關。
  問:SpringMVC工作原理
  答:SpringMVC框架圍繞dispactcherServlet這個核心展開,dispatcherServletSpringMVC的總導演,總策劃,他負責攔截請求并將器分派給響應的處理器處理。SpringMVC框架包括注解驅動控制器,請求及響應的信息處理,表單標簽綁定,視圖解析,本地化解析,上傳文件解析,異常處理。
  SpringMVC通過一個前端servlet接收所有的請求,并將具體工作委托給其他組件進行處理
  1)整個過程開始于客戶端發送一個HTTP請求,如果匹配web.xml的映射路徑,則進行處理
  2)DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler
  3)HandlerAdapter這個適配器對各種Hander方法進行調用
  4)處理完了之后返回一個ModelAndViewDispatcherServelt
  5)Handler返回的ModelAndView()只是一個邏輯視圖并不是一個正式的視圖,DispatcherSevlet通過ViewResolver將邏輯視圖轉化為真正的視圖View
  6)根據ModelAndView對模型數據進行視圖渲染
  7)最終客戶端得到相應消息,可能是一個普通的HTML頁面,也可能是一個XML或者JSON
  問:SpringMVCStruts2的區別
  答:1)攔截機制的不同
  Struts2是類級別的攔截,每次請求就會創建一個Action,和Spring整合時Struts2ActionBean注入作用域是原型模式prototype,然后通過settergetterrequest數據注入到屬性。Struts2中,一個Action對應一個requestresponse上下文,在接收參數時,可以通過屬性接收,這說明屬性參數是讓多個方法共享的。Struts2Action的一個方法可以對應一個url,而其類屬性卻被所有方法共享,這也就無法用注解或其他方式標識其所屬方法了,只能設計為多例。
  SpringMVC是方法級別的攔截,一個方法對應一個Request上下文,所以方法直接基本上是獨立的,獨享requestresponse數據。而每個方法同時又何一個url對應,參數的傳遞是直接注入到方法中的,是方法所獨有的。處理結果通過ModeMap返回給框架。在Spring整合時,SpringMVCControllerBean默認單例模式Singleton,所以默認對所有的請求,只會創建一個Controller,有應為沒有共享的屬性,所以是線程安全的,如果要改變默認的作用域,需要添加@Scope注解修改。
  Struts2有自己的攔截Interceptor機制,SpringMVC這是用的是獨立的AOP方式,這樣導致Struts2的配置文件量還是比SpringMVC大。
  2)底層框架的不同
  Struts2采用Filter(StrutsPrepareAndExecuteFilter)實現,SpringMVC(DispatcherServlet)則采用Servlet實現。Filter在容器啟動之后即初始化;服務停止以后墜毀,晚于ServletServlet在是在調用時初始化,先于Filter調用,服務停止后銷毀。
  3)性能方面
  Struts2是類級別的攔截,每次請求對應實例一個新的Action,需要加載所有的屬性值注入,SpringMVC實現了零配置,由于SpringMVC基于方法的攔截,有加載一次單例模式bean注入。所以,SpringMVC開發效率和性能高于Struts2
  4)配置方面
SpringMVCSpring是無縫的。從這個項目的管理和安全上也比Struts2高。
好程序員Java教程http://www.zugymq.live/javaEE_class.shtml

精彩內容,一鍵分享給更多人!
收藏
收藏0
轉播
轉播
分享
淘帖0
支持
支持0
反對
反對0
回復

使用道具 舉報

您需要登錄后才可以回帖

本版積分規則

關注我們
好程序員
千鋒好程序員

北京校區(總部):北京市海淀區寶盛北里西區28號中關村智誠科創大廈

深圳西部硅谷校區:深圳市寶安區寶安大道5010號深圳西部硅谷B座A區605-619

杭州龍馳智慧谷校區:浙江省杭州市下沙經濟技術開發區元成路199號龍馳智慧谷B座7層

鄭州校區:鄭州市二七區航海中路60號海為科技園C區10層、12層

Copyright 2007-2019 北京千鋒互聯科技有限公司 .All Right

京ICP備12003911號-5 京公安網11010802011455號

請您保持通訊暢通1對1咨詢馬上開啟

广东36选7玩法