java知識總結-26
事務 :
事務是一個最小的工作單元,不論成功與否都作為一個整體進行工作。
即單個邏輯工作單元執行的一系列操作,要麽完全地執行,要麽完全地不執行。
當事務失敗時,系統返回到事務開始前的狀態。這個取消所有變化的過程稱為“回滾”( rollback )。例如,如果一個事務成功更新了兩個表,在更新第三個表時失敗,則系統將兩次更新恢復原狀,並返回到原始的狀態。
作用:
事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要麽全部成功要麽全部失敗的單元,可以簡化錯誤恢復並使應用程序更加可靠。
------
一個邏輯工作單元要成為事務,必須滿-
在隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。
臟讀 虛讀 不可重復讀
4.持久性
持久性意味著一旦事務執行成功,在系統中產生的所有變化將是永久的。應該存在一些檢查點防止在系統失敗時丟失信息。甚至硬件本身失敗,系統的狀態仍能通過在日誌中記錄事務完成的任務進行重建。持久性的概念允許開發者認為不管系統以後發生了什麽變化,完成的事務是系統永久的部分。
********************隔離級別
Read Uncommitted(讀取未提交內容) --- 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。 既臟讀Dirty Read
Read Committed(讀取提交內容) ---它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。 既不可重復讀(Nonrepeatable Read)
Repeatable Read(可重讀) MySQL的默認事務隔離級別,它確保同一事務的多個實例在並發讀取數據時,會看到同樣的數據行。 會導致 幻讀(Phantom Read)
Serializable(可串行化) 最高的隔離級別,它通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題
工廠模式:
屬於創建型模式,它提供了一種創建對象的最佳方式。屏蔽產品的具體實現,調用者只關心產品的接口
-----------
在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,並且是通過使用一個共同的接口來指向新創建的對象。定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行
----------
優點:
1、一個調用者想創建一個對象,只要知道其名稱就可以了。
2、擴展性高,如果想增加一個產品,只要擴展一個工廠類就可以。
3、屏蔽產品的具體實現,調用者只關心產品的接口。
缺點:
每次增加一個產品時,都需要增加一個具體類和對象實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的復雜度,同時也增加了系統具體類的依賴。這並不是什麽好事。
-----------
實現:第三方工廠類負責創建對象 調用工廠類得到創建的對象
簡單工廠:不管產品有多少個,工廠類就一個 (工廠只需要提供一個靜態方法)所以簡單工廠也稱為靜態工廠(在產品類裏符合開閉原則,工廠類不符合開閉原則)
工廠方法模式:
實現:創建工廠的工廠接口 實現該接口的工廠類 具體的類 調用創建工廠的工廠類 創建工廠 通過創建的工廠的方法的到對象
--定義一個工廠類的接口 所有的集體工廠都生產一中產品
單例模式:
涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式(必須是靜態方法),可以直接訪問,不需要實例化該類的對象。
實現:私有的構造方法 私有的屬性 公共靜態的得到本類對象的方法
面向接口編程:
接口是一種規範,一種規則 面向接口編程指 實現接口和使用接口的人都以接口為中心 實現同一個接口 把接口作為兩者的媒介從而聯系起來 通過第三方接口降低兩者之間的耦合性 使得任何一方發生改變而不影響另一方 每一方不用關註另一方的內部邏輯 利於軟件的分工和模塊的單元測試
包的概念:
同一個開發小組的工作是在一個包中完成的,不同的包往往代表了不同的開發小組。
數據源:
數據源(Data Source)顧名思義,數據的來源,是提供某種所需要數據的器件或原始媒體。在數據源中存儲了所有建立數據庫連接的信息。就像通過指定文件名稱可以在文件系統中找到文件一樣,通過提供正確的數據源名稱,你可以找到相應的數據庫連接。
輕量級和重量級:
---------------
輕量級 指它的創建和銷毀不需要消耗太多的資源,意味著可以在程序中經常創建和銷毀session 的對象;
輕量級 不需要繼承或實現任何類任何接口,不具有侵入性,采用POJO開發
輕量級 側重於減小開發的復雜度,相應的它的處理能力便有所減弱(如事務功能弱、不具備分布式處理能力),比較適用於開發中小型企業應用。
輕量級 對容器也沒有依賴性,易於進行配置,易於通用,啟動時間較短
*************
重量級 重量級意味不能隨意的創建和銷毀它的實例,會占用很多的資源。
重量級 需要繼承或實現框架中的類或接口,依賴關系強,有侵入性
重量級 則強調高可伸縮性,適合與開發大型企業應用。
重量級 對容器的依賴。,提供固定的一組機能,不具有配置能力。,不同的產品,部署過程不同,不易通用。,啟動時間長。
Java內存泄露
內存泄露是指無用對象(不再使用的對象)持續占有內存或無用對象的內存得不到及時釋放,從而造成的內存空間的浪費稱為內存泄露。內存泄露有時不嚴重且不易察覺,這樣開發者就不知道存在內存泄露,但有時也會很嚴重,會提示你Out of memory。
-----什麽時候發生-------
當一個長周期的變量引用了一個短周期的對象的時候,會發生內存泄露
連接池:
連接池是創建和管理一個連接的緩沖池的技術,這些連接準備好被任何需要它們的線程使用。
優點:
減少連接創建時間
簡化的編程模式
受控的資源使用
javabean定義:
私有屬性
geter seter 方法
無參構造
開發原則:
----------
開閉原則:對擴展開發 對修改封閉(擴展功能被推薦並且很容易擴展,不允許修改原有的方法和屬性--即擴展後對原有的“對象”不能產生影響)
裝飾模式:
1.在不改變原類所有功能屬性的基礎上進行操作(把原類作為屬性,構造方法傳入原類--get,set方法是調用原類的屬性賦值給類屬性,如果改變在方法類再次調set賦值後操作)
2.可以反復被裝飾
------
實現:裝飾類繼承被裝飾類
裝飾類有一個被裝飾類的對象作為其成員
裝飾類通過有參構造傳入一個被裝飾類的對象
裝飾類重寫被裝飾類的所有發方法,重寫被裝飾對象的相應方法
對於需要被裝飾的方法,在調用想用方法之前或者之後加上相應的裝飾代碼
裝飾類在重寫被裝飾類的方法之外,還可以第一自己的方法
---
把被裝飾的類裝飾後 可以再次裝飾(效果疊加) 一定要調用原對象的方法
特點:
每個裝飾對象需要傳入一個裝飾對象
每個裝飾類都可以使用多次
動態代理
jdk動態代理:
定義一個接口
被代理類實現一個有方法的接口(非標記接口)並且在被代理方法在接口中有定義
寫一個代理類 實現 InvocationHandler 接口 重寫invoke方法 參數列表(代理類的實例,具體調用的方法,被調用方法的參數)
//參數列表 被代理類的類加載器 被代理類的實現接口 代理類的實例
how a = (Show) Proxy.newProxyInstance(User.class.getClassLoader(),User.class.getInterfaces(), new JDKProxyUser());
----------------------
cglib 代理
觀察者模式:
當對象間存在一對多關系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬於行為型模式。
-------
優點:1、觀察者和被觀察者是抽象耦合的。 2、建立一套觸發機制。
缺點:如果一個被觀察者對象有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會花費很多時間
有循環依賴的話,觀察目標會觸發它們之間進行循環調用,可能導致系統崩潰
察者模式沒有相應的機制讓觀察者知道所觀察的目標對象是怎麽發生變化的,而僅僅只是知道觀察目標發生了變化。
對一個被裝飾的對象,可以對它進行不同的知識
優點:
優點:裝飾類和被裝飾類可以獨立發展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴展一個實現類的功能
靜態代理和裝飾模式的區別;
1)靜態代理:代理類不需要繼承被代理類,裝飾模式:裝飾類必須繼承被繼承類
2)靜態代理和裝飾模式都需要一個成員變量保存一個目標類對象;
3)靜態代理:目標類對象可以通過有參構造器傳入,也可以在無參構造器中創建,裝飾模式:目標類必須通過有參構造傳入
4)靜態代理和裝飾模式都必須實現/重寫目標類的所有方法
5)靜態代理在實現這些方法時候,可以調用也可以不調用原對象的相應方法; 裝飾模式必須調用原來方法
6)靜態代理實現這些方法之外,一般沒有新的方法,裝飾模式不一定
代理模式:
靜態代理缺點:如果被代理類的方法很多而需要修改的方法很少,大量代碼重復
------------
在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。這種類型的設計模式屬於結構型模式。
在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。
*******
代理類用一個成員變量保存一個代理對象
被代理對象可以通過有參構造器出入,也可以在無參構造器中創建(--與裝飾模式區別)
代理類實現被代理類的所欲方法,
在方法實現中,可以調用代理對象的相應方法,加入新的業務代碼,也可以不調用(與裝飾模式區別)
代理類除了實現被代理類的方法之外,一般沒有增加方法
註解:
Annotation的原型是註釋作為一種對註釋的擴展而被引入成為一個語法要素,其本身就是為了對所標註的編程元素進行補充說明,從而進一步完善編程元素的邏輯語義。
di 依賴註入
ioc 控制反轉
java知識總結-26