原创 計數器實現限流 - Java實現

實現時需要注意,用於計數的變量,自增操作應該爲原子操作。 import java.util.concurrent.atomic.AtomicLong; public class RateLimiter { private f

原创 MyBatis源碼解讀 - @Param註解

先說結論: 當輸入參數只有一個且沒有使用@Param註解時,MyBatis會直接傳遞這個參數;當輸入參數多於一個,或者使用了@Param註解時,MyBatis會將參數封裝在Map中傳遞,這時的Map的key分爲以下幾種可能:   Map中

原创 關於近期面試的一些思考

2020年4月,由於公司變動,投了簡歷出來看看機會。這期間面試了好幾家公司,在面試過程中發現了自己的很多不足,這裏總結一下,算是對自己工作四年的一點反思。   關於表達能力 表達能力這一塊,一直知道自己不擅長。但是經過這幾次面試更加認識到

原创 令牌桶(TokenBucket)限流 - Java實現

主要問題: 如何實現以固定的速率向桶中添加令牌? 我們當然不用起一個定時任務不停的向桶中添加令牌,只要在訪問時記下訪問時間,下次訪問時計算出兩次訪問時間的間隔,然後向桶中補充令牌,補充的令牌數爲 durationMs * rate /

原创 Backend-For-Frontend (BFF)

在YouTube上看到一個講BFF和GraphQL的視頻,覺得很不錯,分享一下 BFFs and GraphQL, terms you should know and why

原创 初識消息認證碼(MAC, Message Authentication Code)

1、簡介 首先從消息摘要說起,消息摘要可以做到防止需要傳輸的信息被惡意篡改。比如我們從互聯網上下載一個文件,有的網站會提供該文件的摘要值,我們只要將下載下來的文件用同樣的摘要算法做個摘要,然後進行比對,即可判別改文件是否被篡改過。 因

原创 Maven打包後找不到class文件的問題

1.問題起源某個項目Jenkins打包後生成的war包裏沒有class文件,並且沒有任何報錯或者警告,打包也提示成功。2.可能的原因歷經各種折騰,偶然發現某個依賴的jar包在倉庫裏沒有對應的pom.xml文件。但是maven沒有報任何錯誤

原创 SpringMVC中使用Validation

最近瞭解到一本書《清單革命》,下面就列一下在SpringMVC中使用Validation的清單。 在SpringBoot項目中使用的話配置就簡單很多,下面適用於傳統的Spring項目。 1、pom.xml文件中引入依賴 <depen

原创 MyBatis源碼-關於@Param註解

先說結論:當輸入參數只有一個且沒有使用@Param註解時,MyBatis會直接傳遞這個參數;當輸入參數多於一個,或者使用了@Param註解時,MyBatis會將參數封裝在Map中傳遞,這時的Map的key分爲以下幾種可能:Map中會有pa

原创 Kotlin實現二分查找

版本一找到目標元素時返回其下標,未找到時返回-1fun binarySearch(list: ArrayList<Int>, target: Int): Int { return binarySearch(list, target

原创 Java泛型的反射

1. 類型擦除瞭解編譯器揹着我們做了什麼很重要。Java中的泛型,在編譯後會被擦除類型參數。如果用instanceof來查詢對象的類型,只能查到對應的原始類型(raw type)。    public static void main(S

原创 maven使用總結

maven的默認目錄設置 <build>       <!--默認源代碼目錄-->       <sourceDirectory>src/main/java </sourceDirectory>       <!--默認測試

原创 緩存使用總結

以下只是個人工作中的一點總結,如有問題歡迎指正。1.delete操作時,先刪數據庫還是先刪緩存?一般情況下應該先刪除數據庫。原因: 如果先刪緩存,在刪完緩存之後刪數據庫之前,另一個讀請求可能將數據庫裏的數據讀出並寫到緩存,造成緩存和數據

原创 關於鏈表的面試題

首先,定義鏈表的節點,以及鏈表打印函數。class Node { public Integer value; public Node next; }public static void printList(Node

原创 計數器實現限流(單機)

實現時需要注意,用於計數的變量,自增操作應該爲原子操作。import java.util.concurrent.atomic.AtomicLong; public class RateLimiter { private fin