原创 力扣 二叉樹直徑(dfs)

力扣 二叉樹的直徑(dfs) 題目鏈接:https://leetcode-cn.com/problems/diameter-of-binary-tree/ 題目的意思是求二叉樹的直徑,就是從任意節點出發,到任意節點結束,最長的那一條路徑,也

原创 力扣 相交鏈表

力扣 相交鏈表 題目鏈接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists 題目大致意思就是判斷兩個鏈表有沒有交點,有的話給出交點,沒有的話返回null 要求

原创 力扣 括號生成(dfs+剪枝)

力扣 括號生成(dfs+剪枝) 數字 n 代表生成括號的對數,請你設計一個函數,用於能夠生成所有可能的並且 有效的 括號組合。 示例 1: 輸入:n = 3 輸出:["((()))","(()())","(())()","()(())"

原创 秒殺系統設計淺析

秒殺系統設計淺析 一.引言 先假設一個業務場景,某商品秒殺活動,100件庫存,大概預估10w人蔘加活動 二.系統面臨的問題 1.高併發 秒殺這種業務場景的特點就是時間極短,瞬間用戶量極大 2.超賣問題 賣出高於庫存數量的商品 3.鏈

原创 Redis基礎知識掃盲

redis基礎知識掃盲 1. redis有哪些數據結構?其底層又是如何實現的? 基礎數據結構: String 字符串對象 底層實現 int : 整數值實現 短字符串:embstr編碼,sds實現 長字符串:raw編碼,sds實現

原创 一致性Hash算法原理解析

一致性Hash算法原理解析 一.引言 我們先來大致瞭解一下這個算法可以解決什麼問題 背景問題:有N臺服務器提供緩存服務,需要對服務器進行負載均衡,將請求平均發到每臺服務器上,每臺服務器負載1/N的服務 1. 硬Hash映射 將每臺服務器結

原创 Golang-分段鎖實現併發安全的Map

Golang - 分段鎖實現併發安全Map 一.引言 我們一般有兩種方式來降低鎖的競爭: 第一種:減少鎖的持有時間,sync.Map即是採用這種策略,通過冗餘的數據結構,使得需要持有鎖的時間,大大減少。 第二種:降低鎖的請求頻率,鎖分解和

原创 Golang - sync.map 設計思想和底層源碼分析

Golang - sync.map 設計思想和底層源碼分析 一.引言 在Go v1.6之前,內置map是部分goroutine安全的,併發讀沒有問題,併發寫可能有問題 在Go v1.6之後,併發讀寫內置map會報錯,在一些知名的開源

原创 Golang - Map 內部實現原理解析

Golang - Map 內部實現原理解析 一.前言 Golang中Map存儲的是kv鍵值對,採用哈希表作爲底層實現,用拉鍊法解決hash衝突 本文Go版本:gov1.14.4,源碼位於src/runtime/map.go 二.Ma

原创 Golang-Slice 內部實現原理解析

Golang - slice 內部實現原理解析 一.Go中的數組和slice的關係 1.數組 在幾乎所有的計算機語言中,數組的實現都是一段連續的內存空間,Go語言數組的實現也是如此,但是Go語言中的數組和C語言中數組還是有所不同的 C語言

原创 Golang-Context掃盲與原理解析

Golang-Context掃盲與原理解析 一.什麼是Context? context是一個包,是Go1.7引入的標註庫,中文譯做上下文,準確的說是goroutine的上下文,包含goroutine的運行狀態,環境,現場等信息。 cont

原创 劍指offer-把數字翻譯成字符串(dp)

給定一個數字,我們按照如下規則把它翻譯爲字符串:0 翻譯成 “a” ,1 翻譯成 “b”,……,11 翻譯成 “l”,……,25 翻譯成 “z”。一個數字可能有多個翻譯。請編程實現一個函數,用來計算一個數字有多少種不同的翻譯方法。 示例

原创 劍指offer-禮物的最大價值 (dp)

在一個 m*n 的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格子裏的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮

原创 Golang-無限緩存channel的設計與實現

無限緩存channel的設計與實現 一.引言 Go語言的Channel有兩種類型,一種是無緩存的channle,一個種是有緩存的channel,但是對於有緩存的channle來說,其緩存長度在創建時就已經固定了,中間也不能擴縮容,這導致對

原创 Golang-併發編程原理解析

go併發編程 一.背景知識介紹 1.進程和線程 進程是程序在操作系統中一次執行的過程,系統進行資源分配和調度的基本單位 線程是進程的一個執行實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位 一個進程可以創建和撤銷多