原创 讀碼農翻身之安全

1、JAAS Java Authentication Authorization Service,簡稱JAAS,屬於jdk的標準包的一部分。然而用的人卻不多。 2、認證與授權 認證就是確定你是誰,通常需要驗證對方提供的用戶名和密碼

原创 讀碼農翻身之用來維護本線程變量的ThreadLocal

1、爲什麼需要ThreadLocal? 來看這樣一個實例,在某個類中,創建了一個Context的對象,其中設置了一個trackerID,然後再調用了其他的java類,然後最終需要使用到ctx的這個tranckerID要怎麼辦?

原创 讀碼農翻身之消息隊列

1、爲什麼需要消息隊列? 假如有一個購物系統,邏輯上分爲訂單系統和庫存系統,訂單來了以後,先在訂單系統中存下來,然後通知庫存系統發貨。 此時這個購物系統是部署在一臺服務器上的。 但是當用戶量越來越多的時候,服務器慢慢的快扛不住了

原创 讀碼農翻身之JMS

1、爲什麼需要JMS? JMS即Java消息服務(Java Message Service),隨着各種消息隊列的出現,定義了各式各樣的API,導致互不兼容,學習成本高。使用不方便。 2、定義標準 消息生產者、消息消費者、生產者提供

原创 讀碼農翻身之AOP

AOP(Aspect Oriented Programming):面向切面編程 1、爲什麼需要AOP? 又回到了一個特別有意思的示例,代碼寫完後,如果每個方法的前後需要添加日誌,你要怎麼辦?最簡單的辦法就是手動在所有的方法前後都調

原创 讀碼農翻身之泛型

1、爲什麼需要泛型? 簡而言之,主要是爲了嚴謹。如下所示,如果沒有泛型,那麼在一個List中添加兩個不同類型的元素 那麼在使用的時候,很有可能會出現以下的錯誤信息。 2、什麼是泛型 其實從語法上來看,如上所示,泛型其實就是限

原创 讀碼農翻身之我是一個java Class

1、總體流程圖: 2、加載java class的流程: a、app classLoader(類加載器)通過全限定類名找到需要加載的類,(此時這個class文件還在硬盤上) b、app classloader在裝載類之前,需要讓更

原创 讀碼農翻身之動態代理

1、爲什麼需要動態代理? 原因:不能在運行時修改一個類,導致不能用聲明的方式來編程。(以我個人觀點來看,在實際工作做還沒有遇到過在程序運行的時候去修改一個類。可能是自己孤陋寡聞了) 2、什麼是在運行時修改一個類? 如:下面這個類中

原创 讀碼農翻身之分佈式事務

1、爲什麼會出現分佈式事務 如果數據庫是單臺的,不會有分佈式事務的問題,但是如果系統隨着用戶量的增加,不得已只能將用戶信息分別保存在不同的數據庫中,就只能使用分佈式事務了。 2、分佈式事務方案之兩階段提交(JTA: java tr

原创 讀碼農翻身之CGLib動態代理方式

jdk原生動態代理方式 VS CGLib動態代理方式 誕生歷程: 1、需求:在運行時對一個類進行擴展,比如有個類叫HelloWorld,需要在運行時加點日誌輸出的代碼: 2、思路:java不能在運行時對一個類進行修改,那就只

原创 讀碼農翻身之java註解

1、爲什麼需要java註解? xml配置方式太過於複雜繁瑣? 2、什麼是註解? 所謂的註解有點像加強版的註釋,這個註釋不但有一定的格式,還有特定的含義。這樣別的工具就可以讀取它來做事情了。 3、如何使用註解? 如下所示,@Test

原创 讀碼農翻身之MVCC--多版本併發控制

多版本併發控制要解決的問題,其實就是基於可重複讀的情況下,可以在讀的時候不用加鎖,也可以實現可重複讀。 可重複讀的流程如下所示:(小強在讀取B的信息時候,需要加鎖) 1、假設數據庫中有一張users的表,裏面有如下一行數據:

原创 讀碼農翻身之數據庫隔離級別

1、如果當兩個用戶對同一個賬戶進行讀寫操作的時候,可能會出現如下的錯誤信息,這種情況稱爲“丟失修改”。其實原因就是因爲沒有加鎖導致的。 2、排他鎖。當某個用戶需要寫數據的時候,就添加一把鎖,修改後方案如下所示: 3、髒數據 因

原创 java中的死鎖以及處理方案

1、先模擬一下死鎖的情況: package deadlock; public class Account { private String userId; private int balance; p

原创 讀碼農翻身之Actor

1、如何解決需要加鎖的問題? 既然線程是操作系統層面的概念,能不能把線程的概念隱藏起來,然後所有的操作都不用加鎖呢? 2、爲什麼需要加鎖? 需要加鎖的本質是什麼?首先是共享的狀態,例如Account中的balance,多個線程都要