原创 【算法】字符串匹配之KMP算法

對於字符串匹配,暴力法是對每個位置進行逐位匹配,只要有匹配失敗的,就從待匹配串的下個位置開始從頭匹配,這樣的時間複雜度是O(MN)。 KMP算法能解決這樣效率低下匹配,其核心思想是保留已匹配的前綴和,避免重複匹配,時間複雜度是O(

原创 【算法題】滑動窗口最大值

給定一個數組 nums,有一個大小爲 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。 返回滑動窗口中的最大值。 進階: 你能在線性時間複雜度內解決此題嗎? 示

原创 【算法】全排列算法

算法題中常見給定任意一個組合,輸出所有的排列 如leetcode:https://leetcode-cn.com/problems/permutation-i-lcci/ 無重複字符串的排列組合。編寫一種方法,計算某字符串的所有

原创 【高併發】秒殺業務場景詳解

一、秒殺場景的特點        秒殺的商品具有價格低、庫存有限、定時開始的特點,因此秒殺場景最大的特點就是高併發。數以千萬的用戶的流量集中在某個時間點上(即秒殺開始時),給後端服務器造成很大壓力,如果不能進行有效削峯、限流,所有

原创 【算法題】股票買賣問題解法詳解

本解法是股票問題的通用解法,在leetcode上對應以下題: 買賣股票的最佳時機 買賣股票的最佳時機 II 買賣股票的最佳時機 III 買賣股票的最佳時機 IV 買賣股票的最佳時機含手續費 最佳買賣股票時機含冷凍期 下面來說通

原创 【JVM】Java內存區域詳解

1、運行時數據區域 1.1 程序計數器 程序計數器是一塊較小的內存空間,是當前線程所執行的字節碼的行號指示器。在虛擬機的概念模型裏,字節碼解釋器工作時就是通過改變這個計數器的值來選取下一條需要執行的字節碼指令,分支、循環、跳轉、

原创 【JVM】垃圾收集器詳解

垃圾收集器是內存回收的具體實現。Java虛擬機規範中對垃圾收集器應該如何實現並沒有任何規定,因此不同的廠商、不同版本的虛擬機所提供的垃圾收集器都可能會有很大差別,並且一般都會提供參數供用戶根據自己的應用特點和要求組合出各個年代所使

原创 【Redis】Redis底層數據結構

Redis的數據類型有string、list、set、zset、hash,那麼這些數據類型底層如何實現的呢? Redis是用C語言寫的,底層數據結構包括六種:動態字符串、鏈表、字典、跳躍表、整數集合和壓縮列表。 1、動態字符串 s

原创 【RabbitMQ】RabbitMQ工作模型

1、整體架構 Broker :實體服務器。提供傳輸服務,維護從生產者到消費者的傳輸線路,保證消息數據能按照指定的方式傳輸。 Exchange:消息交換機。消息按照一定規則路由到隊列Queue。 Queue:消息隊列。消息的載體

原创 【JVM】類的加載過程

類的加載過程分爲加載、連接、初始化,而連接過程又分爲驗證、準備、解析。 加載 在加載過程,完成3件事情:1) 通過全類名獲取定義此類的二進制字節流;2) 將字節流代表的靜態存儲結構轉換爲方法區的運行時數據結構;3) 在內存中生成

原创 【JVM】Class字節碼文件結構

類文件結構包含如下幾個部分: 魔數:固定值,確定文件是否是JVM接受的class文件 版本號:class文件的版本,保證編譯正常執行 常量池:存放字面量和符號引用 訪問標誌:類或接口的訪問信息,包括是類還是接口、public還

原创 【算法歸納】二叉樹遍歷的非遞歸算法

二叉樹遍歷的常規算法是遞歸,通過一個棧可實現非遞歸算法,許多關於樹的算法題都是這些非遞歸算法的變形,需要熟練掌握。 特別注意後序遍歷的特殊性,在回溯時需要判斷右子樹是否已經訪問過。 1、前序遍歷 public void pre(T

原创 【JVM】一個Java對象的創建過程

Object obj = new Object(); Java中創建對象時,需要經過5個階段,分別是:類加載檢查、分配內存、初始化零值、設置對象頭、執行init方法。 1、類加載檢查 當JVM執行到一條new指令時,先檢查這條指令

原创 【算法題】左旋轉字符串

題目描述 彙編語言中有一種移位指令叫做循環左移(ROL),現在有個簡單的任務,就是用字符串模擬這個指令的運算結果。對於一個給定的字符序列S,請你把其循環左移K位後的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環

原创 【Java集合】探究HashSet的底層實現 加入相同元素是否會覆蓋?

HashSet是一個常見的集合類,底層使用HashMap實現。那麼HashSet如何保證元素不重複呢?如果多次放入equals()爲true的相同元素會覆蓋嗎?今天來探究一下源碼 首先,來看看HashSet的無參構造函數