原创 數據結構和算法之兩個棧實現隊列

思路 第一個棧只負責寫入。有新數據寫入就一直寫入第一個棧。 當讀取數據時候,判斷第二個棧是否有數據,如果有直接彈出棧頂元素;如果沒有數據,將第一個棧的數據依次彈出,然後按照順序寫入第二個棧,最終彈出第二個棧頂元素。 直接上Ja

原创 數據結構和算法之迴文數判斷

題:判斷字符串是否是迴文數 思路: 快慢指針判斷中位數 1.1 如果是奇數,中間位置不用矯正 1.2 如果是偶數,快指針先走,當快指針到達終點時候,慢指針到達上中位數 將慢指針後面的所有字符串反轉 循環一遍對比是否相等

原创 數據結構和算法之刪除鏈表的倒數第N個節點

示例: 給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5. 思路1:一趟掃描獲得鏈表長度l,然後刪除從前往後的第l - n +1個節點。 思考進階:如何用一遍

原创 紅黑樹實現一致性HASH算法

思路:主要利用了紅黑樹的tailMap(key)方法,找到比key大的map集合 直接上代碼: package com.zyblue.fastim.common.algorithm; import java.io.Unsuppo

原创 金融核心業務流程整理

文章目錄業務背景核心業務資金流程圖關鍵技術點關鍵表以及字段含義一、資金錶二、利息池三、債權表四、錢包表項目的難點以及解決一、用戶餘額問題balance二、項目中的分佈式事務解決三、冪等性方案設計四、高併發方案設計 業務背景 借款

原创 Zookeeper腦裂以及解決辦法

腦裂 一般腦裂都是出現在集羣環境中的。指的是一個集羣環境中出現了多個master節點(類似zookeeper的master、elasticsearch的master節點),導致嚴重數據問題,數據不一致等等。 出現的原因:可能就是網

原创 數據結構和算法之判斷是否是平衡二叉樹

思路一: 1、遍歷每個結點,藉助一個獲取樹深度的遞歸函數 2、根據該結點的左右子樹高度差判斷是否平衡 缺點:從上往下遍歷,時間複雜度高,會重複計算高度 思路二: 1、後序遍歷,從下往上遍歷,遍歷左子樹和右子樹 2、遞歸的方法

原创 數據結構和算法之層序遍歷二叉樹

比較簡單,直接上代碼 package com.zyblue.fastim.common.algorithm; import java.util.LinkedList; /** * 層序遍歷數組 * Author : Blu

原创 數據結構和算法之移除數組重複值

思路 利用雙指針 前後指針相同,前指針向後移動 如果不同,前和後指針都向後移動,同時將後指針的值賦值到前指針的下標中。 /** * 移除排序數組中重複的值,返回移除後的大小 * Author : BlueSky 2019.

原创 數據結構和算法之最長的無重複字符串長度

思路 利用滑動窗口 右窗口遍歷數組,如果值不在滑動窗口內,當前字符可以加進來;如果在的話,只需要移動左窗口指針,然後計算窗口大小 利用一個散列表記錄每個字符串的下標位置 上代碼: package com.zyblue.fast

原创 數據結構和算法之二叉樹鋸齒遍歷

題:按照如圖方式遍歷二叉樹 個人思路: 1、用兩個棧實現,奇數層用第一個棧,偶數層放第二個棧 /** * 層序遍歷數組,鋸齒形遍歷 * 第二層遍歷頂點 * 第二層按照右向左遍歷 * 第三層按照左向右遍歷 * 第四層按照

原创 MySQL聯合索引在B+樹如何存儲以及尋址

文章目錄引入Innodb B+樹聯合索引存儲以及尋址總結 引入 最近找工作, 去一家三方支付公司面試,前面得過程還挺好,所有的提都回答對了(心裏暗自竊喜應該能拿到高工資offer,迎娶白富美,然後走向人生巔峯),面試官說問最後一個

原创 Redis的八大應用

緩存:key-val緩存 分佈式鎖:利用Redis的setnx功能來編寫分佈式的鎖,如果設置返回1說明獲取鎖成功,否則獲取鎖失敗 計數器:incr命令來實現計數器功能,內存操作,性能非常好 隊列:可以利用redis的訂閱/發佈功

原创 數據結構和算法之二叉樹左視圖

思路: 1、按照層級來遍歷。 2、取每一層的第一個有效節點,如果是右視圖的話就是最後一個有效節點。 import com.alibaba.fastjson.JSONObject; import com.google.common.

原创 數據結構和算法之美總結——鏈表

底層結構 數組是需要連續的一整塊內存來進行存儲的,而鏈表相反,它通過指針將零散的內存空間串起來使用。 數據插入 因爲鏈表是不連續的內存空間,插入和刪除會非常的快 查詢 鏈表要想隨機訪問第 k 個元素,就沒有數組那麼高效了