更新時(shí)間:2020-10-23 17:14:28 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2199次
框架是學(xué)習(xí)java編程的重要內(nèi)容,每一個(gè)java程序員都要熟練掌握幾個(gè)自己常用的框架,因此框架也是必然出現(xiàn)在java面試題中的內(nèi)容,是公司在面試時(shí)要重點(diǎn)考察的知識(shí),java框架面試題是大家在準(zhǔn)備面試前需要認(rèn)真做的功課,下面總結(jié)了一些??嫉膉ava框架面試題,都是基礎(chǔ)知識(shí),朋友們可以來(lái)學(xué)習(xí)以下的題目。

1、什么是MVC框架?傳統(tǒng)MVC框架存在的問(wèn)題是什么?
答:MVC框架是為了解決傳統(tǒng)MVC模式(Jsp + Servlet + JavaBean)的一些問(wèn)題而出現(xiàn)的框架。
傳統(tǒng)MVC模式存在問(wèn)題:(1)所有的Servlet和Servlet映射都要配置在web.xml中,如果項(xiàng)目太大,web.xml就太龐大,并且不能實(shí)現(xiàn)模塊化管理;(2)Servlet的主要功能就是接受參數(shù)、調(diào)用邏輯、跳轉(zhuǎn)頁(yè)面,比如像其他字符編碼、文件上傳等功能也要寫(xiě)在Servlet中,不能讓Servlet主要功能而需要做處理一下特例;(3)接受參數(shù)比較麻煩(String name = request.getParameter(“name”),User user=new User user.setName(name)),不能通過(guò)model接收,只能單個(gè)接收,接收完成后轉(zhuǎn)換封裝model;(4)跳轉(zhuǎn)頁(yè)面方式比較單一(forword,redirect),并且當(dāng)我的頁(yè)面名稱(chēng)發(fā)生改變時(shí)需要修改Servlet源代碼。
2、簡(jiǎn)單介紹下對(duì)springMVC特點(diǎn)的理解?
答:Spring MVC Framework有這樣一些特點(diǎn):(1)它是基于組件技術(shù)的、全部的應(yīng)用對(duì)象,無(wú)論控制器和視圖,還是業(yè)務(wù)對(duì)象之類(lèi)的都是java組件,并且和Spring提供的其他基礎(chǔ)結(jié)構(gòu)緊密集成;(2)不依賴(lài)于Servlet API(目標(biāo)雖是如此,但是在實(shí)現(xiàn)的時(shí)候確實(shí)是依賴(lài)于S.ervlet的);(3)可以任意使用各種視圖技術(shù),而不僅僅局限于JSP;(4)支持各種請(qǐng)求資源的映射策略;(5)它應(yīng)是易于擴(kuò)展的
3、什么是Maven?
答:Maven使用項(xiàng)目對(duì)象模型(POM)的概念,可以通過(guò)一小段描述信息來(lái)管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的軟件項(xiàng)目管理工具。Maven 除了以程序構(gòu)建能力為特色之外,還提供高級(jí)項(xiàng)目管理工具。由于 Maven 的缺省構(gòu)建規(guī)則有較高的可重用性,所以常常用兩三行 Maven 構(gòu)建腳本就可以構(gòu)建簡(jiǎn)單的項(xiàng)目。由于 Maven 的面向項(xiàng)目的方法,許多 Apache Jakarta 項(xiàng)目發(fā)布時(shí)使用 Maven,而且公司項(xiàng)目采用 Maven 的比例在持續(xù)增長(zhǎng)。
Maven的出現(xiàn),解決了開(kāi)發(fā)過(guò)程中的jar包升級(jí)及依賴(lài)的難題。它可以對(duì)項(xiàng)目依賴(lài)的jar包進(jìn)行管理,可以讓你的項(xiàng)目保持基本的依賴(lài),排除冗余jar包,并且可以讓你非常輕松的對(duì)依賴(lài)的jar包進(jìn)行版本升級(jí)。而這些僅僅是Maven最基本的功能,它可以在這基礎(chǔ)上對(duì)項(xiàng)目進(jìn)行清理、編譯、測(cè)試、打包、發(fā)布等等構(gòu)建項(xiàng)目的工作。
4、Maven倉(cāng)庫(kù)是什么?
答:Maven倉(cāng)庫(kù)是基于簡(jiǎn)單文件系統(tǒng)存儲(chǔ)的,集中化管理Java API資源(構(gòu)件)的一個(gè)服務(wù)。倉(cāng)庫(kù)中的任何一個(gè)構(gòu)件都有其唯一的坐標(biāo),根據(jù)這個(gè)坐標(biāo)可以定義其在倉(cāng)庫(kù)中的唯一存儲(chǔ)路徑。得益于 Maven 的坐標(biāo)機(jī)制,任何 Maven項(xiàng)目使用任何一個(gè)構(gòu)件的方式都是完全相同的,Maven 可以在某個(gè)位置統(tǒng)一存儲(chǔ)所有的 Maven 項(xiàng)目共享的構(gòu)件,這個(gè)統(tǒng)一的位置就是倉(cāng)庫(kù),項(xiàng)目構(gòu)建完畢后生成的構(gòu)件也可以安裝或者部署到倉(cāng)庫(kù)中,供其它項(xiàng)目使用。
對(duì)于Maven來(lái)說(shuō),倉(cāng)庫(kù)分為兩類(lèi):本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)。
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è)樹(shù)形結(jié)構(gòu),其上的每一個(gè)節(jié)點(diǎn),我們稱(chēng)之為“znode”,zookeeper中的數(shù)據(jù)是按照“樹(shù)”結(jié)構(gòu)進(jìn)行存儲(chǔ)的。而且znode節(jié)點(diǎn)還分為4中不同的類(lèi)型。每一個(gè)znode默認(rèn)能夠存儲(chǔ)1MB的數(shù)據(jù)(對(duì)于記錄狀態(tài)性質(zhì)的數(shù)據(jù)來(lái)說(shuō),夠了),可以使用zkCli命令,登錄到zookeeper上,并通過(guò)ls、create、delete、get、set等命令操作這些znode節(jié)點(diǎn)。
6、什么是Spring beans?
答:Spring beans是那些形成Spring應(yīng)用的主干的java對(duì)象。它們被Spring IOC容器初始化,裝配,和管理。這些beans通過(guò)容器中配置的元數(shù)據(jù)創(chuàng)建。比如,以XML文件中的形式定義。Spring框架定義的beans都是單件beans。在bean tag中有個(gè)屬性”singleton”,如果它被賦為T(mén)RUE,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請(qǐng)求都會(huì)創(chuàng)建一個(gè)bean,該作用域僅在基于web的Spring ApplicationContext情形下有效;(4)session:在一個(gè)HTTP Session中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效;(5)global-session:在一個(gè)全局的HTTP Session中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
8、Dubbo能做什么?
答:(1)透明化的遠(yuǎn)程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,只需簡(jiǎn)單配置,沒(méi)有任何API侵入;(2)軟負(fù)載均衡及容錯(cuò)機(jī)制,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器,降低成本,減少單點(diǎn);(3)服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn),不再需要寫(xiě)死服務(wù)提供方地址,注冊(cè)中心基于接口名查詢(xún)服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。

9、Mybatis是如何進(jìn)行分頁(yè)的?分頁(yè)插件的原理是什么?
答:Mybatis使用RowBounds對(duì)象進(jìn)行分頁(yè),它是針對(duì)ResultSet結(jié)果集執(zhí)行的內(nèi)存分頁(yè),而非物理分頁(yè),可以在sql內(nèi)直接書(shū)寫(xiě)帶有物理分頁(yè)的參數(shù)來(lái)完成物理分頁(yè)功能,也可以使用分頁(yè)插件來(lái)完成物理分頁(yè)。
分頁(yè)插件的基本原理是使用Mybatis提供的插件接口,實(shí)現(xiàn)自定義插件,在插件的攔截方法內(nèi)攔截待執(zhí)行的sql,然后重寫(xiě)sql,根據(jù)dialect方言,添加對(duì)應(yīng)的物理分頁(yè)語(yǔ)句和物理分頁(yè)參數(shù)。
10、JDBC編程有哪些不足之處,MyBatis是如何解決這些問(wèn)題的?
答:(1)數(shù)據(jù)庫(kù)鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi)從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫(kù)鏈接池可解決此問(wèn)題。解決:在SqlMapConfig.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫(kù)鏈接;
(2)Sql語(yǔ)句寫(xiě)在代碼中造成代碼不易維護(hù),實(shí)際應(yīng)用sql變化的可能較大,sql變動(dòng)需要改變java代碼。解決:將Sql語(yǔ)句配置在XXXXmapper.xml文件中與java代碼分離;
(3)向sql語(yǔ)句傳參數(shù)麻煩,因?yàn)閟ql語(yǔ)句的where條件不一定,可能多也可能少,占位符需要和參數(shù)一一對(duì)應(yīng)。解決: Mybatis自動(dòng)將java對(duì)象映射至sql語(yǔ)句;
(4)對(duì)結(jié)果集解析麻煩,sql變化導(dǎo)致解析代碼變化,且解析前需要遍歷,如果能將數(shù)據(jù)庫(kù)記錄封裝成pojo對(duì)象解析比較方便。解決:Mybatis自動(dòng)將sql執(zhí)行結(jié)果映射至java對(duì)象。
11、Dubbo支持的注冊(cè)中心有哪些?
答:(1)Zookeeper(官方推薦),優(yōu)點(diǎn):支持分布式,很多周邊產(chǎn)品,缺點(diǎn): 受限于Zookeeper軟件的穩(wěn)定性.Zookeeper專(zhuān)門(mén)分布式輔助軟件,穩(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)集群失敗問(wèn)題;
(4)Simple,優(yōu)點(diǎn): 標(biāo)準(zhǔn)RPC服務(wù),沒(méi)有兼容問(wèn)題,缺點(diǎn): 不支持集群。
12、什么是Nginx?
答:Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù)。Nginx是由伊戈?duì)枴べ愃饕驗(yàn)槎砹_斯訪問(wèn)量第二的Rambler.ru站點(diǎn)(俄文:Рамблер)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本0.1.0發(fā)布于2004年10月4日。Nginx 是一個(gè)很強(qiáng)大的高性能Web和反向代理服務(wù),它具有很多非常優(yōu)越的特性:在連接高并發(fā)的情況下,Nginx是Apache服務(wù)不錯(cuò)的替代品:Nginx在美國(guó)是做虛擬主機(jī)生意的老板們經(jīng)常選擇的軟件平臺(tái)之一。
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ù)持久化到磁盤(pán),從而進(jìn)行數(shù)據(jù)備份或數(shù)據(jù)恢復(fù)等操作,較好的防止數(shù)據(jù)丟失的手段;(3)支持通過(guò)Replication進(jìn)行數(shù)據(jù)復(fù)制,通過(guò)master-slave機(jī)制,可以實(shí)時(shí)進(jìn)行數(shù)據(jù)的同步復(fù)制,支持多級(jí)復(fù)制和增量復(fù)制,master-slave機(jī)制是Redis進(jìn)行HA的重要手段。單進(jìn)程請(qǐng)求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問(wèn)題。
14、JMS有哪些模型?
答:JMS消息機(jī)制主要分為兩種模型:PTP模型和Pub/Sub模型。
(1)PTP模型:(Point to Point 對(duì)點(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ù)庫(kù)或者文件。
(2)Pub-Sub模型:(publish-subscription 發(fā)布者訂閱者模型)每個(gè)主題可以擁有多個(gè)訂閱者。JMS系統(tǒng)負(fù)責(zé)將消息的副本傳給該主題的每個(gè)訂閱者。
如果希望每一條消息都能夠被處理,那么應(yīng)該使用PTP消息模型。如果并不要求消息都必須被消息消費(fèi)者接收到的情況下,可使用pub-sub消息模型。Pub-Sub模型可以在一對(duì)多的消息廣播時(shí)使用。
15、mybatis與Hibernate有什么不同?
相同點(diǎn):都是java中orm框架、屏蔽jdbc api的底層訪問(wèn)細(xì)節(jié),使用我們不用與jdbc api打交道,就可以完成對(duì)數(shù)據(jù)庫(kù)的持久化操作。jdbc api編程流程固定,還將sql語(yǔ)句與java代碼混雜在了一起,經(jīng)常需要拼湊sql語(yǔ)句,細(xì)節(jié)很繁瑣。
ibatis的好處:屏蔽jdbc api的底層訪問(wèn)細(xì)節(jié);將sql語(yǔ)句與java代碼進(jìn)行分離;提供了將結(jié)果集自動(dòng)封裝稱(chēng)為實(shí)體對(duì)象和對(duì)象的集合的功能.queryForList返回對(duì)象集合,用queryForObject返回單個(gè)對(duì)象;提供了自動(dòng)將實(shí)體對(duì)象的屬性傳遞給sql語(yǔ)句的參數(shù)。
Hibername的好處:Hibernate是一個(gè)全自動(dòng)的orm映射工具,它可以自動(dòng)生成sql語(yǔ)句,并執(zhí)行并返回java結(jié)果。
不同點(diǎn):(1)hibernate要比ibatis功能強(qiáng)大很多。因?yàn)閔ibernate自動(dòng)生成sql語(yǔ)句;(2)ibatis需要我們自己在xml配置文件中寫(xiě)sql語(yǔ)句,hibernate我們無(wú)法直接控制該語(yǔ)句,我們就無(wú)法去寫(xiě)特定的高效率的sql。對(duì)于一些不太復(fù)雜的sql查詢(xún),hibernate可以很好幫我們完成,但是,對(duì)于特別復(fù)雜的查詢(xún),hibernate就很難適應(yīng)了,這時(shí)候用ibatis就是不錯(cuò)的選擇,因?yàn)閕batis還是由我們自己寫(xiě)sql語(yǔ)句。ibatis可以出來(lái)復(fù)雜語(yǔ)句,而hibernate不能;(3)ibatis要比hibernate簡(jiǎn)單的多。ibatis是面向sql的,不同考慮對(duì)象間一些復(fù)雜的映射關(guān)系。
雖然java框架不是輕易就能掌握的技術(shù),但是java框架面試題卻是比較簡(jiǎn)單的,因?yàn)樵诿嬖囶}中考察的都是偏理論的基礎(chǔ)知識(shí),在java面試中會(huì)經(jīng)常出現(xiàn)。希望大家在認(rèn)真學(xué)習(xí)java框架面試題和理論知識(shí)的基礎(chǔ)上,再通過(guò)java高級(jí)框架教程來(lái)學(xué)習(xí)更多的框架方面的內(nèi)容,提高自己的編程能力。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)