原创 分佈式之數據庫和緩存雙寫一致性方案解析

先做一個說明,從理論上來說,給緩存設置過期時間,是保證最終一致性的解決方案。這種方案下,我們可以對存入緩存的數據設置過期時間,所有的寫操作以數據庫爲準,對緩存操作只是盡最大努力即可。也就是說如果數據庫寫成功,緩存更新失敗,那麼只要到達過期時

原创 Java魔法類——Unsafe應用解析

前言Unsafe是位於sun.misc包下的一個類,主要提供一些用於執行低級別、不安全操作的方法,如直接訪問系統內存資源、自主管理內存資源等,這些方法在提升Java運行效率、增強Java語言底層資源操作能力方面起到了很大的作用。但由於Uns

原创 k8s 中定時任務的實現

k8s 中有許多優秀的包都可以在平時的開發中借鑑與使用,比如,任務的定時輪詢、高可用的實現、日誌處理、緩存使用等都是獨立的包,可以直接引用。本篇文章會介紹 k8s 中定時任務的實現,k8s 中定時任務都是通過 wait 包實現的,wait

原创 高效遍歷Java容器

通過本文,你可以更深入的學習 Java 語言中 forEach 語法的知識,以及它和 C 語言形式的 for 循環、 Steam API 的對比。簡介Java 程序員經常使用容器,比如 ArrayList 和 HashSet。Java 8

原创 Java結合keytool實現非對稱加密和解密

在Java安全體系中,簽名屬於JAAS模塊,加解密屬於JCE模塊。keytool的使用keytool是JDK自帶的一個密鑰庫管理工具。這裏只用到了keytool的部分功能,包括生成密鑰對,導出公鑰等。keytool生成的公鑰/私鑰對存放到一

原创 Java集合框架面試問題集錦

Java集合框架(例如基本的數據結構)裏包含了最常見的Java常見面試問題。很好地理解集合框架,可以幫助你理解和利用Java的一些高級特性。下面是面試Java核心技術的一些很實用的問題。Q:最常見的數據結構有哪些,在哪些場景下應用它們?A.

原创 構建高可用ZooKeeper集羣

ZooKeeper 是 Apache 的一個頂級項目,爲分佈式應用提供高效、高可用的分佈式協調服務,提供了諸如數據發佈/訂閱、負載均衡、命名服務、分佈式協調/通知和分佈式鎖等分佈式基礎服務。由於 ZooKeeper 便捷的使用方式、卓越的性

原创 圖解 kafka 的高可用機制

對於一個複雜的分佈式系統,如果沒有豐富的經驗和牛逼的架構能力,很難把系統做得簡單易維護,我們都知道,一個軟件的生命週期中,後期維護佔了70%,所以系統的可維護性是極其重要的, kafka 能成爲大數據領域的事實標準,很大原因是因爲運維起來很

原创 Redis過期策略及實現原理

我們在使用redis時,一般會設置一個過期時間,當然也有不設置過期時間的,也就是永久不過期。 當我們設置了過期時間,redis是如何判斷是否過期,以及根據什麼策略來進行刪除的。 redis設置過期時間:expire key time(以秒爲

原创 大數據時代的數據存儲,非關係型數據庫MongoDB

爆炸式發展的NoSQL技術 在過去的很長一段時間中,關係型數據庫(Relational Database Management System)一直是最主流的數據庫解決方案,他運用真實世界中事物與關係來解釋數據庫中抽象的數據架構。然而,在信息

原创 談談 Java 類加載機制

概述 類加載器主要分爲兩類,一類是 JDK 默認提供的,一類是用戶自定義的。 JDK 默認提供三種類加載器: Bootstrap ClassLoader 啓動類加載器:每次執行 java 命令時都會使用該加載器爲虛擬機加載核心類。該加載器是

原创 Java中的構造函數引用和方法引用

方法引用的一些背景如果你還不知道 Java 構造函數本身就是特殊的方法,那麼閱讀方法引用的基本示例將對讀者有所幫助,通過了解這些內容,可以瞭解構造函數引用是什麼。方法引用可以引用靜態方法和實例方法,兩者是通用的。方法引用是函數式接口的實例。

原创 jvm垃圾回收算法

前言java相較於c、c++語言的優勢之一是自帶垃圾回收器,程序開發人員不用手動管理內存,內存的分配和釋放完全由gc(Garbage Collector)來做,極大地提高了軟件開發效率及程序健壯性(手動管理內存容易造成內存泄漏)。凡事皆有兩

原创 MySQL Cluster 與 MongoDB 複製羣集分片設計及原理

分佈式數據庫計算涉及到分佈式事務、數據分佈、數據收斂計算等等要求 分佈式數據庫能實現高安全、高性能、高可用等特徵,當然也帶來了高成本(固定成本及運營成本),我們通過MongoDB及MySQL Cluster從實現上來分析其中的設計思路,用以

原创 Spring中的統一異常處理

在具體的SSM項目開發中,由於Controller層爲處於請求處理的最頂層,再往上就是框架代碼的。因此,肯定需要在Controller捕獲所有異常,並且做適當處理,返回給前端一個友好的錯誤碼。不過,Controller一多,我們發現每個Co