java面試--基礎6(框架)
SpringMVC
Spring MVC處理請求流程
使用者發起請求--進入前端控制器(進入springmvc的入口也是一個Servlet)
前端控制器會根據使用者請求的不同調用對應的頁面控制器(Servlet)
頁面控制器呼叫biz,dao之後會得到一個數據model
將model和view檢視(僅僅只是名字)統一打包之後返回前端控制器
將資料Model渲染到view檢視中
最終將帶有資料的頁面返回給使用者
@RequestMapping的Ant和佔位符
*任意字元
http://localhost:9090/SpringMvc2/ant/bbbbb/ant1.html
**任意多層字元
http://localhost:9090/SpringMvc2/ant/a/b/c/d/e/ant2.html
?一個問號是一個字元,允許多個問號
http://localhost:9090/SpringMvc2/ant/ant3a.html
http://localhost:9090/SpringMvc2/ant/ant4aa.html
{xxx}佔位符,多級路徑
http://localhost:9090/SpringMvc2/abc/123/ant.html
Springmvc中獲取Servlet的原生物件
request和session
response
Cookie獲取和設定
SpringMVC中的轉發和重定向
SpringMVC預設的跳轉方式是轉發
SpringMVC支援Ajax
@controller和@restcontroller有什麼區別
@RestController註解相當於@ResponseBody + @Controller合在一起的作用
攔截器、過濾器、AOP
過濾器
Filter:過濾的是全部的請求,不能細緻到方法
攔截器
Interceptor:過濾可以細緻到某個類的中的某個方法,必須是進入springmvc控制層的才能過濾。
AOP
AOP:可以過濾全部請求的全部方法,細緻到任意層。
Rest風格
Mybatis
mybatis的工作原理
MyBatis先建立SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置檔案,一處是Java程式碼的註解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession例項直接執行對映的sql語句,完成對資料的增刪改查和事務提交等,用完之後關閉SqlSession。
JDBC、Mybatis、Hibernate的區別
JDBC:建立資料庫,建立表,建立欄位,開啟,關閉資料庫,SQL語句,
查詢rs.next(rs.getxx)獲取每個欄位屬性
Mybatis:建立資料庫,建立表,建立欄位 SQL語句
Hibernate:建立資料庫,呼叫提供的方法add update delete query,
瞬時狀態,持久狀態,託管狀態
瞬時狀態(new出來還沒有關聯到資料庫的),每次啟動執行完這個物件就銷燬了
持久狀態(關聯到資料庫),實體物件和資料庫同步
託管狀態:實體物件和資料庫中有關聯,但是session關閉了。
只有重新獲取session變回持久狀態
外來鍵
集合
SqlSessionFactory、SqlSession
SqlSessionFactory:單例設計模式,從專案執行期間只有一個
(專案和資料庫建立連結)
SqlSession:每次HTTP請求都建立一個新的連結,每次使用完畢都要關閉。
(一次CRUD操作)
快取
一級快取
一級快取:儲存作用域為Session,當Session flush 或 close之後,該Session中的所有 Cache 就將清空。或者如果就算不close只要有進行其他的commit操作,session依然會失效。(幾乎不用)
二級快取
二級快取與一級快取其機制相同,不同在於其儲存作用域為Mapper(Namespace)就是一個配置檔案
快取的作用
提高效率不需要每次都進行查詢,證券股票(實時查詢不適合使用快取),快取必須支援髒資料
Mybatics中map對映的兩種方式
註解方式;xml的方式
*兩種有什麼區別?
---複雜的用xml;簡單的用註解方式直接寫sql語句
動態SQL
if
choose、when、otherwise
trim、where、set
foreach
bind
Spring
IOC和DI的區別
IOC:控制反轉:dao biz不在類中進行建立和維護,
交給外部容器進行建立。統一管理做到單例模式
DI: 依賴注入:dao biz 不在類內部進行new,外部容器建立之後必須注入進來,
由於是私有的屬性,所以可以通過構造方法也可以通過set方式注入
區別:
1.它們是spring核心思想的不同方面的描述。
2.依賴注入和控制反轉描述的角度不同。
依賴注入是從應用程式的角度在描述,可以把依賴注入描述完整點:
應用程式依賴容器建立並注入它所需要的外部資源;
控制反轉是從容器的角度在描述,描述完整點:容器控制應用程式,
由容器反向的嚮應用程式注入應用程式所需要的外部資源。
依賴注入的兩種方式
構造方法注入
Set方式注入
@Autowired 與@Resource的區別
Spring預設支援的是@Autowired,@Autowired預設是根據型別進行查詢的
@Resource裝配順序
1. 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行
裝配,找不到則丟擲異常
2. 如果指定了name,則從上下文中查詢名稱(id)匹配的bean進行裝配,找不
到則丟擲異常
3. 如果指定了type,則從上下文中找到型別匹配的唯一bean進行裝配,找不到
或者找到多個,都會丟擲異常
4. 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝
配;如果沒有匹配,則回退為一個原始型別進行匹配,如果匹配則自動裝配
AOP
面向橫切的思想,思考入手點是橫向的,各個模組都需要使用到的功能,
統一出來編寫,不需要模組知道具體共同部分的細節,通過外部配置織入
AOP能幹什麼,也是AOP帶來的好處
1:降低模組的耦合度
2:使系統容易擴充套件
懶載入
bean預設啟動伺服器就全部建立,設定為懶載入後就是第一次使用該bean的時候才建立
Spring中的bean有幾種配置方式
傳統的XML配置方式
基於註解的配置
基於類的Java Config
Bean的作用域有幾個
單例(預設),每次建立,request ,session application
Spring的配置檔案有哪些內容
開啟事務註解驅動
事務管理器
開啟註解功能,並配置掃描包
配置資料來源
配置SQL會話工廠、別名、對映檔案