面試總結

Struts2

   1、mvc的框架

      Struts2是一個mvc框架,模型層用用於封裝和傳遞數據、完成數據訪問和 
業務邏輯,由JavaBean實現,視圖層用於顯示頁面和用戶交互用jsp來實現,控制層控制應用程序的流程用action來實現,。

   2、aop的框架

      Action執行前後都會執行配置好的攔截器,攔截器中可以對請求與返回的數據進行處理。

   3、可插拔的框架

      Struts2提供了靈活的插件機制來與其他框架進行整,只要提供所需的jar包,以及struts-plugin 配置文件即可。

      攔截器也是一種可插拔的設計,用到什麼攔截器,配置一下。

   4、struts2 流程

     容器啓動的時候加載那4個配置文件 ,如果其中有相同信息則後者覆蓋前者,最後將這些配置信息封裝到ConfigurationManager中

初始化核心分發器:Dispatcher 將struts框架工作所需的對象創建,以及其他的一些初始化工作。

當提交請求經過struts2 過濾器的doFilter(ServletRequest req, ServletResponse res, FilterChain chain)方法

 

   1 首先獲得http協議的request,respon

        HttpServletRequest request=(HttpServletRequest)req;

   2 設置編碼集

       prepare.setEncodingAndLocal(request,response)

  3 創建ActionContext

        prepare.createActionContext(request,response)

        創建值棧,

        初始化值棧,

        把當前的actionContext放入到threadlocal中

   4、把整個Dispatcher放入到threadlocal中

        prepare.assignDispatcherToThread();

   5 對請求url進行解析,並判斷你的url是否是需要經過struts的核心

      如果不需要執行chain.doFilter放行; 如果需要,

   6 請求進行包裝,解析出對應的action,

     接着得到ActionMapper的實例,通過他的getActionMapping 方法來決定是否要調用某個 Action,如果返回的ActionMapping爲空 則繼續判斷是否是要使用到struts的靜態資  源,  即路徑中有/struts/  如果有調用靜態資源處理器進行處理,如果沒有直接放行;

  如果返回的ActionMapping不爲空則執行executeAction(request, response, mapping);

   7 創建Action代理類,同時創建ActionInvocation,在ActionInvocation的初始化方法中

      1、創建action createAction(contextMap);

      2、 把當前訪問的action放入到棧頂和map棧中

          stack.push(action);

          contextMap.put("action", action);

       3、獲取當前請求的攔截器的迭代器的形式

        List<InterceptorMapping> interceptorList=new    ArrayList<InterceptorMapping>(proxy.getConfig().getInterceptors());

        interceptors = interceptorList.iterator();

8   執行所有的攔截器

     執行action

     執行結果集

    再次執行攔截器

9清空actionContext中的數據


Spring 

Spring是一個IOC和AOP容器框架;可以大大的簡化企業開發

IOC 控制反轉:將對象的創建和銷燬交給外Spring進行管理使程序員有更多的時間處理業務邏輯;

IOC實現原理

解析配置文件,解析出class ,id 反射調用器構造函數創建,

然後用id爲key,保存在一個map中;(如果有依賴注入:即解析字段,解析出對應的類型;通過反射方式創建出來;然後反射該字段的set方法;)

Aop

面向切面編程其實就是對公共代碼的抽取,實現分離關注separate aware.

比如說我們在實際開發中經常要解決的問題:權限,日誌,事務,異常等等經常性的代碼,我們將他們進行抽取,分開管理,在需要的地方將切面織

AOP的原理是爲目標類創建代理,創建代理的方式是:

1 當你的目標類實現了接口就用jdk的這個proxy

2 當你的目標類沒有實現接口就要用CGLIB方式動態產生,他產生的類是目標類子類;

 struts2中的攔截器就是這麼個東東;將所有的功能寫成對應的攔截器;

在需要的時候注入就可以了:配置文件中通過interceptor-ref:進行引用即可;他就會給你在action執行前後進行攔截;

Spring  聲明式事務處理是將所有整個應用中的事務管理做成一個切面aspect,統一事務的管理,在需要的地方只要配置對應的事務切入點和事務通知即可


Hibernate

hibernate是一個orm框架, 他是對JDBC的封裝。

1 他是利用hql採用面向對象來操作數據庫的。自動生成對應的sql 從而降低了編程時對sql語句的要求,可移植性比較好,。

只需要利用session 調用hibernate封裝好的方法操作持久化對象,實現與數據庫的交互。 

2 還有一個特點就是延遲加載的策略,控制系統發出sql語句的時機,在某些時候 大大的提高了系統的性能。 

例如: 加載菜單樹時, 只需要加載出父節點,等到點擊父節點是纔去加載子節點,可以提高系統性能。當然延時加載也會有負面的影響,就是有的時候取哪些還未加載出來的數據時,session關閉了。 這是會拋no session 異常。  此時可以通過 配置opensessionview這個過濾器來解決這個問題

3 然後就是他的緩存機制,將查詢出來的持久化對象放到緩存中,再次使用這些數據的時候  直接從緩存中取,減少了與數據庫的交互次數,大大提高了系統的效率。

----

表關係複雜,或數據處理量大,一般不用hibernate,二用半自動的Ibatis,或直接jdbc.

系統數據處理量巨大,性能要求極爲苛刻,這往往意味着我們必須通過經過高
度優化的SQL語句(或存儲過程)才能達到系統性能設計指標。

是相對Hibernate等提供了全面的數據庫封裝機制的“全自動化”
ORM 實現而言,“全自動”ORM 實現了POJO 和數據庫表之間的映射,以及SQL 的自動生成和執行  

Mybatis

 Mybatis首先也是一個對jdbc的封裝 但更側重於 面向sql編程, 核心配置文件中需要要配置結果集, 需要寫一些sql語句, 這樣也就使的 對程序員在sql語句上有更高的要求。     但是又一點好處,就是 可以進行sql語句的優化來提高性能。 這是hibernate做不到的。 一般大項目用MyBatis 或直接jdbc

----POJO--簡單的Java對象

SQL開發的工作量大和數據庫移植性較差,爲系統設計提供了更大的自由空間

ibatis 的着力點,則在於POJO SQL之間的映射關係。也就是說,ibatis
並不會爲程序員在運行期自動生成SQL 執行。具體的SQL 需要程序員編寫,然後通過映
射配置文件,將SQL所需的參數,以及返回的結果字段映射到指定POJO

SpringMVC

Spring的MVC框架主要由DispatcherServlet、處理器映射、處理器、視圖解析器、視圖組成

整個處理過程從一個HTTP請求開始:

1、 DispatcherServlet接收到請求後根據對應配置文件中配置的處理器映射,找到對應的處理器(Handler)

2、 調用相應處理器中的處理方法,處理該請求,處理器處理結束後會將一個ModelAndView類型的數據傳給DispatcherServlet,這其中包含了處理結果的視圖和視圖中要使用的數據

3、 DispatcherServlet根據得到的ModelAndView中的視圖對象,找到一個合適的ViewResolver(視圖解析器),根據視圖解析器的配置,DispatcherServlet將視圖要顯示的數據傳給對應的視圖,最後給瀏覽器構造一個HTTP響應

DispatcherServlet是整個Spring MVC的核心,它負責接收HTTP請求組織協調Spring MVC的各個組成部分

其主要工作有以下三項:

1、 截獲符合特定格式的URL請求

2、 初始化DispatcherServlet上下文對應的WebApplicationContext,並將其與業務層、持久化層的WebApplicationContext建立關聯

3、 初始化Spring MVC的各個組成組件,並裝配到DispatcherServlet中

 

JBPM常用接口有哪些?

ProcessEngine工作流的流程引擎對象

1、RepositoryService    流程資源服務的接口。 

   作用:    提供對流程定義部署、查詢、刪除等操作。 

2、ExecutionService     流程執行服務的接口。 

   作用:    提供啓動流程實例、“執行”推進,設置流程實例變量等操作。 

3、ManagementService   流程管理控制服務接口。 

   作用:    提供異步工作相關的執行和查詢操作。 

4、TaskService          人工任務服務接口。 

   作用:    提供對任務(Task)的創建、提交、查詢、保存、刪除等操作。 

5、HistoryService       流程歷史服務的接口。 

 作用:    提供對任務的管理操作,提供對流程歷史庫中歷史流程實例、歷史活動實例等記錄的查詢操作。還提供諸如某個流程定義中所有活動的平均持續時間、某個流程定義中某轉移的結果次數等數據分析服務。 

6、IdentityService      身份認證服務的接口。 

   作用:    提供對流程用戶、用戶組以及組成員關係的相關服務。 


現在列舉出幾個  向公司提出的問題?

1、 公司主要做哪些方面的項目? 主要是針對業務。  (如果他事先給你介紹了就取消這個問題)

2、 公司主要用的是哪些技術?  有沒有自己寫的框架之類的?

3、 公司有沒有相關的培訓項目啊?  自己有沒有機會參與?

4、 公司定期會不會一些重大的活動呢?

5、 公司的五險一金 是怎麼交的? 有沒有什麼補助之類的?




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