面試前不陪女朋友也要看完這套spring原始碼面試題(附答案)
關注公眾號:Java架構師聯盟,每日更新技術好文
1.什麼是Spring?
Spring是一個開源的Java EE開發框架。Spring框架的核心功能可以應用在任何Java應用程式中,但對Java EE平臺上的Web應用程式有更好的擴充套件性。Spring框架的目標是使得Java EE應用程式的開發更加簡捷,通過使用POJO為基礎的程式設計模型促進良好的程式設計風格。
2.Spring有哪些優點?
- 輕量級:Spring在大小和透明性方面絕對屬於輕量級的,基礎版本的Spring框架大約只有2MB。
- 控制反轉(IOC):Spring使用控制反轉技術實現了鬆耦合。依賴被注入到物件,而不是建立或尋找依賴物件。
- 面向切面程式設計(AOP): Spring支援面向切面程式設計,同時把應用的業務邏輯與系統的服務分離開來。
- 容器:Spring包含並管理應用程式物件的配置及生命週期。
- MVC框架:Spring的web框架是一個設計優良的web MVC框架,很好的取代了一些web框架。
- 事務管理:Spring對下至本地業務上至全域性業務(JAT)提供了統一的事務管理介面。
- 異常處理:Spring提供一個方便的API將特定技術的異常(由JDBC, Hibernate, 或JDO丟擲)轉化為一致的、Unchecked異常。
3. Spring 事務實現方式有哪些?
- 程式設計式事務管理:這意味著你可以通過程式設計的方式管理事務,這種方式帶來了很大的靈活性,但很難維護。
- 宣告式事務管理:這種方式意味著你可以將事務管理和業務程式碼分離。你只需要通過註解或者XML配置管理事務。
4.Spring框架的事務管理有哪些優點?
- 它為不同的事務API(如JTA, JDBC, Hibernate, JPA, 和JDO)提供了統一的程式設計模型。
- 它為程式設計式事務管理提供了一個簡單的API而非一系列複雜的事務API(如JTA). 它支援宣告式事務管理。
- 它可以和Spring 的多種資料訪問技術很好的融合。
5.spring事務定義的傳播規則
- PROPAGATION_REQUIRED: 支援當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
- PROPAGATION_SUPPORTS: 支援當前事務,如果當前沒有事務,就以非事務方式執行。
- PROPAGATION_MANDATORY: 支援當前事務,如果當前沒有事務,就丟擲異常。
- PROPAGATION_REQUIRES_NEW: 新建事務,如果當前存在事務,把當前事務掛起。
- PROPAGATION_NOT_SUPPORTED: 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
- PROPAGATION_NEVER: 以非事務方式執行,如果當前存在事務,則丟擲異常。
- PROPAGATION_NESTED:如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則進行與PROPAGATION_REQUIRED類似的操作。
6.Spring 事務底層原理
- 劃分處理單元——IoC
由於spring解決的問題是對單個資料庫進行區域性事務處理的,具體的實現首先用spring中的IoC劃分了事務處理單元。並且將對事務的各種配置放到了ioc容器中(設定事務管理器,設定事務的傳播特性及隔離機制)。
- AOP攔截需要進行事務處理的類
Spring事務處理模組是通過AOP功能來實現宣告式事務處理的,具體操作(比如事務實行的配置和讀取,事務物件的抽象),用TransactionProxyFactoryBean介面來使用AOP功能,生成proxy代理物件,通過TransactionInterceptor完成對代理方法的攔截,將事務處理的功能編織到攔截的方法中。讀取ioc容器事務配置屬性,轉化為spring事務處理需要的內部資料結構(TransactionAttributeSourceAdvisor),轉化為TransactionAttribute表示的資料物件。
- 對事務處理實現(事務的生成、提交、回滾、掛起)
spring委託給具體的事務處理器實現。實現了一個抽象和適配。適配的具體事務處理器:DataSource資料來源支援、hibernate資料來源事務處理支援、JDO資料來源事務處理支援,JPA、JTA資料來源事務處理支援。這些支援都是通過設計PlatformTransactionManager、AbstractPlatforTransaction一系列事務處理的支援。 為常用資料來源支援提供了一系列的TransactionManager。
- 結合
PlatformTransactionManager實現了TransactionInterception介面,讓其與TransactionProxyFactoryBean結合起來,形成一個Spring宣告式事務處理的設計體系。
7. Spring的單例實現原理
Spring框架對單例的支援是採用單例登錄檔的方式進行實現的,而這個登錄檔的快取是HashMap物件,如果配置檔案中的配置資訊不要求使用單例,Spring會採用新建例項的方式返回物件例項。
8. 有哪些不同型別的IOC(依賴注入)?
- 構造器依賴注入:構造器依賴注入在容器觸發構造器的時候完成,該構造器有一系列的引數,每個引數代表注入的物件。
- Setter方法依賴注入:首先容器會觸發一個無參建構函式或無參靜態工廠方法例項化物件,之後容器呼叫bean中的setter方法完成Setter方法依賴注入。
- 註解注入:基於@Autowired的自動裝配,預設是根據型別注入,可以用於構造器、欄位、方法注入。
9. 你推薦哪種依賴注入?構造器依賴注入還是Setter方法依賴注入?
你可以同時使用兩種方式的依賴注入,最好的選擇是使用構造器引數實現強制依賴注入,使用setter方法實現可選的依賴關係。
10.簡述一下Spring框架?
概念
- Spring致力於Java EE應用的各種解決方案,是一款輕量級框架,大大簡化了Java企業級開發,提供了強大、穩定的功能。
- Spring主要有兩個目標:一是讓先有技術更易於使用,二是促進良好的程式設計習慣(或者稱為最佳實踐)
優點
- 輕量級:Spring在大小和透明性方面絕對屬於輕量級的,基礎版本的Spring框架大約只有2MB
- 控制反轉(IOC):Spring使用控制反轉技術實現了鬆耦合。依賴被注入到物件,而不是建立或尋找依賴物件。
- 方便解耦,簡化開發:Spring就是一個大工廠,可以將所有物件建立和依賴關係維護,交給Spring管理
- AOP程式設計的支援:Spring提供面向切面程式設計,可以方便的實現對程式進行許可權攔截、執行監控等功能
- 宣告式事務的支援:只需要通過配置就可以完成對事務的管理,而無需手動程式設計
- 方便整合各種優秀框架:Spring不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如:Struts2、Hibernate、MyBatis、Quartz等)的直接支援
- 降低JavaEE API的使用難度:Spring 對JavaEE開發中非常難用的一些API(JDBC、JavaMail、遠端呼叫等),都提供了封裝,使這些API應用難度大大降低
11.簡單介紹一下Spring七大模組?
- Spring Core:Core封裝包是框架的最基礎部分,提供IOC和依賴注入特性。這裡的基礎概念是BeanFactory,它提供對Factory模式的經典實現來消除對程式性單例模式的需要,並真正地允許你從程式邏輯中分離出依賴關係和配置。
- Spring Context:構建於Core封裝包基礎上的 Context封裝包,提供了一種框架式的物件訪問方法,有些象JNDI註冊器。Context封裝包的特性得自於Beans封裝包,並新增了對國際化(I18N)的支援(例如資源繫結),事件傳播,資源裝載的方式和Context的透明建立,比如說通過Servlet容器。
- Spring DAO:DAO (Data Access Object)提供了JDBC的抽象層,它可消除冗長的JDBC編碼和解析資料庫廠商特有的錯誤程式碼。 並且,JDBC封裝包還提供了一種比程式設計性更好的宣告性事務管理方法,不僅僅是實現了特定介面,而且對所有的POJOs(plain old Java objects)都適用。
- Spring ORM:ORM 封裝包提供了常用的“物件/關係”對映APIs的整合層。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封裝包,可以混合使用所有Spring提供的特性進行“物件/關係”對映,如前邊提到的簡單宣告性事務管理。
- Spring AOP:Spring的 AOP 封裝包提供了符合AOP Alliance規範的面向方面的程式設計實現,讓你可以定義,例如方法攔截器(method-interceptors)和切點(pointcuts),從邏輯上講,從而減弱程式碼的功能耦合,清晰的被分離開。而且,利用source-level的後設資料功能,還可以將各種行為資訊合併到你的程式碼中。
- Spring Web:Spring中的 Web 包提供了基礎的針對Web開發的整合特性,例如多方檔案上傳,利用Servlet listeners進行IOC容器初始化和針對Web的ApplicationContext。當與WebWork或Struts一起使用Spring時,這個包使Spring可與其他框架結合。
- Spring Web MVC:Spring中的MVC封裝包提供了Web應用的Model-View-Controller(MVC)實現。Spring的MVC框架並不是僅僅提供一種傳統的實現,它提供了一種清晰的分離模型,在領域模型程式碼和Web Form之間。並且,還可以藉助Spring框架的其他特性。
12. Spring中的設計模式
spring中常用的設計模式達到九種,我們舉例說明:
第一種:簡單工廠
又叫做靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。 簡單工廠模式的實質是由一個工廠類根據傳入的引數,動態決定應該建立哪一個產品類。 spring中的BeanFactory就是簡單工廠模式的體現,根據傳入一個唯一的標識來獲得bean物件,但是否是在傳入引數後建立還是傳入引數前建立這個要根據具體情況來定。
第二種:工廠方法(Factory Method)
通常由應用程式直接使用new建立新的物件,為了將物件的建立和使用相分離,採用工廠模式,即應用程式將物件的建立及初始化職責交給工廠物件。一般情況下,應用程式有自己的工廠物件來建立bean.如果將應用程式自己的工廠物件交給Spring管理,那麼Spring管理的就不是普通的bean,而是工廠Bean。
第三種:單例模式(Singleton)
保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。
spring中的單例模式完成了後半句話,即提供了全域性的訪問點BeanFactory。但沒有從構造器級別去控制單例,這是因為spring管理的是是任意的java物件。
第四種:介面卡(Adapter)
在Spring的Aop中,使用的Advice(通知)來增強被代理類的功能。Spring實現這一AOP功能的原理就使用代理模式(1、JDK動態代理。2、CGLib位元組碼生成技術代理。)對類進行方法級別的切面增強,即,生成被代理類的代理類, 並在代理類的方法前,設定攔截器,通過執行攔截器重的內容增強了代理方法的功能,實現的面向切面程式設計。
第五種:包裝器(Decorator)
在我們的專案中遇到這樣一個問題:我們的專案需要連線多個資料庫,而且不同的客戶在每次訪問中根據需要會去訪問不同的資料庫。我們以往在spring和hibernate框架中總是配置一個資料來源,因而sessionFactory的dataSource屬性總是指向這個資料來源並且恆定不變,所有DAO在使用sessionFactory的時候都是通過這個資料來源訪問資料庫。但是現在,由於專案的需要,我們的DAO在訪問sessionFactory的時候都不得不在多個資料來源中不斷切換,問題就出現了:如何讓sessionFactory在執行資料持久化的時候,根據客戶的需求能夠動態切換不同的資料來源?我們能不能在spring的框架下通過少量修改得到解決?是否有什麼設計模式可以利用呢? 首先想到在spring的applicationContext中配置所有的dataSource。這些dataSource可能是各種不同型別的,比如不同的資料庫:Oracle、SQL Server、MySQL等,也可能是不同的資料來源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。然後sessionFactory根據客戶的每次請求,將dataSource屬性設定成不同的資料來源,以到達切換資料來源的目的。
spring中用到的包裝器模式在類名上有兩種表現:一種是類名中含有Wrapper,另一種是類名中含有Decorator。基本上都是動態地給一個物件新增一些額外的職責。
第六種:代理(Proxy)
為其他物件提供一種代理以控制對這個物件的訪問。 從結構上來看和Decorator模式類似,但Proxy是控制,更像是一種對功能的限制,而Decorator是增加職責。
spring的Proxy模式在aop中有體現,比如JdkDynamicAopProxy和Cglib2AopProxy。
第七種:觀察者(Observer)
定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。
spring中Observer模式常用的地方是listener的實現。如ApplicationListener。
第八種:策略(Strategy)
定義一系列的演算法,把它們一個個封裝起來,並且使它們可相互替換。本模式使得演算法可獨立於使用它的客戶而變化。
第九種:模板方法(Template Method)
定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。
Template Method模式一般是需要繼承的。這裡想要探討另一種對Template Method的理解。spring中的JdbcTemplate,在用這個類時並不想去繼承這個類,因為這個類的方法太多,但是我們還是想用到JdbcTemplate已有的穩定的、公用的資料庫連線,那麼我們怎麼辦呢?我們可以把變化的東西抽出來作為一個引數傳入JdbcTemplate的方法中。但是變化的東西是一段程式碼,而且這段程式碼會用到JdbcTemplate中的變數。怎麼辦?那我們就用回撥物件吧。在這個回撥物件中定義一個操縱JdbcTemplate中變數的方法,我們去實現這個方法,就把變化的東西集中到這裡了。然後我們再傳入這個回撥物件到JdbcTemplate,從而完成了呼叫。這可能是Template Method不需要繼承的另一種實現方式吧。
13.ApplicationContext與BeanFactory的區別
兩者都是通過xml配置檔案載入bean,ApplicationContext和BeanFacotry相比,提供了更多的擴充套件功能,但其主要區別在於後者是延遲載入,如果Bean的某一個屬性沒有注入,BeanFacotry載入後,直至第一次使用呼叫getBean方法才會丟擲異常;而ApplicationContext則在初始化自身是檢驗,這樣有利於檢查所依賴屬性是否注入;所以通常情況下我們選擇使用ApplicationContext。
BeanFactroy採用的是延遲載入形式來注入Bean的,即只有在使用到某個Bean時(呼叫getBean()),才對該Bean進行載入例項化,這樣,我們就不能發現一些存在的Spring的配置問題。而ApplicationContext則相反,它是在容器啟動時,一次性建立了所有的Bean。這樣,在容器啟動時,我們就可以發現Spring中存在的配置錯誤。
BeanFactory和ApplicationContext都支援BeanPostProcessor、BeanFactoryPostProcessor的使用,但兩者之間的區別是:BeanFactory需要手動註冊,而ApplicationContext則是自動註冊
14. 如何理解IoC和DI?
IOC:
IOC就是控制反轉,通俗的說就是我們不用自己建立例項物件,這些都交給Spring的bean工廠幫我們建立管理。這也是Spring的核心思想,通過面向介面程式設計的方式來是實現對業務元件的動態依賴。這就意味著IOC是Spring針對解決程式耦合而存在的。在實際應用中,Spring通過配置檔案(xml或者properties)指定需要例項化的java類(類名的完整字串),包括這些java類的一組初始化值,通過載入讀取配置檔案,用Spring提供的方法(getBean())就可以獲取到我們想要的根據指定配置進行初始化的例項物件。
- 優點:IOC或依賴注入減少了應用程式的程式碼量。它使得應用程式的測試很簡單,因為在單元測試中不再需要單例或JNDI查詢機制。簡單的實現以及較少的干擾機制使得鬆耦合得以實現。IOC容器支援勤性單例及延遲載入服務。
DI:DI—Dependency Injection,即“依賴注入”:元件之間依賴關係由容器在執行期決定,形象的說,即由容器動態的將某個依賴關係注入到元件之中。依賴注入的目的並非為軟體系統帶來更多功能,而是為了提升元件重用的頻率,併為系統搭建一個靈活、可擴充套件的平臺。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何程式碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。
15.介紹一下AOP相關術語?
- 切面(Aspect):被抽取的公共模組,可能會橫切多個物件。 在Spring AOP中,切面可以使用通用類(基於模式的風格) 或者在普通類中以 @AspectJ 註解來實現。
- 連線點(Join point):指方法,在Spring AOP中,一個連線點 總是 代表一個方法的執行。
- 通知(Advice):在切面的某個特定的連線點(Join point)上執行的動作。通知有各種型別,其中包括“around”、“before”和“after”等通知。許多AOP框架,包括Spring,都是以攔截器做通知模型, 並維護一個以連線點為中心的攔截器鏈。
- 切入點(Pointcut):切入點是指 我們要對哪些Join point進行攔截的定義。通過切入點表示式,指定攔截的方法,比如指定攔截add、search。
- 引入(Introduction):(也被稱為內部型別宣告(inter-type declaration))。宣告額外的方法或者某個型別的欄位。Spring允許引入新的介面(以及一個對應的實現)到任何被代理的物件。例如,你可以使用一個引入來使bean實現 IsModified 介面,以便簡化快取機制。
- 目標物件(Target Object): 被一個或者多個切面(aspect)所通知(advise)的物件。也有人把它叫做 被通知(adviced) 物件。 既然Spring AOP是通過執行時代理實現的,這個物件永遠是一個 被代理(proxied) 物件。
- 織入(Weaving):指把增強應用到目標物件來建立新的代理物件的過程。Spring是在執行時完成織入。
切入點(pointcut)和連線點(join point)匹配的概念是AOP的關鍵,這使得AOP不同於其它僅僅提供攔截功能的舊技術。 切入點使得定位通知(advice)可獨立於OO層次。 例如,一個提供宣告式事務管理的around通知可以被應用到一組橫跨多個物件中的方法上(例如服務層的所有業務操作)。
16.你是如何理解Spring AOP?
概念
面向切面程式設計。AOP是OOP的延續,是軟體開發中的一個熱點,也是Spring框架中的一個重要內容,利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。
核心思想
可以在不修改原始碼的前提下,對程式進行增強
實現原理
Spring框架的AOP技術底層也是採用的代理技術,所謂的動態代理就是說 AOP 框架不會去修改位元組碼,而是在記憶體中臨時為方法生成一個 AOP 物件,這個 AOP 物件包含了目標物件的全部方法,並且在特定的切點做了增強處理,並回撥原物件的方法 。Spring AOP 中的動態代理主要有兩種方式, JDK 動態代理和 CGLIB 動態代理 。
- JDK 動態代理:通過反射來接收被代理的類,並且要求被代理的類必須實現一個介面 。JDK 動態代理的核心是 InvocationHandler 介面和 Proxy 類 。
- CGLIB動態代理: 如果目標類沒有實現介面,那麼 Spring AOP 會選擇使用 CGLIB 來動態代理目標類 。CGLIB ( Code Generation Library ),是一個程式碼生成的類庫,可以在執行時動態的生成某個類的子類,注意, CGLIB 是通過繼承的方式做的動態代理,因此如果某個類被標記為 final ,那麼它是無法使用 CGLIB 做動態代理的。
17. Spring中有哪些增強處理,區別?
- 前置增強:org.springframework.aop.BeforeAdvice代表前置增強,表示在目標方法整形前實施增強
- 後置增強:org.springframework.aop.AfterReturningAdvice代表後置增強,表示在目標方法執行後實施增強
- 環繞增強:org.springframework.aop.MethodInterceptor代表環繞增強,表示在目標方法執行前後實施增強
- 異常丟擲增強 :org.springframework.aop.ThrowsAdvice代表丟擲異常增強,表示在目標方法丟擲異常後實施增強
- 引介增強:org.springframework.aop.IntroductionInterceptor代表引介增強,表示在目標類中新增一些新的方法和屬性
18. Spring中支援的Bean作用域有哪些?
支援如下五種不同的作用域
- Singleton(預設):在Spring IOC容器中僅存在一個Bean例項,Bean以單例項的方式存在。
- Prototype:一個bean可以定義多個例項
- Request:每次HTTP請求都會建立一個新的Bean。該作用域僅適用於WebApplicationContext環境。
- Session:一個HTTP Session定義一個Bean。該作用域僅適用於WebApplicationContext環境.
- GolbalSession:同一個全域性HTTP Session定義一個Bean。該作用域同樣僅適用於WebApplicationContext環境.
19.如何定義bean的作用域?
在Spring中建立一個bean的時候,我們可以宣告它的作用域。只需要在bean定義的時候通過scope屬性定義即可。例如,當Spring需要產生每次一個新的bean例項時,應該宣告bean的scope屬性為prototype。如果每次你希望Spring返回一個例項,應該宣告bean的scope屬性為singleton。
20.說一說Spring框架中的bean的生命週期?
- Spring容器讀取XML檔案中bean的定義並例項化bean。
- Spring根據bean的定義設定屬性值。
- 如果該Bean實現了BeanNameAware介面,Spring將bean的id傳遞給setBeanName()方法。
- 如果該Bean實現了BeanFactoryAware介面,Spring將beanfactory傳遞給setBeanFactory()方法。
- 如果任何bean BeanPostProcessors 和該bean相關,Spring呼叫postProcessBeforeInitialization()方法。
- 如果該Bean實現了InitializingBean介面,呼叫Bean中的afterPropertiesSet方法。如果bean有初始化函式宣告,呼叫相應的初始化方法。
- 如果任何bean BeanPostProcessors 和該bean相關,呼叫postProcessAfterInitialization()方法。
- 如果該bean實現了DisposableBean,呼叫destroy()方法。
21.哪些是最重要的bean生命週期方法,是否能重寫它們?
有兩個重要的bean生命週期方法。
- 第一個是setup方法,該方法在容器載入bean的時候被呼叫。
- 第二個是teardown方法,該方法在bean從容器中移除的時候呼叫。
bean標籤有兩個重要的屬性(init-method 和 destroy-method),你可以通過這兩個屬性定義自己的初始化方法和析構方法。
Spring也有相應的註解:@PostConstruct 和 @PreDestroy。
22.有幾種不同型別的自動代理?
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
Metadata autoproxying
23. 什麼是Spring的內部bean?
當一個bean僅被用作另一個bean的屬性時,它能被宣告為一個內部bean,為了定義inner bean,在Spring 的 基於XML的 配置後設資料中,可以在 或 元素內使用 元素,內部bean通常是匿名的,它們的Scope一般是prototype。
24. Spring中自動裝配的方式有哪些?
- no:不進行自動裝配,手動設定Bean的依賴關係。
- byName:根據Bean的名字進行自動裝配。
- byType:根據Bean的型別進行自動裝配。
- constructor:類似於byType,不過是應用於構造器的引數,如果正好有一個Bean與構造器的引數型別相同則可以自動裝配,否則會導致錯誤。
- autodetect:如果有預設的構造器,則通過constructor的方式進行自動裝配,否則使用byType的方式進行自動裝配。
說明:自動裝配沒有自定義裝配方式那麼精確,而且不能自動裝配簡單屬性(基本型別、字串等),在使用時應注意。
25.你可以在Spring中注入null或空字串嗎?
完全可以。
26. 不同版本的 Spring Framework 有哪些主要功能?
VersionFeatureSpring 2.5釋出於 2007 年。這是第一個支援註解的版本。Spring 3釋出於 2009 年。它完全利用了 Java5 中的改進,併為 JEE6 提供了支援。Spring 4.0釋出於 2013 年。這是第一個完全支援 JAVA8 的版本。。
27.spring DAO 有什麼用?
Spring DAO 使得 JDBC,Hibernate 或 JDO 這樣的資料訪問技術更容易以一種統一的方式工作。這使得使用者容易在永續性技術之間切換。它還允許您在編寫程式碼時,無需考慮捕獲每種技術不同的異常。
28. 列舉 Spring DAO 丟擲的異常。
spring-data-access-exception
29. spring JDBC API 中存在哪些類?
- JdbcTemplate
- SimpleJdbcTemplate
- NamedParameterJdbcTemplate
- SimpleJdbcInsert
- SimpleJdbcCall
30.Spring AOP and AspectJ AOP 有什麼區別?
Spring AOP 基於動態代理方式實現;AspectJ 基於靜態代理方式實現。
Spring AOP 僅支援方法級別的 PointCut;提供了完全的 AOP 支援,它還支援屬性級別的 PointCut。
相關文章
- 想去Google做AI?先看完這套面試指南(附面試題)GoAI面試題
- IT面試題:附帶答案的14道Spring MVC面試題面試題SpringMVC
- 前端面試題(附答案)前端面試題
- Oracle面試題附帶答案Oracle面試題
- 基帶面試題附答案面試題
- .net 面試題與測試題(附答案)面試題
- Runtime經典面試題(附答案)面試題
- Python經典面試題(附答案)!Python面試題
- 最新精選Java面試題,附答案!Java面試題
- 最新PHP面試題彙總(附答案)PHP面試題
- 常用JAVA面試題庫(附答案)一Java面試題
- 全網最全Spring系列面試題129道(附答案解析)Spring面試題
- 碼農面試智力題及答案面試
- 搞定這套 Python 爬蟲面試題,面試會 so easyPython爬蟲面試題
- 騰訊這套SpringMvc面試題你懂多少(面試必備)SpringMVC面試題
- Java基礎面試題整理-50題(附答案)Java面試題
- 前端面試題 | JS部分(附帶答案)前端面試題JS
- 資料探勘面試筆試題(附答案)面試筆試
- 大資料某公司面試題-附答案大資料面試題
- 50道CSS基礎面試題(附答案)CSS面試題
- 50道 CSS 基礎面試題(附答案CSS面試題
- HTML+CSS+JS面試題(附帶答案)HTMLCSSJS面試題
- 2017JAVA面試題附答案Java面試題
- Spring面試題總結的很全面,附帶超詳細答案Spring面試題
- 69 個經典 Spring 面試題和答案Spring面試題
- 69個經典Spring面試題和答案Spring面試題
- 求職面試常見問題:Python常見面試題全解析附答案求職Python面試題
- 想進BAT?這些面試題助你一臂之力(附答案)BAT面試題
- Android面試整理(附答案)Android面試
- 你不知道的面試題(一)附答案面試題
- Android 面試題(附答案) | 掘金技術徵文Android面試題
- 前端一面高頻面試題(附答案)前端面試題
- J2EE面試題集錦(附答案)面試題
- 49個Spring經典面試題總結,附帶答案,趕緊收藏Spring面試題
- JS面試題及答案JS面試題
- Java面試題和答案Java面試題
- SAP面試問題答案面試
- 面試三十三題!說實話,中高階面試題看完解析後也不怎麼難!面試題