續(xù)言:
相信每一位簡書的作者暴匠,都會有我這樣的思考:怎么寫好一篇文章蔚携?或者怎么寫好一篇技術(shù)類的文章?我就先說說我的感悟吧狼速,寫文章其實和寫程序是一樣的琅锻。為什么我會說它們是一樣的?簡單思考一下......
程序:程序是由某語言的工程師用一段段代碼邏輯連貫出來的,或許當(dāng)事人是看得懂滴恼蓬,但是問題是你要讓項目經(jīng)理看得懂熬辍!要是項目經(jīng)理都看不懂了处硬,你還指望這個東西能到產(chǎn)品經(jīng)理手里靶』薄?所以就有了一系列的注釋和注解。
文章:寫出的字段,首先自己要看得懂吧亮蒋,其次還得讓別人看得懂并且認同你吧。更強大的還是得有文字魅力和吸引力摇邦,這點比程序豐富多了(簡直把產(chǎn)品經(jīng)理做的事都做了)。
大家是不是覺得我走題了?這可不是的喲!在第一篇我說了疆栏,面試的目的不是讓考官知道你怎么樣,而是讓你自己清楚自己怎么樣惫谤;在第二篇承边,我想說的是,在你擁有能力和技術(shù)的情況下石挂,懂得怎么在面試官前推銷自己。文章和程序亦然险污,面試又何嘗不是呢痹愚?(通俗點講,就是說點面試官能聽的懂得話哦)
三蛔糯、框架篇
框架基礎(chǔ)
反射:反射是Java開發(fā)的一類動態(tài)相關(guān)機制拯腮。因為本身Java語言并不是一款動態(tài)語言,如果我們想要得到程序動態(tài)的效果蚁飒,因此便引入了反射機制這一概念动壤。
怎么表達反射?
能用反射做什么淮逻?
PS:某面試題:Java中創(chuàng)建實例化對象有哪些方式琼懊?
①最常見的創(chuàng)建對象方法,使用new語句創(chuàng)建一個對象爬早。
②通過工廠方法返回對象哼丈,例:String s =String.valueOf()。(工廠方法涉及到框架)
③動用反射機制創(chuàng)建實例化對象筛严,Class類的三種方法或者通過類類型的newInstance()實例方法醉旦。
④調(diào)用對象的clone()方法。(俗稱克隆方法)
⑤通過I/O留的反序列化手段,調(diào)用ObjectInputStream對象的readObject()方法车胡。
注解:日常開發(fā)中檬输,注解的使用簡化了不少代碼,同時也減少了程序員的日常工作量匈棘。
Java注解可以細分為JDK注解和第三方注解丧慈。其具體使用方法,可以點開鏈接看哦羹饰。
ORM
認識Hibernate和Mybatis之前伊滋,必然要先了解一下什么是ORM?
ORM是三個單詞的縮寫:Object/Relationship Mapping队秩。翻譯過來就是“對象/關(guān)系映射”笑旺。
為什么要有ORM?
在用面向?qū)ο笏枷刖帉憫?yīng)用程序的時候馍资,最終都是把對象的信息保存在關(guān)系型數(shù)據(jù)庫中筒主,這樣我們就需要編寫很多與底層數(shù)據(jù)庫相關(guān)的SQL語句。顯然這樣是很不便捷的鸟蟹,ORM框架技術(shù)就可以解決這些繁瑣的問題乌妙。
ORM存在的意義?
徹底拋棄書寫SQL語句的思想建钥,完全使用面向?qū)ο蟮乃枷腴_發(fā)藤韵。
為什么要拋棄程序中書寫SQL語句的思想?
①不同的數(shù)據(jù)庫使用的SQL語法不同熊经,例:同樣一段SQL腳本泽艘,能在T-SQL中運行,但不一定能保證可以在PL-SQL中運行镐依。
②同樣的功能在不同的數(shù)據(jù)庫有不同的實現(xiàn)方式匹涮,例:分頁SQL。
③程序過分依賴SQL槐壳,對程序的移植然低、擴展和維護帶來很大的麻煩。
Hibernate框架
Hibernate是Java領(lǐng)域內(nèi)的一款開源的ORM框架技術(shù)务唐。
Hibernate的機制原理:
①Hibernate對JDBC進行非常輕量級的封裝雳攘。
(從本質(zhì)上而言,最終Hibernate還是通過JDBC來進行對數(shù)據(jù)庫的操作枫笛,只不過在JDBC的基礎(chǔ)上進行了一定的封裝)
②與EBJ(本身是JavaEE的規(guī)范来农,重量級的ORM框架技術(shù))不同,Hibernate屬于輕量級的ORM框架技術(shù)崇堰。
③Hibernate介于數(shù)據(jù)庫層和業(yè)務(wù)邏輯層之間沃于,起到持久化層的作用涩咖。
HQL數(shù)據(jù)查詢基礎(chǔ)
檢索對象——from子句
選擇——select子句
限制——where子句
排序——order by子句
HQL和SQL語句不同,HQL中from子句是必須的繁莹,可以沒有select子句檩互。
Hibernate的常用屬性:
cascade:設(shè)置級聯(lián)關(guān)系。
inverse:設(shè)置由哪一方維護關(guān)聯(lián)關(guān)系咨演。
例:下面的這段代碼集合了常用屬性以及表與表之間的多對一和一對多關(guān)系闸昨。
<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設(shè)計模式的Web應(yīng)用程序框架。
struts2的工作原理及文件結(jié)構(gòu)(請?zhí)D(zhuǎn)到相應(yīng)文章)
Struts2動態(tài)方法的調(diào)用:
例:
①指定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>
標(biāo)簽
Struts2訪問servlet api:
Struts2攔截器工作原理:
思路:
當(dāng)Struts在執(zhí)行一個action的時候撇他,會在action執(zhí)行之前去執(zhí)行一些攔截器茄猫,如果有多個攔截器會依次進行執(zhí)行。
①首先執(zhí)行攔截器一困肩,執(zhí)行攔截器一的處理方法并做一些處理操作划纽。
②如果還有其它的攔截器,將執(zhí)行攔截器二锌畸、攔截器三...進行攔截勇劣。
③當(dāng)所有的攔截器都執(zhí)行之后,將執(zhí)行action操作潭枣,并調(diào)用action中的業(yè)務(wù)處理方法進行業(yè)務(wù)的處理芭毙。
④調(diào)用完之后,會返回一個字符串結(jié)果卸耘,也就是Result結(jié)果集。然后進行視圖的匹配粘咖。
⑤再將前面執(zhí)行的攔截器進行反向的再執(zhí)行一次蚣抗,最終響應(yīng)到客戶端。
Spring框架
Spring是一個輕量級的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架和開源框架瓮下。
Spring框架的好處:
①從大小和開銷兩個方面而言Spring都是輕量級的翰铡。
②通過控制反轉(zhuǎn)的技術(shù)達到松耦合的目的。
③提供了面向切面編程的豐富支持讽坏,允許通過分離應(yīng)用的業(yè)務(wù)邏輯和系統(tǒng)級服務(wù)進行內(nèi)聚性的開發(fā)锭魔。
④包含并管理應(yīng)用對象的配置和生命周期,從這個意義上講它是一種容器路呜。
⑤將簡單的組件配置迷捧、組合成為復(fù)雜的應(yīng)用织咧,從這個意義上講它是一種框架。
什么是Spring的IOC漠秋?
思路:
①當(dāng)業(yè)務(wù)的對象進入了Spring的容器笙蒙。
(Your Business Objects)→(The Spring Container)
②然后通過配置的原數(shù)據(jù)來生產(chǎn)出符合系統(tǒng)需要的對象。
(Configuration Metadata)→(The Spring Container)→(Fully Configured system)
③當(dāng)要使用這些對象的時候去Spring容器里面直接拿出來用就可以了庆锦。
什么是Spring的AOP捅位?
AOP:通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。
主要功能有:日志記錄搂抒、性能統(tǒng)計艇搀、安全控制、事務(wù)處理求晶、異常處理等焰雕。
注:
預(yù)編譯方式:AspectJ。
動態(tài)代理方式:JDK動態(tài)代理和CGLib動態(tài)代理誉帅。(也就是SpringAOP和JbossAOP)
Spring的AOP用途:
①提供了聲明式的的企業(yè)服務(wù)淀散,特別是EJB的替代服務(wù)的聲明。
②允許用戶定義自己的方法蚜锨,以完成OOP和AOP的互補使用档插。
Spring的事務(wù)管理
Spring的事務(wù)管理高層抽象主要包括3個接口:
TransactionDefinition定義事務(wù)傳播行為(7種):
Spring MVC框架
Spring MVC是一種前端控制器的實現(xiàn)形式,它的基本概念分為靜態(tài)概念 和 動態(tài)概念亚再。
靜態(tài)概念:如圖下示郭膛。DispatcherServlet就是Spring MVC的前端控制器。
思路:
①當(dāng)瀏覽器端用戶的請求通過DispatcherServlet進行了分發(fā)氛悬,到達Cotroller層则剃。
②到達Cotroller層之后,便生產(chǎn)出我們所需要的業(yè)務(wù)數(shù)據(jù)Model如捅。
③然后Model層再通過DispatcherServlet進行傳遞給我們的View層棍现。
④最后完成了最終的頁面呈現(xiàn)。
總結(jié):MVC將業(yè)務(wù)邏輯和頁面實現(xiàn)了分離镜遣,其核心就是通過DispatcherServlet實現(xiàn)的己肮。
動態(tài)概念:如圖下示。
思路:
①當(dāng)瀏覽器的請求Request到達DispatcherServlet悲关。(因為DispatcherServlet也是一個Servlet谎僻,所有的Request能夠被它攔截到)
②然后DispatcherServlet會搜索尋找到一個Mapping,也就是HandlerMaping寓辱,并將其功能代理給了HandlerMaping艘绍。
③然后HandlerMaping根據(jù)本身的配置,找到需要用到的Controller和HandlerInterceptor秫筏。
④然后把Controller和HandlerInterceptor制成一個可執(zhí)行的鏈條诱鞠,也就是Handler/HandlerAdapter的適配器挎挖。
⑤Handler/HandlerAdapter的適配器將信息返回給了DispatcherServlet,DispatcherServlet便開始調(diào)用這個一般化的處理器Handler/HandlerAdapter般甲。
⑥Controller的目的就是生成ModelAndView模型肋乍,并且返還給DispatcherServlet。
⑦DispatcherServlet是不會管理視圖顯示的敷存,所以它就調(diào)用ViewResolver視圖解析器并通過該方法返回到View對象墓造。(ViewResolver的作用是告訴DispatcherServlet哪個視圖是用來解析當(dāng)前這種場景的)
⑧然后ModelAndView將模型數(shù)據(jù)傳遞到View,完成了頁面呈現(xiàn)锚烦。
Spring MVC攔截器工作流程:
Mybatis框架
Mybatis和Hibernate一樣觅闽,是一款開源的ORM框架的技術(shù)。
Mybatis的機制原理:
①Mybatis支持普通的SQL查詢涮俄、存儲過程和高級映射的持久層框架蛉拙。
②Mybatis將大量的SQL語句從程序里面剖離出來,配置在配置文件中彻亲,實現(xiàn)SQL的靈活配置孕锄。
OGNL表達式:
Mybatis框架和Hibernate框架比較:
①“全自動化”的Hibernate對數(shù)據(jù)庫結(jié)構(gòu)提供了完整的封裝和全套映射機制。
②“半自動化”的Mybatis提供的ORM機制苞尝,對業(yè)務(wù)邏輯實現(xiàn)人員而言畸肆,面對的是純粹的Java對象。
③Hibernate會自動生成SQL語句宙址,而MyBatis不會在運行期間自動生成SQL語句執(zhí)行轴脐。
四、工具篇
JUnit單元測試
JUnit是一套基于測試驅(qū)動開發(fā)的測試框架抡砂。
注:
JUnit4不需要繼承junit.framework.TestCase類大咱。
JUnit3中所有的方法都必須使用@Test注解,并且需要在方法名前加test作為前綴注益,需要繼承junit.framework.TestCase類碴巾。
版本管理工具SVN
SVN是一個開放源代碼的版本控制系統(tǒng)。
舉個例子:
①個人的代碼→口袋里的錢
②版本控制工具中的代碼→卡里的錢
③版本控制工具中的客戶端→卡
④版本控制工具中的服務(wù)端→刷卡機
注:在實際版本管理當(dāng)中丑搔,你所寫的代碼厦瓢,需要提交給服務(wù)端,然后別人要修改你的代碼低匙,就會從服務(wù)端更新當(dāng)前目錄下的代碼,再進行修改和提交碳锈。所以顽冶,“卡里的錢”可以理解為團隊公有的代碼體系。
項目管理工具maven
maven是基于項目對象模型(POM)售碳,可以通過一小段描述信息來管理項目的構(gòu)建强重、報告和文檔的軟件項目管理工具绞呈。
注:
maven也是一套強大的自動化的管理工具,覆蓋了編譯间景、測試佃声、運行、清理倘要、打包和部署圾亏,整個項目構(gòu)建的周期。
它還提供了一個倉庫的概念封拧,統(tǒng)一的幫助開發(fā)人員管理項目所依賴的第三方的架包志鹃,最大可能的避免環(huán)境配置不同所產(chǎn)生的問題(在你的電腦上能運行,在我的電腦上就不能運行)泽西。
如果大家覺得我寫的對你有幫助曹铃,請順手點個贊支持一下唄;如果大家覺得我有寫的不對的地方捧杉,歡迎大家多多發(fā)言陕见。謝謝!
轉(zhuǎn)載請注明作者及文章出處噢味抖!