原创 系統設計 Session

Session 的主要作用就是通過服務端記錄用戶的狀態。 典型的場景是購物車,當你要添加商品到購物車的時候,系統不知道是哪個用戶操作的,因爲 HTTP 協議是無狀態的。服務端給特定的用戶創建特定的 Session 之後就可以標識這

原创 數據結構 哈希

構造哈希函數的方法 構造哈希函數的原則是: 1. 函數本身便於計算;2. 計算出來的地址分佈均勻,即對任一關鍵字k,f(k) 對應不同地址的概率相等。 直接定址法 取關鍵字或者關鍵字的某個線性函數爲Hash地址,即Hash(ke

原创 系統設計 JWT

JWT 本質上就是JWT 本質上就一段簽名的 JSON 格式的數據。由於它是帶有簽名的,因此接收者便可以驗證它的真實性。。由於它是帶有簽名的,因此接收者可以驗證它的真實性。 JWT 由 3 部分構成: Header :描述 JW

原创 系統設計 Cookie

Cookie 和 Session都是用來跟蹤瀏覽器用戶身份的會話方式,但是兩者的應用場景不太一樣。 維基百科是這樣定義 Cookie 的:Cookies是某些網站爲了辨別用戶身份而儲存在用戶本地終端上的數據(通常經過加密)。簡單來

原创 SpringBoot Cookie

設置 cookie 並返回給客戶端 @GetMapping("/change-username") public String setCookie(HttpServletResponse response) { // 創建

原创 Linux $ 符號

$ 符號 變量 解釋 $$ Shell 本身的 PID(ProcessID) $! Shell 後臺運行的最後一個進程的 PID $? 上個命令的結束代碼(返回值),成功是0,不成功是1。 $* 所有參數

原创 Java Atomic 原子類

atomic 是指一個操作是不可中斷的。即使是在多個線程一起執行的時候,一個操作一旦開始,就不會被其他線程干擾。原子類說簡單點就是具有原子/原子操作特徵的類。 併發包 java.util.concurrent 的原子類都存放在 j

原创 MySQL 索引

MySQL 索引使用的數據結構主要有 BTree索引 和 哈希索引 。對於哈希索引來說,底層的數據結構就是哈希表,因此在絕大多數需求爲單條記錄查詢的時候,可以選擇哈希索引,查詢性能最快;其餘大部分場景,建議選擇BTree索引。 M

原创 Java 字符操作

編碼與解碼 編碼就是把字符轉換爲字節,而解碼是把字節重新組合成字符。 如果編碼和解碼過程使用不同的編碼方式那麼就出現了亂碼。 GBK 編碼中,中文字符佔 2 個字節,英文字符佔 1 個字節; UTF-8 編碼中,中文字符佔 3

原创 Java 字節操作

實現文件複製 public static void copyFile(String src, String dist) throws IOException { FileInputStream in = new FileI

原创 Linux 守護進程

守護進程是一種運行在後臺的特殊進程,它獨立於控制終端 ,並週期性地執行某項任務或等待處理某些發生的事件。 守護進程可以由一個普通的進程按照守護進程的特性改造而來。 守護進程創建步驟 讓程序在後臺執行。方法是調用 fork() 產

原创 Java Collections工具類

導包:java.util.Collections public static <T extends Comparable<? super T>> void sort(List list) 對 list 進行排序 publi

原创 Java 基本數據類型佔用空間

數據類型 佔用空間 byte 1字節 short 2字節 char 2字節(C語言中是1字節)可以存儲一個漢字 int 4字節 long 8字節 float 4字節 double 8字節

原创 線程:狀態

一個線程只能處於一種狀態,並且這裏的線程狀態特指 Java 虛擬機的線程狀態,不能反映線程在特定操作系統下的狀態。 新建(NEW) 創建後尚未啓動。 可運行(RUNABLE) 正在 Java 虛擬機中運行。但是在操作系統層面,它可

原创 線程:基礎知識

使用線程 有三種使用線程的方法: 實現 Runnable 接口; 實現 Callable 接口; 繼承 Thread 類。 實現 Runnable 和 Callable 接口的類只能當做一個可以在線程中運行的任務,不是真正意義