1. 程式人生 > >轉:面試的角度詮釋Java工程師(二)

轉:面試的角度詮釋Java工程師(二)

obj 做了 glib dex format 編譯 svn 上進 nta

轉:https://www.jianshu.com/p/a0b8b6f17888

續言:

相信每一位簡書的作者,都會有我這樣的思考:怎麽寫好一篇文章?或者怎麽寫好一篇技術類的文章?我就先說說我的感悟吧,寫文章其實和寫程序是一樣的。為什麽我會說它們是一樣的?簡單思考一下......

程序:程序是由某語言的工程師用一段段代碼邏輯連貫出來的,或許當事人是看得懂滴,但是問題是你要讓項目經理看得懂啊!要是項目經理都看不懂了,你還指望這個東西能到產品經理手裏啊?所以就有了一系列的註釋和註解。

文章:寫出的字段,首先自己要看得懂吧,其次還得讓別人看得懂並且認同你吧。更強大的還是得有文字魅力和吸引力,這點比程序豐富多了(簡直把產品經理做的事都做了)。

大家是不是覺得我走題了?這可不是的喲!在第一篇我說了,面試的目的不是讓考官知道你怎麽樣,而是讓你自己清楚自己怎麽樣;在第二篇,我想說的是,在你擁有能力和技術的情況下,懂得怎麽在面試官前推銷自己。文章和程序亦然,面試又何嘗不是呢?(通俗點講,就是說點面試官能聽的懂得話哦)

技術分享圖片 配圖.jpg

三、框架篇

框架基礎

反射:反射是Java開發的一類動態相關機制。因為本身Java語言並不是一款動態語言,如果我們想要得到程序動態的效果,因此便引入了反射機制這一概念。

怎麽表達反射?


技術分享圖片 反射—Class類的實例化對象.png

能用反射做什麽?
PS:某面試題:Java中創建實例化對象有哪些方式?
①最常見的創建對象方法,使用new語句創建一個對象。
②通過工廠方法返回對象,例:String s =String.valueOf()。(工廠方法涉及到框架)
③動用反射機制創建實例化對象,Class類的三種方法或者通過類類型的newInstance()實例方法。
④調用對象的clone()方法。(俗稱克隆方法)
⑤通過I/O留的反序列化手段,調用ObjectInputStream對象的readObject()方法。

註解:日常開發中,註解的使用簡化了不少代碼,同時也減少了程序員的日常工作量。

Java註解可以細分為JDK註解和第三方註解。其具體使用方法,可以點開鏈接看哦。


技術分享圖片 Java註解.png

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的工作原理及文件結構(請跳轉到相應文章)

Struts2動態方法的調用:

技術分享圖片 Struts2動態方法調用.png

例:
①指定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訪問servlet api.png

Struts2攔截器工作原理

技術分享圖片 Struts2攔截器.png

思路:
當Struts在執行一個action的時候,會在action執行之前去執行一些攔截器,如果有多個攔截器會依次進行執行。
①首先執行攔截器一,執行攔截器一的處理方法並做一些處理操作。
②如果還有其它的攔截器,將執行攔截器二、攔截器三...進行攔截。
③當所有的攔截器都執行之後,將執行action操作,並調用action中的業務處理方法進行業務的處理。
④調用完之後,會返回一個字符串結果,也就是Result結果集。然後進行視圖的匹配。
⑤再將前面執行的攔截器進行反向的再執行一次,最終響應到客戶端。

Spring框架

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

Spring框架的好處:
①從大小和開銷兩個方面而言Spring都是輕量級的。
②通過控制反轉的技術達到松耦合的目的。
③提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯和系統級服務進行內聚性的開發。
④包含並管理應用對象的配置和生命周期,從這個意義上講它是一種容器。
⑤將簡單的組件配置、組合成為復雜的應用,從這個意義上講它是一種框架。

什麽是Spring的IOC?

技術分享圖片 Spring的IOC.png

思路:
①當業務的對象進入了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個接口:


技術分享圖片 Spring事務管理三個接口.png

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


技術分享圖片 TransactionDefinition定義事務傳播行為.png

Spring MVC框架

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

靜態概念:如圖下示。DispatcherServlet就是Spring MVC的前端控制器。
思路:
①當瀏覽器端用戶的請求通過DispatcherServlet進行了分發,到達Cotroller層。
②到達Cotroller層之後,便生產出我們所需要的業務數據Model。
③然後Model層再通過DispatcherServlet進行傳遞給我們的View層。
④最後完成了最終的頁面呈現。

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

技術分享圖片 Spring MVC的靜態概念.png

動態概念:如圖下示。

技術分享圖片 Spring MVC的基本概念.png

思路:
①當瀏覽器的請求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攔截器工作流程:

技術分享圖片 Spring MVC攔截器工作流程.png

Mybatis框架

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

Mybatis的機制原理:
①Mybatis支持普通的SQL查詢、存儲過程和高級映射的持久層框架。
②Mybatis將大量的SQL語句從程序裏面剖離出來,配置在配置文件中,實現SQL的靈活配置。

OGNL表達式

技術分享圖片 Mybatis中的OGNL表達式1.png 技術分享圖片 Mybatis中的OGNL表達式2.png

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也是一套強大的自動化的管理工具,覆蓋了編譯、測試、運行、清理、打包和部署,整個項目構建的周期。

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



作者:locality
鏈接:https://www.jianshu.com/p/a0b8b6f17888
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。

轉:面試的角度詮釋Java工程師(二)