ssm面試題


1. SpringMVC的工作流程

1、用戶發送請求至前端控制器DispatcherServlet 2、DispatcherServlet收到請求調用HandlerMapping處理器映射器。 3、處理器映射器找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一並返回給DispatcherServlet。 4、DispatcherServlet調用HandlerAdapter處理器適配器 5、HandlerAdapter經過適配調用具體的處理器(Controller,也叫后端控制器)。 6、Controller執行完成返回ModelAndView 7、HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet 8、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器 9、ViewReslover解析后返回具體View 10、DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。 11、DispatcherServlet響應用戶

2. 如何解決POST請求中文亂碼問題,GET的又如何處理呢?

在web.xml中加入: . CharacterEncodingFilter . org.springframework.web.filter.CharacterEncodingFilter . encoding . utf-8 . CharacterEncodingFilter 以上可以解決post請求亂碼問題。 對於get請求中文參數出現亂碼解決方法有兩個: 修改tomcat配置文件添加編碼與工程編碼一致,如下: 另外一種方法對參數進行重新編碼: String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”) ISO8859-1是tomcat默認編碼,需要將tomcat編碼后的內容按utf-8編碼

3. Spring 支持的事務管理類型有哪些?你在項目中使用哪種方式?怎么理解全局事務和局部事務?

Spring 支持編程式事務管理和聲明式事務管理。許多 Spring 框架的用戶選擇聲明式事務管理,因為這種方式和應用程序的關聯較少,因此更加符合輕量級容器的概念。聲明式事務管理要優於編程式事務管理,盡管在靈活性方面它弱於編程式事務管理,因為編程式事務允許你通過代碼控制業務。聲明式事務又分為兩種: a、基於XML的聲明式事務 b、基於注解的聲明式事務。

事務分為全局事務和局部事務。全局事務由應用服務器管理,需要底層服務器 JTA 支持(如 WebLogic、 WildFly等)。局部事務和底層采用的持久化方案有關,例如使用 JDBC 進行持久化時,需要使用 Connetion 對象來操作事務;而采用 Hibernate 進行持久化時,需要使用 Session 對象來操作事務。

4. Spring 提供的事務管理器都有哪些?他們共同實現的父接口是什么?Spring 的事務管理機制體現了什么設計模式,請簡單說說

Spring 提供了如下所示的事務管理器。

這些事務的父接口都是 PlatformTransactionManager。 Spring 的事務管理機制是一種典型的策略模式,PlatformTransactionManager 代表事務管理接口,該接口定義了三個方法,該接口並不知道底層如何管理事務,但是它的實現類必須提供 getTransaction()方法(開啟事務)、 commit()方法(提交事務)、 rollback()方法(回滾事務)的多態實現,這樣就可以用不同的實現類代表不同的事務管理策略。使用 JTA 全局事務策略時,需要底層應用服務器支持,而不同的應用服務器所提供的 JTA 全局事務可能存在細節上的差異,因此實際配置全局事務管理器是可能需要使用 JtaTransactionManager 的子類,如: WebLogicJtaTransactionManager( Oracle 的 WebLogic 服務器提供)、 UowJtaTransactionManager( IBM 的 WebSphere 服務器提供)等。

5. SpringMvc的控制器是不是單例模式,如果是,有什么問題,怎么解決?

是單例模式,所以在多 線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器里面不能寫字段。

6. 怎么樣在方法里面得到Request,或者Session?

直接在方法的形參中聲明request,SpringMvc就自動把request對象傳入

7. SpringMVC怎么樣設定重定向和轉發的?

在返回值前面加"forward:“就可以讓結果轉發,譬如"forward:user.do?name=method4” 在返回值前面加"redirect:“就可以讓返回值重定向,譬如"redirect:http://www.baidu.com

8. 講下對MyBatis的緩存的理解?

MyBatis的緩存分為一級緩存和二級緩存,一級緩存放在session里面,默認就有,二級緩存放在它的命名空間里,默認是打開的,使用二級緩存屬性類需要實現Serializable序列化接口(可用來保存對象的狀態),可在它的映射文件中配置.

9. MyBatis里面的動態Sql是怎么設定的?用什么語法?

10.spring配置bean實例化有哪些方式?

    1)使用類構造器實例化(默認無參數)
<bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean>

    2)使用靜態工廠方法實例化(簡單工廠模式)
//下面這段配置的含義:調用Bean2Factory的getBean2方法得到bean2
<bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2"></bean>

    3)使用實例工廠方法實例化(工廠方法模式)
//先創建工廠實例bean3Facory,再通過工廠實例創建目標bean實例
<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>

11. SpringMvc怎么處理返回值的

SpringMvc根據配置文件中InternalResourceViewResolver(內部資源視圖解析器)的前綴和后綴,用前綴+返回值+后綴組成完整的返回值

12. 談談你對aop的理解

AOP,一般稱為面向切面,作為面向對象的一種補充,用於將那些與業務無關,但卻對多個對象產生影響的公共行為和邏輯,抽取並封裝為一個可重用的模塊,這個模塊被命名為“切面”(Aspect),減少系統中的重復代碼,降低了模塊間的耦合度,同時提高了系統的可維護性。可用於權限認證、日志、事務處理。

13. BeanFactory和ApplicationContext有什么區別?

BeanFactory和ApplicationContext是Spring的兩大核心接口,都可以當做Spring的容器。其中ApplicationContext是BeanFactory的子接口。

(1)BeanFactory:是Spring里面最底層的接口,包含了各種Bean的定義,讀取bean配置文檔,管理bean的加載、實例化,控制bean的生命周期,維護bean之間的依賴關系。ApplicationContext接口作為BeanFactory的派生,除了提供BeanFactory所具有的功能外,還提供了更完整的框架功能:

①繼承MessageSource,因此支持國際化。

②統一的資源文件訪問方式。

③提供在監聽器中注冊bean的事件。

④同時加載多個配置文件。

⑤載入多個(有繼承關系)上下文 ,使得每一個上下文都專注於一個特定的層次,比如應用的web層。

(2)①BeanFactroy采用的是延遲加載形式來注入Bean的,即只有在使用到某個Bean時(調用getBean()),才對該Bean進行加載實例化。這樣,我們就不能發現一些存在的Spring的配置問題。如果Bean的某一個屬性沒有注入,BeanFacotry加載后,直至第一次使用調用getBean方法才會拋出異常。

    ②ApplicationContext,它是在容器啟動時,一次性創建了所有的Bean。這樣,在容器啟動時,我們就可以發現Spring中存在的配置錯誤,這樣有利於檢查所依賴屬性是否注入。 ApplicationContext啟動后預載入所有的單實例Bean,通過預載入單實例bean ,確保當你需要的時候,你就不用等待,因為它們已經創建好了。

  ③相對於基本的BeanFactory,ApplicationContext 唯一的不足是占用內存空間。當應用程序配置Bean較多時,程序啟動較慢。

(3)BeanFactory通常以編程的方式被創建,ApplicationContext還能以聲明的方式創建,如使用ContextLoader。

(4)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但兩者之間的區別是:BeanFactory需要手動注冊,而ApplicationContext則是自動注冊。

14. Spring中的隔離級別:

① ISOLATION_DEFAULT:這是個 PlatfromTransactionManager 默認的隔離級別,使用數據庫默認的事務隔離級別。

② ISOLATION_READ_UNCOMMITTED:讀未提交,允許另外一個事務可以看到這個事務未提交的數據。

③ ISOLATION_READ_COMMITTED:讀已提交,保證一個事務修改的數據提交后才能被另一事務讀取,而且能看到該事務對已有記錄的更新。

④ ISOLATION_REPEATABLE_READ:可重復讀,保證一個事務修改的數據提交后才能被另一事務讀取,但是不能看到該事務對已有記錄的更新。

⑤ ISOLATION_SERIALIZABLE:一個事務在執行的過程中完全看不到其他事務對數據庫所做的更新。

 


免責聲明!

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



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