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