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