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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSM 面试题

發(fā)布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSM 面试题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.什么是Spring框架?
spring是為java應用程序開發(fā)提供基礎性服務的一套框架,其目的是用于簡化企業(yè)級應用程序開發(fā),它使得程序員只需要關心業(yè)務需求。常見的配置方式有三種:基于XML的配置、基于注解的配置、基于Java的配置。
主要有以下幾個模塊組成:
Spring Core:核心類庫,提供IOC服務;
Spring Context:提供框架式的Bean訪問方式(可以使用配置文件)以及企業(yè)級功能(JNDI,定時任務等);
Spring AOP:AOP服務;
Spring DAO:對JDBC抽象,簡化了數(shù)據(jù)訪問異常處理;
Spring ORM:提供對現(xiàn)有ORM框架的支持;
Spring Web:提供了基本的面向Web的綜合特性,例如多方文件上傳;
Spring MVC:提供了面向Web應用的Model-View-Controller實現(xiàn)。

Spring的優(yōu)點?
1)低侵入式設計,代碼污染極低;
2)IOC將對象之間的依賴關系交由框架處理,降低組件的耦合性;
3)AOP支持允許將一些通用任務如安全、事務、日志等進行集中式管理,從而提供了更好的復用;
4)對主流的框架提供了很好的集成支持。

什么是DI或者IOC?請解釋下Spring IOC。
IOC:即“控制反轉”,是一種設計思想,是指創(chuàng)建對象的控制權的轉移,以前創(chuàng)建對象的主動權和創(chuàng)建時機是由自己把控的,而現(xiàn)在這種權力轉移到容器,對象與對象之間松散耦合,也利于功能復用,更重要的是使得程序的整個體系結構變得非常靈活。DI(依賴注入)和控制反轉是同一個概念的不同角度描述,所謂依賴注入就是應用程序依賴于IoC容器,在運行時需要IoC容器來動態(tài)提供對象需要的外部資源。
Java中依賴注入有以下三種實現(xiàn)方式:構造器注入、Setter方法注入、接口注入。
4、BeanFactory和ApplicationContext有什么區(qū)別?
BeanFactory 可以理解為含有bean集合的工廠類。BeanFactory 包含了種bean的定義,以便在接收到客戶端請求時將對應的bean實例化。BeanFactory還能在實例化對象時生成協(xié)作類之間的關系。此舉將bean自身與bean客戶端的配置中解放出來。BeanFactory還包含了bean生命周期的控制,調用客戶端的初始化方法和銷毀方法。
從表面上看,application context如同bean factory一樣具有bean定義、bean關聯(lián)關系的設置,根據(jù)請求分發(fā)bean的功能。但application context在此基礎上還提供了其他的功能。
A.提供了支持國際化的文本消息;
B.統(tǒng)一的資源文件讀取方式;
C.已在監(jiān)聽器中注冊的bean的事件。
以下是三種較常見的 ApplicationContext 實現(xiàn)方式:
1、ClassPathXmlApplicationContext:從classpath的XML配置文件中讀取上下文,并生成上下文定義。應用程序上下文從程序環(huán)境變量中取得。
ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);
2、FileSystemXmlApplicationContext :由文件系統(tǒng)中的XML配置文件讀取上下文,需要指定完整路徑。
ApplicationContext context = new FileSystemXmlApplicationContext(“bean.xml”);
3、XmlWebApplicationContext:由Web應用的XML文件讀取上下文,在web.xml中配置。

Spring AOP
OOP引入封裝、繼承、多態(tài)等概念來建立一種對象層次結構,OOP允許開發(fā)者定義縱向的關系,但并不適合定義橫向的關系,例如日志功能。日志代碼往往橫向地散布在所有對象層次中,而與它對應的對象的核心功能毫無關系對于其他類型的代碼,如安全性、異常處理和透明的持續(xù)性也都是如此,這種散布在各處的無關的代碼被稱為橫切(cross cutting),在OOP設計中,它導致了大量代碼的重復,而不利于各個模塊的重用。
AOP技術恰恰相反,它利用一種稱為"橫切"的技術,將那些影響了多個類的公共行為封裝到一個可重用模塊,并將其命名為"Aspect",即切面。所謂"切面",簡單說就是那些與業(yè)務無關,卻為業(yè)務模塊所共同調用的邏輯或責任封裝起來,便于減少系統(tǒng)的重復代碼,降低模塊之間的耦合度,并有利于未來的可操作性和可維護性。
使用"橫切"技術,AOP把軟件系統(tǒng)分為兩個部分:核心關注點和橫切關注點。業(yè)務處理的主要流程是核心關注點,與之關系不大的部分是橫切關注點。橫切關注點的一個特點是,他們經常發(fā)生在核心關注點的多處,而各處基本相似,比如權限認證、日志、事務。AOP的作用在于分離系統(tǒng)中的各種關注點,將核心關注點和橫切關注點分離開來

spring bean的生命周期
1) 實例化Bean
對于BeanFactory容器,當客戶向容器請求一個尚未初始化的bean時,或初始化bean的時候需要注入另一個尚未初始化的依賴時,容器就會調用createBean進行實例化。對于ApplicationContext容器,當容器啟動結束后,便實例化所有的bean。容器通過獲取BeanDefinition對象中的信息進行實例化。并且這一步僅僅是簡單的實例化,并未進行依賴注入。實例化對象被包裝在BeanWrapper對象中,BeanWrapper提供了設置對象屬性的接口,從而避免了使用反射機制設置屬性。
2)設置對象屬性(依賴注入)
實例化后的對象被封裝在BeanWrapper對象中,并且此時對象仍然是一個原生的狀態(tài),并沒有進行依賴注入。 緊接著,Spring根據(jù)BeanDefinition中的信息進行依賴注入。 并且通過BeanWrapper提供的設置屬性的接口完成依賴注入。
3) 處理Aware接口
緊接著,Spring會檢測該對象是否實現(xiàn)了xxxAware接口,并將相關的xxxAware實例注入給bean。
3.1)如果這個Bean實現(xiàn)了BeanNameAware接口,會調用它實現(xiàn)的 (String beanId)方法,此處傳遞的是Spring配置文件中Bean的ID。
3.2)如果這個Bean實現(xiàn)了BeanFactoryAware接口,會調用它實現(xiàn)的setBeanFactory(),傳遞的是Spring工廠本身。
3.3)如果這個Bean實現(xiàn)了ApplicationContextAware接口,會調用setApplicationContext(ApplicationContext)方法,傳入Spring上下文。
4)BeanPostProcessor
當經過上述幾個步驟后,bean對象已經被正確構造,但如果你想要對象被使用前再進行一些自定義的處理,就可以通過BeanPostProcessor接口實現(xiàn)。
5)InitializingBean與init-method
在Bean的全部屬性設置成功后執(zhí)行的初始化方法,這一階段也可以在bean正式構造完成前增加我們自定義的邏輯,但它與前置處理不同,由于該函數(shù)并不會把當前bean對象傳進來,因此在這一步沒辦法處理對象本身,只能增加一些額外的邏輯。若要使用它,我們需要讓bean實現(xiàn)該接口,并把要增加的邏輯寫在該函數(shù)中。然后Spring會在前置處理完成后檢測當前bean是否實現(xiàn)了該接口,并執(zhí)行afterPropertiesSet函數(shù)。
6)DisposableBean和destroy-method
和init-method一樣,通過給destroy-method指定函數(shù),就可以在bean銷毀前執(zhí)行指定的邏輯。

Spring Bean的作用域之間有什么區(qū)別?
1)singleton:默認,每個容器中只有一個bean的實例
2)prototype:為每一個bean請求提供一個實例
3)request:為每一個網(wǎng)絡請求創(chuàng)建一個實例
4)session:與request范圍類似,確保每個session中有一個bean的實例,在session過期后,bean會隨之失效。
5) global-session:global-session和Portlet應用相關
8.Spring框架中的單例Beans是線程安全的么?
Spring框架并沒有對單例bean進行任何多線程的封裝處理。關于單例bean的線程安全和并發(fā)問題需要開發(fā)者自行去搞定。但實際上,大部分的Spring bean并沒有可變的狀態(tài)(比如Service類和DAO類),所以在某種程度上說Spring的單例bean是線程安全的。如果你的bean有多種狀態(tài)的話(比如 View Model 對象),就需要自行保證線程安全。最淺顯的解決辦法就是將多態(tài)bean的作用域由“singleton”變更為“prototype”.

spring的自動裝配?
自動裝配:在spring中,對象無需自己查找或創(chuàng)建與其關聯(lián)的其他對象,容器負責把需要相互協(xié)作的對象引用賦予各個對象,使用autowire來配置自動裝載模式。
xml中5種自動裝配模式,基于配置的方式。
1)no:默認的方式是不進行自動裝配,通過手工設置ref 屬性來進行裝配bean。
2)byName:通過參數(shù)名自動裝配,如果一個bean的name 和另外一個bean的 property 相同,就自動裝配。
3)byType:通過參數(shù)的數(shù)據(jù)類型自動自動裝配。
4)construct:構造函數(shù)進行裝配,并且構造函數(shù)的參數(shù)通過byType進行裝配。
5)autodetect :如果有構造方法,通過 construct的方式自動裝配,否則使用 byType的方式自動裝配。
基于注解的方式自動裝配:
除了bean配置文件中提供的自動裝配模式,還可以使用@Autowired注解來自動裝配指定的bean。在使用@Autowired注解之前需要在按照如下的配置方式在Spring配置文件進行配置才可以使用<context:annotation-config />。在啟動spring IoC時,容器自動裝載了一個AutowiredAnnotationBeanPostProcessor后置處理器,當容器掃描到@Autowied、@Resource或@Inject時,就會在IoC容器自動查找需要的bean,并裝配給該對象的屬性。
在使用@Autowired時,首先在容器中查詢對應類型的bean,     如果查詢結果剛好為一個,就將該bean裝配給@Autowired指定的數(shù)據(jù);     如果查詢的結果不止一個,那么@Autowired會根據(jù)名稱來查找;     如果上述查找的結果為空,那么會拋出異常。解決方法時,使用required=false。
當出現(xiàn)裝配歧義性(即一個接口出多個實現(xiàn)類),解決方法:
1)首先加上注解@Qualifier用來注入指定名字的實例(通過在實現(xiàn)接口的類上通過value屬性去命名不同的名稱,對于@Repository、@Service 和 @Controller 和 @Component四個注解都有類似value屬性可以設置)。
2)因為一個接口存在兩個以上的實現(xiàn)類,也可以通過標識首選哪個bean,來解決歧義性問題。
@Component @Primary public class UserServiceImpl implements IUserService{}br/>@Autowired可用于:構造函數(shù)、成員變量、Setter方法
注:@Autowired和@Resource之間的區(qū)別br/>(1)、@Autowired默認是按照類型裝配注入的,默認情況下它要求依賴對象必須存在(可以設置它required屬性為false)。
(2)、@Resource默認是按照名稱來裝配注入的,只有當找不到與名稱匹配的bean才會按照類型來裝配注入。br/>@Autowired一般會和組件掃描搭配實現(xiàn)自動配置
組件掃描需要配置<context:component-scan base-package=“cn.itcast” />(包含了<context:annotation-config />),之后spring就會自動尋找@Component、@Service、@Controller、@Repository注解的類,并把這些類放入Spring容器管理

Spring框架中有哪些不同類型的事件?
Spring 提供了以下5種標準的事件:
1)上下文更新事件(ContextRefreshedEvent):在調用ConfigurableApplicationContext 接口中的refresh()方法時被觸發(fā)。
2)上下文開始事件(ContextStartedEvent):當容器調用ConfigurableApplicationContext的Start()方法開始/重新開始容器時觸發(fā)該事件。
3)上下文停止事件(ContextStoppedEvent):當容器調用ConfigurableApplicationContext的Stop()方法停止容器時觸發(fā)該事件。
4)上下文關閉事件(ContextClosedEvent):當ApplicationContext被關閉時觸發(fā)該事件。容器被關閉時,其管理的所有單例Bean都被銷毀。
5)請求處理事件(RequestHandledEvent):在Web應用中,當一個http請求(request)結束觸發(fā)該事件。
如果一個bean實現(xiàn)了ApplicationListener接口,當一個ApplicationEvent 被發(fā)布以后,bean會自動被通知。
11 .spring的設計模式?
1)工廠模式,BeanFactory用來創(chuàng)建對象的實例。
2) 代理模式,在Aop實現(xiàn)中用到了JDK的動態(tài)代理。
3) 單例模式,這個比如在創(chuàng)建bean的時候。
4) 模板方法,用來解決代碼重復的問題。比如. RestTemplate, JmsTemplate, JpaTemplate。

spring中的BeanFactory與ApplicationContext的作用有哪些?
BeanFactory負責讀取bean配置文檔,管理bean的加載,實例化,維護bean之間的依賴關系
ApplicationContext除了提供上述BeanFactory所能提供的功能之外,還提供了更完整的框架功能:
a. 國際化支持
b. 資源訪問:Resource rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”
c. 事件傳遞:通過實現(xiàn)ApplicationContextAware接口
SpringMVC
1.SpringMVC的工作流程?

1、用戶發(fā)送請求至前端控制器DispatcherServlet;
2、DispatcherServlet收到請求調用HandlerMapping處理器映射器;
3、處理器映射器找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet;
4、DispatcherServlet調用HandlerAdapter處理器適配器;
5、HandlerAdapter經過適配調用具體的處理器(Controller,也叫后端控制器);
6、Controller執(zhí)行完成返回ModelAndView;
7、HandlerAdapter將controller執(zhí)行結果ModelAndView返回給DispatcherServlet;
8、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器;
9、ViewReslover解析后返回具體View;
10、DispatcherServlet根據(jù)View進行渲染視圖(即將模型數(shù)據(jù)填充至視圖中);
11、DispatcherServlet響應用戶。

SpringMVC常用的注解有哪些?br/>@RequestMapping:用于請求url映射。
@RequestBody:注解實現(xiàn)接收http請求的json數(shù)據(jù),將json轉換為java對象。
@ResponseBody:注解實現(xiàn)將conreoller方法返回對象轉化為json對象響應給客戶。

如何解決get和post亂碼問題?
解決post請求亂碼:我們可以在web.xml里邊配置一個CharacterEncodingFilter 過濾器。設置為utf-8。
解決get請求亂碼有兩種方法個:
1)修改tomcat配置文件添加編碼和工程編碼一致;
2) 另一種方法對參數(shù)進行重新編碼;
String username = new String(Request.getParameter(“userName”).getBytes(“ISO8859-1”),“utf-8”)。

springmvc的優(yōu)點?
1)可以支持各種視圖技術,而不僅僅局限于JSP;
2)與Spring框架集成(如IoC容器、AOP等);
3) 清晰的角色分配:前端控制器(dispatcherServlet) , 請求到處理器映射(handlerMapping), 處理器適配器(HandlerAdapter), 視圖解析器(ViewResolver)。

什么是springmvc?
SpringMVC是一種基于Java的實現(xiàn)了MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基于請求驅動指的就是使用請求-響應模型。MVC: Model View Controller 模型-視圖-控制器 。
視圖:展示給用戶的視圖;
模型:表示數(shù)據(jù)和業(yè)務處理規(guī)則。模型返回的數(shù)據(jù)是獨立的,這樣的一個模式能夠為多個視圖提供數(shù)據(jù),這樣一來模型的代碼只需要寫一次便能夠被多個視圖重用,減少了代碼的重復性;
控制器:接受用戶的輸入并調用相應的模型和視圖來完成用戶的需求。
6.SpringMVC怎么樣設定重定向和轉發(fā)的?
在返回值前面加"forward:“就可以讓結果轉發(fā),譬如"forward:user.do?name=method4” 在返回值前面加"redirect:“就可以讓返回值重定向,譬如"redirect:http://www.baidu.com”。

7、Spring MVC的主要組件?
(1)前端控制器 DispatcherServlet(不需要程序員開發(fā))
作用:接收請求、響應結果 相當于轉發(fā)器,有了DispatcherServlet 就減少了其它組件之間的耦合度。
(2)處理器映射器HandlerMapping(不需要程序員開發(fā))
作用:根據(jù)請求的URL來查找Handler
(3)處理器適配器HandlerAdapter
注意:在編寫Handler的時候要按照HandlerAdapter要求的規(guī)則去編寫,這樣適配器HandlerAdapter才可以正確的去執(zhí)行Handler。
(4)處理器Handler(需要程序員開發(fā))
(5)視圖解析器 ViewResolver(不需要程序員開發(fā))
作用:進行視圖的解析 根據(jù)視圖邏輯名解析成真正的視圖(view)
(6)視圖View(需要程序員開發(fā)jsp)
View是一個接口, 它的實現(xiàn)類支持不同的視圖類型(jsp,freemarker,pdf等等)
8、Spring MVC的異常處理 ?br/>答:可以將異常拋給Spring框架,由Spring框架來處理;我們只需要配置簡單的異常處理器,在異常處理器中添視圖頁面即可。
9、SpringMvc的控制器是不是單例模式,如果是,有什么問題,怎么解決?
答:是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器里面不能寫字段。
10、SpingMvc中的控制器的注解一般用那個,有沒有別的注解可以替代?
答:一般用@Conntroller注解,表示是表現(xiàn)層,不能用別的注解代替。
11、 @RequestMapping注解用在類上面有什么作用?br/>答:是一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
12、如果在攔截請求中,我想攔截get方式提交的方法,怎么配置?
答:可以在@RequestMapping注解里面加上method=RequestMethod.GET。
13、如果前臺有很多個參數(shù)傳入,并且這些參數(shù)都是一個對象的,那么怎么樣快速得到這個對象?
答:直接在方法中聲明這個對象,SpringMvc就自動會把屬性賦值到這個對象里面。
14、SpringMvc中函數(shù)的返回值是什么?
答:返回值可以有很多類型,有String, ModelAndView,但一般用String比較好。
15、SpringMvc用什么對象從后臺向前臺傳遞數(shù)據(jù)的?
答:通過ModelMap對象,可以在這個對象里面用put方法,把對象加到里面,前臺就可以通過el表達式拿到。

16、注解原理
注解本質是一個繼承了Annotation的特殊接口,其具體實現(xiàn)類是Java運行時生成的動態(tài)代理類。而我們通過反射獲取注解時,返回的是Java運行時生成的動態(tài)代理對象。通過代理對象調用自定義注解的方法,會最終調用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應的值。而memberValues的來源是Java常量池。

總結

以上是生活随笔為你收集整理的SSM 面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

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