更新時間:2020-10-23 17:14:28 來源:動力節(jié)點 瀏覽1952次
框架是學習java編程的重要內(nèi)容,每一個java程序員都要熟練掌握幾個自己常用的框架,因此框架也是必然出現(xiàn)在java面試題中的內(nèi)容,是公司在面試時要重點考察的知識,java框架面試題是大家在準備面試前需要認真做的功課,下面總結(jié)了一些常考的java框架面試題,都是基礎(chǔ)知識,朋友們可以來學習以下的題目。
1、什么是MVC框架?傳統(tǒng)MVC框架存在的問題是什么?
答:MVC框架是為了解決傳統(tǒng)MVC模式(Jsp + Servlet + JavaBean)的一些問題而出現(xiàn)的框架。
傳統(tǒng)MVC模式存在問題:(1)所有的Servlet和Servlet映射都要配置在web.xml中,如果項目太大,web.xml就太龐大,并且不能實現(xiàn)模塊化管理;(2)Servlet的主要功能就是接受參數(shù)、調(diào)用邏輯、跳轉(zhuǎn)頁面,比如像其他字符編碼、文件上傳等功能也要寫在Servlet中,不能讓Servlet主要功能而需要做處理一下特例;(3)接受參數(shù)比較麻煩(String name = request.getParameter(“name”),User user=new User user.setName(name)),不能通過model接收,只能單個接收,接收完成后轉(zhuǎn)換封裝model;(4)跳轉(zhuǎn)頁面方式比較單一(forword,redirect),并且當我的頁面名稱發(fā)生改變時需要修改Servlet源代碼。
2、簡單介紹下對springMVC特點的理解?
答:Spring MVC Framework有這樣一些特點:(1)它是基于組件技術(shù)的、全部的應(yīng)用對象,無論控制器和視圖,還是業(yè)務(wù)對象之類的都是java組件,并且和Spring提供的其他基礎(chǔ)結(jié)構(gòu)緊密集成;(2)不依賴于Servlet API(目標雖是如此,但是在實現(xiàn)的時候確實是依賴于S.ervlet的);(3)可以任意使用各種視圖技術(shù),而不僅僅局限于JSP;(4)支持各種請求資源的映射策略;(5)它應(yīng)是易于擴展的
3、什么是Maven?
答:Maven使用項目對象模型(POM)的概念,可以通過一小段描述信息來管理項目的構(gòu)建,報告和文檔的軟件項目管理工具。Maven 除了以程序構(gòu)建能力為特色之外,還提供高級項目管理工具。由于 Maven 的缺省構(gòu)建規(guī)則有較高的可重用性,所以常常用兩三行 Maven 構(gòu)建腳本就可以構(gòu)建簡單的項目。由于 Maven 的面向項目的方法,許多 Apache Jakarta 項目發(fā)布時使用 Maven,而且公司項目采用 Maven 的比例在持續(xù)增長。
Maven的出現(xiàn),解決了開發(fā)過程中的jar包升級及依賴的難題。它可以對項目依賴的jar包進行管理,可以讓你的項目保持基本的依賴,排除冗余jar包,并且可以讓你非常輕松的對依賴的jar包進行版本升級。而這些僅僅是Maven最基本的功能,它可以在這基礎(chǔ)上對項目進行清理、編譯、測試、打包、發(fā)布等等構(gòu)建項目的工作。
4、Maven倉庫是什么?
答:Maven倉庫是基于簡單文件系統(tǒng)存儲的,集中化管理Java API資源(構(gòu)件)的一個服務(wù)。倉庫中的任何一個構(gòu)件都有其唯一的坐標,根據(jù)這個坐標可以定義其在倉庫中的唯一存儲路徑。得益于 Maven 的坐標機制,任何 Maven項目使用任何一個構(gòu)件的方式都是完全相同的,Maven 可以在某個位置統(tǒng)一存儲所有的 Maven 項目共享的構(gòu)件,這個統(tǒng)一的位置就是倉庫,項目構(gòu)建完畢后生成的構(gòu)件也可以安裝或者部署到倉庫中,供其它項目使用。
對于Maven來說,倉庫分為兩類:本地倉庫和遠程倉庫。
5、什么是Znode?
答:在Zookeeper中,znode是一個跟Unix文件系統(tǒng)路徑相似的節(jié)點,可以往這個節(jié)點存儲或獲取數(shù)據(jù)。Zookeeper底層是一套數(shù)據(jù)結(jié)構(gòu)。這個存儲結(jié)構(gòu)是一個樹形結(jié)構(gòu),其上的每一個節(jié)點,我們稱之為“znode”,zookeeper中的數(shù)據(jù)是按照“樹”結(jié)構(gòu)進行存儲的。而且znode節(jié)點還分為4中不同的類型。每一個znode默認能夠存儲1MB的數(shù)據(jù)(對于記錄狀態(tài)性質(zhì)的數(shù)據(jù)來說,夠了),可以使用zkCli命令,登錄到zookeeper上,并通過ls、create、delete、get、set等命令操作這些znode節(jié)點。
6、什么是Spring beans?
答:Spring beans是那些形成Spring應(yīng)用的主干的java對象。它們被Spring IOC容器初始化,裝配,和管理。這些beans通過容器中配置的元數(shù)據(jù)創(chuàng)建。比如,以XML文件中的形式定義。Spring框架定義的beans都是單件beans。在bean tag中有個屬性”singleton”,如果它被賦為TRUE,bean 就是單件,否則就是一個 prototype bean。默認是TRUE,所以所有在Spring框架中的beans 缺省都是單件。
7、解釋Spring支持的幾種bean的作用域
答:Spring框架支持以下五種bean的作用域:(1)singleton : bean在每個Spring ioc 容器中只有一個實例;(2)prototype:一個bean的定義可以有多個實例;(3)request:每次http請求都會創(chuàng)建一個bean,該作用域僅在基于web的Spring ApplicationContext情形下有效;(4)session:在一個HTTP Session中,一個bean定義對應(yīng)一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效;(5)global-session:在一個全局的HTTP Session中,一個bean定義對應(yīng)一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
8、Dubbo能做什么?
答:(1)透明化的遠程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠程方法,只需簡單配置,沒有任何API侵入;(2)軟負載均衡及容錯機制,可在內(nèi)網(wǎng)替代F5等硬件負載均衡器,降低成本,減少單點;(3)服務(wù)自動注冊與發(fā)現(xiàn),不再需要寫死服務(wù)提供方地址,注冊中心基于接口名查詢服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。
9、Mybatis是如何進行分頁的?分頁插件的原理是什么?
答:Mybatis使用RowBounds對象進行分頁,它是針對ResultSet結(jié)果集執(zhí)行的內(nèi)存分頁,而非物理分頁,可以在sql內(nèi)直接書寫帶有物理分頁的參數(shù)來完成物理分頁功能,也可以使用分頁插件來完成物理分頁。
分頁插件的基本原理是使用Mybatis提供的插件接口,實現(xiàn)自定義插件,在插件的攔截方法內(nèi)攔截待執(zhí)行的sql,然后重寫sql,根據(jù)dialect方言,添加對應(yīng)的物理分頁語句和物理分頁參數(shù)。
10、JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?
答:(1)數(shù)據(jù)庫鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫鏈接池可解決此問題。解決:在SqlMapConfig.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫鏈接;
(2)Sql語句寫在代碼中造成代碼不易維護,實際應(yīng)用sql變化的可能較大,sql變動需要改變java代碼。解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離;
(3)向sql語句傳參數(shù)麻煩,因為sql語句的where條件不一定,可能多也可能少,占位符需要和參數(shù)一一對應(yīng)。解決: Mybatis自動將java對象映射至sql語句;
(4)對結(jié)果集解析麻煩,sql變化導致解析代碼變化,且解析前需要遍歷,如果能將數(shù)據(jù)庫記錄封裝成pojo對象解析比較方便。解決:Mybatis自動將sql執(zhí)行結(jié)果映射至java對象。
11、Dubbo支持的注冊中心有哪些?
答:(1)Zookeeper(官方推薦),優(yōu)點:支持分布式,很多周邊產(chǎn)品,缺點: 受限于Zookeeper軟件的穩(wěn)定性.Zookeeper專門分布式輔助軟件,穩(wěn)定較優(yōu);
(2)Multicast,優(yōu)點:去中心化,不需要單獨安裝軟件,缺點:Provider和Consumer和Registry不能跨機房(路由);
(3)Redis,優(yōu)點:支持集群,性能高,缺點:要求服務(wù)器時間同步.否則可能出現(xiàn)集群失敗問題;
(4)Simple,優(yōu)點: 標準RPC服務(wù),沒有兼容問題,缺點: 不支持集群。
12、什么是Nginx?
答:Nginx (engine x) 是一個高性能的HTTP和反向代理服務(wù)。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發(fā)的,第一個公開版本0.1.0發(fā)布于2004年10月4日。Nginx 是一個很強大的高性能Web和反向代理服務(wù),它具有很多非常優(yōu)越的特性:在連接高并發(fā)的情況下,Nginx是Apache服務(wù)不錯的替代品:Nginx在美國是做虛擬主機生意的老板們經(jīng)常選擇的軟件平臺之一。
13、Redis的特點是什么?
答:(1)支持多種數(shù)據(jù)結(jié)構(gòu),如 string(字符串)、 list(雙向鏈表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基數(shù)估算);(2)支持持久化操作,可以進行aof及rdb數(shù)據(jù)持久化到磁盤,從而進行數(shù)據(jù)備份或數(shù)據(jù)恢復等操作,較好的防止數(shù)據(jù)丟失的手段;(3)支持通過Replication進行數(shù)據(jù)復制,通過master-slave機制,可以實時進行數(shù)據(jù)的同步復制,支持多級復制和增量復制,master-slave機制是Redis進行HA的重要手段。單進程請求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。
14、JMS有哪些模型?
答:JMS消息機制主要分為兩種模型:PTP模型和Pub/Sub模型。
(1)PTP模型:(Point to Point 對點模型) 每一個消息傳遞給一個消息消費者,保證消息傳遞給消息消費者,且消息不會同時被多個消費者接收。如果消息消費者暫時不在連接范圍內(nèi),JMS會自動保證消息不會丟失,直到消息消費者進入連接,消息將自動送達。因此,JMS需要將消息保存到永久性介質(zhì)上,例如數(shù)據(jù)庫或者文件。
(2)Pub-Sub模型:(publish-subscription 發(fā)布者訂閱者模型)每個主題可以擁有多個訂閱者。JMS系統(tǒng)負責將消息的副本傳給該主題的每個訂閱者。
如果希望每一條消息都能夠被處理,那么應(yīng)該使用PTP消息模型。如果并不要求消息都必須被消息消費者接收到的情況下,可使用pub-sub消息模型。Pub-Sub模型可以在一對多的消息廣播時使用。
15、mybatis與Hibernate有什么不同?
相同點:都是java中orm框架、屏蔽jdbc api的底層訪問細節(jié),使用我們不用與jdbc api打交道,就可以完成對數(shù)據(jù)庫的持久化操作。jdbc api編程流程固定,還將sql語句與java代碼混雜在了一起,經(jīng)常需要拼湊sql語句,細節(jié)很繁瑣。
ibatis的好處:屏蔽jdbc api的底層訪問細節(jié);將sql語句與java代碼進行分離;提供了將結(jié)果集自動封裝稱為實體對象和對象的集合的功能.queryForList返回對象集合,用queryForObject返回單個對象;提供了自動將實體對象的屬性傳遞給sql語句的參數(shù)。
Hibername的好處:Hibernate是一個全自動的orm映射工具,它可以自動生成sql語句,并執(zhí)行并返回java結(jié)果。
不同點:(1)hibernate要比ibatis功能強大很多。因為hibernate自動生成sql語句;(2)ibatis需要我們自己在xml配置文件中寫sql語句,hibernate我們無法直接控制該語句,我們就無法去寫特定的高效率的sql。對于一些不太復雜的sql查詢,hibernate可以很好幫我們完成,但是,對于特別復雜的查詢,hibernate就很難適應(yīng)了,這時候用ibatis就是不錯的選擇,因為ibatis還是由我們自己寫sql語句。ibatis可以出來復雜語句,而hibernate不能;(3)ibatis要比hibernate簡單的多。ibatis是面向sql的,不同考慮對象間一些復雜的映射關(guān)系。
雖然java框架不是輕易就能掌握的技術(shù),但是java框架面試題卻是比較簡單的,因為在面試題中考察的都是偏理論的基礎(chǔ)知識,在java面試中會經(jīng)常出現(xiàn)。希望大家在認真學習java框架面試題和理論知識的基礎(chǔ)上,再通過java高級框架教程來學習更多的框架方面的內(nèi)容,提高自己的編程能力。