1.Spring中AOP的應用場景、Aop原理、好處?html
答:AOP用來封裝橫切關注點,具體能夠在下面的場景中使用:前端
Authentication 權限、Caching 緩存、Context passing 內容傳遞、Error handling 錯誤處理java
Lazy loading懶加載、Debugging調試、logging, tracing, profiling and monitoring 記錄跟蹤優化 校準、Performance optimization 性能優化、Persistence 持久化、Resource pooling 資源池、Synchronization 同步、Transactions 事務mysql
原理:AOP是面向切面編程,是經過代理的方式爲程序添加統一功能,集中解決一些公共問題。git
好處:1.各個步驟之間的良好隔離性
2.源代碼無關性 程序員
2.Spring中IOC的做用與原理?對象建立的過程。github
答:當某個角色須要另一個角色協助的時候,在傳統的程序設計過程當中,一般由調用者來建立被調用者的實例。但在spring中建立被調用者的工做再也不由調用者來完成,所以稱爲控制反轉。建立被調用者的工做由spring來完成,而後注入調用者 。spring
3.介紹spring框架sql
它是一個full-stack框架,提供了從表現層到業務層再到持久層的一套完整的解決方案。咱們在項目中能夠只使用spring一個框架,它就能夠提供表現層的mvc框架,持久層的Dao框架。它的兩大核心IoC和AOP更是爲咱們程序解耦和代碼簡潔易維護提供了支持。數據庫
4.Spring常見建立對象的註解?
答:@Component@Controller@ Service@ Repository
5.Spring中用到的設計模式
答:簡單工廠、工廠方法、單例模式、適配器、包裝器、代理、觀察者、策略、模板方法
詳細介紹:http://www.cnblogs.com/yuefan/p/3763898.html
6.Spring的優勢?
答:1.下降了組件之間的耦合性 ,實現了軟件各層之間的解耦
2.可使用容易提供的衆多服務,如事務管理,消息服務等
3.容器提供單例模式支持
4.容器提供了AOP技術,利用它很容易實現如權限攔截,運行期監控等功能
6.spring對於主流的應用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring屬於低侵入式設計,代碼的污染極低
1、它的核心之一IoC,下降了咱們程序的耦合度,使咱們能夠把項目設計成爲一個可插拔的組件式工程。
2、它的另外一大核心AOP,使咱們在開發過程當中,精力獲得釋放,能夠更專一的去理解客戶的需求。而且在後期維護時,能夠只維護不多的一部分。
10.Spring的高度開放性,並不強制應用徹底依賴於Spring,開發者能夠自由選擇spring 的部分或所有
7.Spring Bean的做用域之間有什麼區別?
Spring容器中的bean能夠分爲5個範圍。全部範圍的名稱都是自說明的,可是爲了不混淆,仍是讓咱們來解釋一下:
singleton:這種bean範圍是默認的,這種範圍確保無論接受到多少個請求,每一個容器中只有一個bean的實例,單例的模式由bean factory自身來維護。
prototype:原形範圍與單例範圍相反,爲每個bean請求提供一個實例。
request:在請求bean範圍內會每個來自客戶端的網絡請求建立一個實例,在請求完成之後,bean會失效並被垃圾回收器回收。
Session:與請求範圍相似,確保每一個session中有一個bean的實例,在session過時後,bean會隨之失效。
global-session:global-session和Portlet應用相關。當你的應用部署在Portlet容器中工做時,它包含不少portlet。若是你想要聲明讓全部的portlet共用全局的存儲變量的話,那麼這全局變量須要存儲在global-session中。
全局做用域與Servlet中的session做用域效果相同。
8.Spring管理事務有幾種方式?
答:有兩種方式:
1、編程式事務,在代碼中硬編碼。(不推薦使用)
2、聲明式事務,在配置文件中配置(推薦使用)
聲明式事務又分爲兩種:
a、基於XML的聲明式事務
b、基於註解的聲明式事務
Spring的AOP來實現的;配置了只讀事務和回滾事務(傳播行爲爲REQUIRED)當出現錯誤後進行回滾操做。在項目中經過aop切入事務到serivce層,這樣作能使一次業務邏輯操做若是包括幾個數據庫操做都控制在一個事務中。
9.spring中自動裝配的方式有哪些?
答:1、 No:即不啓用自動裝配。
2、 byName:經過屬性的名字的方式查找JavaBean依賴的對象併爲其注入。好比說類Computer有個屬性printer,指定其autowire屬性爲byName後,Spring IoC容器會在配置文件中查找id/name屬性爲printer的bean,而後使用Seter方法爲其注入。
3、 byType:經過屬性的類型查找JavaBean依賴的對象併爲其注入。好比類Computer有個屬性printer,類型爲Printer,那麼,指定其autowire屬性爲byType後,Spring IoC容器會查找Class屬性爲Printer的bean,使用Seter方法爲其注入。
4、 constructor:通byType同樣,也是經過類型查找依賴對象。與byType的區別在於它不是使用Seter方法注入,而是使用構造子注入。
5、 autodetect:在byType和constructor之間自動的選擇注入方式。
6、 default:由上級標籤<beans>的default-autowire屬性肯定。
10.spring中的核心類有那些,各有什麼做用?
答:BeanFactory:產生一個新的實例,能夠實現單例模式
BeanWrapper:提供統一的get及set方法
ApplicationContext:提供框架的實現,包括BeanFactory的全部功能
11.Bean的調用方式有哪些?
答:有三種方式能夠獲得Bean並進行調用:
1、使用BeanWrapper
HelloWorld hw=new HelloWorld();
BeanWrapper bw=new BeanWrapperImpl(hw);
bw.setPropertyvalue(」msg」,」HelloWorld」);
system.out.println(bw.getPropertyCalue(」msg」));
2、使用BeanFactory
InputStream is=new FileInputStream(」config.xml」);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) factory.getBean(」HelloWorld」);
system.out.println(hw.getMsg());
3、使用ApplicationConttext
ApplicationContext actx=new FleSystemXmlApplicationContext(」config.xml」);
HelloWorld hw=(HelloWorld) actx.getBean(」HelloWorld」);
System.out.println(hw.getMsg());
12.什麼是IOC,什麼又是DI,他們有什麼區別?
簡單答法:IoC 控制反轉,指將對象的建立權,反轉到Spring容器 , DI 依賴注入,指Spring建立對象的過程當中,將對象依賴屬性經過配置進行注入
答:依賴注入DI是一個程序設計模式和架構模型, 一些時候也稱做控制反轉,儘管在技術上來說,依賴注入是一個IOC的特殊實現,依賴注入是指一個對象應用另一個對象來提供一個特殊的能力,例如:把一個 數據庫鏈接已參數的形式傳到一個對象的結構方法裏面而不是在那個對象內部自行建立一個鏈接。控制反轉和依賴注入的基本思想就是把類的依賴從類內部轉化到外 部以減小依賴
應用控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用,傳遞給它。也能夠說,依賴被注入到對象中。所 以,控制反轉是,關於一個對象如何獲取他所依賴的對象的引用,這個責任的反轉。
13.spring有兩種代理方式:
答: 若目標對象實現了若干接口,spring使用JDK的java.lang.reflect.Proxy類代理。
優勢:由於有接口,因此使系統更加鬆耦合
缺點:爲每個目標類建立接口
若目標對象沒有實現任何接口,spring使用CGLIB庫生成目標對象的子類。
優勢:由於代理類與目標類是繼承關係,因此不須要有接口的存在。
缺點:由於沒有使用接口,因此係統的耦合性沒有使用JDK的動態代理好。
14.springMVC的流程?
答:1.用戶發送請求至前端控制器DispatcherServlet
2.DispatcherServlet收到請求調用HandlerMapping處理器映射器。
3.處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(若是有則生成)一併返回給DispatcherServlet。
4.DispatcherServlet經過HandlerAdapter處理器適配器調用處理器
5.執行處理器(Controller,也叫後端控制器)。
6.Controller執行完成返回ModelAndView
7.HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
8.DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
9.ViewReslover解析後返回具體View
10.DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。
11.DispatcherServlet響應用戶
15.Springmvc的優勢
答:1.它是基於組件技術的.所有的應用對象,不管控制器和視圖,仍是業務對象之類的都是 java組件.而且和Spring提供的其餘基礎結構緊密集成.
2.不依賴於Servlet API(目標雖是如此,可是在實現的時候確實是依賴於Servlet的)
3. 能夠任意使用各類視圖技術,而不只僅侷限於JSP
4 . 支持各類請求資源的映射策略
5 .它應是易於擴展的
16.Struts2的流程?
答:1.客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
2.這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助,例如:SiteMesh Plugin)
3.接着StrutsPrepareAndExecuteFilter被調用,StrutsPrepareAndExecuteFilter詢問ActionMapper來解析和判斷該次請求是否須要由struts2框架來處理.
4.若是ActionMapper判斷須要struts2來處理請求,StrutsPrepareAndExecuteFilter會把請求的處理交給ActionProxy
5 .ActionProxy經過Configuration Manager加載框架的配置文件,找到須要調用的Action以及攔截器配置信息
6 .ActionProxy建立一個ActionInvocation的實例。
7 .ActionInvocation實例使用命名模式來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。
8.一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果配置。根據配置找到對應的Result處理類來處理結果集.大多數狀況輸出會交由模版語言(JSP,FreeMarker)完成輸出內容拼裝
17.struts2中有哪些經常使用結果類型?
答:1) dispatcher :Action 轉發給 JSP
2) chain :Action轉發到另外一個Action (同一次請求)
3) redirect : Action重定向到 JSP
4) redirectAction :Action重定向到另外一個Action
stream:下載用的(文件上傳和下載時再議)
plainText:以純文本的形式展示內容
18.struts2的Action有幾種編寫方式?
答:第一種 建立類,這個類不繼承任何類,不實現任何的接口
第二種 建立類,實現接口 Action接口
第三種 建立類,繼承類 ActionSupport類,ActionSupport類是Action接口的實現類
19.使用struts2如何實現多文件上傳?
答:1第一步 上傳表單頁面,知足三個要求,提交到action裏面,要求:多個文件上傳項name屬性值必需要同樣
2建立action,在action實現多文件的上傳,在action中使用數組形式獲得多個文件的息
private File[] uploadImages;//獲得上傳的文件
private String[] uploadImagesContentType;//獲得文件的類型
private String[] uploadImagesFileName;//獲得文件的名稱
3遍歷數組,獲得每個文件的信息,一個一個上傳到服務器中
if(uploadImages!=null&&uploadImages.length>0){
for(int i=0;i<uploadImages.length;i++){
File destFile = new File(realpath,uploadImageFileNames[i]);
FileUtils.copyFile(uploadImages[i], destFile);
}
}
20.springMVC與Struts2的區別?
答: 1.springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。
2.springmvc是基於方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,能夠設計爲單例或多例(建議單例),struts2是基於類開發,傳遞參數是經過類的屬性,只能設計爲多例。
3.Struts採用值棧存儲請求和響應的數據,經過OGNL存取數據, springmvc經過參數
解析器是將request請求內容解析,並給方法形參賦值,將數據和視圖封裝成ModelAndView對象,最後又將ModelAndView中的模型數據經過reques域傳輸到頁面。Jsp視圖解析器默認使用jstl。
21.如何防止表單重複提交?表單重複提交的緣由?
答:令牌機制。
緣由:1.服務器處理服務後,轉發頁面,客戶端點擊刷新(重定向)
2.客戶端網絡過慢,按鈕連續點擊。
22.hibernate原理?
答: hibernate,經過對jdbc 進行封裝,對java 類和 關係數據庫進行mapping,實現了對關係數據庫的面向對象方式的操做,改變了傳統的jdbc + sql 操做數據的方式,從而使開發人員能夠話更多精力進行對象方面的開發
1.讀取並解析配置文件
2.讀取並解析映射信息,建立SessionFactory
3.打開Sesssion
4.建立事務Transation
5.持久化操做
6.提交事務
7.關閉Session
8.關閉SesstionFactory
23.hibernate的優勢?
答:1.對JDBC訪問數據庫的代碼作了封裝,大大簡化了數據訪問層繁瑣的重複性代碼。
2.Hibernate 是一個基於JDBC 的主流持久化框架,是一個優秀的ORM 實現。他很大程度
的簡化DAO 層的編碼工做
3.hibernate 的性能很是好,由於它是個輕量級框架。映射的靈活性很出色。它支持各
種關係數據庫,從一對一到多對多的各類複雜關係。
24.什麼是 Hibernate 延遲加載?
答:延遲加載機制是爲了不一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正須要
數據的時候,才真正執行數據加載操做。在Hibernate中提供了對實體對象的延遲加載以及
對集合的延遲加載,另外在Hibernate3中還提供了對屬性的延遲加載。
25.Hibernate 中類之間的關聯關係有幾種?
答:many-to-one、one-to-many、many-to-many、 one-to-one
26.說下 Hibernate的緩存機制
答:A:hibernate一級緩存
(1)hibernate支持兩個級別的緩存,默認只支持一級緩存;
(2)每一個Session內部自帶一個一級緩存;
(3)某個Session被關閉時,其對應的一級緩存自動清除;
B:hibernate二級緩存
(1) 二級緩存獨立於session,默認不開啓;
27.Hibernate 的查詢方式
答:本地SQL查詢、Criteria、Hql
28.如何優化 Hibernate?
答:1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一取代
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多態
7. 表字段要少,表關聯不要怕多,有二級緩存撐腰
29.Hibernate中一級緩存與二級緩存
答:Hibernate緩存包括兩大類:Hibernate一級緩存和Hibernate二級緩存
Hibernate一級緩存又稱爲「Session的緩存」,它是內置的,不能被卸載(不能被卸載的意思就是這種緩存不具備可選性,必須有的功能,不能夠取消session緩存)。因爲Session對象的生命週期一般對應一個數據庫事務或者一個應用事務,所以它的緩存是事務範圍的緩存。第一級緩存是必需的,不容許並且事實上也沒法卸除。在第一級緩存中,持久化類的每一個實例都具備惟一的OID。
Hibernate二級緩存又稱爲「SessionFactory的緩存」,因爲SessionFactory對象的生命週期和應用程序的整個過程對應,所以Hibernate二級緩存是進程範圍或者集羣範圍的緩存,有可能出現併發問題,所以須要採用適當的併發訪問策略,該策略爲被緩存的數據提供了事務隔離級別。第二級緩存是可選的,是一個可配置的插件,在默認狀況下,SessionFactory不會啓用這個插件。須要程序員手動開啓。 session之間能夠共享數據 應用級別的的緩存
30.Hibernate中關於對象的三種狀態?
答:瞬時態(沒有主鍵,new出來的)、持久態(session開啓,有主鍵)、隔離態(session關閉,有主鍵)。
31.Hibernate二級緩存中存放數據的原則?適合放到二級緩存中的數據?
答:1 不多被修改的數據
2 不是很重要的數據,容許出現偶爾併發的數據
3 不會被併發訪問的數據
4 常量數據
不適合存放到第二級緩存的數據?
1常常被修改的數據
2絕對不容許出現併發訪問的數據,如財務數據,絕對不容許出現併發
3與其餘應用共享的數據
32.Hibernate查找對象如何應用緩存?
答:當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,若是配置了二級緩存,那麼從二級緩存中查;若是都查不到,再查詢數據庫,把結果按照ID放入到緩存刪除、更新、增長數據的時候,同時更新緩存。
33.Hibernate拒接鏈接、服務器崩潰的緣由?
答:1. db沒有打開
2. 網絡鏈接可能出了問題
3. 鏈接配置錯了
4. 驅動的driver,url是否都寫對了
5. LIB下加入相應驅動,數據鏈接代碼是否有誤
6. 數據庫配置可能有問題
7. 當前鏈接太多了,服務器都有訪問人數限制的
8. 服務器的相應端口沒有開,即它不提供相應的服務
34.過濾器和攔截器的區別
答:過濾器:在目標資源以前進行的操做
過濾全部的內容,好比action、servlet、jsp、html
攔截器:在目標資源以前進行的操做
不能攔截全部的內容,攔截action,不能攔截jsp,不能攔截html
攔截器和過濾器之間有不少相同之處,可是二者之間存在根本的差異。其主要區別爲如下幾點:
1)攔截器是基於JAVA反射機制的,而過濾器是基於函數回調的。
2)攔截器依賴於Servlet容器,而過濾器依賴於Servlet容器
3)攔截器只能對Action請求起做用,而過濾器能夠對幾乎全部的請求起做用。
4)攔截器能夠訪問Action上下文、值棧裏的對象,而過濾器不能
5)在Action的生命週期中,攔截器能夠屢次被調用,而過濾器只能在容器初始化時被調用一次。
35.Mybaties的優劣勢?
答:1. 入門簡單,即學即用,提供了數據庫查詢的自動對象綁定功能,並且延續了很好的SQL使用經驗,對於沒有那麼高的對象模型要求的項目來講,至關完美。
2. 能夠進行更爲細緻的SQL優化,能夠減小查詢字段。
3. 缺點就是框架仍是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,可是整個底層數據庫查詢實際仍是要本身寫的,工做量也比較大,並且不太容易適應快速數據庫修改。
4. 二級緩存機制不佳
36.Mybatis中一級緩存與二級緩存區別?
答:一級緩存是SqlSession級別的緩存。在操做數據庫時須要構造 sqlSession對象,在對象中有一個(內存區域)數據結構(HashMap)用於存儲緩存數據。不一樣的sqlSession之間的緩存數據區域(HashMap)是互相不影響的。
一級緩存的做用域是同一個SqlSession,在同一個sqlSession中兩次執行相同的sql語句,第一次執行完畢會將數據庫中查詢的數據寫到緩存(內存),第二次會從緩存中獲取數據將再也不從數據庫查詢,從而提升查詢效率。當一個sqlSession結束後該sqlSession中的一級緩存也就不存在了。Mybatis默認開啓一級緩存。
二級緩存是mapper級別的緩存,多個SqlSession去操做同一個Mapper的sql語句,多個SqlSession去操做數據庫獲得數據會存在二級緩存區域,多個SqlSession能夠共用二級緩存,二級緩存是跨SqlSession的。
二級緩存是多個SqlSession共享的,其做用域是mapper的同一個namespace,不一樣的sqlSession兩次執行相同namespace下的sql語句且向sql中傳遞參數也相同即最終執行相同的sql語句,第一次執行完畢會將數據庫中查詢的數據寫到緩存(內存),第二次會從緩存中獲取數據將再也不從數據庫查詢,從而提升查詢效率。Mybatis默認沒有開啓二級緩存須要在setting全局參數中配置開啓二級緩存。
37.Ssh整合流程及注意事項
答:原理:http://blog.csdn.net/u014010769/article/details/44993533
注意事項:http://blog.csdn.net/github_32658299/article/details/53469124
38.Ssm整合流程及注意事項?
答: 流程:http://blog.csdn.net/zhshulin/article/details/37956105/
注意事項:http://blog.csdn.net/github_32658299/article/details/53957585
39.ssm的優缺點及使用場景。
答:1.Mybatis和hibernate不一樣,它不徹底是一個ORM框架,由於MyBatis須要程序員本身編寫Sql語句,不過mybatis能夠經過XML或註解方式靈活配置要運行的sql語句,並將java對象和sql語句映射生成最終執行的sql,最後將sql執行的結果再映射生成java對象。
2.Mybatis學習門檻低,簡單易學,程序員直接編寫原生態sql,可嚴格控制sql執行性能,靈活度高,很是適合對關係數據模型要求不高的軟件開發,例如互聯網軟件、企業運營類軟件等,由於這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。可是靈活的前提是mybatis沒法作到數據庫無關性,若是須要實現支持多種數據庫的軟件則須要自定義多套sql映射文件,工做量大。
3.Hibernate對象/關係映射能力強,數據庫無關性好,對於關係模型要求高的軟件(例如需求固定的定製化軟件)若是用hibernate開發能夠節省不少代碼,提升效率。可是Hibernate的學習門檻高,要精通門檻更高,並且怎麼設計O/R映射,在性能和對象模型之間如何權衡,以及怎樣用好Hibernate須要具備很強的經驗和能力才行。
總之,按照用戶的需求在有限的資源環境下只要能作出維護性、擴展性良好的軟件架構都是好架構,因此框架只有適合纔是最好。
40.Hibernate和mybatis的區別?
答:Hibernate:hibernate是一個標準的ORM框架,不須要寫sql語句,維護關係比較複雜,sql語句自動生成,對sql語句優化,修改比較困難。
Hibernate的優缺點:
優勢:面向對象開發,不須要本身寫sql語句。若是進行數據庫遷移不須要修改sql語句,只須要修改一下方言。
缺點:hibernate維護數據表關係比較複雜。徹底是有hibernate來管理數據表的關係,對於咱們來講徹底是透明的,不易維護。
Hibernate自動生成sql語句,生成sql語句比較複雜,比較難挑錯。
Hibernate因爲是面向對象開發,不能開發比較複雜的業務。
應用場景:
適合需求變化較少的項目,好比ERP,CRM等等
Mybatis框架對jdbc框架進行封裝,屏蔽了jdbc的缺點,開發簡單。
Mybatis只須要程序員關注sql自己,不須要過多的關注業務。對sql的優化,修改比較容易
適應場景:適合需求變化無窮的項目,好比:互聯網項目
41.用spring怎樣實現單例?
答:http://blog.csdn.net/cs408/article/details/48982085
答:http://www.cnblogs.com/sxl525blogs/p/3674834.html
43.mybatis如何處理批量插入
答:http://chenzhou123520.iteye.com/blog/1583407/
44.mybatis插入一條數據如何返回主鍵
答:須要在mybatis的mapper.xml中指定keyProperty屬性,示例以下:
45.hibernate的五個核心類
答:1,Configuration接口:配置Hibernate,根據其啓動Hibernate,建立SessionFactory對象;
2,SessionFactory接口:初始化Hibernate,充當數據存儲源的代理,建立session對象,SessionFactory是線程安全的,意味着它的同一個實例能夠被應用的多個線程共享,是重量級二級緩存;
3,session接口:負責保存、更新、刪除、加載和查詢對象,是一個非線程安全的,避免多個線程共享一個session,是輕量級,一級緩存。
4,Transaction接口:管理事務。能夠對事務進行提交和回滾;
5,Query和Criteria接口:執行數據庫的查詢。
46.spring和hibernate管理事務有啥區別
答:1、從編碼上說,hibernate的事務管理是硬編碼,是寫在程序之中的。這就形成了,若是須要調整,就要修改源碼,從新編譯。
2、從事務控制的位置來講:hibernate是持久層框架,事務是控制在持久層的,這樣就形成了越權操做。事務應放在業務層,而非持久層
3、從代碼維護上來講:hibernate控制事務,須要在每一個須要事務支持的地方編寫代碼,後期維護不便。