標籤:pat 決定 永久 靜態 loader observer 依賴 預設 interface
事務 :
事務是一個最小的工作單元,不論成功與否都作為一個整體進行工作。
即單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。
當事務失敗時,系統返回到事務開始前的狀態。這個取消所有變化的過程稱為“復原”( rollback )。例如,如果一個事務成功更新了兩個表,在更新第三個表時失敗,則系統將兩次更新恢複原狀,並返回到原始的狀態。
作用:
交易處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為一個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢複並使應用程式更加可靠。
------
一個邏輯工作單元要成為事務,必須滿-
在隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。
髒讀 虛讀 不可重複讀取
4.持久性
持久性意味著一旦事務執行成功,在系統中產生的所有變化將是永久的。應該存在一些檢查點防止在系統失敗時丟失資訊。甚至硬體本身失敗,系統的狀態仍能通過在日誌中記錄事務完成的任務進行重建。持久性的概念允許開發人員認為不管系統以後發生了什麼變化,完成的事務是系統永久的部分。
********************隔離等級
Read Uncommitted(讀取未提交內容) --- 在該隔離等級,所有事務都可以看到其他未提交事務的執行結果。 既髒讀Dirty Read
Read Committed(讀取提交內容) ---它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。 既不可重複讀取(Nonrepeatable Read)
Repeatable Read(可重讀) MySQL的預設交易隔離等級,它確保同一事務的多個執行個體在並發讀取資料時,會看到同樣的資料行。 會導致 幻讀(Phantom Read)
Serializable(可序列化) 最高的隔離等級,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題
原廠模式:
屬於建立型模式,它提供了一種建立對象的最佳方式。屏蔽產品的具體實現,調用者只關心產品的介面
-----------
在原廠模式中,我們在建立對象時不會對用戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的對象。定義一個建立對象的介面,讓其子類自己決定執行個體化哪一個工廠類,原廠模式使其建立過程延遲到子類進行
----------
優點:
1、一個調用者想建立一個對象,只要知道其名稱就可以了。
2、擴充性高,如果想增加一個產品,只要擴充一個工廠類就可以。
3、屏蔽產品的具體實現,調用者只關心產品的介面。
缺點:
每次增加一個產品時,都需要增加一個具體類和對象實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。這並不是什麼好事。
-----------
實現:第三方工廠類負責建立對象 調用工廠類得到建立的對象
簡單工廠:不管產品有多少個,工廠類就一個 (工廠只需要提供一個靜態方法)所以簡單工廠也稱為靜態工廠(在產品類裡符合開閉原則,工廠類不符合開閉原則)
Factory 方法模式:
實現:建立工廠的工廠介面 實現該介面的工廠類 具體的類 調用建立工廠的工廠類 建立工廠 通過建立的工廠的方法的到對象
--定義一個工廠類的介面 所有的集體工廠都生產一中產品
單例模式:
涉及到一個單一的類,該類負責建立自己的對象,同時確保只有單個對象被建立。這個類提供了一種訪問其唯一的對象的方式(必須是靜態方法),可以直接存取,不需要執行個體化該類的對象。
實現:私人的構造方法 私人的屬性 公用靜態得到本類對象的方法
面向介面編程:
介面是一種規範,一種規則 面向介面編程指 實現介面和使用介面的人都以介面為中心 實現同一個介面 把介面作為兩者的媒介從而聯絡起來 通過第三方介面降低兩者之間的耦合性 使得任何一方發生改變而不影響另一方 每一方不用關注另一方的內部邏輯 利於軟體的分工和模組的單元測試
包的概念:
同一個開發小組的工作是在一個包中完成的,不同的包往往代表了不同的開發小組。
資料來源:
資料來源(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