javascript
Spring学习(十)Spring常见面试题汇总
本文借鑒:Spring框架總結(jié),Spring容器中Bean的生命周期,69道Spring面試題和答案
一、前言
此篇文章一是為了整合一下常見(jiàn)的面試題,二也是為了簡(jiǎn)單的歸納一些常見(jiàn)的知識(shí)點(diǎn),萌新剛上路,很多地方總結(jié)得不足或者答案不準(zhǔn)確,歡迎各位大佬補(bǔ)充,感謝!
二、面試題
1、基礎(chǔ)概念
Q:使用Spring框架的好處是什么?
- 輕量:Spring 是輕量的,基本的版本大約2MB。
- 控制反轉(zhuǎn):Spring通過(guò)控制反轉(zhuǎn)實(shí)現(xiàn)了松散耦合,對(duì)象們給出它們的依賴,而不是創(chuàng)建或查找依賴的對(duì)象們。
- 面向切面的編程(AOP):Spring支持面向切面的編程,并且把應(yīng)用業(yè)務(wù)邏輯和系統(tǒng)服務(wù)分開(kāi)。
- 容器:Spring 包含并管理應(yīng)用中對(duì)象的生命周期和配置。
- MVC框架:Spring的WEB框架是個(gè)精心設(shè)計(jì)的框架,是Web框架的一個(gè)很好的替代品。
- 事務(wù)管理:Spring 提供一個(gè)持續(xù)的事務(wù)管理接口,可以擴(kuò)展到上至本地事務(wù)下至全局事務(wù)(JTA)。
- 異常處理:Spring 提供方便的API把具體技術(shù)相關(guān)的異常(比如由JDBC,Hibernate or JDO拋出的)轉(zhuǎn)化為一致的unchecked 異常。
Q:Spring配置文件是什么?
Spring配置文件是個(gè)XML 文件,一般命名為applicationContext.xml,這個(gè)文件包含了類信息,描述了如何配置它們,以及如何相互調(diào)用。
Q:ApplicationContext通常的實(shí)現(xiàn)是什么?
- FileSystemXmlApplicationContext?:此容器從一個(gè)XML文件中加載beans的定義,XML Bean 配置文件的全路徑名必須提供給它的構(gòu)造函數(shù)。
- ClassPathXmlApplicationContext:此容器也從一個(gè)XML文件中加載beans的定義,這里,你需要正確設(shè)置classpath因?yàn)檫@個(gè)容器將在classpath里找bean配置。
- WebXmlApplicationContext:此容器加載一個(gè)XML文件,此文件定義了一個(gè)WEB應(yīng)用的所有bean。
Q:BeanFactory和ApplicationContext有什么區(qū)別?
概述:都可以當(dāng)做Spring的容器。其中ApplicationContext是BeanFactory的子接口。?
區(qū)別:?
BeanFactory:
- 是Spring里面最底層的接口。?
- 以延遲加載形式來(lái)注入Bean的,即只有在使用到某個(gè)Bean時(shí)(調(diào)用getBean()),才對(duì)該Bean進(jìn)行加載實(shí)例化。?
- 如果Bean的某一個(gè)屬性沒(méi)有注入,BeanFacotry加載后,直至第一次使用調(diào)用getBean方法才會(huì)拋出異常。(運(yùn)行時(shí)異常)
ApplicationContext:
- 是BeanFactory的子接口。
- 在容器啟動(dòng)時(shí),一次性創(chuàng)建了所有的Bean。
- 在容器啟動(dòng)時(shí),一次性創(chuàng)建了所有的Bean,我們就可以發(fā)現(xiàn)Spring中存在的配置錯(cuò)誤。(啟動(dòng)時(shí)異常) ?
2、IOC/DI
Q:什么是Spring IOC 容器?
Spring?IOC?負(fù)責(zé)創(chuàng)建對(duì)象,管理對(duì)象,通過(guò)依賴注入(DI),裝配對(duì)象,配置對(duì)象,并且管理這些對(duì)象的整個(gè)生命周期。
Q:如何理解IOC和DI??
IOC:控制反轉(zhuǎn)
DI:依賴注入
兩個(gè)名詞是以不同角度來(lái)描述Spring的工作,控制反轉(zhuǎn)指的是把創(chuàng)建對(duì)象的控制權(quán)交由Spring進(jìn)行處理,從“主動(dòng)”變成“被動(dòng)”;依賴注入指的是把配置在Spring容器中,由Spring組裝好的對(duì)象引入到你自己的對(duì)象之中去。
Q:IOC的優(yōu)點(diǎn)是什么?
IOC?或?DI把應(yīng)用的代碼量降到最低。最小的代價(jià)和最小的侵入性實(shí)現(xiàn)松耦合。
Q:有哪些不同類型的IOC(依賴注入)方式?
- 構(gòu)造器依賴注入:構(gòu)造器依賴注入通過(guò)容器觸發(fā)一個(gè)類的構(gòu)造器來(lái)實(shí)現(xiàn)的,該類有一系列參數(shù),每個(gè)參數(shù)代表一個(gè)對(duì)其他類的依賴。
- Setter方法注入:Setter方法注入是容器通過(guò)調(diào)用無(wú)參構(gòu)造器或無(wú)參static工廠方法實(shí)例化bean之后,調(diào)用該bean的setter方法,即實(shí)現(xiàn)了基于setter的依賴注入。
3、Spring Beans
Q:什么是Spring?beans?
被Spring?IOC容器初始化,裝配,和管理的,形成Spring應(yīng)用主干的java對(duì)象。(默認(rèn)為單例 tag="singleton")
Q:Spring容器中Bean的生命周期??
- 實(shí)例化Bean并填充屬性
- 注入依賴關(guān)系
- 初始化
- bean交給應(yīng)用開(kāi)發(fā)人員處理
- 銷毀?
Q:創(chuàng)建Spring?beans的方式?
- 構(gòu)造函數(shù):SpringContext利用無(wú)參的構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象,然后利用setter方法賦值。也可以直接通過(guò)有參構(gòu)造函數(shù)直接賦值。
- 靜態(tài)方法創(chuàng)建對(duì)象:在類中定義一個(gè)返回值為需要獲取的對(duì)象的構(gòu)造方法,然后在xml中配置“factory-method”屬性指向構(gòu)造方法。
- 工廠方法創(chuàng)建對(duì)象:實(shí)例工程方法需要先創(chuàng)建工廠實(shí)例,然后在創(chuàng)建所需對(duì)象的時(shí)候,將其賦值為“factory-bean”
PS:詳解見(jiàn)Spring創(chuàng)建對(duì)象的三種方式
Q:Spring Bean 定義 包含什么?
一個(gè)Spring?Bean?的定義包含容器必知的所有配置元數(shù)據(jù),包括如何創(chuàng)建一個(gè)bean,它的生命周期詳情及它的依賴。
PS:元數(shù)據(jù)主要是描述數(shù)據(jù)屬性(property)的信息,用來(lái)支持如指示存儲(chǔ)位置、歷史數(shù)據(jù)、資源查找、文件記錄等。
Q:如何給Spring 容器提供配置元數(shù)據(jù)?
- XML配置文件。
- 基于注解的配置。
- 基于java的配置。(建立一個(gè)SpringConfig的java類用于配置,用@Configuration來(lái)注解該類)
PS:詳解見(jiàn)Spring中基于java的配置
Q:如何定義Bean的作用域?
可以通過(guò)bean?定義中的scope屬性來(lái)定義。
Spring框架支持以下五種bean的作用域:
- singleton : bean在每個(gè)Spring ioc 容器中只有一個(gè)實(shí)例。(非線程安全!!!)
- prototype:一個(gè)bean的定義可以有多個(gè)實(shí)例。
- request:每次http請(qǐng)求都會(huì)創(chuàng)建一個(gè)bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。
- session:在一個(gè)HTTP Session中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
- global-session:在一個(gè)全局的HTTP Session中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
Q:什么是Spring的內(nèi)部bean?
當(dāng)一個(gè)bean僅被用作另一個(gè)bean的屬性時(shí),它能被聲明為一個(gè)內(nèi)部bean,為了定義inner?bean,在Spring?的?基于XML的?配置元數(shù)據(jù)中,可以在?<property/>或?<constructor-arg/>?元素內(nèi)使用<bean/>?元素,內(nèi)部bean通常是匿名的,它們的Scope一般是prototype。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="person2" class="com.itdjx.spring.dependency.injection.Person"><property name="name" value="ZH"/><property name="age" value="25"/><property name="sex" value="男"/><property name="car" ><bean class="com.itdjx.spring.dependency.injection.Car"><constructor-arg value="Audi" index="0"/><constructor-arg value="德國(guó)" index="1"/><constructor-arg value="300000" type="double"/></bean></property></bean></beans> View CodeQ:在?Spring中如何注入一個(gè)java集合?
Spring提供以下幾種集合的配置元素:
- <list>類型用于注入一列值,允許有相同的值。
- <set> 類型用于注入一組值,不允許有相同的值。
- <map> 類型用于注入一組鍵值對(duì),鍵和值都可以為任意類型。
- <props>類型用于注入一組鍵值對(duì),鍵和值都只能為String類型。
Q:Bean的裝配與自動(dòng)裝配?
裝配:裝配,或bean 裝配是指在Spring 容器中把bean組裝到一起,前提是容器需要知道bean的依賴關(guān)系,如何通過(guò)依賴注入來(lái)把它們裝配到一起。
自動(dòng)裝配:Spring?容器能夠自動(dòng)裝配相互合作的bean,這意味著容器不需要<constructor-arg>和<property>配置,能通過(guò)Bean工廠自動(dòng)處理bean之間的協(xié)作。
Q:解釋不同方式的自動(dòng)裝配?
有五種自動(dòng)裝配的方式,可以用來(lái)指導(dǎo)Spring容器用自動(dòng)裝配方式來(lái)進(jìn)行依賴注入。
- no:默認(rèn)的方式是不進(jìn)行自動(dòng)裝配,通過(guò)顯式設(shè)置ref 屬性來(lái)進(jìn)行裝配。
- byName:通過(guò)參數(shù)名 自動(dòng)裝配,Spring容器在配置文件中發(fā)現(xiàn)bean的autowire屬性被設(shè)置成byname,之后容器試圖匹配、裝配和該bean的屬性具有相同名字的bean。
- byType:通過(guò)參數(shù)類型自動(dòng)裝配,Spring容器在配置文件中發(fā)現(xiàn)bean的autowire屬性被設(shè)置成byType,之后容器試圖匹配、裝配和該bean的屬性具有相同類型的bean。如果有多個(gè)bean符合條件,則拋出錯(cuò)誤。
- constructor:這個(gè)方式類似于byType, 但是要提供給構(gòu)造器參數(shù),如果沒(méi)有確定的帶參數(shù)的構(gòu)造器參數(shù)類型,將會(huì)拋出異常。
- autodetect:首先嘗試使用constructor來(lái)自動(dòng)裝配,如果無(wú)法工作,則使用byType方式。
Q:自動(dòng)裝配的局限性?
- 重寫(xiě): 你仍需用 <constructor-arg>和 <property> 配置來(lái)定義依賴,意味著總要重寫(xiě)自動(dòng)裝配。
- 基本數(shù)據(jù)類型:你不能自動(dòng)裝配簡(jiǎn)單的屬性,如基本數(shù)據(jù)類型,String字符串,和類。
- 模糊特性:自動(dòng)裝配不如顯式裝配精確,如果有可能,建議使用顯式裝配。
4、Spring注解
Q:什么是基于Java的Spring注解配置? 給一些注解的例子?
基于Java的配置,允許你在少量的Java注解的幫助下,進(jìn)行你的大部分Spring配置而非通過(guò)XML文件。
@Configuration:用來(lái)標(biāo)記類可以當(dāng)做一個(gè)<beans></beans>的定義,被Spring IOC容器使用。
@Bean注解:表示此方法將要返回一個(gè)對(duì)象,作為一個(gè)bean注冊(cè)進(jìn)Spring應(yīng)用上下文。
Q:怎樣開(kāi)啟注解裝配?
注解裝配在默認(rèn)情況下是不開(kāi)啟的,為了使用注解裝配,我們必須在Spring配置文件中配置 <context:annotation-config/>元素。
Q:@Required 注解
這個(gè)注解表明bean的屬性必須在配置的時(shí)候設(shè)置,通過(guò)一個(gè)bean定義的顯式的屬性值或通過(guò)自動(dòng)裝配,若@Required注解的bean屬性未被設(shè)置,容器將拋出BeanInitializationException。
Q:@Autowired 注解
@Autowired 注解提供了更細(xì)粒度的控制,包括在何處以及如何完成自動(dòng)裝配。它的用法和@Required一樣,修飾setter方法、構(gòu)造器、屬性或者具有任意名稱和/或多個(gè)參數(shù)的PN方法。
Q:@Qualifier 注解
當(dāng)有多個(gè)相同類型的bean卻只有一個(gè)需要自動(dòng)裝配時(shí),將@Qualifier 注解和@Autowire 注解結(jié)合使用可以消除這種混淆。
原理:指定需要裝配的確切的bean的name屬性,此時(shí)相當(dāng)于按照name進(jìn)行裝配。
Q:@AutoWired和@Resource的區(qū)別
@AutoWired默認(rèn)以類型進(jìn)行查找,@Resource默認(rèn)以名稱進(jìn)行查找?
@AutoWired(required=false) ? ?+ ? @Qualifier("user") ? ?== ? @Resource(name="user")
5、Spring數(shù)據(jù)訪問(wèn)
Q:在Spring框架中如何更有效地使用JDBC
使用SpringJDBC 框架,資源管理和錯(cuò)誤處理的代價(jià)都會(huì)被減輕。所以開(kāi)發(fā)者只需寫(xiě)statements 和 queries從數(shù)據(jù)存取數(shù)據(jù),JDBC也可以在Spring框架提供的模板類的幫助下更有效地被使用,這個(gè)模板叫JdbcTemplate。
PS:詳解見(jiàn)Spring JdbcTemplate詳解
Q:JdbcTemplate
JdbcTemplate?類提供了很多便利的方法解決諸如把數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)變成基本數(shù)據(jù)類型或?qū)ο?#xff0c;執(zhí)行寫(xiě)好的或可調(diào)用的數(shù)據(jù)庫(kù)操作語(yǔ)句,提供自定義的數(shù)據(jù)錯(cuò)誤處理。?
Q:Spring對(duì)DAO的支持
Spring對(duì)數(shù)據(jù)訪問(wèn)對(duì)象(DAO)的支持旨在簡(jiǎn)化它和數(shù)據(jù)訪問(wèn)技術(shù)如JDBC,Hibernate or JDO 結(jié)合使用。這使我們可以方便切換持久層。編碼時(shí)也不用擔(dān)心會(huì)捕獲每種技術(shù)特有的異常
Q:解釋對(duì)象/關(guān)系映射集成模塊?
Spring 通過(guò)提供ORM模塊,支持我們?cè)谥苯覬DBC之上使用一個(gè)對(duì)象/關(guān)系映射映射(ORM)工具,Spring 支持集成主流的ORM框架,如Hiberate,JDO和 iBATIS SQL Maps。Spring的事務(wù)管理同樣支持以上所有ORM框架及JDBC。
Q:Spring支持的ORM
PS:ORM即對(duì)象關(guān)系映射,通過(guò)使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù),將面向?qū)ο笳Z(yǔ)言程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中。
JSpring支持以下ORM:
- Hibernate
- iBatis
- JPA (Java Persistence API)
- TopLink
- JDO (Java Data Objects)
- OJB
Q:Spring支持的事務(wù)管理類型
Spring支持兩種類型的事務(wù)管理:
- 編程式事務(wù)管理:這意味你通過(guò)編程的方式管理事務(wù),給你帶來(lái)極大的靈活性,但是難維護(hù)。
- 聲明式事務(wù)管理:這意味著你可以將業(yè)務(wù)代碼和事務(wù)管理分離,你只需用注解和XML配置來(lái)管理事務(wù)。
Q:Spring框架的事務(wù)管理有哪些優(yōu)點(diǎn)?
- 它為不同的事務(wù)API 如 JTA,JDBC,Hibernate,JPA 和JDO,提供一個(gè)不變的編程模式。
- 它為編程式事務(wù)管理提供了一套簡(jiǎn)單的API而不是一些復(fù)雜的事務(wù)API
- 它支持聲明式事務(wù)管理。
- 它和Spring各種數(shù)據(jù)訪問(wèn)抽象層很好得集成。
Q:你更傾向用那種事務(wù)管理類型?
大多數(shù)Spring框架的用戶選擇聲明式事務(wù)管理,因?yàn)樗鼘?duì)應(yīng)用代碼的影響最小,因此更符合一個(gè)無(wú)侵入的輕量級(jí)容器的思想。聲明式事務(wù)管理要優(yōu)于編程式事務(wù)管理,雖然比編程式事務(wù)管理(這種方式允許你通過(guò)代碼控制事務(wù))少了一點(diǎn)靈活性。
6、Spring面向切面編程(AOP)
Q:Spring中AOP名詞解釋
JoinPoint(連接點(diǎn)):指目標(biāo)對(duì)象中,所有可以增強(qiáng)的方法。Spring只支持方法連接點(diǎn)。
Pointcut(切入點(diǎn)):指目標(biāo)對(duì)象中,已經(jīng)被增強(qiáng)的方法。調(diào)用這幾個(gè)方法之前、之后或者拋出異常時(shí)干點(diǎn)什么,那么就用切入點(diǎn)來(lái)定義這幾個(gè)方法。
Advice(通知/增強(qiáng)) :增強(qiáng)方法的代碼、想要的功能。
Target(目標(biāo)對(duì)象):被代理對(duì)象,被通知的對(duì)象,被增強(qiáng)的類對(duì)象。
Weaving(織入):將通知應(yīng)用到連接點(diǎn)形成切入點(diǎn)的過(guò)程。
Proxy(代理):將通知織入到目標(biāo)對(duì)象之后形成的代理對(duì)象
Aspect(切面):切入點(diǎn)+通知————通知(Advice)說(shuō)明了干什么的內(nèi)容(即方法體代碼)和什么時(shí)候干(什么時(shí)候通過(guò)方法名中的before,after,around等就能知道),二切入點(diǎn)說(shuō)明了在哪干(指定到底是哪個(gè)方法),切點(diǎn)表達(dá)式等定義。
Q:Aspect 切面?
AOP核心就是切面,它將多個(gè)類的通用行為封裝成可重用的模塊,該模塊含有一組API提供橫切功能。比如,一個(gè)日志模塊可以被稱作日志的AOP切面。根據(jù)需求的不同,一個(gè)應(yīng)用程序可以有若干切面。在Spring AOP中,切面通過(guò)帶有@Aspect注解的類實(shí)現(xiàn)。
Q:在Spring AOP 中,關(guān)注點(diǎn)和橫切關(guān)注的區(qū)別是什么?
關(guān)注點(diǎn)是應(yīng)用中一個(gè)模塊的行為,一個(gè)關(guān)注點(diǎn)可能會(huì)被定義成一個(gè)我們想實(shí)現(xiàn)的一個(gè)功能。橫切關(guān)注點(diǎn)是一個(gè)關(guān)注點(diǎn),此關(guān)注點(diǎn)是整個(gè)應(yīng)用都會(huì)使用的功能,并影響整個(gè)應(yīng)用,比如日志,安全和數(shù)據(jù)傳輸,幾乎應(yīng)用的每個(gè)模塊都需要的功能。因此這些都屬于橫切關(guān)注點(diǎn)。
Q:連接點(diǎn)
連接點(diǎn)代表一個(gè)應(yīng)用程序的某個(gè)位置,在這個(gè)位置我們可以插入一個(gè)AOP切面,它實(shí)際上是個(gè)應(yīng)用程序執(zhí)行Spring AOP的位置。
Q:通知
通知是個(gè)在方法執(zhí)行前或執(zhí)行后要做的動(dòng)作,實(shí)際上是程序執(zhí)行時(shí)要通過(guò)SpringAOP框架觸發(fā)的代碼段。
Spring切面可以應(yīng)用五種類型的通知:
- before:前置通知,在一個(gè)方法執(zhí)行前被調(diào)用。
- after: 在方法執(zhí)行之后調(diào)用的通知,無(wú)論方法執(zhí)行是否成功。
- after-returning: 僅當(dāng)方法成功完成后執(zhí)行的通知。
- after-throwing: 在方法拋出異常退出時(shí)執(zhí)行的通知。
- around: 在方法執(zhí)行之前和之后調(diào)用的通知。
Q:切點(diǎn)
切入點(diǎn)是一個(gè)或一組連接點(diǎn),通知將在這些位置執(zhí)行。可以通過(guò)表達(dá)式或匹配的方式指明切入點(diǎn)。
Q:什么是引入?
引入允許我們?cè)谝汛嬖诘念愔性黾有碌姆椒ê蛯傩浴?/span>
Q:什么是目標(biāo)對(duì)象?
被一個(gè)或者多個(gè)切面所通知的對(duì)象。它通常是一個(gè)代理對(duì)象。也指被通知(advised)對(duì)象。
Q:什么是代理?
代理是通知目標(biāo)對(duì)象后創(chuàng)建的對(duì)象。從客戶端的角度看,代理對(duì)象和目標(biāo)對(duì)象是一樣的。
Q:什么是織入。什么是織入應(yīng)用的不同點(diǎn)?
織入是將切面和到其他應(yīng)用類型或?qū)ο筮B接或創(chuàng)建一個(gè)被通知對(duì)象的過(guò)程。
織入可以在編譯時(shí),加載時(shí),或運(yùn)行時(shí)完成。
Q:解釋基于XML Schema方式的切面實(shí)現(xiàn)
在這種情況下,切面由常規(guī)類以及基于XML的配置實(shí)現(xiàn)。
Q:解釋基于注解的切面實(shí)現(xiàn)
在這種情況下(基于@AspectJ的實(shí)現(xiàn)),涉及到的切面聲明的風(fēng)格與帶有java5標(biāo)注的普通java類一致。
7、Spring 的MVC
Q:什么是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ì)象綁定。
Q:DispatcherServlet
Spring的MVC框架是圍繞DispatcherServlet來(lái)設(shè)計(jì)的,它用來(lái)處理所有的HTTP請(qǐng)求和響應(yīng)。
Q:WebApplicationContext
WebApplicationContext 繼承了ApplicationContext 并增加了一些WEB應(yīng)用必備的特有功能,它不同于一般的ApplicationContext ,因?yàn)樗芴幚碇黝},并找到被關(guān)聯(lián)的servlet。
Q:什么是Spring MVC框架的控制器?
控制器提供一個(gè)訪問(wèn)應(yīng)用程序的行為,此行為通常通過(guò)服務(wù)接口實(shí)現(xiàn)。控制器解析用戶輸入并將其轉(zhuǎn)換為一個(gè)由視圖呈現(xiàn)給用戶的模型。Spring用一個(gè)非常抽象的方式實(shí)現(xiàn)了一個(gè)控制層,允許用戶創(chuàng)建多種用途的控制器。
Q:@Controller 注解
該注解表明該類扮演控制器的角色,Spring不需要你繼承任何其他控制器基類或引用Servlet API。
Q:@RequestMapping 注解
該注解是用來(lái)映射一個(gè)URL到一個(gè)類或一個(gè)特定的方處理法上。
轉(zhuǎn)載于:https://www.cnblogs.com/riches/p/11577415.html
總結(jié)
以上是生活随笔為你收集整理的Spring学习(十)Spring常见面试题汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 匿名函数练习
- 下一篇: JavaScript调用服务器事件