關于面試中問到的SSM框架的工作原理:
Spring
Spring就像是整個項目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數去調用實體類的構造方法來實例化對象。
Spring的核心思想是IOC(控制反轉),即不再需要程序員去顯式地new
一個對象,而是讓Spring框架幫你來完成這一切。
SpringMVC
SpringMVC在項目中攔截用戶請求,它的核心Servlet即DispatcherServlet承擔中介或是前臺這樣的職責,將用戶請求通過HandlerMapping去匹配Controller,Controller就是具體對應請求所執行的操作。SpringMVC相當于SSH框架中Struts。
Mybatis
Mybatis是對JDBC的封裝,它讓數據庫底層操作變的透明。Mybatis的操作都是圍繞一個SqlSessionFactory實例展開的。Mybatis通過配置文件關聯到各實體類的Mapper文件,Mapper文件中配置了每個類對數據庫所需進行的sql語句映射。在每次與數據庫交互時,通過SqlSessionFactory拿到一個SqlSession,再執行sql命令。
SSM框架的Web程序主要用到了三個技術:
Spring:用到了注解和自動裝配,就是Spring的兩個精髓IOC(反向控制)和 AOP(面向切面編程)。
SpringMVC:用到了MVC模型,將邏輯代碼放到Controller層處理。
Mybatis:用到了與數據庫打交道的層面,放在所有的邏輯之后,處理與數據庫的CRUD相關的操作。
要完成一個功能:
1、先寫實體類entity,定義對象的屬性,(可以參照數據庫中表的字段來設置,數據庫的設計應該在所有編碼開始之前)。
2、寫Mapper.xml(Mybatis),其中定義你的功能,對應要對數據庫進行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
3、寫Mapper.java,將Mapper.xml中的操作按照id映射成Java函數。
4、寫Service.java,為控制層提供服務,接受控制層的參數,完成相應的功能,并返回給控制層。
5、寫Controller.java,連接頁面請求和服務層,獲取頁面請求的參數,通過自動裝配,映射不同的URL到相應的處理函數,并獲取參數,對參數進行處理,之后傳給服務層。
6、寫JSP頁面調用,請求哪些參數,需要獲取什么數據。
Spring的AOP和IOC理解與實際使用
springmvc的流程 一個請求來了之后如何處理(handler鏈)
注解、反射、IOC理解
mybatis說一說
Springmvc 注解 流程
線程池,數據庫連接池 druid
有struts2和SpringMVC的區別
Cookie和Session的區別
(1):Cookie存放在客戶端,Session存放在服務端;
(2):因為Cookie存在客戶端,因為造成了他不安全的特性,很容易通過分析存放在本地的Cookie來進行Cookie欺騙;
(3):Session會在一定時間保存在服務器上,因此當訪問增多的時候,會占用服務器的資源;
(4):單個Cookie保存的數據不能超過4k,很多瀏覽器限制一個站點最多保存20個Cookie;
servlet:生命周期
aop切面的功能 和繼承的關系
說說servlet中的過濾器的使用
①了解SpringMVC與Struct2區別,兩者分別是多線程還是單線程的
②了解Spring IOC、AOP等。
什么是IOC機制?
依賴注入(Dependecy Injection)和控制反轉(Inversion of Control)是同一個概念,具體的講:當某個角色需要另外一個角色協助的時候,在傳統的程序設計過程中,通常由調用者來創建被調用者的實例。但在spring中創建被調用者的工作不再由調用者來完成,因此稱為控制反轉。創建被調用者的工作由spring來完成,然后注入調用者,因此也稱為依賴注入。
spring以動態靈活的方式來管理對象 , 注入的兩種方式,設置注入和構造注入。
設置注入的優點:直觀,自然
構造注入的優點:可以在構造器中決定依賴關系的順序。
什么是AOP?
面向切面編程(AOP)完善spring的依賴注入(DI),面向切面編程在spring中主要表現為兩個方面
1.面向切面編程提供聲明式事務管理
2.spring支持用戶自定義的切面
面向切面編程(aop)是對面向對象編程(oop)的補充,
面向對象編程將程序分解成各個層次的對象,面向切面編程將程序運行過程分解成各個切面。
AOP從程序運行角度考慮程序的結構,提取業務處理過程的切面,oop是靜態的抽象,aop是動態的抽象,
是對應用執行過程中的步驟進行抽象,,從而獲得步驟之間的邏輯劃分。
AOP主要功能
日志記錄,性能統計,安全控制,事務處理,異常處理等等wn及擴展
AOP主要意圖
將日志記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不影響業務邏輯的代碼。
aop框架具有的兩個特征:
1.各個步驟之間的良好隔離性
2.源代碼無關性
③了解SpringMVC請求流程
SpringMVC運行原理
- 客戶端請求提交到DispatcherServlet
- 由DispatcherServlet控制器查詢HandlerMapping,找到并分發到指定的Controller中。
- DispatcherServlet將請求提交到Controller
- Controller調用業務邏輯處理后,返回ModelAndView
- DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖
- 視圖負責將結果顯示到客戶端
mybatis是怎么實現映射的,它的映射原理是什么
④Hibernate與Mybatis區別
⑤Hibernate、Mybatis與JDBC區別
Spring攔截器怎么使用,Controller是單例嗎
Hibernate和JDBC的優缺點
- 如何設計一個高并發的系統
① 數據庫的優化,包括合理的事務隔離級別、SQL語句優化、索引的優化
② 使用緩存,盡量減少數據庫 IO
③ 分布式數據庫、分布式緩存
④ 服務器的負載均衡 - 你能說一下hibernate里面的inverse標簽是的作用嗎?
Spring中bean是單例的還是多例的?
默認是單例的,可以申明注解為多例的
數據源和連接池區別呢?
注入一個UserDaoImpl時,UserDaoImpl有幾個實例,一個還是多個?
簡單說一下對Redis的了解 ,Redis數據結構
Redis散列是如何實現的
Redis持久化機制
項目中Redis如何使用
什么時候適合用Redis作為主要的數據庫?
redis兩種持久化方式 ?
1:snapshotting 快照方式(默認)
快照方式是默認的持久化方式,這種方式將內存中的數據已快照的方式寫入到二進制文件中,默認的文件名為dump.rdb。
我們可以通過修改配置文件的方式配置Redis在N秒內如果超過M個key修改就自動做快照。
2:append-only file aof方式
aof比快照方式有更好的持久化性,是由于aof時,Redis會將每一個收到的寫命令通過write函數追加到文件中,當Redis重啟時,會通過重新執行文件中保存的命令在內存中重建整個數據庫的內容。
redis的操作是不是原子操作
用過消息隊列嗎?
Bean的生命周期,mybatis和hibernate對比
NIO和BIO的比較,對netty的了解
NIO的DirectByteBuffer和HeapByteBuffer,同步和異步,阻塞和非阻塞
Spring IOC,AOP,項目中怎么體現的,RestFul API的理解,框架源碼中用到的設計模式
了解web應用服務器(Apache、Tomcat、Jetty等)至少了解一個基本流程與原理
了解服務器環境配置與部署(在Linux環境下)
了解數據庫連接池(druid)、線程池作用等等
了解輸入網址之后到服務器整個過程
了解常見加密方式(MD5、SHA-1等)
Lucene底層實現原理,它的索引結構
多終端的session問題怎么處理?cookie的安全問題怎么解決?
如何防止session被別人偽造cookie得到 ?
spring事務的傳播性及級別、事務的隔離性及級別、默認隔離級別
mysql數據庫連接池的驅動參數
數據庫連接池如何防止失效
部署項目時tomcat 的參數
spring的幾個特性
spring 的優點?
1.降低了組件之間的耦合性 ,實現了軟件各層之間的解耦
2.可以使用容易提供的眾多服務,如事務管理,消息服務等
3.容器提供單例模式支持
4.容器提供了AOP技術,利用它很容易實現如權限攔截,運行期監控等功能
5.容器提供了眾多的輔助類,能加快應用的開發
6.spring對于主流的應用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring屬于低侵入式設計,代碼的污染極低
8.獨立于各種應用服務器
9.spring的DI機制降低了業務對象替換的復雜性
10.Spring的高度開放性,并不強制應用完全依賴于Spring,開發者可以自由選擇spring的部分或全部
aop事務的隔離級別和傳播特性
默認隔離級別: ISOLATION_DEFAULT