面試談ioc
1. spring ioc aop 的原理是什麼啊,面試時我怎麼回答才好呢說說面試技巧好嗎
IOC:控制反轉也叫依賴注入。利用了工廠模式
將對象交給容器管理,你只需要在spring配置文件總配置相應的bean,以及設置相關的屬性,讓spring容器來生成類的實例對象以及管理對象。在spring容器啟動的時候,spring會把你在配置文件中配置的bean都初始化好,然後在你需要調用的時候,就把它已經初始化好的那些bean分配給你需要調用這些bean的類(假設這個類名是A),分配的方法就是調用A的setter方法來注入,而不需要你在A裡面new這些bean了。
注意:面試的時候,如果有條件,畫圖,這樣更加顯得你懂了
AOP:面向切面編程。(Aspect-Oriented
Programming
)
AOP可以說是對OOP的補充和完善。OOP引入封裝、繼承和多態性等概念來建立一種對象層次結構,用以模擬公共行為的一個集合。當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關系,但並不適合定義從左到右的關系。例如日誌功能。日誌代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系。在OOP設計中,它導致了大量代碼的重復,而不利於各個模塊的重用。
將程序中的交叉業務邏輯(比如安全,日誌,事務等),封裝成一個切面,然後注入到目標對象(具體業務邏輯)中去。
實現AOP的技術,主要分為兩大類:一是採用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;二是採用靜態織入的方式,引入特定的語法創建「方面」,從而使得編譯器可以在編譯期間織入有關「方面」的代碼
簡單點解釋,比方說你想在你的biz層所有類中都加上一個列印『你好』的功能這你經可以用aop思想來做,你先寫個類寫個方法,方法經實現列印『你好』讓後你Ioc這個類
ref=「biz.*」讓每個類都注入。
2. 怎麼回答面試官:你對Spring的理解
首先Spring是一個大的概念,Spring從最開始的一個Library到現在一個系列,其中最主要的回包括Spring Framework, Spring Data, Spring Security, Spring Batch等等答,以及快速框架Spring Boot,其中最重要的項目是Spring Framework,這個項目包括了IoC, AOP, MVC以及Testing等!
3. 如果一個面試官問你什麼是Spring,它有什麼用,怎麼回答才是最好的
Spring是一個開源框架,它由Rod Johnson創建。它是為了解決企業應用開發的復雜性而創建的。Spring使用基本的來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。
◆目的:解決企業應用開發的復雜性
◆功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能
◆范圍:任何Java應用
簡單來說,Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。
◆輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小隻有1MB多的JAR文件里發布。並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴於Spring的特定類。
◆控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
◆面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支持。
◆容器——Spring包含並管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基於一個可配置原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯的。然而,Spring不應該被混同於傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。
◆框架——Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。
所有Spring的這些特徵使你能夠編寫更干凈、更可管理、並且更易於測試的代碼。它們也為Spring中的各種模塊提供了基礎支持。
主要就是依賴注入
4. j2ee面試問題。
剛開始工作的,人家不一定強調你現在會做什麼,特別是大公司更關注的當然只是你的學習知識、觀察分析問題和把知道應用到工作中的能力,比如你很熟悉在碰到問題時怎麼在開發工具中 debug,大致了解你用到的 API 的設計,碰到某個問題涉及到性能時,你知道把學到的數學知識應用到其中實現一個演算法。如果公司不是這么想的,那你就也准備大家常用的 SSH 之類的東西啦。但你要想到 SSH 現在一般人是用在 web 中,那你能不能不要求用戶安裝 tomcat 而內置一個嵌入式版本的 tomcat 做出一個桌面型小型軟體來呢?理論上可以,tomcat 支持。你做出來了就代表著你能解決和別人不同的問題。
因此你也做出一個獨立的軟體,不需要多大,功能也不需要太多。比如:用swing + OpenLDAP 做個聯系人管理的軟體,這樣 Swing 和 JNDI 你就肯定熟悉了。如果你拿到一個問題就能找到一個方法解決而不管這個 API 是曾經用過沒有,那就說明學習得不錯。只會用網上大把的 Hibernate/Spring 那你就得讓人家明白你到底有多熟悉,因為用的人太多了,水平就各不同。
現在假設面試官問你當不太懂電腦技術的人使用它時出現問題,你只有電話的話,怎麼告訴他提供程序的日誌?這就要在開發中考慮到日誌的問題,而且有健壯性的考慮,就是當程序出現任何錯誤都應該有日誌記錄,而不是直接退出了讓人家重啟,因為有些情況很難重現同樣的問題,作為不懂技術的人你想讓他告訴你是怎麼出現這個問題的,他們很難描述得那麼精確,因為他們只知道幾個步驟卻不會去從技術方面去猜想可能是什麼 null pointer, index out of bounds。這其中你必須有個清晰的條理說明你是怎麼做到這個健壯性的。你的軟體你怎麼做出來你肯定能描述(除非是 來的),關鍵的是你要理解你使用到的 API 是怎麼工作的,你為什麼採用這個 API。面試官如果是技術主管他會在這些問題中了解你學習的熟練和理解深度,你是只知道 /google 還是只給個 API doc 就能搞定,這兩種方法雖然最終都解決問題了,但代表的實力水平卻不同。
5. 面試問到spring ioc原理應該怎麼說
以前有人問過這類問題,在網路文庫裡面有的。你可以參考一下。最主要的是內你自己的看法。所容謂的原理也是人總結出來的。我相信,你如果在面試的時候將自己所理解的原理講出來一定會加分的。祝你好運。面試官並不一定要聽你把那個原理背出來,背書誰都會,主要還是想看看你的想法,明白了嗎。
6. 面試題:請你說一說Spring中IOC和DI的含義應該怎麼回答
ioc就是控制翻轉或是依賴注入。
DI(Dependency Injection,依賴注入)
7. java中ioc aop的作用我去面試了,人家說我沒說到點子上。。。我沒財富值了,希望哥哥姐姐幫幫我。。。。
ioc不熟
AOP 可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術,JAVA中的實現技術為反射機制。
8. 面試 springIOC是怎麼實現的 怎麼回答
首先Spring是一個大的概念,Spring從最開始的一個Library到現在一個系列,其中最主要的包括Spring Framework, Spring Data, Spring Security, Spring Batch等等,以及內快速框架Spring Boot,其中最重容要的項目是Spring Framework,這個項目包括了IoC, AOP, MVC以及Testing等!
9. Spring中的ioc和aop有什麼作用為什麼要用ioc和aop面試中多次被問到,求一個詳細 清晰的解答...
我來說說我的理解:
面試的時候,盡量不要照本宣科,這樣給面試官的印象是很差的。用自己的話理解是最好的。我先來將兩個例子:
ioc,控制反轉,這個指的就是我們獲取對象的方式進行反轉了,改變了。在使用spring之前是需要手動new出來的,是我們主動獲取的。使用spring之後,是將這個獲取的過程交給spring來管理,我們只需要告訴spring你需要什麼就行了,它就會把東西給你。比如:在沒有電商的時候,我們去上街買東西,需要考慮到這東西有沒有,價錢多少,怎麼搬回來,去有多遠……等等無數個和主要的業務邏輯(買東西)無關的問題。這樣就會擾亂主業務邏輯。當我們有了電商平台後,買東西時只需要兩步。注冊賬號(裝載bean),告訴電商你要的東西名字(通過名字獲取Bean),然後就可以在門口收到東西了。這就是ioc。
aop,面向切面。在談這個之前需要了解幾個詞:切面,切入點,織入,目標對象,通知。
我先解釋下名字的意思,再講故事。
切面:就是你要准備增強的那些方法。
切入點:就是具體織入的方法,定義了地點
織入:動詞,就是將切面織入的過層
目標對象:被增強的類
通知:就是什麼時候增強,定義了時間
好了,了解清楚上面的幾個詞的意思後,再聽故事就容易多了。
aop的功能就是用來增強,在執行主業務的通知也順帶執行其他業務。如:老李上街辦點事兒,走啊走,走到了老王家門前(切入點),老王看見老李問:去哪啊!
老李:上街辦點事兒(目標類)
老王:那幫我順便把這封信投到郵筒里吧。(切面),等到10點的時候郵局開門了去櫃台投。(通知)
老李:好嘞。然後老李接過信。(織入)
老李繼續走啊走,繼續上街辦事(增強後的目標類)。辦完事後老李回家了。
以上就是aop。aop一般用來處理許可權控制,日誌記錄,載入事務等非主要業務邏輯的事情。底層是採用cglib和jdk的動態代理實現的。
以上例子可能會有點不恰當,如有大神,望指點修正,謝謝!
10. 面試題:Spring中IOC和DI的含義。應該怎麼答
ioc就是控制翻轉或是依賴注入。通俗的講就是如果在什麼地方需要一個對象,你自己不用去通過new 生成你需要的對象,而是通過spring的bean工廠為你長生這樣一個對象。
aop就是面向切面的編程。比如說你每做一次對資料庫操作,都要生成一句日誌。如果,你對資料庫的操作有很多類,那你每一類中都要寫關於日誌的方法。但是如果你用aop,那麼你可以寫一個方法,在這個方法中有關於資料庫操作的方法,每一次調用這個方法的時候,就加上生成日誌的操作。
說的不是很清晰,多寫多看就能明白了。
通過DI(Dependency Injection,依賴注入)來實現的。比如對象A需要操作資料庫,以前我們總是要在A中自己編寫代碼來獲得一個Connection對象,有了 spring我們就只需要告訴spring,A中需要一個Connection,至於這個Connection怎麼構造,何時構造,A不需要知道。在系統運行時,spring會在適當的時候製造一個Connection,然後像打針一樣,注射到A當中,這樣就完成了對各個對象之間關系的控制。A需要依賴 Connection才能正常運行,而這個Connection是由spring注入到A中的,依賴注入的名字就這么來的。