原创 【MySql專欄】—— 關聯查詢join的流程以及優化

一、應不應該使用關聯查詢? 對於關聯查詢來說,並不是所有情況下都能使用的,有的公司會直接禁用關聯查詢,因爲使用關聯查詢後,那麼後序在項目升級時,對數據庫進行分庫分表後,關聯查詢就沒辦法在使用,所有代碼都需要重構,不利於後期的維護和重構。本

原创 redis緩存失效問題

redis數據失效導致的雪崩 因爲緩存失效,從而導致大量的請求沒有命中緩存,導致請求全部打到數據庫。 1.大量請求,導致數據庫處理不過來,整個系統依賴數據庫的功能全部崩潰。 2.單系統掛掉,其它依賴於該系統的應用也會出現不穩定甚至崩潰。

原创 redis中如何保證緩存數據的一致性

方式一:先更新數據庫,再更新緩存場景 當有兩個線程A、B,同時對一條數據進行操作,一開始數據庫和redis的數據都爲tony,當線程A去修改數據庫,將tong改爲allen,然後線程A在修改緩存中的數據,可能因爲網絡原因出現延遲,這個時候

原创 RabbitMQ入門詳解

一、簡介 RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。 二、RabbitMQ核心概念 Producer(生產者):就

原创 spring源碼解讀(二) —— 如何解析bean元素

bean元素是我們在xml配置文件中,使用到最多的一個元素,當我們在xml中配置了一個bean元素之後,spring幫助我們做了什麼事呢?讓我們跟進spring的源碼來一探究竟。 實現配置一個簡單的xml文件: <?xml versio

原创 spring源碼解讀(一) —— xml頭文件的作用

Spring的核心功能之一就是IOC,也就是一個容器管理功能,那麼我們怎麼將我們定義的bean注入的Spring容器中,spring中,提供了xml文檔,我們將我們的bean定義在xml中,spring中就可以管理我們的對應,xml定義如

原创 與架構師一步之差 —— 註解和反射

一、註解 簡介:註解(Annotation)是java5引入的一種代理輔助工具,它的核心作用是對類、方法】變量、參數和包進行標註,通過反射來訪問這些標註信息,以此在運行時改變所註解對象的行爲。java中的註解由內置註解和元註解組成。 元註

原创 多線程核心之——線程通信

在javaJDK中提供了三種線程通信的方式,下面主要就是對這三種線程通信進行一個詳細的講解和對比。本文全部的實例已一個生產者-消費者模型來講解,如圖所示: 一、suspend和resume(現已被啓用的方法)     缺點:1.當線程被

原创 一文讀懂netty對javabytebuf的增強

一、JDKByteBuffer的缺點 1.無法動態擴容:長度是固定,不能動態擴展和收縮,當數據大於ByteBuffer容量時,會發生索引越界異常。 2.API使用複雜:讀寫的時候需要手工調用flip()和rewind()等方法,使用時需要

原创 一文看懂TCP/UDP協議

一、傳輸控制協議TCP 簡介:傳輸控制協議(TCP)是Internet一個重要的傳輸層協議。TCP提供面向連接、可靠、有序、字節流傳輸服務。應用程序在使用TCP之前,必須先建立TCP連接。 tcp報文格式: 其中報文格式中的標誌位說明:

原创 一文讀懂什麼是JMS規範

一、JMS是什麼 java消息服務(java message service即JMS)應用程序接口是一個java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通信。java消息服務是一

原创 如何設計消息中間件

什麼是消息中間件 利用高效可靠的消息傳遞機制進行平臺無關的數據交流;並基於數據通信來進行分佈式系統的集成;通過提供消息傳遞和消息排隊模型,它可以在分佈式環境下擴展進程間的通信; 應用場景:跨系統數據傳遞,高併發流量削峯、數據異步處理等。

原创 瞭解虛擬機——類加載過程

類加載的整個過程如下圖所示:包括加載,驗證,準備,解析,初始化,使用,卸載整個流程。 一、加載 目的:通過一個類的全限定名來獲取定義此類的二進制字節流,並將這個字節流所代表的靜態存儲結構轉化爲方法區的運行時數據結構,並在內存中生成一個代

原创 詳解虛擬機識別的Class類文件結構信息

一、魔數 每個class的頭4個字節叫做魔數,用來表示這個文件是不是能被虛擬機所識別的文件。這個值就是cafebabe(咖啡寶貝)。 二、版本號 class文件中,第5和第6個字節表示的是java的此版本好,第7和第8個字節是主版本號,

原创 詳解java程序一個new的過程

在java的世界裏,只要當我們去創建一個對象時,都是通過關鍵字去new的,那麼當我們寫完這個new之後,我們的程序是怎麼幫我們生成這個對象的呢?帶着這個問題,我們一起來討論一下: 首先當虛擬機接受到new的字節碼指令的時候,先要去常量池中