原创 利用Redis緩存解決ES查詢延遲的問題

背景 因爲ES的近實時性 所以insert和update es的數據 在短時間可能查詢不到(1s左右) 參考上一篇博客https://www.cnblogs.com/ssskkk/p/15417053.html#_label0 這在開發中這

原创 JDK1.8的函數式編程入門

函數式編程優點 1.大數據下處理集合效率高(並行流,不用自己寫多線程處理) 2.代碼簡潔,可讀性好(後面章節實戰會體現) 3.不學看不懂公司的代碼 https://www.bilibili.com/video/BV1Gh41187uR?p=

原创 Redission分佈式鎖的幾個坑

過期時間不續期 tryLock(long time, TimeUnit unit) 會等待指定的時間,如果時間到了還沒獲得鎖就返回 false;如果在時間範圍內獲得了鎖就立刻返回 true,不用等待時間結束。 無論是返回 true 還是 f

原创 解決restTemplate中URL含有特殊字符的問題

背景 restTemplate請求和在頁面上直接請求結果不一樣,發現是restTemplate對url特殊字符處理的不好。 以下是解決辦法 encode URI 1.利用正則提取需要encode的uri部分 public stati

原创 JSON對象轉Map

背景 考慮到業務需求,需要把JSON轉Map寫了兩個工具類(也有參考別的代碼) 兼容了數組和對象混合的JSON 需要注意Map的key不能重複 Map存JSON的所有key /** * map包括全量的節點 *

原创 JVM線上調優

線上CPU佔用過高 1.用top命令定位哪個進程對cpu佔用過高 拿到進程id 2.top -Hp pid可以查看某個進程的線程信息,-H 顯示線程信息,-p指定pid。 3.jstack 進程id  可以把進程中所有的線程列出來 此時列出

原创 簡單介紹一下java位運算

簡單位運算介紹 或 |   只要有一個爲1,結果就爲1。 與 &  兩位全爲1,結果才爲1   與的特殊用法:取一個數中特定位。   方法:找一個數,對應x要取的位,該數的對應位爲1,其餘位爲零,此數與X對應位與即可(一個數和一個數的相反數

原创 Linux多路複用介紹

Select 首先介紹多路複用:一個進程監聽多個文件描述符,Linux中一切皆文件,也就是一個進程管理多個客戶端連接。 Select模型不斷掃描文件描述符集合 Select模型缺點:   一個進程打開的fd(文件描述符)是有限制的,默認10

原创 ES查詢踩兩個坑

ElasticSearch偶爾查詢不到數據 現象:每次insert之後,立刻查詢es的數據是有可能查不到的,因爲es從內存寫到磁盤需要時間 原因:es默認每1s執行一次refresh,因此文檔實時性被提高到1s,這也是es被稱爲近實時的原因

原创 LRU和LFU的區別和使用場景

以下的討論實現都是奔着O(1)時間複雜度 LRU LRU(Least recently used,最近最少使用)算法根據數據的歷史訪問記錄來進行淘汰數據,其核心思想是“如果數據最近被訪問過,那麼將來被訪問的機率也更高”。 LRU 總體上是這

原创 XXL-RPC原理分析

背景 RPC(Remote Procedure Call Protocol,遠程過程調用),調用遠程服務就像調用本地服務,在提供遠程調用能力時不損失本地調用的語義簡潔性; 一般公司,尤其是大型互聯網公司內部系統由上千上萬個服務組成,不同的服

原创 GitLabcicd+SpringBoot+Docker實例(附源碼)

環境準備 1.、gitLab:因爲gitLab需要內存太大(4G起步),我們使用官網的https://gitlab.com/ 2.、docker:也安裝在宿主機中 3、gitLabRunner:安裝在自己服務器宿主機中(不安裝在容器裏)  

原创 AJAX批量上傳文件

前言 後臺開發被迫寫jsp,ajax批量上傳文件搞了兩天 下面上代碼 前端 1.參數處理   var formData = new FormData(); var files = $("#input[type='file

原创 深入淺出java的Map

HashMap的組成 首先了解數組和鏈表兩個數據結構 1.數組 尋址容易,插入和刪除元素困難 數組由於是緊湊連續存儲,可以隨機訪問,通過索引快速找到對應元素,而且相對節約存儲空間。 但正因爲連續存儲,內存空間必須一次性分配夠,所以說數組如果

原创 用設計模式優化if else

背景 日常編碼中我們經常遇到 很多if else的代碼,比如  String name=""; if ("1A".equals(name)){ System.out.println("1