更新時間:2021-05-08 10:03:59 來源:動力節點 瀏覽910次
1.使用Spring框架的好處是什么?
輕量:Spring 是輕量的,基本的版本大約2MB。
控制反轉:Spring通過控制反轉實現了松散耦合,對象們給出它們的依賴,而不是創建或查找依賴的對象們。
面向切面的編程(AOP):Spring支持面向切面的編程,并且把應用業務邏輯和系統服務分開。
容器:Spring 包含并管理應用中對象的生命周期和配置。
2.什么是Spring beans?
Spring beans 是那些形成Spring應用的主干的java對象。它們被Spring IOC容器初始化,裝配,和管理。這些beans通過容器中配置的元數據創建。比如,以XML文件中 的形式定義。
Spring 框架定義的beans都是單件beans。在bean tag中有個屬性”singleton”,如果它被賦為TRUE,bean 就是單件,否則就是一個 prototype bean。默認是TRUE,所以所有在Spring框架中的beans 缺省都是單件。
3.解釋Spring支持的幾種bean的作用域
Spring框架支持以下五種bean的作用域:
singleton : bean在每個Spring ioc 容器中只有一個實例。
prototype:一個bean的定義可以有多個實例。
request:每次http請求都會創建一個bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。
session:在一個HTTP Session中,一個bean定義對應一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
global-session:在一個全局的HTTP Session中,一個bean定義對應一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
缺省的Spring bean 的作用域是Singleton.
4.Spring框架中的單例bean是線程安全的嗎?
不,Spring框架中的單例bean不是線程安全的
5.spring 依賴注入方式
(1)Set注入
(2)構造器注入
(3)靜態工廠的方法注入
(4)實例工廠的方法注入
6.AOP中的概念
面向切面:在運行時,動態地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程
7.常用注解:
• @aspect 定義切面
• @pointcut 定義切點
• @before 標注Before Advice定義所在的方法
• @afterreturning 標注After Returning Advice定義所在的方法
• @afterthrowing 標注After Throwing Advice定義所在的方法
• @after 標注 After(Finally) Advice定義所在的方法
• @around 標注Around Advice定義所在的方法
Aspect(切面): 是通知和切入點的結合,通知和切入點共同定義了關于切面的全
部內容—它的功能、在何時和何地完成其功能
joinpoint(連接點):所謂連接點是指那些被攔截到的點。在spring中,這些點指的
是方法,因為spring只支持方法類型的連接點.
Pointcut(切入點):所謂切入點是指我們要對哪些joinpoint進行攔截的定義.
通知定義了切面的”什么”和”何時”,切入點就定義了”何地”.
Advice(通知):所謂通知是指攔截到joinpoint之后所要做的事情就是通知.通知分
為前置通知,后置通知,異常通知,最終通知,環繞通知(切面要完成的功能)
Target(目標對象):代理的目標對象
Weaving(織入):是指把切面應用到目標對象來創建新的代理對象的過程.切面在
指定的連接點織入到目標對象
Introduction(引入):在不修改類代碼的前提下, Introduction可以在運行期為類
動態地添加一些方法或Field.
8.Spring中的AOP底層實現原理
動態代理,照我的理解就是,在不修改原有類對象方法的源代碼基礎上,通過代理對象實現原有類對象方法的增強,也就是拓展原有類對象的功能。
9.什么是Spring boot,Spring boot 有什么特性?
Spring boot 不是對Spring功能上的增強,而是提供了一種快速使用Sping的方式
用來簡化spring應用的初始搭建以及開發過程 使用特定的方式來進行配置(properties或yml文件)
創建獨立的spring引用程序 main方法運行
嵌入的Tomcat 無需部署war文件
簡化maven配置
自動配置spring添加對應功能starter自動化配置
10.springboot常用的starter有哪些
spring-boot-starter-web 嵌入tomcat和web開發需要servlet與jsp支持
spring-boot-starter-data-jpa 數據庫支持
spring-boot-starter-data-redis redis數據庫支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter 第三方的mybatis集成starter
11.springboot自動配置的原理
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
會自動去maven中讀取每個starter中的spring.factories文件 該文件里配置了所有需要被創建spring容器中的bean
12.什么是Spring cloud,Spring cloud有什么特性
Spring cloud 就是一套分布式服務治理的框架,它不會提供具體功能的操作,更專注于服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等等。
13.Spring boot 和Spring cloud 的區別
(1)Spring boot 是 Spring 的一套快速配置腳手架,可以基于spring boot 快速開發單個微服務;Spring Cloud是一個基于Spring Boot實現的云應用開發工具;
(2)Spring boot專注于快速、方便集成的單個個體,Spring Cloud是關注全局的服務治理框架;
(3)spring boot使用了默認大于配置的理念,很多集成方案已經幫你選擇好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot來實現。
(4)Spring boot可以離開Spring Cloud獨立使用開發項目,但是Spring Cloud離不開Spring boot,屬于依賴的關系。
14.Dubbo能做什么?
(1)透明化的遠程方法調用,就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入。
(2)軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,降低成本,減少單點。
(3)服務自動注冊與發現,不再需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的IP地址,并且能夠平滑添加或刪除服務提供者。
15.dubbo使用方法
Dubbo采用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基于Spring的Schema擴展進行加載。如果不想使用Spring配置,而希望通過API的方式進行調用(不推薦)
Dubbo采用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基于Spring的Schema擴展進行加載。
16.Mybatis是如何進行分頁的?分頁插件的原理是什么?
Mybatis使用RowBounds對象進行分頁,它是針對ResultSet結果集執行的內存分頁,而非物理分頁,可以在sql內直接書寫帶有物理分頁的參數來完成物理分頁功能,也可以使用分頁插件來完成物理分頁。
分頁插件的基本原理是使用Mybatis提供的插件接口,實現自定義插件,在插件的攔截方法內攔截待執行的sql,然后重寫sql,根據dialect方言,添加對應的物理分頁語句和物理分頁參數。
舉例:select * from student,攔截sql后重寫為:select t.* from (select * from student)t limit 0,10
17.簡述Mybatis的插件運行原理,以及如何編寫一個插件。
Mybatis僅可以編寫針對ParameterHandler、ResultSetHandler、StatementHandler、Executor這4種接口的插件,Mybatis使用JDK的動態代理,為需要攔截的接口生成代理對象以實現接口方法攔截功能,每當執行這4種接口對象的方法時,就會進入攔截方法,具體就是InvocationHandler的invoke()方法,當然,只會攔截那些你指定需要攔截的方法。
實現Mybatis的Interceptor接口并復寫intercept()方法,然后在給插件編寫注解,指定要攔截哪一個接口的哪些方法即可,記住,別忘了在配置文件中配置你編寫的插件。
18.Mybatis動態sql是做什么的?都有哪些動態sql?能簡述一下動態sql的執行原理不?
Mybatis動態sql可以讓我們在Xml映射文件內,以標簽的形式編寫動態sql,完成邏輯判斷和動態拼接sql的功能,Mybatis提供了9種動態sql標簽trim|where|set|foreach|if|choose|when|otherwise|bind。
其執行原理為,使用OGNL從sql參數對象中計算表達式的值,根據表達式的值動態拼接sql,以此來完成動態sql的功能。
19.Mybatis是如何將sql執行結果封裝為目標對象并返回的?都有哪些映射形式?
第一種是使用標簽,逐一定義列名和對象屬性名之間的映射關系。第二種是使用sql列的別名功能,將列別名書寫為對象屬性名,比如T_NAME AS NAME,對象屬性名一般是name,小寫,但是列名不區分大小寫,Mybatis會忽略列名大小寫,智能找到與之對應對象屬性名,你甚至可以寫成T_NAME AS NaMe,Mybatis一樣可以正常工作。
有了列名與屬性名的映射關系后,Mybatis通過反射創建對象,同時使用反射給對象的屬性逐一賦值并返回,那些找不到映射關系的屬性,是無法完成賦值的。
20.Mybatis是否支持延遲加載?如果支持,它的實現原理是什么?
Mybatis僅支持association關聯對象和collection關聯集合對象的延遲加載,association指的就是一對一,collection指的就是一對多查詢。在Mybatis配置文件中,可以配置是否啟用延遲加載lazyLoadingEnabled=true|false。
它的原理是,使用CGLIB創建目標對象的代理對象,當調用目標方法時,進入攔截器方法,比如調用a.getB().getName(),攔截器invoke()方法發現a.getB()是null值,那么就會單獨發送事先保存好的查詢關聯B對象的sql,把B查詢上來,然后調用a.setB(b),于是a的對象b屬性就有值了,接著完成a.getB().getName()方法的調用。這就是延遲加載的基本原理。
當然了,不光是Mybatis,幾乎所有的包括Hibernate,支持延遲加載的原理都是一樣的。
21.MyBatis實現一對一有幾種方式?具體怎么操作的?
有聯合查詢和嵌套查詢,聯合查詢是幾個表聯合查詢,只查詢一次, 通過在resultMap里面配置association節點配置一對一的類就可以完成; 嵌套查詢是先查一個表,根據這個表里面 的結果的外鍵id,去再另外一個表里面查詢數據,也是通過association配置,但另外一個表的查詢通過select屬性配置。
22.MyBatis實現一對多有幾種方式,怎么操作的?
有聯合查詢和嵌套查詢,聯合查詢是幾個表聯合查詢,只查詢一次,通過在resultMap里面配 置collection節點配置一對多的類就可以完成; 嵌套查詢是先查一個表,根據這個表里面的 結果的外鍵id,去再另外一個表里面查詢數據,也是通過配置collection,但另外一個表的查詢通過select節點配置。
23.Mybatis比IBatis比較大的幾個改進是什么?
(1)有接口綁定,包括注解綁定sql和xml綁定Sql ,
(2)動態sql由原來的節點配置變成OGNL表達式,
(3)在一對一,一對多的時候引進了association,在一對多的時候引入了collection 節點,不過都是在resultMap里面配置。
24.IBatis和MyBatis在核心處理類分別叫什么?
IBatis里面的核心處理類交SqlMapClient, MyBatis里面的核心處理類叫做SqlSession
以上就是動力節點小編介紹的"Java框架面試題及答案",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習