一、大概說下SpringMVC的流程
Disptacher爲核心處理器,基本所有操作都圍繞它轉
- 1、用戶發起請求,請求抵達DispatcherServlet,dispatcherServlet調用doService方法中的如圖所示代碼
- 2、代碼執行到940行,調用getHandler方法獲取HandlerExecutionChain,而它是由2部分組成,用戶寫的handler(即controller)與對應請求上的攔截器鏈
- 3、用戶根據mappedHandler獲取HandlerAdaper,之後調用攔截器perHandle方法,只有全部通過了之後纔會調用用戶寫的controller邏輯,返回modelAndView對象
- 4、dispatcherServlet獲取到modelAndView對象之後設置視圖名稱,並執行攔截器postHandle方法
- 5、dispathcerServlet根據viewName將modelAndView傳給具體ViewReslover解析器,ViewReslover解析後返回具體View
- 6、DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)
- 7、DispatcherServlet對用戶進行響應
二、Spring事務的傳播行爲有幾種,分別是啥?
spring事務的事務傳播行爲一共有七種,分別爲
- REQUIRED:支持當前事務,如果沒有事務,則新建事務
- SUPPORTS:支持當前事務,如果沒有事務,則以非事務方式運行
- MANDATORY:支持當前事務,如果沒有事務,則拋出異常
- REQUIRES_NEW:創建新事務,如果當前事務存在,則掛起當前事務
- NOT_SUPPORTED:以非事務方式運行,如果當前存在事務則掛起
- NEVER:以非事務方式運行,如果當前存在事務則拋出異常
- NESTED:新建事務,如果當前存在事務,則掛起當前事務,與requireNew不同的是requireNew的事務之前互不影響,而nested之間的事務會互相影響
三、rabbitmq原理
- 消息交換機(Exchange):接受消息提供者(生產者)的消息,並根據消息的RoutingKey和Exchange綁定的BindingKey分配消息
- 消息隊列(Queue):存儲消息接收者(消費者)的消息
- RoutingKey:指定當前消息被誰接受
- BindingKey:指定當前Exchange下,什麼樣的– RoutingKey會被下派到當前綁定的Queue中
四、redis的數據結構?redis的存儲策略?
- 有String、Hash、List、Set 、Sort Set5種;
- 2種策略:1直接保存內存快照、2保存命令日誌文件
五、synchronized爲什麼是重量級鎖?Lock爲啥是輕量級鎖?
- 實現原理不同:synchronized是鎖對象,如果當前線程檢查到別的線程已經鎖住該對象,則當前線程阻塞。而線程阻塞後再重新開始執行的cpu開銷較大。而lock是一直查看鎖是否釋放來實現的。
六、java的內存空間
- 堆:每個線程包含一個棧區,只保存基礎數據類型和自定義對象引用
- 棧:存放對象本身
- 靜態區或方法區:存放class和static變量
暫時先寫這麼多,明天面試回來以後再補充