原创 基於dubbo實現異步調用

基於dubbo實現異步調用 增加consumer配置 這種方式很簡單,只需要在服務引用時增加dubbo:method配置即可,如下所示,其中name爲需要異步調用的方法名,async表示是否啓用異步調用。 <dubbo:refer

原创 rocketMQ定時和延時消息

定時消息和延時消息適用於以下一些場景: 消息生產和消費有時間窗口要求:比如在電商交易中超時未支付關閉訂單的場景,在訂單創建時會發送一條延時消息。這條消息將會在 30 分鐘以後投遞給消費者,消費者收到此消息後需要判斷對應的訂單是否已

原创 將一個整數隨機分成n份,且每份不少於m

首先如何將一個整數隨機分成n份。 這個問題轉化成:假設有sum個人排成一排,往這sum-1個空隙裏插入n-1個紙版,把他們分成n部分。所以解決辦法就是隨機依次選n-1個位置。所以隨機抽取n-1個小於sum的數作爲要插入的空隙。然後

原创 面試

Nginx 有哪些優點? 跨平臺、配置簡單。 非阻塞、高併發連接 處理 2-3 萬併發連接數,官方監測能支持 5 萬併發。 內存消耗小 開啓 10 個 Nginx 才佔 150M 內存。 成本低廉,且開源。 穩

原创 常用垃圾回收器

前常用的垃圾回收器有7個,按照工作的內存區間的不同,可以分爲3個新生代收集器和3個年老代收集器。G1比較特殊不分代 Serial(新生代串行收集器) 使用複製算法的垃圾回收器,只能用於新生代。Serial回收器使用單線程進行垃

原创 paxos算法

paxos算法 Paxos算法及變種算法在分佈式系統中應用廣泛。 基於Paxos算法的變種有:ZAB、Raft Paxos算法解決的問題是在一個可能發生消息可能會延遲、丟失、重複的分佈式系統中如何就某個值達成一致,保證不論發生以上

原创 分佈式事物

主流的分佈式事物實現方式 兩階段提交 兩階段提交,有一個事務管理器的概念,負責協調多個數據庫(資源管理器)的事務,事務管理器先問問各個數據庫你準備好了嗎?如果每個數據庫都回復 ok,那麼就正式提交事務,在各個數據庫上執行操作;如果

原创 heapanalyzer分析內存

heapAnalyzer使用教程 heapAnalyzer是ibm的一個內存分析工具,當服務器內存負載出現問題時可以生成堆的dump文件,然後通過heapanalyzer可以堆dump文件進行分析,分析內存泄漏對象,或者那些對象佔

原创 java併發編程(十三)CAS與原子變量

鎖的劣勢 使用鎖有以下的缺點: 如果線程持有鎖而延遲,會導致其他的線程的等待。 高優先級的線程阻塞,而低優先級的線程持有鎖造成 優先級反轉(priority inversion)。 如果持有鎖的線程被永久地阻塞,所有等

原创 java併發編程(十一)顯式鎖

Lock與ReentrantLock Lock接口與內置鎖機制不同,Lock提供了一種可輪詢,可定時,可中斷的鎖。且所有的加鎖解鎖操作都是顯式的。 ReentrantLock是Lock接口的默認實現類。Lock接口定義的方法如下所

原创 java併發編程(十二)自定義同步工具

條件隊列 條件隊列可以使得一組線程(稱之爲等待線程集合)能夠通過某種方式來等待特定的條件變成真。 如每個Java對象都可以作爲一個鎖,每個對象同樣可以作爲一個條件隊列,這就是java內部的條件隊列。 Object中的wait、no

原创 java併發編程(四)如何設計一個線程安全的類

設計線程安全的類 設計線程安全類的三個基本要素: 找出構成對象的所有變量 找出所有約束所有變量的不變性條件,簡單說就是變量的正確限制。一個變量在整個類的邏輯中對其有什麼樣的限制,比如必須大於0等等條件。 建立對象的併發狀態下的訪

原创 java併發編程(三)對象共享

可見性 很多人認爲synchronized只能用於實現原子性或者確定臨界區,忽視了它另一個重要的作用,確保內存可見性。 每個線程都有自己的工作內存。線程對變量的所有操作都必須在工作內存中進行,而不能直接對主存進行操作。並且每個線程

原创 mysql join等聯合查詢的索引問題

mysql join等聯合查詢的索引問題 問題: 聯合查詢不走索引的情況 原因: MySQL內部採用了一種叫做 nested loop join的算法。Nested Loop Join 實際上就是通過驅動表的結果集作爲循環基礎數據

原创 條件字段選擇性弱時不走索引

原因: mysql在條件字段選擇性弱,查出的結果集較大,不走索引; 比如,一張表內有1W條數據,某個字段爲0的數據有9999條,爲1的只有1條。這是sql篩選條件查詢這個字段爲0的數據,此時sql不會走索引。原因是9999條數據相