日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Java SSM框架面试题「建议收藏」(java注释@)

發布時間:2023/12/19 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 Java SSM框架面试题「建议收藏」(java注释@) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring入門:https://blog.csdn.net/qq_40323256/article/details/89738330

Spring中的動態代理和aop的自定義通知:https://blog.csdn.net/qq_40323256/article/details/89754201

SpringMVC入門:https://blog.csdn.net/qq_40323256/article/details/89784956

mybatis入門(實現增刪改查):https://blog.csdn.net/qq_40323256/article/details/89704582

Mapper動態代理:https://blog.csdn.net/qq_40323256/article/details/89715484

ssm中直接返回某個頁面或存東西:https://blog.csdn.net/qq_40323256/article/details/91511256

2019java后端面試集合篇最值得收藏的:

sql 中 ${} 和 #{}的區別:

  1. #將傳入的參數都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #{age},如果傳入的值是18,那么解析成sql時的值為order by “18”, 如果傳入 age ,則會解析為 order by“age”
  2. $將傳入的參數直接顯示生成在sql中,被當成一個對象。如:order by${age},如果傳入的值是18,那么解析成sql時的值為order by 18,如果傳入的值是age,則解析成的sql為order by age
  3. #方式底層采用預編譯方式PreparedStatement,能夠很大程度防止sql注入;$方式底層只是Statement,無法防止Sql注入。
  4. $方式一般用于傳入數據庫對象,例如傳入表名.
  5. 一般能用#的就別用$注意點:MyBatis排序時使用order by 動態參數時需要注意,用$而不是#

Spring MVC 的運行流程:

  1. 用戶發起請求到前端控制器(DispatcherServlet),該控制器會過濾出哪些請求可以訪問Servlet、哪些不能訪問。就是url-pattern的作用,并且會加載springmvc.xml配置文件。
  2. 前端控制器會找到處理器映射器(HandlerMapping),通過HandlerMapping完成url到controller映射的組件,簡單來說,就是將在springmvc.xml中配置的或者注解的url與對應的處理類找到并進行存儲,用map<url,handler>這樣的方式來存儲。
  3. HandlerMapping有了映射關系,并且找到url對應的處理器,HandlerMapping就會將其處理器(Handler)返回,在返回前,會加上很多攔截器。
  4. DispatcherServlet拿到Handler后,找到HandlerAdapter(處理器適配器),通過它來訪問處理器,并執行處理器。
  5. 執行處理器
  6. 處理器會返回一個ModelAndView對象給HandlerAdapter
  7. 通過HandlerAdapter將ModelAndView對象返回給前端控制器(DispatcherServlet)
  8. 前端控制器請求視圖解析器(ViewResolver)去進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp),其實就是將ModelAndView對象中存放視圖的名稱進行查找,找到對應的頁面形成視圖對象
  9. 返回視圖對象到前端控制器。
  10. 視圖渲染,就是將ModelAndView對象中的數據放到request域中,用來讓頁面加載數據的。
  11. 通過第8步,通過名稱找到了對應的頁面,通過第10步,request域中有了所需要的數據,那么就能夠進行視圖渲染了。最后將其返回即可。

Spring MVC 常用的 5 個注解:

  1. @Controller:@Controller用于標記在一個類上,使用它標記的類就是一個SpringMVC Controller對象。分發處理器將會掃描使用了該注解的類的方法,并檢測該方法是否使用了@RequestMapping注解。@Controller只是定義了一個控制器類,而使用@RequestMapping注解的方法才是真正處理請求的處理器。
  2. @RequestMapping :@RequestMapping是一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。用于方法上,方法的返回值會通過視圖解析器解析為實際的物理視圖。
  3. @ResponseBody:@ResponseBody用于將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式后,寫入到Response對象的body數據區。

    注意:返回的數據是其他某種格式的數據時(如json、xml等)才使用;

  4. @RequestParam:@RequestParam用于將請求參數區數據映射到功能處理方法的參數上,用例:
    @RequestMapping("/testRequestParam")
        public String testRequestParam(@RequestParam("id") int id) {
            System.out.println("testRequestParam  " + id);
            return "success";
        }

  5. @Resource和@Autowired:都是做bean的注入時使用

  共同點:兩者都可以寫在字段和setter方法上。兩者如果都寫在字段上,那么就不需要再寫setter方法。

  不同點:

@Autowired為Spring提供的注解,需要導入包org.springframework.beans.factory.annotation.Autowired;@Autowired注解是按照類型(byType)裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許null值,可以設置它的required屬性為false。如果我們想使用按照名稱(byName)來裝配,可以結合@Qualifier注解一起使用。如下:

public class HelloWorld{ 
  @Autowired 
  @Qualifier("userDao") 
  private UserDao userDao; 
}

   @Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要導入,但是Spring支持該注解的注入。@Resource默認按照ByName自動注入,由J2EE提供,需要導入包javax.annotation.Resource。@Resource有兩個重要的屬性:name和type,而Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以,如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不制定name也不制定type屬性,這時將通過反射機制使用byName自動注入策略。

注意:最好是將@Resource放在setter方法上,因為這樣更符合面向對象的思想,通過set、get去操作屬性,而不是直接去操作屬性。

IOC,AOP的實現原理:

IOC:控制反轉,是一種設計模式。一層含義是控制權的轉移:由傳統的在程序中控制依賴轉移到由容器來控制;第二層是 依賴注入 (DI)

DI:依賴注入,將相互依賴的對象分離,在spring配置文件中描述他們的依賴關系,調用setter方法來注入(反射的話太消耗性能)。他們的依賴關系只在使用的時候才建立。簡單來說就是不需要總是NEW一個對象了,只需要一個或多個對象(由你定義的策略決定,一般是單例),統一由容器進行管理。

AOP:面向切面,是一種編程思想,是對OOP面向對象的補充和完善。將系統中非核心的業務提取出來,進行單獨處理。比如事務、日志和安全等。這個簡單來說就是可以在一段程序之前或者之后做一些事。實現AOP的技術,主要分為兩大類:一是采用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行(jdk動態代理:必須至少實現一個接口,底層利用反射機制,效率較低;cglib動態代理:原理是使用ASM字節碼技術對指定的業務類生成一個子類,并覆蓋業務方法實現代理,采用繼承的方式,所以不能對final修改的類進行代理);二是采用靜態代理的方式,在代碼中顯示地實現一個業務實現類的指定代理,在代理類中對同名的業務方法進行包裝(不修改原有的業務代碼),用戶通過代理類調用被包裝過的業務方法,但會導致代碼冗余。目前這幾種代理方式并沒有高低之分,只是應用的場景不同。

Spring 的AOP和IOC都是為了解決系統代碼耦合度過高的問題。使代碼重用度高、易于維護。
AOP和IOC并不是spring中特有的,只是spring把他們應用的更靈活方便。

Spring DI 常用的三種方式:

常用的注入方式主要有三種:構造方法注入,setter注入,接口注入。

總結

以上是生活随笔為你收集整理的Java SSM框架面试题「建议收藏」(java注释@)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。