面試時遇到的一些問題

一、大概說下SpringMVC的流程

這裏寫圖片描述

Disptacher爲核心處理器,基本所有操作都圍繞它轉

  • 1、用戶發起請求,請求抵達DispatcherServlet,dispatcherServlet調用doService方法中的如圖所示代碼
    1
  • 2、代碼執行到940行,調用getHandler方法獲取HandlerExecutionChain,而它是由2部分組成,用戶寫的handler(即controller)與對應請求上的攔截器鏈
    2-1
    2-2
    2-3
    2-4
  • 3、用戶根據mappedHandler獲取HandlerAdaper,之後調用攔截器perHandle方法,只有全部通過了之後纔會調用用戶寫的controller邏輯,返回modelAndView對象
    3
  • 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變量

暫時先寫這麼多,明天面試回來以後再補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章