ssm面试题总结
目錄
一、springMVC工作流程
二、SpringMVC和Struts2的區別
三、SpringMVC是不是單例模式
四、如何指定攔截的是GET請求還是POST請求
五、mybatis和hibernate的區別
1、區別總覽
2、緩存機制
六、Ajax
spring的比較多,單獨拿出來寫了一篇了spring框架面試題總結_巴啦啦小刺猬的博客-CSDN博客
一、springMVC工作流程
- 用戶發送請求到前端控制器DispatcherServlet
- 前端控制器調用處理器映射器HandlerMapper
- 處理器映射器生成處理器對象,返回給前端控制器
- 前端控制器調用處理器適配器HandlerAdapter
- 處理器適配器經過適配調用具體的控制器Controller執行
- Controller處理完成后,生成ModelAndView返回
- 前端控制器收到ModelAndView后傳給視圖解析器ViewResolver
- 視圖解析器解析后返回View
- 前端控制器再根據model渲染view(模型數據填充到視圖中)
- 前端控制器響應客戶
二、SpringMVC和Struts2的區別
SpringMVC的核心控制器(也叫前端控制器是Servlet),而Struts2是filter
SpringMVC是基于方法設計,一個類(其實是一個單例對象)可以處理多個請求,Struts2是基于對象,每次請求都會產生一個action
三、SpringMVC是不是單例模式
是,所以在多線程訪問的時候,會有線程安全問題,但是最好不要加同步,會影響性能,解決方案就是,在Controller層中不要有變量
四、如何指定攔截的是GET請求還是POST請求
在requestMapping中指定method = requestMethod.GET
post同理
五、mybatis和hibernate的區別
1、區別總覽
1)sql 優化方面
- Hibernate 不需要編寫大量的 SQL,就可以完全映射,提供了日志、緩存、級聯(級聯比 MyBatis 強大)等特性,此外還提供 HQL(Hibernate Query Language)對 POJO 進行操作。但會多消耗性能。
- MyBatis 手動編寫 SQL,支持動態 SQL、處理列表、動態生成表名、支持存儲過程。工作量相對大些。
2)開發方面
- MyBatis 是一個半自動映射的框架,因為 MyBatis 需要手動匹配 POJO、SQL 和映射關系。
- Hibernate 是一個全表映射的框架,只需提供 POJO 和映射關系即可。
3)Hibernate 優勢
- Hibernate 的 DAO 層開發比 MyBatis 簡單,Mybatis?需要維護 SQL 和結果映射。
- Hibernate 對對象的維護和緩存要比 MyBatis 好,對增刪改查的對象的維護要方便。
- Hibernate 數據庫移植性很好,MyBatis 的數據庫移植性不好,不同的數據庫需要寫不同 SQL。
- Hibernate 有更好的二級緩存機制,可以使用第三方緩存。MyBatis 本身提供的緩存機制不佳。
4)Mybatis優勢
- MyBatis 可以進行更為細致的 SQL 優化,可以減少查詢字段。
- MyBatis 容易掌握,而 Hibernate 門檻較高。
總的來說,MyBatis 是一個小巧、方便、高效、簡單、直接、半自動化的持久層框架,Hibernate 是一個強大、方便、高效、復雜、間接、全自動化的持久層框架。
所以對于性能要求不太苛刻的系統,比如管理系統、ERP 等推薦使用 Hibernate,而對于性能要求高、響應快、靈活的系統則推薦使用 MyBatis。
2、緩存機制
訪問數據順序是:一級緩存——》二級緩存——》數據庫
(1)hibernate(默認一級緩存)
hibernate是持久層框架,經常訪問物理數據庫。為了較少對數據庫的訪問,提高數據庫訪問性能,加入了hibernate緩存機制
- 一級緩存 : 自帶的不可卸載的.一級緩存的生命周期與session一致.一級緩存稱為session級別的緩存.
- 二級緩存 : 默認沒有開啟,需要手動配置才可以使用的.二級緩存可以在多個session中共享數據,二級緩存稱為是sessionFactory級別的緩存.
SessionFactory的緩存分為內置緩存和外置緩存。內置緩存中存放的是SessionFactory對象的一些集合屬性包含的數據(映射元素據及預定SQL語句等),對于應用程序來說,它是只讀的。外置緩存中存放的是數據庫數據的副本,其作用和一級緩存類似.二級緩存除了以內存作為存儲介質外,還可以選用硬盤等外部存儲設備。二級緩存稱為進程級緩存或SessionFactory級緩存,它可以被所有session共享,它的生命周期伴隨著SessionFactory的生命周期存在和消亡。
(2)mybatis(默認一級緩存)
一級緩存為 ?SqlSession? 緩存,緩存的數據只在 SqlSession 內有效。在操作數據庫的時候需要先創建 SqlSession 會話對象,在對象中有一個 HashMap 用于存儲緩存數據,此 HashMap 是當前會話對象私有的,別的 SqlSession 會話對象無法訪問
二級緩存是??mapper? 級別的緩存,也就是同一個 namespace 的 mapper.xml ,當多個 SqlSession 使用同一個 Mapper 操作數據庫的時候,得到的數據會緩存在同一個二級緩存區域
二級緩存默認是沒有開啟的。需要在 setting 全局參數中配置開啟二級緩存
(3)關于sql
MyBatis :可以自由書寫SQL、支持動態SQL、處理列表、動態生成表名,支持存儲過程
Hibernate:hql能自動生成sql,數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL
(4)延遲加載
Hibernate對實體關聯對象的抓取有著良好的機制。對于每一個關聯關系都可以詳細地設置是否延遲加載,并且提供關聯抓取、查詢抓取、子查詢抓取、批量抓取四種模式。 它是詳細配置和處理的。
而Mybatis的延遲加載是全局配置的。
六、Ajax
1、介紹
通過在后臺與服務器進行少量數據交換,來使網頁異步更新
通過異步模式,提升了用戶體驗
2、請求的步驟
- 創建XMLHttpRequest 對象(Ajax的核心就是XMLHttprequest),即創建一個異步調用對象。
- 創建一個新的HTTP 請求,并指定該HTTP 請求的方法(GET、POST或者delete、put),URL及驗證信息
- 設置響應HTTP請求狀態變化的函數
- 發送HTTP 請求
- 獲取異步調用返回的數據
- 使用JavaScript和DOM 實現局部刷新
總結
- 上一篇: oracle表回退语句,5 Oracle
- 下一篇: 预算里怎样计算机械作业费,用实物法编制施