面試的角度詮釋Java工程師(二)
三、框架篇
框架基礎
反射:反射是Java開發的一類動態相關機制。因為本身Java語言並不是一款動態語言,如果我們想要得到程式動態的效果,因此便引入了反射機制這一概念。
怎麼表達反射?
能用反射做什麼? PS:某面試題:Java中建立例項化物件有哪些方式? ①最常見的建立物件方法,使用new語句建立一個物件。 ②通過工廠方法返回物件,例:String s =String.valueOf()。(工廠方法涉及到框架) ③動用反射機制建立例項化物件,Class類的三種方法或者通過類型別的newInstance()例項方法。 ④呼叫物件的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應用程式框架。
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執行之前去執行一些攔截器,如果有多個攔截器會依次進行執行。 ①首先執行攔截器一,執行攔截器一的處理方法並做一些處理操作。 ②如果還有其它的攔截器,將執行攔截器二、攔截器三...進行攔截。 ③當所有的攔截器都執行之後,將執行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語句執行。
四、工具篇
JUnit單元測試
JUnit是一套基於測試驅動開發的測試框架。
注: JUnit4不需要繼承junit.framework.TestCase類。 JUnit3中所有的方法都必須使用@Test註解,並且需要在方法名前加test作為字首,需要繼承junit.framework.TestCase類。
版本管理工具SVN
SVN是一個開放原始碼的版本控制系統。
舉個例子: ①個人的程式碼→口袋裡的錢 ②版本控制工具中的程式碼→卡里的錢 ③版本控制工具中的客戶端→卡 ④版本控制工具中的服務端→刷卡機
注:在實際版本管理當中,你所寫的程式碼,需要提交給服務端,然後別人要修改你的程式碼,就會從服務端更新當前目錄下的程式碼,再進行修改和提交。所以,“卡里的錢”可以理解為團隊公有的程式碼體系。
專案管理工具maven
maven是基於專案物件模型(POM),可以通過一小段描述資訊來管理專案的構建、報告和文件的軟體專案管理工具。
注: maven也是一套強大的自動化的管理工具,覆蓋了編譯、測試、執行、清理、打包和部署,整個專案構建的週期。
它還提供了一個倉庫的概念,統一的幫助開發人員管理專案所依賴的第三方的架包,最大可能的避免環境配置不同所產生的問題(在你的電腦上能執行,在我的電腦上就不能執行)。
如果大家覺得我寫的對你有幫助,請順手點個贊支援一下唄;如果大家覺得我有寫的不對的地方,歡迎大家多多發言。謝謝!