osgi框架和spring区别_最新100道大厂高频spring面试题附答案
簡(jiǎn)介
這里是由多位互聯(lián)網(wǎng)大廠架構(gòu)師面試整理的出現(xiàn)頻率最高的spring相關(guān)面試題,并為大家整理了完整的答案,趕緊收藏起來吧!
100道spring高頻面試題
- Spring概覽
- 1、Spring是什么?
- 2、Spring框架的好處?
- 3、Spring有哪些模塊?
- 4、解釋Core Container(Application context)模塊
- 5、BeanFactory實(shí)現(xiàn)實(shí)例
- 6、XMLBeanFactory
- 7、解釋AOP模塊
- 8、解釋JDBC抽象和DAO模塊
- 9、解釋對(duì)象/關(guān)系映射集成模塊
- 10、解釋Spring web模塊
- 11、解釋Spring MVC模塊
- 12、Spring配置文件
- 13、如何才能有多個(gè)Spring配置文件?
- 14、ApplicationContext有哪些常見實(shí)現(xiàn)?
- 15、Bean Factory和ApplicationContext有什么區(qū)別?
- 16、Spring框架的一些最佳實(shí)踐是什么?
- 17、使用Spring框架的方式有哪些?
- 18、我們?nèi)绾问褂肧pring創(chuàng)建restful web服務(wù)來返回JSON響應(yīng)結(jié)果?
- 19、Spring vs Spring MVC vs Spring Boot?
- 20、一個(gè)Spring大概是什么樣子?
- 依賴注入
- 21、Spring的IOC容器是什么?
- 22、IOC的好處有哪些?
- 23、Spirng中有多少種IOC容器?
- 24、BeanFactory和ApplicationContext比較
- 25、什么是Spring中的依賴注入?
- 26、緊耦合和松耦合有什么區(qū)別?
- 27、IOC(依賴注入)有哪些不同類型?
- 28、你建議使用構(gòu)造方法注入還是Setter注入?
- Spring Beans
- 29、Spring beans是什么?
- 30、Spring bean定義包含什么?
- 31、如何向Spring容器提供配置元數(shù)據(jù)?
- 32、怎么定義bean的作用域?
- 33、說明Sprig支持的bean作用域
- 34、單例作用域是線程安全的嗎?
- 35、解釋Spring Bean的聲明周期
- 36、有哪些重要的bean生命周期方法?你能重寫它們嗎?
- 37、Spring的內(nèi)部bean是什么?
- 38、如何在Spring中注入Java集合?
- 39、什么是Spring Bean裝配?
- 40、什么是Bean自動(dòng)裝配?
- 41、解釋不同類型的自動(dòng)裝配
- 42、自動(dòng)注入有限制嗎?
- 43、你能在Spring中注入null和空字符串嗎?
- Spring注解
- 44、有哪些重要的Spring注解?
- 45、@RequestParam注解的作用是什么?
- 46、注解@Primary的重要性
- 47、XML配置和注解之間有什么區(qū)別?
- 48、@SpringBootApplication的作用是什么?
- 49、解釋@InitBinder?
- 50、定義@ControllerAdvice
- 51、我們可以將一個(gè)個(gè)對(duì)象作為控制器處理程序方法的響應(yīng)嗎?
- 52、解釋@ModelAttribute?
- 53、@RequestMapping注解
- 54、什么是spring中基于java的配置?給出一注解示例
- 55、什么是基于注解的容器配置?
- 56、如何打開注解裝配?
- Spring 數(shù)據(jù)訪問
- 57、Spring JDBC API中有哪些類?
- 58、如何在Spring框架中更高效地使用JDBC?
- 59、JdbcTemplate
- 60、如何通過spring JdbcTemplate獲取數(shù)據(jù)?
- 61、NamedParameterJdbcTemplate的優(yōu)點(diǎn)是什么?
- 62、什么是SpringJDBCTemplate類以及如何使用它?
- 63、 JDBC和Spring JDBC有什么區(qū)別?
- 64、Spring DAO支持
- 65、使用Spring訪問Hibernate有哪些方式?
- 66、Spring支持的ORM
- 67、如何使用HibernateDaoSupport集成Spring和Hibernate?
- 68、Spring支持的事務(wù)管理類型?
- 69、Spring框架的事務(wù)管理有哪些優(yōu)點(diǎn)?
- 70、哪種事務(wù)管理類型更可取?
- Spring AOP
- 71、解釋AOP
- 72、AOP有哪些優(yōu)點(diǎn)?
- 73、AOP有哪些實(shí)現(xiàn)?
- 74、AOP術(shù)語有哪些?
- 75、切面
- 76、連接點(diǎn)
- 77、通知
- 78、切點(diǎn)
- 79、什么是引入?
- 80、什么是目標(biāo)對(duì)象?
- 81、什么是代理?
- 82、有哪些不同類型的代理?
- 83、什么是織入。什么是織入應(yīng)用的不同點(diǎn)?
- 84、Spring AOP中關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)有什么區(qū)別?
- 85、解釋基于XML Schema方式的切面實(shí)現(xiàn)
- 86、解釋基于注解的切面實(shí)現(xiàn)
- 87、什么是Spring MVC框架?
- 88、創(chuàng)建spring mvc應(yīng)用程序所需的最少配置是什么?
- 89、說出Spring MVC請(qǐng)求處理的主要流程?
- 90、DispatcherServlet
- 91、WebApplicationContext
- 92、 Spring MVC中的控制器是什么?
- 93、你如何將spring mvc框架與MVC架構(gòu)聯(lián)系起來?
- 94、Spring MVC中的ViewResolver是什么?
- 95、MultipartResolver是什么?怎么使用?
- 96、如何在spring mvc應(yīng)用程序中上傳文件?
- 97、Spring Web MVC怎么校驗(yàn)數(shù)據(jù)?
- 98、什么是springmvc攔截器以及如何使用它?
- 擴(kuò)展
- 99、Spring Security是什么?
- 100、為什么要用SpringBoot?
Spring概覽
1、Spring是什么?
Spring是一個(gè)企業(yè)級(jí)Java開發(fā)框架。Spring框架的核心特性可用于開發(fā)任何Java應(yīng)用程序,但也有一些擴(kuò)展用于在Java EE平臺(tái)上構(gòu)建web應(yīng)用程序。Spring框架的目標(biāo)是通過基于POJO的模型,使Java EE開發(fā)更加簡(jiǎn)單。
2、Spring框架的好處?
輕量級(jí):Spring框架是輕量級(jí)的,最基礎(chǔ)的版本大約只有2MB。
控制反轉(zhuǎn)(IOC):通過控制反轉(zhuǎn)技術(shù),實(shí)現(xiàn)了解耦合。對(duì)象給出它們的依賴,而不是創(chuàng)建或查找依賴的對(duì)象。
面向切面(AOP):Spring支持面向切面的編程,并將應(yīng)用程序業(yè)務(wù)邏輯與系統(tǒng)服務(wù)分離。
MVC框架:Spring的WEB框架是一個(gè)設(shè)計(jì)良好的web MVC框架,它為web框架提供了一個(gè)很棒的替代方案。
容器:Spring包含并管理對(duì)象的生命周期和配置。
事務(wù)管理:Spring提供了一個(gè)一致性的事務(wù)管理接口,可以收縮到本地事務(wù),也可以擴(kuò)展到全局事務(wù)(JTA)。
異常處理:Spring提供了方便的API來將具體技術(shù)的異常(由JDBC、Hibernate或JDO拋出)轉(zhuǎn)換為一致的unchecked 異常。
3、Spring有哪些模塊?
Spring大約有20個(gè)模塊,包括核心容器、Data Access/Integration、Web, AOP , Instrumentation 和Test。
??Spring框架最核心的是Spring Core Container它包含以下模塊:
Core
Bean
Context
Expression Language
??Data Access/Integration,提供與數(shù)據(jù)庫(kù)交互的支持。它包含以下模塊:
JDBC
Object-Relational Mapping (ORM)
Java Messaging Service (JMS)
Object XML Mappers (OXM)
Transaction Management
??Web,提供創(chuàng)建web應(yīng)用程序的支持。它包含以下模塊:
Web
Web-MVC
Web-Socket
Web-Portlet
??Test,支持使用JUnit和TestNG進(jìn)行測(cè)試。
??Messaging,提供對(duì)STOMP的支持。它還支持用于路由和處理來自WebSocket客戶端的STOMP消息的注釋編程模型。
??Aspects,提供與AspectJ集成的支持。
4、解釋Core Container(Application context)模塊
這是最基本的Spring模塊,它提供Spring框架的基本功能。BeanFactory是任何基于spring的應(yīng)用程序的核心。Spring框架是基于這個(gè)模塊的,它構(gòu)建了Spring容器。
5、BeanFactory實(shí)現(xiàn)實(shí)例
BeanFactory是工廠模式的實(shí)現(xiàn),它使用控制反轉(zhuǎn)來將程序的配置和依賴項(xiàng)與實(shí)際的業(yè)務(wù)代碼分開。
6、XMLBeanFactory
最常用的是org.springframework.beans.factory.xml.XmlBeanFactory,它根據(jù)XML文件的定義加載對(duì)應(yīng)的bean。這個(gè)容器從XML文件中讀取配置元數(shù)據(jù),并使用它創(chuàng)建完全配置化的應(yīng)用程序。
7、解釋AOP模塊
AOP模塊用于為支持Spring應(yīng)用程序面向切面的開發(fā)。AOP聯(lián)盟提供了很多支持,這樣就確保了Spring和其他AOP框架的共通性。本模塊還將元數(shù)據(jù)編程引入Spring。
8、解釋JDBC抽象和DAO模塊
使用JDBC抽象和DAO模塊,我們可以確保保持?jǐn)?shù)據(jù)庫(kù)代碼的整潔和簡(jiǎn)單,并避免數(shù)據(jù)庫(kù)資源關(guān)閉而導(dǎo)致的問題。它在多個(gè)數(shù)據(jù)庫(kù)服務(wù)器給出的異常之上提供了一層統(tǒng)一的異常。它還利用Spring的AOP模塊為Spring應(yīng)用程序中的對(duì)象提供事務(wù)管理服務(wù)。
9、解釋對(duì)象/關(guān)系映射集成模塊
Spring還通過提供ORM模塊,支持直接在JDBC上使用對(duì)象/關(guān)系映射(ORM)工具。Spring支持集成幾個(gè)流行的ORM框架中,包括Hibernate、JDO和iBATIS SQL Maps。Spring的事務(wù)管理同樣支持這些ORM框架和JDBC。
10、解釋Spring web模塊
Spring web模塊基于applicationcontext模塊,提供了一個(gè)適合基于web的應(yīng)用程序的上下文。此模塊還支持多種面向web的任務(wù),例如隱式地處理文件上傳請(qǐng)求,以及將請(qǐng)求參數(shù)編程綁定到業(yè)務(wù)對(duì)象。還包含與Jakarta Struts的集成。
11、解釋Spring MVC模塊
Spring提供了MVC框架,用于構(gòu)建web應(yīng)用程序。Spring可以很簡(jiǎn)單與其他MVC框架集成,但是Spring的MVC框架是一個(gè)更好的選擇,因?yàn)樗褂肐OC將控制層邏輯與業(yè)務(wù)對(duì)象完全分離。使用Spring MVC,你可以聲明性地將請(qǐng)求參數(shù)綁定到業(yè)務(wù)對(duì)象。
12、Spring配置文件
Spring配置文件是一個(gè)XML文件。這個(gè)文件包含類信息,并說明這些類是如何配置和相互調(diào)用的。
13、如何才能有多個(gè)Spring配置文件?
web.xml contextConfigLocation:你可以通過ContextConfigLocation元素將多個(gè)配置文件全部加載到Web應(yīng)用程序上下文中。假設(shè)你正在編寫一個(gè)web應(yīng)用程序,已經(jīng)有了主應(yīng)用程序上下文。你只需在下一個(gè)上下文的聲明之間留出一些空白。
applicationContext.xml導(dǎo)入resource:你可以添加你的主applicationContext.xml至web.xml文件,然后在主上下文中使用import語句。
14、ApplicationContext有哪些常見實(shí)現(xiàn)?
FileSystemXmlApplicationContext容器從XML文件加載bean的定義。XML bean配置文件的完整路徑必須提供給構(gòu)造函數(shù)。
ClassPathXmlApplicationContext容器也從XML文件加載bean的定義。這里,你需要正確設(shè)置classpath因?yàn)檫@個(gè)容器將在classpath里找bean配置。
WebXmlApplicationContext容器從web應(yīng)用程序中加載包含所有bean定義的XML文件。
15、Bean Factory和ApplicationContext有什么區(qū)別?
Application contexts提供一種方法處理文本消息,一個(gè)通常的做法是加載文件資源(比如鏡像),它們可以向注冊(cè)為監(jiān)聽器的bean發(fā)布事件。另外,在容器或容器內(nèi)的對(duì)象上執(zhí)行的那些不得不由bean工廠以程序化方式處理的操作,可以在Application contexts中以聲明的方式處理。Application contexts實(shí)現(xiàn)了MessageSource接口,該接口的實(shí)現(xiàn)以可插拔的方式提供獲取本地化消息的方法。
16、Spring框架的一些最佳實(shí)踐是什么?
可見 20 個(gè)Spring框架實(shí)踐 ,
17、使用Spring框架的方式有哪些?
可以這樣使用Spring框架:
用于編寫web應(yīng)用程序
提供Restful服務(wù)
保護(hù)你的web應(yīng)用程序
聯(lián)通數(shù)據(jù)庫(kù)
處理長(zhǎng)時(shí)間運(yùn)行的作業(yè)
處理你必須要用的外部資源和系統(tǒng)
用于測(cè)試
用于獨(dú)立的java項(xiàng)目
將應(yīng)用程序轉(zhuǎn)換為可執(zhí)行文件
將社交媒體集成到應(yīng)用程序中
18、我們?nèi)绾问褂肧pring創(chuàng)建restful web服務(wù)來返回JSON響應(yīng)結(jié)果?
只要Jackson2在classpath中,SpringBoor程序中的任何Spring @RestController修飾的控制器默認(rèn)都返回json格式結(jié)果。
19、Spring vs Spring MVC vs Spring Boot?
Spring:Spring最重要的特性是依賴注入或控制反轉(zhuǎn)。
Spring MVC :是一個(gè)完全面向HTTP的MVC框架,由Spring框架管理并基于servlet。
SpringBoot:是一個(gè)用于快速配置的應(yīng)用框架,它提供現(xiàn)成的配置,以便構(gòu)建Spring應(yīng)用。
20、一個(gè)Spring大概是什么樣子?
接口:定義了一些方法的接口。
Bean類:它包含屬性、setter和getter方法、其它方法等等。
Spring AOP:提供關(guān)注橫切面的功能。
XML配置文件:包含類的信息以及如何配置它們。
客戶程序:調(diào)用方法。
依賴注入
21、Spring的IOC容器是什么?
Spring IOC負(fù)責(zé)創(chuàng)建對(duì)象,使用依賴注入(dependency injection,DI)管理它們,將對(duì)象集中起來,配置對(duì)象,管理對(duì)象的整個(gè)生命周期。
22、IOC的好處有哪些?
IOC或依賴注入最小化應(yīng)用程序代碼量。
它使測(cè)試應(yīng)用程序變得容易,因?yàn)閱卧獪y(cè)試中不需要單例或JNDI查找機(jī)制。
以最小的代價(jià)和最少的干擾來促進(jìn)松耦合。
IOC容器支持快速實(shí)例化和懶加載。
23、Spirng中有多少種IOC容器?
BeanFactory:BeanFactory本質(zhì)上只不過是高層級(jí)的工廠接口,它能夠維護(hù)不同bean及其依賴項(xiàng)的注冊(cè)表。BeanFactory使你能夠讀取bean定義并使用bean工廠調(diào)用它們。
ApplicationContext:ApplicationContext是Spring應(yīng)用程序中的核心接口,用于向應(yīng)用程序提供配置信息。它在運(yùn)行時(shí)是只讀的,但如果需要并且應(yīng)用支持的話,可以重新加載。許多類實(shí)現(xiàn)了ApplicationContext接口,允許多種配置項(xiàng)和應(yīng)用類型。
24、BeanFactory和ApplicationContext比較
Application Context:
Bean實(shí)例化/裝配
BeanPostProcessor自動(dòng)注冊(cè)
BeanFactoryPostProcessor自動(dòng)注冊(cè)
方便的消息源訪問(針對(duì)i18n)
ApplicationEvent發(fā)布
BeanFactory:
Bean實(shí)例化/裝配
25、什么是Spring中的依賴注入?
依賴注入是控制反轉(zhuǎn)(IOC)的一個(gè)方面,是一個(gè)通用的概念,它有很多種表達(dá)的方式。這個(gè)概念意思你不創(chuàng)建你的對(duì)象,但描述他們應(yīng)該如何創(chuàng)建。你不會(huì)在代碼中直接將組件和服務(wù)耦合在一起,而是描述配置文件中的哪些組件需要哪些服務(wù)。然后由一個(gè)容器(IOC容器)負(fù)責(zé)將它們關(guān)聯(lián)起來。
26、緊耦合和松耦合有什么區(qū)別?
緊耦合:
緊密耦合是指類之間高度依賴。
松耦合:
松耦合是通過促進(jìn)單一職責(zé)和關(guān)注點(diǎn)分離的設(shè)計(jì)來實(shí)現(xiàn)的。
27、IOC(依賴注入)有哪些不同類型?
構(gòu)造方法注入:基于構(gòu)造方法的依賴注入是在容器調(diào)用一個(gè)帶有多個(gè)參數(shù)的類構(gòu)造方法時(shí)完成的,每個(gè)參數(shù)都表示對(duì)其他類的依賴。
Setter注入:Setter注入是由容器在調(diào)用無參數(shù)構(gòu)造方法或無參數(shù)靜態(tài)工廠方法實(shí)例化Bean后調(diào)用Bean的Setter方法來實(shí)現(xiàn)的。
28、你建議使用構(gòu)造方法注入還是Setter注入?
可以同時(shí)使用構(gòu)造方法注入和Setter注入。最好的解決方案是對(duì)強(qiáng)制依賴項(xiàng)使用構(gòu)造方法注入,對(duì)可選依賴項(xiàng)使用setter方法注入。
Spring Beans
29、Spring beans是什么?
Spring bean是構(gòu)成Spring應(yīng)用程序主干的Java對(duì)象。它們由springioc容器實(shí)例化、組裝和管理。這些bean是使用提供給容器的配置元數(shù)據(jù)創(chuàng)建的,例如,XML中形式定義。
spring框架中定義的bean是單例bean。bean標(biāo)記中有一個(gè)名為“singleton”的屬性,如果指定為true,則bean為單例;如果設(shè)置為false,則bean將成為prototype bean。默認(rèn)設(shè)置為true。所以,spring框架中的所有bean默認(rèn)都是單例bean。
30、Spring bean定義包含什么?
Spring bean的定義包含容器如何創(chuàng)建Bean、其生命周期及其依賴關(guān)系所需的所有配置元數(shù)據(jù)。
31、如何向Spring容器提供配置元數(shù)據(jù)?
向Spring容器提供配置元數(shù)據(jù)有三種重要方法:
基于XML的配置文件
基于注解的配置
基于Java的配置
32、怎么定義bean的作用域?
在Spring中定義時(shí),我們還可以為bean聲明一個(gè)作用域。它可以通過bean定義中的scope屬性來定義。例如,當(dāng)Spring每次需要生成一個(gè)新的bean實(shí)例時(shí),這個(gè)bean的scope屬性就是prototype。另一方面,當(dāng)Spring每次需要時(shí)都必須返回同一個(gè)bean實(shí)例時(shí),bean scope屬性必須設(shè)置為singleton。
33、說明Sprig支持的bean作用域
singleton:Spring將bean定義的范圍限定為每個(gè)Spring IOC容器只有一個(gè)單實(shí)例。
prototype:單個(gè)bean定義有任意數(shù)量的對(duì)象實(shí)例。
request:作用域?yàn)橐淮蝖ttp請(qǐng)求,該作用域僅在基于web的Spring ApplicationContext情形下有效。
session:作用域?yàn)镠TTP Session,該作用域僅在基于web的Spring ApplicationContext情形下有效。
global-session:作用域?yàn)槿值腍TTP session。該作用域也是僅在基于web的Spring ApplicationContext情形下有效。
默認(rèn)的作用域是singleton。
34、單例作用域是線程安全的嗎?
不,單例bean在Spring框架中不是線程安全的。
35、解釋Spring Bean的聲明周期
Spring容器 從XML 文件中讀取bean的定義,并實(shí)例化bean。
Spring填充bean定義(DI)中指定的所有屬性。
如果bean實(shí)現(xiàn)了BeanNameAware接口,spring會(huì)將bean的id傳遞給setBeanName()方法。
如果有任何BeanBeanPostProcessor與該bean關(guān)聯(lián),Spring將調(diào)用postProcesserBeforeInitialization()方法。
如果bean實(shí)現(xiàn)了IntializingBean,則調(diào)用其afterPropertySet()方法。如果bean聲明了init方法,則調(diào)用指定的init方法。
如果有任何與bean關(guān)聯(lián)的beanPostProcessor,則將調(diào)用它們的postProcessAfterInitialization()方法。
如果bean實(shí)現(xiàn)l了DisposableBean,它將調(diào)用destroy()方法。
36、有哪些重要的bean生命周期方法?你能重寫它們嗎?
有兩個(gè)重要的生命周期方法。
第一個(gè)是setup,當(dāng)bean加載到容器中時(shí)調(diào)用它。第二個(gè)方法是teardown方法,當(dāng)bean從容器中卸載時(shí)調(diào)用該方法。
bean標(biāo)簽有兩個(gè)重要的屬性(init-method和destroy-method),可以用它們定義自己的自定義初始化和銷毀方法。還有相應(yīng)的注解(@PostConstruct和@PreDestroy)。
37、Spring的內(nèi)部bean是什么?
當(dāng)一個(gè)bean僅被用作另一個(gè)bean的屬性時(shí),它能被聲明為一個(gè)內(nèi)部bean,為了定義內(nèi)部bean,在Spring 的 基于XML的 配置元數(shù)據(jù)中,可以在 < property/ >或 < constructor-arg/ > 元素內(nèi)使用< bean/ > 元素,內(nèi)部bean通常是匿名的,它們的作用域一般是prototype。
38、如何在Spring中注入Java集合?
Spring提供以下幾種集合的配置元素:
類型用于注入一列值,允許有相同的值。
類型用于注入一組值,不允許有相同的值。
<map style="box-sizing: border-box; outline: 0px; overflow-wrap: break-word;">類型用于注入一組鍵值對(duì),鍵和值都可以為任意類型。</map>
類型用于注入一組鍵值對(duì),鍵和值都只能為String類型。
39、什么是Spring Bean裝配?
裝配,或bean 裝配是指在Spring 容器中把bean組裝到一起,前提是容器需要知道bean的依賴關(guān)系,如何通過依賴注入來把它們裝配到一起。
40、什么是Bean自動(dòng)裝配?
Spring 容器能夠自動(dòng)裝配 自動(dòng)關(guān)聯(lián) 的bean,這意味著,通過檢查BeanFactory的內(nèi)容,而不使用
41、解釋不同類型的自動(dòng)裝配
自動(dòng)裝配有五種模式,可用于指示Spring容器使用autowiring進(jìn)行依賴注入:
no:默認(rèn)的方式是不進(jìn)行自動(dòng)裝配,通過顯式設(shè)置ref 屬性來進(jìn)行裝配。
byName:通過參數(shù)名 自動(dòng)裝配,Spring容器在配置文件中發(fā)現(xiàn)bean的autowire屬性被設(shè)置成byname,之后容器試圖匹配、裝配和該bean的屬性具有相同名字的bean。
byType:過參數(shù)類型自動(dòng)裝配,Spring容器在配置文件中發(fā)現(xiàn)bean的autowire屬性被設(shè)置成byType,之后容器試圖匹配、裝配和該bean的屬性具有相同類型的bean。如果有多個(gè)bean符合條件,則拋出異常。
constructor:這個(gè)方式類似于byType, 但是要提供構(gòu)造器參數(shù),如果沒有確定的帶參數(shù)的構(gòu)造器參數(shù)類型,將會(huì)拋出異常。
autodetect:首先嘗試使用constructor來自動(dòng)裝配,如果不行,則使用byType方式。
42、自動(dòng)注入有限制嗎?
自動(dòng)注入的限制:
重寫: 你仍可以用 < constructor-arg >和 < property > 配置來定義依賴,這些配置將始終覆蓋自動(dòng)注入。
基本數(shù)據(jù)類型:不能自動(dòng)裝配簡(jiǎn)單的屬性,如基本數(shù)據(jù)類型、字符串和類。
模糊特性:自動(dòng)裝配不如顯式裝配精確,如果有可能盡量使用顯示裝配。
43、你能在Spring中注入null和空字符串嗎?
是的,可以。
Spring注解
44、有哪些重要的Spring注解?
我在項(xiàng)目中使用的一些Spring注解:
@Component:用于指示類是組件。這些類用于自動(dòng)注入,并在使用基于注解的配置時(shí)配置為bean。
@Controller:是一種特定類型的組件,用于MVC應(yīng)用程序,主要與@RequestMapping注解一起使用。
@Repository:用于表示組件用作存儲(chǔ)庫(kù)和存儲(chǔ)/檢索/搜索數(shù)據(jù)的操作。我們可以將此注解應(yīng)用于DAO實(shí)現(xiàn)類。
@Service:用于指示類是服務(wù)層。
@Required:此注解簡(jiǎn)單地說明作用的bean屬性必須在配置時(shí)通過bean定義中的顯式屬性值或通過自動(dòng)注入填充。如果作用的bean屬性未填充,容器將拋出BeanInitializationException。
@ResponseBody:用于將對(duì)象作為response,通常用于將XML或JSON數(shù)據(jù)作為response發(fā)送。
@PathVariable:用于將動(dòng)態(tài)值從URI映射到處理方法參數(shù)。
@Autowired:對(duì)自動(dòng)注入的位置和方式提供了更細(xì)粒度的控制。它可以用于在setter方法上自動(dòng)注入bean。就像@Required 注解一樣,修飾setter方法、構(gòu)造器、屬性或者具有任意名稱和/或多個(gè)參數(shù)的PN方法。
@Qualifier:當(dāng)有多個(gè)相同類型的bean并且只需要將一個(gè)bean自動(dòng)注入時(shí),@Qualifier注解與@Autowired注釋一起使用,通過指定將連接哪個(gè)bean來消除歧義。
@Scope:配置Spring bean的作用域。
@Configuration:表示Spring IOC容器可以將該類用作bean定義的源。
@ComponentScan:應(yīng)用此注解時(shí),將掃描包下的所有可用類。
@Bean:對(duì)于基于java的配置,用@Bean注解修飾的方法將返回一個(gè)在Spring應(yīng)用程序上下文中注冊(cè)為Bean的對(duì)象。
用于配置切面和通知、@Aspect、@Before、@After、@Around、@Pointcut等的AspectJ注解。
45、@RequestParam注解的作用是什么?
spring中的@RequestParam注解將查詢字符串的參數(shù)值綁定到控制器的方法參數(shù)。
46、注解@Primary的重要性
當(dāng)有多個(gè)相同數(shù)據(jù)類型的bean時(shí),開發(fā)人員Spring的@Primary注解,它會(huì)自動(dòng)為特定bean提供更高的優(yōu)先級(jí)。這個(gè)注解可以用在任何直接或間接用@Component注解修飾的類上,也可以用在用@Bean注解修飾的方法上。
47、XML配置和注解之間有什么區(qū)別?
注解的優(yōu)點(diǎn):
所有信息都在一個(gè)文件中
當(dāng)類更改了,不用修改xml配置文件
xml配置的優(yōu)點(diǎn):
POJO及其行為之間更清晰地分離
當(dāng)你不知道哪個(gè)POJO負(fù)責(zé)該行為時(shí),更容易找到該P(yáng)OJO
48、@SpringBootApplication的作用是什么?
@SpringBootApplication 注解是在springboot1.2.0中引入的,它支持自動(dòng)配置特性。
此批注封裝了三種不同注解的作用:
@Configuration:允許開發(fā)人員顯式地注冊(cè)bean
@ComponentScan:啟用組件掃描,這樣控制器類和其他組件將被自動(dòng)發(fā)現(xiàn)并注冊(cè)為Spring應(yīng)用程序上下文中的bean
@EnableAutoConfiguration:啟動(dòng)SpringBoot的自動(dòng)配置特性
此注解可以使用以下可選參數(shù):
exclude:從自動(dòng)配置中排除的類列表
excludeNames:從自動(dòng)配置中排除完全限定類名的列表
scanBasePackage:其中提供了掃描程序包的列表
scanBasePackageClasses:提供必須應(yīng)用于掃描的其他包中的類的列表
49、解釋@InitBinder?
此注解修飾在聲明日期格式的方法上,并且在整個(gè)類中,使用定義的日期格式。每當(dāng)綁定作用在日期字段@InitBinder注解中時(shí),說明使用CustomDateEditor,而CustomDateEditor則使用@InitBinder中聲明的日期格式。
50、定義@ControllerAdvice
有@ControllerAdvice注解的類可以顯式聲明為Spring bean,或者通過類路徑掃描自動(dòng)注入。所有這樣的bean都是通過AnnotationAwareOrderComparator排序的,即基于@Order和Ordered,并在運(yùn)行時(shí)按該順序調(diào)用。對(duì)于處理異常,將使用匹配的異常處理程序方法在第一個(gè)通知上選擇一個(gè)@ExceptionHandler。對(duì)于模型屬性和InitBinder初始化,@ModelAttribute和@InitBinder方法也將遵循@ControllerAdvice順序。
51、我們可以將一個(gè)個(gè)對(duì)象作為控制器處理程序方法的響應(yīng)嗎?
是的,我們可以使用@ResponseBody注解在restful web服務(wù)中發(fā)送基于JSON或XML的響應(yīng)。
52、解釋@ModelAttribute?
@ModelAttribute注解引用模型對(duì)象的屬性,用于準(zhǔn)備模型數(shù)據(jù)。此注解將方法變量或模型對(duì)象綁定到命名的模型屬性。此注解接受一個(gè)可選值,該值表示模型屬性的名稱。@ModelAttribute注解可以在參數(shù)級(jí)別或方法級(jí)別使用。在參數(shù)級(jí)別使用此注解是為了接受請(qǐng)求表單值,而在方法級(jí)別則是將默認(rèn)值分配給模型。
53、@RequestMapping注解
@RequestMapping注解用于將web請(qǐng)求映射到處理程序類(即控制器)或處理程序方法上,它可以在方法級(jí)或類級(jí)使用。如果開發(fā)人員在類級(jí)別使用@RequestMapping注釋,它將作為方法級(jí)路徑的相對(duì)路徑。
54、什么是spring中基于java的配置?給出一注解示例
基于Java的配置選項(xiàng)使你能夠在不使用XML的情況下編寫大多數(shù)Spring配置,但是需要一些基于Java的注釋的幫助。
一個(gè)例子是@Configuration注釋,它表示spring IOC容器可以將該類用作bean定義的源。另一個(gè)例子是@Bean注解的方法,該方法將返回一個(gè)對(duì)象,該對(duì)象應(yīng)在Spring應(yīng)用程序上下文中注冊(cè)為bean。
55、什么是基于注解的容器配置?
XML配置之外的另一種選擇是基于注解的配置,它依賴字節(jié)碼元數(shù)據(jù)來裝配組件,而不是尖括號(hào)聲明。開發(fā)人員不使用XML來描述bean裝配,而是通過在相關(guān)的類、方法或字段聲明上使用注解將配置移動(dòng)到組件類中。
56、如何打開注解裝配?
默認(rèn)情況下,Spring容器中的注解裝配不會(huì)打開。為了使用基于注解的裝配,我們必須在Spring配置文件中配置context:annotation-config/ 元素。
Spring 數(shù)據(jù)訪問
57、Spring JDBC API中有哪些類?
JdbcTemplate
SimpleJdbcTemplate
NamedParameterJdbcTemplate
SimpleJdbcInsert
SimpleJdbcCall
58、如何在Spring框架中更高效地使用JDBC?
使用SpringJDBC 框架,資源管理和錯(cuò)誤處理的代價(jià)都會(huì)被減輕。所以開發(fā)者只需寫statements 和 queries從數(shù)據(jù)存取數(shù)據(jù),JDBC也可以在Spring框架提供的模板類的幫助下更有效地被使用,這個(gè)模板叫JdbcTemplate 。
59、JdbcTemplate
JdbcTemplate 類提供了很多便利的方法解決諸如把數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)變成基本數(shù)據(jù)類型或?qū)ο?#xff0c;執(zhí)行寫好的或可調(diào)用的數(shù)據(jù)庫(kù)操作語句,提供自定義的數(shù)據(jù)錯(cuò)誤處理。
60、如何通過spring JdbcTemplate獲取數(shù)據(jù)?
有兩個(gè)接口可用于從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù):
ResultSetExtractor
RowMapper
61、NamedParameterJdbcTemplate的優(yōu)點(diǎn)是什么?
NamedParameterJdbcTemplate是基于spring提供的JDBCTemplate構(gòu)建的,用于與數(shù)據(jù)庫(kù)的底層交互。它可以將SQL查詢參數(shù)作為鍵值對(duì)傳遞。因此,與索引或“?”相比,程序代碼的可讀性要高得多,因此可以作為更好的標(biāo)識(shí)“?“”占位符方法。特別是在參數(shù)數(shù)目龐大的情況下,后者更難跟蹤。
62、什么是SpringJDBCTemplate類以及如何使用它?
JdbcTemplate類執(zhí)行SQL查詢、update語句和存儲(chǔ)過程調(diào)用,對(duì)結(jié)果集執(zhí)行迭代,并提取返回的參數(shù)值。它隱式處理資源的創(chuàng)建和釋放,從而避免諸如忘記關(guān)閉連接之類的錯(cuò)誤。它還捕獲JDBC異常并進(jìn)行包裝。
63、 JDBC和Spring JDBC有什么區(qū)別?
Spring JDBC在JDBC的頂層提供數(shù)據(jù)操作:
1、定義連接參數(shù)
2、打開連接
3、指定語句
4、準(zhǔn)備并執(zhí)行語句
5、設(shè)置循環(huán)以迭代結(jié)果(如果有)
6、操作每個(gè)迭代
7、處理任何異常
8、處理事務(wù)
9、關(guān)閉連接
64、Spring DAO支持
Spring中對(duì)數(shù)據(jù)訪問對(duì)象(DAO)的支持目的使人們更容易以一致的方式使用JDBC、Hibernate或JDO等數(shù)據(jù)訪問技術(shù)。這使我們可以相當(dāng)容易地在持久性技術(shù)之間切換,也可以不必?fù)?dān)心捕捉每種技術(shù)特有的異常。
65、使用Spring訪問Hibernate有哪些方式?
有兩種方式使用Spirng訪問Hibernate。
使用Hibernate模板和回調(diào)進(jìn)行控制反轉(zhuǎn)。
擴(kuò)展HibernateDAOSupport并應(yīng)用AOP攔截器節(jié)點(diǎn)。
66、Spring支持的ORM
Spring支持下面的ORM:
Hibernate
iBatis
JPA(Java持久化API)
TopLink
JDO (Java Data Objects)
OJB
67、如何使用HibernateDaoSupport集成Spring和Hibernate?
用Spring的 SessionFactory 調(diào)用 LocalSessionFactory。集成過程分三步:
配置the Hibernate SessionFactory
繼承HibernateDaoSupport實(shí)現(xiàn)一個(gè)DAO
在AOP支持的事務(wù)中裝配
68、Spring支持的事務(wù)管理類型?
編程式事務(wù)管理: 這意味你通過編程的方式管理事務(wù),給你很大的靈活性,但是難維護(hù)。
聲明式事務(wù)管理: 這意味著你可以將業(yè)務(wù)代碼和事務(wù)管理分離,你只需用注解和XML配置來管理事務(wù)。
69、Spring框架的事務(wù)管理有哪些優(yōu)點(diǎn)?
它提供了跨不同事務(wù)api(如JTA、JDBC、Hibernate、JPA和JDO)的一致編程模型。
它為編程事務(wù)管理提供了比JTA等許多復(fù)雜事務(wù)API更簡(jiǎn)單的API。
它支持聲明式事務(wù)管理。
它很好地集成了Spring的各種數(shù)據(jù)訪問抽象。
70、哪種事務(wù)管理類型更可取?
大多數(shù)Spring框架的用戶選擇聲明式事務(wù)管理,因?yàn)樗鼘?duì)應(yīng)用代碼的影響最小,因此更符合一個(gè)無侵入的輕量級(jí)容器的思想。聲明式事務(wù)管理要優(yōu)于編程式事務(wù)管理,雖然比編程式事務(wù)管理(這種方式允許你通過代碼控制事務(wù))少了一點(diǎn)靈活性。
Spring AOP
71、解釋AOP
面向切面編程,或AOP, 是一種編程技術(shù),允許程序模塊化橫向切割關(guān)注點(diǎn),或橫切典型的責(zé)任劃分,如日志和事務(wù)管理。
72、AOP有哪些優(yōu)點(diǎn)?
a.它是非侵入性的
你的service/domain類被切面通知,而無需在service/domain類中添加任何與spring aop相關(guān)的類或接口。
允許開發(fā)人員專注于業(yè)務(wù)代碼,而不是切點(diǎn)。
b.它是用純Java實(shí)現(xiàn)的
不需要特殊的編譯單元或特殊的類加載器
c.它使用Spring的IOC進(jìn)行依賴注入
切面可以配置為普通的spring bean。
d.與任何其他AOP框架一樣,它將橫切關(guān)注點(diǎn)編織到類中,而不從這些類中調(diào)用橫切關(guān)注點(diǎn)。
e.集中或模塊化橫切關(guān)注點(diǎn)
易于維護(hù)和更改切面
改變需要在一處進(jìn)行。
在你不希望有的類中有日志記錄,可以通過修改相應(yīng)切面(日志切面)中的切入點(diǎn)來輕松實(shí)現(xiàn)。所以你只需要在一個(gè)地方做出改變。
f.用于使用基于模式(XML配置)或@AspectJ基于注解的方式創(chuàng)建切面。
g.易于配置
73、AOP有哪些實(shí)現(xiàn)?
AOP實(shí)現(xiàn):
Spring AOP:
通過動(dòng)態(tài)代理實(shí)現(xiàn)
它只支持方法級(jí)切入點(diǎn)
它是基于DTD的
Apache AspectJ:
通過aspectj java工具實(shí)現(xiàn)編譯時(shí)編織,是通過靜態(tài)代理實(shí)現(xiàn)的
它支持字段級(jí)切入點(diǎn)
它是基于模式和注解配置的
74、AOP術(shù)語有哪些?
切面
通知
切點(diǎn)
連接點(diǎn)
引入
目標(biāo)對(duì)象
AOP代理
織入
75、切面
AOP的核心結(jié)構(gòu)是切面,它將影響多個(gè)類的行為封裝到可重用的模塊中。提供了一組跨領(lǐng)域需求的ia模塊。例如,一個(gè)日志模塊將被稱為AOP切面進(jìn)行日志記錄。根據(jù)需求,應(yīng)用程序可以有任意數(shù)量的切面。在spring aop中,切面是使用帶有@Aspect注釋(@AspectJ樣式)注解的常規(guī)類來實(shí)現(xiàn)的。
76、連接點(diǎn)
連接點(diǎn)代表一個(gè)應(yīng)用程序的某個(gè)位置,在這個(gè)位置我們可以插入一個(gè)AOP切面,它實(shí)際上是個(gè)應(yīng)用程序執(zhí)行Spring AOP的位置。
77、通知
通知是個(gè)在方法執(zhí)行前或執(zhí)行后要做的動(dòng)作,實(shí)際上是程序執(zhí)行時(shí)要通過SpringAOP框架觸發(fā)的代碼段。
Spring切面可以應(yīng)用五種類型的通知:
before: 前置通知,在一個(gè)方法執(zhí)行前被調(diào)用
after: 在方法執(zhí)行之后調(diào)用的通知,無論方法執(zhí)行是否成功
after-returning: 僅當(dāng)方法成功完成后執(zhí)行的通知
after-throwing: 在方法拋出異常退出時(shí)執(zhí)行的通知
around: 在方法執(zhí)行之前和之后調(diào)用的通知
78、切點(diǎn)
切入點(diǎn)是一個(gè)或一組連接點(diǎn),通知將在這些位置執(zhí)行。可以通過表達(dá)式或匹配的方式指明切入點(diǎn)。
79、什么是引入?
引入允許我們?cè)谝汛嬖诘念愔性黾有碌姆椒ê蛯傩浴?/p>
80、什么是目標(biāo)對(duì)象?
目標(biāo)對(duì)象是由一個(gè)或多個(gè)切面通知的對(duì)象。它將始終是一個(gè)代理對(duì)象。它也被稱為通知(advised)對(duì)象。
81、什么是代理?
代理是通知目標(biāo)對(duì)象后創(chuàng)建的對(duì)象。從客戶端的角度看,代理對(duì)象和目標(biāo)對(duì)象是一樣的。
82、有哪些不同類型的代理?
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
Metadata autoproxying
83、什么是織入。什么是織入應(yīng)用的不同點(diǎn)?
織入是將切面和到其他應(yīng)用類型或?qū)ο筮B接或創(chuàng)建一個(gè)被通知對(duì)象的過程。
織入可以在編譯時(shí),加載時(shí),或運(yùn)行時(shí)完成。
84、Spring AOP中關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)有什么區(qū)別?
關(guān)注點(diǎn)是我們希望在應(yīng)用程序的模塊中擁有的行為。關(guān)注點(diǎn)可以定義為我們想要實(shí)現(xiàn)的功能。
橫切關(guān)注點(diǎn)是一個(gè)在整個(gè)應(yīng)用程序中都適用的關(guān)注點(diǎn),它會(huì)影響整個(gè)應(yīng)用程序。例如,日志記錄、安全性和數(shù)據(jù)傳輸是應(yīng)用程序中幾乎每個(gè)模塊都需要的關(guān)注點(diǎn),因此它們是橫切關(guān)注點(diǎn)。
85、解釋基于XML Schema方式的切面實(shí)現(xiàn)
在這種情況下,切面由常規(guī)類以及基于XML的配置實(shí)現(xiàn)。
86、解釋基于注解的切面實(shí)現(xiàn)
在這種情況下(基于@AspectJ的實(shí)現(xiàn)),涉及到的切面聲明的風(fēng)格與帶有java5標(biāo)注的普通java類一致。
G.Spring Model View Controller (MVC)
87、什么是Spring MVC框架?
Spring 配備構(gòu)建Web 應(yīng)用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反轉(zhuǎn)把業(yè)務(wù)對(duì)象和控制邏輯清晰地隔離。它也允許以聲明的方式把請(qǐng)求參數(shù)和業(yè)務(wù)對(duì)象綁定。
88、創(chuàng)建spring mvc應(yīng)用程序所需的最少配置是什么?
為了創(chuàng)建一個(gè)簡(jiǎn)單的Spring MVC應(yīng)用程序,我們需要做以下工作:
在項(xiàng)目中添加spring上下文和spring-webmvc依賴。在web.xml中配置DispatcherServlet來通過spring容器處理請(qǐng)求。
定義bean的spring bean配置文件,如果使用注解,那么必須在這里配置它。我們還需要為視圖頁(yè)面配置視圖解析器。
定義用于處理客戶端請(qǐng)求的請(qǐng)求映射的控制器類。
89、說出Spring MVC請(qǐng)求處理的主要流程?
瀏覽器向DispatcherServlet發(fā)送請(qǐng)求
DispatcherServlet獲取HanderMapping并找到適當(dāng)?shù)目刂破?/p>
控制器執(zhí)行請(qǐng)求并將數(shù)據(jù)放入模型中,并將視圖名稱返回給DispatcherServlet。
DispatcherServlet通過視圖名稱和ViewResolver映射到對(duì)應(yīng)的視圖。
90、DispatcherServlet
Spring的MVC框架是圍繞DispatcherServlet來設(shè)計(jì)的,它用來處理所有的HTTP請(qǐng)求和響應(yīng)。
91、WebApplicationContext
WebApplicationContext 繼承了ApplicationContext 并增加了一些WEB應(yīng)用必備的特有功能,它不同于一般的ApplicationContext ,因?yàn)樗芴幚碇黝},并找到被關(guān)聯(lián)的servlet。
92、 Spring MVC中的控制器是什么?
控制器提供一個(gè)訪問應(yīng)用程序的行為,此行為通常通過服務(wù)接口實(shí)現(xiàn)。控制器解析用戶輸入并將其轉(zhuǎn)換為一個(gè)由視圖呈現(xiàn)給用戶的模型。Spring用一個(gè)非常抽象的方式實(shí)現(xiàn)了一個(gè)控制層,允許用戶創(chuàng)建多種用途的控制器。
93、你如何將spring mvc框架與MVC架構(gòu)聯(lián)系起來?
SpringMVC框架:
Spring框架是一個(gè)開源的web應(yīng)用程序框架和Java平臺(tái)的控制反轉(zhuǎn)容器。
MVC架構(gòu):
MVC(Model-View-Controller,簡(jiǎn)稱MVC)是一種用于開發(fā)web應(yīng)用程序的軟件設(shè)計(jì)模式.
94、Spring MVC中的ViewResolver是什么?
Spring提供了ViewResolver,它使你能夠在瀏覽器中渲染模型,而無需將綁定到特定的視圖技術(shù)。例如,Spring允許您使用jsp、Velocity模板和XSLT視圖。對(duì)Spring處理視圖的方式很重要的兩個(gè)接口是ViewResolver和View。ViewResolver提供視圖名稱和實(shí)際視圖之間的映射。View接口處理請(qǐng)求的準(zhǔn)備工作,并將請(qǐng)求移交給某一個(gè)視圖技術(shù)。
95、MultipartResolver是什么?怎么使用?
spring mvc通過MultipartResolver提供多請(qǐng)求支持。MultipartResolver解析入站多請(qǐng)求。你可以通過在DispatcherServlet應(yīng)用程序上下文中注冊(cè)MultipartResolver bean來啟用多請(qǐng)求支持。
96、如何在spring mvc應(yīng)用程序中上傳文件?
Spring為通過MultipartResolver接口為上傳文件提供了內(nèi)置支持。該字段還有一個(gè)驗(yàn)證器,用于檢查上載的文件的大小是否大于零。最后只需要一個(gè)簡(jiǎn)單的視圖,其中包含一個(gè)帶有上載文件選項(xiàng)的表單。
97、Spring Web MVC怎么校驗(yàn)數(shù)據(jù)?
這里有三種方式去 提供校驗(yàn) :使用注解、手動(dòng)校驗(yàn)、或者兩者混合。
98、什么是springmvc攔截器以及如何使用它?
Spring的處理程序映射機(jī)制包括處理程序攔截器,當(dāng)你希望將特定功能應(yīng)用于某些請(qǐng)求時(shí),例如,檢查用戶主題時(shí),這些攔截器非常有用。攔截器必須實(shí)現(xiàn)org.springframework.web.servlet包的HandlerInterceptor。此接口定義了三種方法:
preHandle:在執(zhí)行實(shí)際處理程序之前調(diào)用。
postHandle:在執(zhí)行完實(shí)際程序之后調(diào)用。
afterCompletion:在完成請(qǐng)求后調(diào)用。
擴(kuò)展
99、Spring Security是什么?
Spring security 是Spring框架中最重要的模塊之一。它使開發(fā)人員能夠以一種可管理的方式輕松地集成安全特性。在下面的示例中,我們將展示如何在springmvc應(yīng)用程序中實(shí)現(xiàn)Spring安全性。
100、為什么要用SpringBoot?
以下是使用SpringBoot的一些好處:
自動(dòng)配置,使用基于類路徑和應(yīng)用程序上下文的智能默認(rèn)值,當(dāng)然也可以根據(jù)需要重寫它們以滿足開發(fā)人員的需求。
創(chuàng)建Spring Boot Starter 項(xiàng)目時(shí),可以選擇選擇需要的功能,Spring Boot將為你管理依賴關(guān)系。
SpringBoot項(xiàng)目可以打包成jar文件。可以使用Java-jar命令從命令行將應(yīng)用程序作為獨(dú)立的Java應(yīng)用程序運(yùn)行。
在開發(fā)web應(yīng)用程序時(shí),springboot會(huì)配置一個(gè)嵌入式Tomcat服務(wù)器,以便它可以作為獨(dú)立的應(yīng)用程序運(yùn)行。(Tomcat是默認(rèn)的,當(dāng)然你也可以配置Jetty或Undertow)
SpringBoot包括許多有用的非功能特性(例如安全和健康檢查)。
結(jié)尾
以上就是從各個(gè)大廠整理的最新Spring面試題了,如果對(duì)您有幫助記得點(diǎn)贊+收藏哦,感謝您的支持!
總結(jié)
以上是生活随笔為你收集整理的osgi框架和spring区别_最新100道大厂高频spring面试题附答案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python编写界面遍历_python和
- 下一篇: 无监督和有监督的区别_干货|全面理解无监