java 常見的面試題技巧(框架)

本着有一種美德叫做“分享”的心態,慢慢的把自己最近被面試過的題寫出來和大家分享一下,如果有什麼不當之處,還望指出,由於是剛踏上求職路,工作剛剛有着落,畢竟經驗還不是很老道! (文檔本着儘量全面一點 當然能夠通俗一些最好 但是自己的知識儲備不是很充足,只好多借鑑網友的智慧  不足之處希望多多包涵!)

        如果說是一個企業急需招人,我想那就得多準備一些框架方面的知識,畢竟做項目是用的框架!下面進入主題:大概的流程是這樣吧   框架——》Java基礎——》數據庫相關點——》頁面注意技巧

       一:框架——》

  1,)Struts2是如何實現MVC的?M(模型):這個一般不由Struts來做V (視圖):視圖也不算struts的強項,但是struts提供優秀的標籤來支持視圖的展示,利用標籤,可以將數據合理的展示給用戶控制器:struts的重要功能,提供struts的過濾器,攔截用戶的請求,查找struts配置文件,爲其匹配一個對應的Action,這個Action負責調用模型,獲得數據,然後對數據做部分處理,接着Action再將處理後的數據,爲其選擇一個視圖進行輸出。          

  2)   Struts工作機制?爲什麼要使用Struts? 工作機制: Struts的工作流程: 在web應用啓動時就會加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象當ActionServlet接收到一個客戶請求時,將執行如下流程. (1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息; (2)如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中; (3)根據配置信息決定是否需要表單驗證.如果需要驗證,就調用ActionForm的validate()方法; (4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象, 就表示表單驗證成功; (5)ActionServlet根據ActionMapping所包含的映射信息決定將請求轉發給哪個Action,如果相應的Action實例不存在,就先創建這個實例,然後調用Action的execute()方法; (6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉發給ActionForward對象指向的JSP組件; (7)ActionForward對象指向JSP組件生成動態網頁,返回給客戶;爲什麼要用: JSP、Servlet、JavaBean技術的出現給我們構建強大的企業應用系統提供了可能。但用這些技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生。基於Struts開發的應用由3類組件構成:控制器組件、模型組件、視圖組件 Struts的validate框架是如何驗證的? 在struts配置文件中配置具體的錯誤提示,再在FormBean中的validate()方法具體調用。  

     3)spring工作機制及爲什麼要用? 1.spring mvc請所有的請求都提交給DispatcherServlet,它會委託應用系統的其他模塊負責負責對請求進行真正的處理工作。 2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller. 3.DispatcherServlet請請求提交到目標Controller 4.Controller進行業務邏輯處理後,會返回一個ModelAndView 5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象 6.視圖對象負責渲染返回給客戶端。爲什麼用: AOP 讓開發人員可以創建非行爲性的關注點,稱爲橫切關注點,並將它們插入到應用程序代碼中。使用 AOP 後,公共服務 (比 如日誌、持久性、事務等)就可以分解成方面並應用到域對象上,同時不會增加域對象的對象模型的複雜性。

IOC 允許創建一個可以構造對象的應用環境,然後向這些對象傳遞它們的協作對象。正如單詞 倒置 所表明的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個對象都是用 其協作對象構造的。因此是由容器管理協作對象(collaborator)。 

        4)Hibernate工作原理及爲什麼要用? 原理: 1.讀取並解析配置文件 2.讀取並解析映射信息,創建SessionFactory 3.打開Sesssion 4.創建事務Transation 5.持久化操作 6.提交事務 7.關閉Session 8.關閉SesstionFactory爲什麼要用: 1. 對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重複性代碼。2. Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作3. hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性。4. hibernate的性能非常好,因爲它是個輕量級框架。映射的靈活性很出色。它支持各種關係數據庫,從一對一到多對多的各種複雜關係。2. Hibernate是如何延遲加載? 1. Hibernate2延遲加載實現:a)實體對象 b)集合(Collection)2. Hibernate3 提供了屬性的延遲加載功能當Hibernate在查詢數據的時候,數據並沒有存在與內存中,當程序真正對數據的操作時,對象才存在與內存中,就實現了延遲加載,他節省了服務器的內存開銷,從而提高了服務器的性能。3.Hibernate中怎樣實現類之間的關係?(如:一對多、多對多的關係)類與類之間的關係主要體現在表與表之間的關係進行操作,它們都市對對象進行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-one、one-to-many、many-to-many。 

5)Hibernate的一級緩存與二級緩存的區別?

    一級緩存就是Session級別的緩存,一個Session做了一個查詢操作,它會把這個操作的結果放在一級緩存中,如果短時間內這個session(一定要同一個session)又做了同一個操作,那麼hibernate直接從一級緩存中拿,而不會再去連數據庫,取數據。二級緩存就是SessionFactory級別的緩存,顧名思義,就是查詢的時候會把查詢結果緩存到二級緩存中,如果同一個sessionFactory創建的某個session執行了相同的操作,hibernate就會從二級緩存中拿結果,而不會再去連接數據庫。(這個題想簡答就可以了,但是如果想深入去多問幾個問什麼這裏提供一個連接,寫得較爲詳細:1)

       另外一個關鍵點是:你要知道什麼信息和什麼操作,該調用什麼級別的緩存!

6)如何優化Hibernate?(這個問題有些觸及到這個框架的弱點了,那就得想辦法應付)

         1.使用雙向一對多關聯,不使用單向一對多                         2.靈活使用單向一對多關聯         3.不用一對一,用多對一取代         4.配置對象緩存,不使用集合緩存          5.一對多集合使用Bag,多對多集合使用Set         6. 繼承類使用顯式多態      7. 表字段要少,表關聯不要怕多,自己再補充一點,上面說到的都是關於數據庫設計 帶來的優勢,從而起到優化框架的效果,但是真正在實際操作中,我們只有儘量控制不使用懶加載“lazy

=true”,如果在涉及的儘量使用Hql語句

7)struts的核心是什麼?(參考了這個回答:2)

FilterDispatcher也是Struts2的核心技術。FilterDispatcher核心控制器執行以下操作:(1)讀取靜態數據信息(2)決定需要轉發或者導航的Action配置(3)創建Action的Context(4)創建Action代理(5)內存清理和性能優化攔截器:Interceptor         攔截器本身是一個普通的Java對象,它能動態攔截Action調用,在Action執行前後執行攔截器本身提供的各種個樣的Web項目需求。        也可以阻止Action的執行,同時也可以提取Action中可以複用的部分。(1)在Action調用之前提供系統處理流程邏輯控制(2)和Action交互時,提供Ation執行時的一些初始信息(3)在Action結束後,一些事後的處理流程邏輯(4)修改Action中返回的Result信息(5)捕獲異常棧是用ognl表達式存值的最初地方,即一個存值的棧   自己再補充一點:struts的標籤庫也算一個。

8)ssh 的工作流程(這個問題留作作業,它們之間的相互實現,相互調用從原理上理解就行了)

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