原创 如何使用RTP引擎對語音編碼進行轉碼

架構圖: 問題: 從Freeswitch發出的INVITE消息裏,只有PCMA和PCUM編碼,想在RTP引擎和WebRTC的話機之間使用OPUS編碼(OPUS編碼對丟包的容忍度更高,WebRTC話機跑在外網用戶的電腦上,需要啓用OPUS)

原创 使用ReentrantLock和Condition來代替內置鎖和wait(),notify(),notifyAll()

使用ReentrantLock可以替代內置鎖,當使用內置鎖的時候,我們可以使用wait() nitify()和notifyAll()來控制線程之間的協作,那麼,當我們使用ReentrantLock的時候,我們怎麼來處理線程之間的寫作呢? J

原创 如何使用LinkedHashMap來實現一個LruCache

最近在看mybatis的源代碼,發現了mybatis中實現的LruCache使用到了LinkedHashMap,所以就探究了一下LinkedHashMap是如何支持Lru緩存的 LinkedHashMap內部維護了一個所有的Entity的雙

原创 Java中的堆內存設置對線程創建數的影響以及-Xss參數的記錄

Java的線程對象是存儲在堆上的,所以,能夠創建多少個線程,受到堆空間的大小限制,同事也受到每個線程的大小的限制,假如線程對象內部有一個非常大的數組字段,那就非常影響能夠創建的線程的大小 我們的例子: class Task implemen

原创 tcp的粘包和拆包示例以及使用LengthFieldFrameDecoder來解決的方法

粘包和拆包是什麼? TCP協議是一種字節流協議,沒有記錄邊界,我們在接收消息的時候,不能人爲接收到的數據包就是一個整包消息 當客戶端向服務器端發送多個消息數據的時候,TCP協議可能將多個消息數據合併成一個數據包進行發送,這就是粘包 當客戶端

原创 調用別人提供的服務的時候沒有設置超時程序被卡住了怎麼辦?,如何模擬超時的情況?

我們有個定時任務會每天去請求一下別人提供的webservice來拿到今天簽署的合同的數據,某天早上巡檢服務器的時候,發現定時任務沒有執行,通過dump線程的狀態,發現執行這個定時任務的線程被阻塞住了 阻塞的原因是讀操作的超時時間沒有設置,

原创 如何在spring-boot web項目中啓用swagger

swagger的三個項目及其作用 我們打開swagger的官網,會發現有三個swagger相關的項目,它們分別是 swagger-editor 作用是通過寫代碼,生成文檔描述(一個json文件或其他格式的api元數據文件) swagger

原创 JIRA應用的內存參數設置不當+容器沒有對資源進行限制導致服務掛掉的例子

背景: 應用的部署結構是這樣的:使用rancher管理的Docker集羣,有三臺物理主機,二十多個Docker容器, 提供的功能是問題跟蹤(JIRA),文檔管理(Confluence),代碼託管(svn,gitlab),持續集成(jenki

原创 jvm.option是什麼,它是如何加載的

jvm.option是一些程序裏邊的java的配置參數的一個集合,不同的應用都會定義自己的jvm.options用來控制一些jvm的參數 以下,以elasticsearch爲例,來說明它是如何加載的 elasticsearch的jvm.op

原创 適配器模式--想象一下轉換插頭

理解適配器模式之前,可以先來看一下轉換插頭,兩者的思想其實是一樣的 就是上圖中的這個樣子,當你出國旅行的時候,可能會用到這樣一個東西,你的筆記本電腦直接插到國外的插座上是插不進去的,需要用一個轉換插頭,先讓轉換插頭插到插座上,然後你的筆記

原创 橋接模式--真的像一座橋

設想如果要繪製矩形、圓形、橢圓、正方形,我們至少需要4個形狀類,但是如果繪製的圖形需要具有不同的顏色,如紅色、綠色、藍色等,此時至少有如下兩種設計方案: 第一種方案是爲每一種形狀都提供一套各種顏色的版本 第二種方案是根據實際的需要對形狀和顏

原创 UML類圖中的幾種關係的畫法和含義

UML的類圖中,一共有以下六大關係: 泛化(Generalization), 實現(Realization), 依賴(Dependence),關聯(Association),聚合(Aggregation) ,組合(Composition)

原创 裝飾模式和它在JDK中的實現

對裝飾者模式的一個通俗的理解就是:一個東西A包裝了另外一個東西B,A在B的功能基礎上又擴展了新的功能,但是對外提供的接口不變 裝飾者模式(Decorator)的定義: 動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更

原创 訪問者模式和雙分派

設計模式中的訪問者模式 訪問者模式是GOF的23中設計模式中比較複雜的一種模式,最近在項目的開發中使用到了訪問者模式的,依據項目的代碼,來對該模式進行總結 訪問者模式的定義: 訪問者模式表示一個作用於某對象結構中國的各元素的操作,它使你可以

原创 sonar-scanner的執行流程和對ClassLoader,動態代理的使用

最近項目上使用了sonarqube來提供靜態代碼檢查的服務,在看sonar-scanner的源碼的時候,發現sonar-scanner用來分析的jar包是從sonar的服務器上下載下來的,使用自定義的ClassLoader來加載這些從服務器