原创 redis+lua實現分佈式令牌桶限流器

redis+lua分佈式令牌桶限流器 使用redis執行lua腳本,返回結果爲0表示被限流,爲1表示正常訪問。lua腳本傳入的KEYS[1]爲redis中配置限流器qps的map的key,KEYS[2]爲限流器的key,KEY[3

原创 AQS獨佔鎖獲取和釋放流程

AQS獨佔鎖獲取和釋放流程

原创 TCP三次握手和四次揮手

TCP三次握手和四次揮手 1. 爲什麼要三次握手,爲什麼不是兩次?   在謝希仁的《計算機網絡》中是這樣說的:爲了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。 在書中同時舉了一個例子,如下:   “已失效的連接請

原创 redis+lua分佈式令牌桶限流器

redis+lua分佈式令牌桶限流器 使用redis執行lua腳本,返回結果爲0表示被限流,爲1表示正常訪問。lua腳本傳入的KEYS[1]爲redis中配置限流器qps的map的key,KEYS[2]爲限流器的key,KEY[3]爲秒級

原创 0-1揹包問題

主要思想   使用v[i][j]表示前i個物品在容量爲j的揹包中的最大價值,所以當j重量大於等於第i個物品的重量(能放下i)時,放入前i-1個物品的最大價值爲v[i-1][j]。如果在前i-1個物品的基礎上放入第i個物品必然揹包的容量要拿

原创 Elasticsearch分析器

分析器實際上是將三個功能封裝到了一個包裏: 字符過濾器   首先,字符串按順序通過每個字符過濾器 。他們的任務是在分詞前整理字符串。一個字符過濾器可以用來去掉HTML,或者將 & 轉化成 and。 分詞器   其次,字符串被分詞器分

原创 https原理推導

https流程 流程如下: https原理推導 因爲http的內容是透明傳輸的,所以被劫持之後通信內容就全部泄露了。所以,必須要對通信內容進行加密。目前主流的加密方法分爲對稱加密和非對稱加密,https選用的是對稱加密。 問題1

原创 KMP算法

主要思路   找出模式串的next數字,然後將主串和模式串比較,匹配時則繼續,不匹配時則模式串根據next數組回溯,直到模式串完全匹配,此時主串指針的位置減去模式串指針的位置即爲主串中模式串的起始位置;模式串沒有完全匹配則表示主串中不存在

原创 基於reids的秒殺系統

  主要思想還是限流。秒殺商品有開始時間和結束時間,庫存可以看成是token,所以本質上還是一個基於令牌桶限流的變種場景。每個限流的單位時間不是1秒,而是秒殺活動持續的時間長度,庫存看作是的單位時間加入到令牌桶的令牌數。和令牌桶唯一的區別

原创 通過copy引用到局部變量來避免NullPointException

public int getNumActive() { // Copy reference to avoid NPE if close happens after null check GenericObjectPool<

原创 JVM類加載機制

JVM類加載機制

原创 String對象的不變性

String對象的不變性   一旦一個String對象在內存中創建,它將是不可改變的,所有的String類中方法並不是改變String對象自己,而是重新創建一個新的String對象。   正因爲String對象的不可變性,如果需要對字符

原创 Mysql調優

Mysql調優 1. 數據庫是否是性能瓶頸? 通過日誌埋點或druid等工具查看數據庫訪問時間在整個調用過程中消耗時間的佔比情況。 是否表中數據量太大引起的,太大要考慮分庫分表 查看mysql所在服務器的內存、cpu佔用情況(top

原创 Spring集成第三方類庫(以簡單集成elasticsearch 5.x版本客戶端爲例)

  當我們在Spring中使用第三方類庫,但是Spring官方又沒有提供相應的集成jar包,而我們又希望Spring能夠管理它時,此時可以通過實現FactoryBean接口來達到這個目的。爲了Spring能夠控制第三方類對象的生命週期,我

原创 nginx+redis實現高可用思路記錄

nginx對sessionid使用一致性hash做負載均衡並配置失敗後重試其他服務器。 服務端各節點處理流程如下: 高可用: 1. 如果redis掛了,服務端可以根據本地session來處理 2. 如果一臺服務器掛了,ngin