- 兩種動態代理的比較:CGLib所建立的動態代理對象的性能比JDK所建立的代理對象性能高很多,大概10倍,但CGLib在建立代理對象時所花費的時間卻比JDK動態代理多大概8倍,因此對於singleton的代理對象或者具備實例池的代理,由於無需頻繁的建立新的實例,因此比較適合CGLib動態代理技術,反之則適用於JDK動態代理技術。另外,因爲CGLib採用動態建立子類的方式生成代理對象,因此不能對目標類中的final,private等方法進行處理。因此,你們須要根據實際的狀況選擇使用什麼樣的代理了。一樣的,Spring的AOP編程中相關的ProxyFactory代理工廠內部就是使用JDK動態代理或CGLib動態代理的,經過動態代理,將加強(advice)應用到目標類中。
Spring容器從XML文件中讀取bean的定義,並實例化bean。
Spring根據bean的定義填充全部的屬性。
若是bean實現了BeanNameAware接口,Spring傳遞bean的ID到setBeanName方法。
若是Bean實現了BeanFactoryAware接口,Spring傳遞beanfactory給setBeanFactory方法。
若是有任何與bean相關聯的BeanPostProcessors,Spring會在postProcesserBeforeInitialization()方法內調用它們。
若是bean實現IntializingBean了,調用它的afterPropertySet方法,若是bean聲明瞭初始化方法,調用此初始化方法。
若是有BeanPostProcessors和bean關聯,這些bean的postProcessAfterInitialization() 方法將被調用。
若是bean實現了DisposableBean,它將調用destroy()方法。
BeanPostProcessor接口做用是:若是咱們須要在Spring容器完成Bean的實例化、配置和其餘的初始化先後添加一些本身的邏輯處理,咱們就能夠定義一個或者多個BeanPostProcessor接口的實現,而後註冊到容器中。java
MySql的事務隔離級別有哪幾種?
- 隔離級別用於表述併發事務之間的相互干擾程度,其基於鎖機制進行併發控制。
- 可序列化(Serializable):事務一個接一個的執行,徹底相互獨立;實現可序列化要求在選定對象上的讀鎖和寫鎖保持直到事務結束後才能釋放;在SELECT的查詢中使用一個WHERE子句來描述一個範圍時應該得到一個「範圍鎖」。
- 可重複度(Repeatable Read):事務A讀取數據以後,對涉及的數據加鎖,不容許其餘事務進行修改,因爲其餘事務會插入新的數據,所以會產生幻讀;對選定對象的讀鎖和寫鎖一直保持到事務結束,但不要求「範圍鎖」,所以可能會發生幻讀;可重複讀是MySQL的默認事務隔離級別。
- 讀取已提交(Read Committed):只能看到其餘事務已經提交的數據,避免了髒讀,但存在不可重複讀、幻讀;DBMS須要對選定對象的寫鎖(write locks)一直保持到事務結束,可是讀鎖(read locks)在SELECT操做完成後立刻釋放,且不要求「範圍鎖」。
- 讀取未提交(Read Uncommitted):能夠看到其餘事務沒有提交的數據,出現髒讀、不可重複讀、幻讀;
[PS補充]
不可重複讀的重點是修改:一樣的條件,讀取過的數據,再次讀取出來發現值不同了。
幻讀的重點在於新增或者刪除:一樣的條件,第1次和第2次讀出來的記錄數不同。編程
http://ginobefunny.com/post/java_other_interview_questions/併發
https://mp.weixin.qq.com/s/0bHjVq4yONx8OxtiKx_usA框架