原创 session、token、jwt區別分析

1.session session不是在瀏覽器第一次請求時創建,而是在第一次使用時創建(request.getSession())。 最終創建邏輯在org.apache.catalina.connector.Request的doG

原创 Linux安裝Elasticsearch及head插件

提示:本人使用的系統:Centos7。在此之前,請確保安裝了JDK,由於安裝過於簡單,這裏不介紹了。 安裝Elasticsearch 【Elasticsearch7.2百度雲,本人使用的版本】 【官網下載】 1.解壓 tar -z

原创 Java限流代碼實現

常見的限流算法大致有三種: 令牌桶算法 漏桶算法 計數器算法 網上對令牌桶又細分爲固定窗口計數器限流和滑動窗口計數器限流,下面將對這幾種限流方式進行簡單的介紹及代碼實現。 注意:代碼中會考慮併發線程安全問題,非分佈式限流 Gi

原创 Java Jsoup使用詳解

1.Jsoup介紹 jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作數據。——引自百度百科對

原创 Java Nio之Selector源碼分析

具體過程圖,上面寫出了核心步驟,可對照下面觀看。 Pipe——單向管道 Pipe使用兩組Channel,SinkChannel用於發送數據,SourceChannel用於接收數據。 public class PipeDemo {

原创 Spring Cloud使用ribbon實現負載均衡

Ribbon是什麼? Ribbon是Netflix發佈的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix的中間層服務連接在一起。Ribbon客戶端組件提供一系列完善的配置項如連接超時,重試等。也可以使用Ribb

原创 Java併發編程有序性詳解

提示:以下內容是對《Java多線程編程實戰指南》的分析與總結,有截選《實戰Java高併發程序設計》。 一.有序性問題 程序在執行過程中,可能會進行指令重排序,重排序後的指令與原指令的順序未必一致。 二.什麼是重排序? 重排序是

原创 徹底弄懂快速排序

首先,用一句話介紹快速排序——選出一個基準值,用基準值將數組分爲兩邊,左邊小於基準值,右邊大於基準值,然後又將左邊和右邊進行同樣的操作,直到整個數組有序。 下面用易於理解的方式闡釋一下快速排序的大致步驟: 這裏將小的這邊稱爲(左

原创 RateLimiter限流及源碼分析

什麼是Guava? Guava工程包含了若干被Google的 Java項目廣泛依賴 的核心庫,例如:集合 [collections] 、緩存 [caching] 、原生類型支持 [primitives support] 、併發庫

原创 Spring Cloud使用Zuul構建網關

不使用網關會存在的問題? 客戶端多次請求不同的微服務,增加了客戶端的複雜性。 存在跨域問題。 認證複雜,每個服務都需要獨立認證。 難以重構,隨着項目的迭代,可能需要重寫劃分微服務。 某些微服務可能使用了防火牆/瀏覽器不友好的協議

原创 使用Spring Cloud Config搭建配置中心(實現自動刷新)

在實際開發中,一般分爲四個環境 pro環境:生產環境。 pre環境:灰度環境。 test環境:測試環境。 dev環境:開發環境。 登錄github,分別創建config-pro.properties、config-test.p

原创 Spring Boot請求攔截及請求參數加解密

代碼已上傳至github,如遇到問題,可參照代碼 https://github.com/dfyang55/auth 以下介紹的只是一種思路,這種東西不是死的 1)加密實現 後臺代碼實現:CodecUtil 這裏我生成兩個AES的

原创 Spring Cloud入門(註冊與發現)

什麼是微服務? 微服務架構風格是一種將一個單一應用程序開發爲一組小型服務的方法,每個服務運行在自己的進程中,服務間通信採用輕量級通信機制。 微服務架構的特徵: 一個系統由多個微服務搭建。 每個微服務可獨立運行在自己的進程裏。 一

原创 Java隨機數Random解析

首先介紹一下隨機數生成的概念 Java隨機數的核心就是種子,在Random中其實就是一個AtomicLong類型的變量。 private final AtomicLong seed; 隨機數的生成依賴於種子,當我們通過new R

原创 JDK、Guava異步回調使用及源碼分析

使用JDK的FutureTask實現的異步調用l Callable有返回值,和Runnable沒有關係 public interface Callable<V> { V call() throws Exception; }