原创 入門算法之中國好鄰居:冒泡排序

上文我們聊到桶排序,瞭解到雖然桶排序簡單,快速,但是同時也有其致命的缺點:那就是空桶對內存空間的極大浪費以及只能針對正整數排序;所以我們需要一個較好的算法來解決這兩個問題,接下來我們就來認識一個新的算法:冒泡排序。   先上代碼實現:

原创 RocketMQ系列之消息重試+重複消費

前言 上節我們介紹了RMQ的幾大模塊以及每個模塊的作用,前面也介紹了RMQ的訂閱消費案例,今天我們來看一個RMQ的消息重試機制和重複消費的問題,瞭解這2點有助於我們更好更合理的處理消息消費的異常情況。     爲什麼會出現消息重試? 因爲

原创 RabbitMQ惰性隊列

 惰性隊列會盡可能的將消息存入磁盤中,而在消費者消費到相應的消息時纔會被加載到內存中,它的一個重要的設計目標是能夠支持更長的隊列,即支持更多的消息存儲。當消費者由於各種各樣的原因(比如消費者下線、宕機亦或者是由於維護而關閉等)而致使長時間

原创 RocketMQ系列之入門

前言 之前我們把RMQ的多Master集羣搭建起來了,我們今天就來看看如何向這個集羣生產消息以及消費消息。   集羣搭建回顧 回顧上節的內容,我總結下以下幾步: 第一:最新版RMQ4.2.0要求最低JDK8版本 第二:修改虛擬機的host

原创 RocketMQ系列之順序消費

前言 上節我們介紹了RMQ的兩大亮點,重試和重複消費的問題,其實重試才能算亮點,重複消費最終還是要由我們自己來解決這個問題,RMQ自身並沒有提供很好的機制,至少目前是沒有,不知道將來會不會有,OK扯遠了,今天呢,我們再來介紹RMQ一個不錯

原创 併發編程系列之volatile和synchronized實現原理

前言 上節我們講了併發的一些挑戰,算是開啓併發編程的大門,今天我們就來說說併發中最基本的兩個東西volatile和Synchronized的底層實現原理,我們都知道Java代碼在編譯後會變成字節碼,然後被類加載器加載到JVM中,JVM執行

原创 JVM系列之OOM異常

前言 之前我們簡單的介紹了下虛擬機內存結構,今天我們講下虛擬機的內存相關錯誤異常,主要從幾大內存區域分類介紹:Java堆溢出、虛擬機棧和本地方法棧溢出、方法區和運行時常量池溢出、本機直接內存溢出。   Java堆溢出 什麼時候產生堆溢出

原创 JVM系列之類加載

前言 虛擬機把描述類的數據從Class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這個過程就稱爲JVM的類加載機制。今天我們主要從下面兩個方面說下類加載:類加載時機和類加載過程。   類

原创 併發編程系列之鎖的內存語義

前言 上節我們介紹了volatile的內存語義,今天講講另一個同步原語鎖是如何保證同步的,我們同樣從鎖的內存語義講解,上節也有提到volatile的內存屏障能達到和鎖同樣的效果,那麼我們就來看看鎖的內存語義吧,OK,開始今天的併發編程之旅

原创 JVM系列之對象是否存活

前言 之前我們講過了JVM的內存區域和內存溢出,今天我們談下處於JVM中的對象的問題,這些對象是否存活,如何判斷,又如何去處理呢,帶着這些疑問我們開啓今天的JVM之旅。   如何判斷對象是否存活? 引用計數算法:給對象中添加一個引用計數

原创 併發編程系列之線程之間的通信

前言 上節我們介紹了線程從創建到結束的過程,介紹了幾種常見的啓動和終止方法,我們知道了如何使用一個線程,那麼今天我們再接下來看看1個或者多個線程之間是如何進行通信的?OK,讓我們一起走進今天的併發之旅吧,祝您旅途愉快。 景點一:共享變量

原创 JVM系列之內存分配與回收策略

前言 經過前面幾篇文章,我們已經對JVM虛擬機有了個初步認識,也瞭解了各區域應用哪些收集器,以及每個收集器用哪些收集算法,但是在這一系列過程中,其實就是一個對象的由生到死的過程,那麼在這過程中對象是怎麼處理它的生命週期的呢,今天我們就來介

原创 JVM系列之Java內存區域

前言 對於Java開發者來說,在虛擬機的自動內存管理機制下,不需要去關心每個對象的存亡,只需要創建出來就完全扔給了虛擬機去處理,而且還不容易出現內存泄露和內存溢出的問題,這看起來很美好,但是如果一旦出現內存泄露和溢出的問題,你就會很棘手,

原创 併發編程系列之Final域的內存語義

前言 上節我們講了鎖的內存語義,在同步原語中我們已經講了兩個,今天再來介紹另一個同步原語Final域,瞭解下final域的內存語義以及重排序規則在處理器中又是如何實現的,並結合前面的volatile和鎖,大家可以進行對比下,OK,開始我們

原创 併發編程系列之線程簡介

前言 前幾天我們把Java內存模型介紹了下,大家對JMM也有所認識了,從今天我們就開始走進一個我們天天掛在嘴邊,聽在耳邊的東西:線程,對於線程相信大家都不會陌生,當然也有很多小夥伴在開發中或多或少的使用到線程,即使你沒有使用過,但是並不代