Java面試進階部分集合

框架基礎前端

 

反射:反射是Java開發的一類動態相關機制。由於自己Java語言並非一款動態語言,若是咱們想要獲得程序動態的效果,所以便引入了反射機制這一律念。java

 

怎麼表達反射?程序員

 

 

能用反射作什麼?面試

 

PS:某面試題:Java中建立實例化對象有哪些方式?數據庫

 

①最多見的建立對象方法,使用new語句建立一個對象。編程

②經過工廠方法返回對象,例:String s =String.valueOf()。(工廠方法涉及到框架)設計模式

③動用反射機制建立實例化對象,Class類的三種方法或者經過類類型的newInstance()實例方法。api

④調用對象的clone()方法。(俗稱克隆方法)瀏覽器

⑤經過I/O留的反序列化手段,調用ObjectInputStream對象的readObject()方法。安全

 

註解:平常開發中,註解的使用簡化了很多代碼,同時也減小了程序員的平常工做量。

 

Java註解能夠細分爲JDK註解和第三方註解。其具體使用方法,下次有機會再說。

 

 

 

ORM

 

認識Hibernate和Mybatis以前,必然要先了解一下什麼是ORM?

 

ORM是三個單詞的縮寫:Object/Relationship Mapping。翻譯過來就是「對象/關係映射」。

 

爲何要有ORM?

在用面向對象思想編寫應用程序的時候,最終都是把對象的信息保存在關係型數據庫中,這樣咱們就須要編寫不少與底層數據庫相關的SQL語句。顯然這樣是很不便捷的,ORM框架技術就能夠解決這些繁瑣的問題。

 

ORM存在的意義?

完全拋棄書寫SQL語句的思想,徹底使用面向對象的思想開發。

 

爲何要拋棄程序中書寫SQL語句的思想?

①不一樣的數據庫使用的SQL語法不一樣,例:一樣一段SQL腳本,能在T-SQL中運行,但不必定能保證能夠在PL-SQL中運行。

②一樣的功能在不一樣的數據庫有不一樣的實現方式,例:分頁SQL。

③程序過度依賴SQL,對程序的移植、擴展和維護帶來很大的麻煩。

 

 

Hibernate框架

 

Hibernate是Java領域內的一款開源的ORM框架技術。

 

Hibernate的機制原理:

①Hibernate對JDBC進行很是輕量級的封裝。

(從本質上而言,最終Hibernate仍是經過JDBC來進行對數據庫的操做,只不過在JDBC的基礎上進行了必定的封裝)

②與EBJ(自己是JavaEE的規範,重量級的ORM框架技術)不一樣,Hibernate屬於輕量級的ORM框架技術。

③Hibernate介於數據庫層和業務邏輯層之間,起到持久化層的做用。

 

HQL數據查詢基礎

檢索對象——from子句

選擇——select子句

限制——where子句

排序——order by子句

 

HQL和SQL語句不一樣,HQL中from子句是必須的,能夠沒有select子句。

 

Hibernate的經常使用屬性:

 

cascade:設置級聯關係。

inverse:設置由哪一方維護關聯關係。

 

例:下面的這段代碼集合了經常使用屬性以及表與表之間的多對一和一對多關係。

 

<hibernate-mapping>

    <class name="" table="">

        <id name="id" type="java.lang.Long">

            <column name="ID" />

            <generator class="increment" />

        </id>

        <many-to-one name="" class=""

            fetch="">

            <column name="" />

        </many-to-one>

        ......

        <set name="" inverse="true"  cascade="all" lazy="false">

            <key>

                <column name="" />

            </key>

            <one-to-many class="" />

        </set>

    </class>

</hibernate-mapping>

 

 

Struts2框架

 

Struts是流行和成熟的基於MVC設計模式的Web應用程序框架。

 

http://www.jianshu.com/p/46f870043522

 

Struts2動態方法的調用:

例:

①指定method屬性的方法。

 

<action name="" method="" class="">

<result>/index.jsp</result>

</action>

 

②感嘆號的方式。

 

<action name="" class="">

<result>/index.jsp</result>

</action>

<constant name="structs.enable.DynamicMethodInvocation" value="true"></constant>

 

③通配符的方式。

 

<action name="_*" method="{1}" class="">

<result>/index.jsp</result>

<result>/{1}.jsp</result>

</action>

 

在使用通配符方式的時候,若是要使用多個method的話,能夠再在method="{1}{2}..."裏面這樣添加,同時須要修改name=""裏面的名字+後綴_*_*...,還要配置所須要的<result>/{}.jsp</result>標籤

 

Struts2訪問servlet api:

Struts2攔截器工做原理:

 

思路:

當Struts在執行一個action的時候,會在action執行以前去執行一些攔截器,若是有多個攔截器會依次進行執行。

①首先執行攔截器一,執行攔截器一的處理方法並作一些處理操做。

②若是還有其它的攔截器,將執行攔截器2、攔截器三…進行攔截。

③當全部的攔截器都執行以後,將執行action操做,並調用action中的業務處理方法進行業務的處理。

④調用完以後,會返回一個字符串結果,也就是Result結果集。而後進行視圖的匹配。

⑤再將前面執行的攔截器進行反向的再執行一次,最終響應到客戶端。

 


Spring框架

 

Spring是一個輕量級的控制反轉(IOC)和麪向切面(AOP)的容器框架和開源框架。

 

Spring框架的好處:

 

①從大小和開銷兩個方面而言Spring都是輕量級的。

②經過控制反轉的技術達到鬆耦合的目的。

③提供了面向切面編程的豐富支持,容許經過分離應用的業務邏輯和系統級服務進行內聚性的開發。

④包含並管理應用對象的配置和生命週期,從這個意義上講它是一種容器。

⑤將簡單的組件配置、組合成爲複雜的應用,從這個意義上講它是一種框架。

 

什麼是Spring的IOC?

思路:

①當業務的對象進入了Spring的容器。

(Your Business Objects)→(The Spring Container)

②而後經過配置的原數據來生產出符合系統須要的對象。

(Configuration Metadata)→(The Spring Container)→(Fully Configured system)

③當要使用這些對象的時候去Spring容器裏面直接拿出來用就能夠了。

 

什麼是Spring的AOP?

 

AOP:經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。

主要功能有:日誌記錄、性能統計、安全控制、事務處理、異常處理等。

 

注:

預編譯方式:AspectJ。

動態代理方式:JDK動態代理和CGLib動態代理。(也就是SpringAOP和JbossAOP)

 

Spring的AOP用途:

①提供了聲明式的的企業服務,特別是EJB的替代服務的聲明。

②容許用戶定義本身的方法,以完成OOP和AOP的互補使用。

 

Spring的事務管理

 

Spring的事務管理高層抽象主要包括3個接口:

 

TransactionDefinition定義事務傳播行爲(7種):

 

 

 

Spring MVC框架

 

Spring MVC是一種前端控制器的實現形式,它的基本概念分爲靜態概念 和 動態概念。

 

靜態概念:如圖下示。DispatcherServlet就是Spring MVC的前端控制器。

思路:

①當瀏覽器端用戶的請求經過DispatcherServlet進行了分發,到達Cotroller層。

②到達Cotroller層以後,便生產出咱們所須要的業務數據Model。

③而後Model層再經過DispatcherServlet進行傳遞給咱們的View層。

④最後完成了最終的頁面呈現。

 

總結:MVC將業務邏輯和頁面實現了分離,其核心就是經過DispatcherServlet實現的。

 

動態概念:如圖下示。

思路:

 

①當瀏覽器的請求Request到達DispatcherServlet。(由於DispatcherServlet也是一個Servlet,全部的Request可以被它攔截到)

②而後DispatcherServlet會搜索尋找到一個Mapping,也就是HandlerMaping,並將其功能代理給了HandlerMaping。

③而後HandlerMaping根據自己的配置,找到須要用到的Controller和HandlerInterceptor。

④而後把Controller和HandlerInterceptor製成一個可執行的鏈條,也就是Handler/HandlerAdapter的適配器。

⑤Handler/HandlerAdapter的適配器將信息返回給了DispatcherServlet,DispatcherServlet便開始調用這個通常化的處理器Handler/HandlerAdapter。

⑥Controller的目的就是生成ModelAndView模型,而且返還給DispatcherServlet。

⑦DispatcherServlet是不會管理視圖顯示的,因此它就調用ViewResolver視圖解析器並經過該方法返回到View對象。(ViewResolver的做用是告訴DispatcherServlet哪一個視圖是用來解析當前這種場景的)

⑧而後ModelAndView將模型數據傳遞到View,完成了頁面呈現。

 

Spring MVC攔截器工做流程:

 

 

 

 

 

Mybatis框架

 

Mybatis和Hibernate同樣,是一款開源的ORM框架的技術。

 

Mybatis的機制原理:

①Mybatis支持普通的SQL查詢、存儲過程和高級映射的持久層框架。

②Mybatis將大量的SQL語句從程序裏面剖離出來,配置在配置文件中,實現SQL的靈活配置。

 

OGNL表達式:

 

 

 

 

Mybatis框架和Hibernate框架比較:

①「全自動化」的Hibernate對數據庫結構提供了完整的封裝和全套映射機制。

②「半自動化」的Mybatis提供的ORM機制,對業務邏輯實現人員而言,面對的是純粹的Java對象。

③Hibernate會自動生成SQL語句,而MyBatis不會在運行期間自動生成SQL語句執行。

 

 

4、工具篇

 

JUnit單元測試

 

JUnit是一套基於測試驅動開發的測試框架。

 

注:

JUnit4不須要繼承junit.framework.TestCase類。

JUnit3中全部的方法都必須使用@Test註解,而且須要在方法名前加test做爲前綴,須要繼承junit.framework.TestCase類。

 

版本管理工具SVN

 

SVN是一個開放源代碼的版本控制系統。

 

舉個例子:

①我的的代碼→口袋裏的錢

②版本控制工具中的代碼→卡里的錢

③版本控制工具中的客戶端→卡

④版本控制工具中的服務端→刷卡機

 

注:在實際版本管理當中,你所寫的代碼,須要提交給服務端,而後別人要修改你的代碼,就會從服務端更新當前目錄下的代碼,再進行修改和提交。因此,「卡里的錢」能夠理解爲團隊公有的代碼體系。

 

項目管理工具maven

 

maven是基於項目對象模型(POM),能夠經過一小段描述信息來管理項目的構建、報告和文檔的軟件項目管理工具。

 

注:

maven也是一套強大的自動化的管理工具,覆蓋了編譯、測試、運行、清理、打包和部署,整個項目構建的週期。

 

它還提供了一個倉庫的概念,統一的幫助開發人員管理項目所依賴的第三方的架包,最大可能的避免環境配置不一樣所產生的問題(在你的電腦上能運行,在個人電腦上就不能運行)。

相關文章
相關標籤/搜索