原创 Django入門1——第一個例子及修改

1.創建工程 $ django-admin startproject mysite 2.目錄結構 運行: $ python manage.py runserver 在瀏覽器中輸入:127.0.0.1:8000 看到如下界面,

原创 LeetCode42:接雨水,C++/Go

單調棧。從棧底到棧頂依次減小,如果入棧的元素大於等於棧頂元素,則將棧頂彈出並進行結算。 每次結算時,雨水的高度爲讓他彈出的元素與彈出他之後的棧頂元素中的較小值與他的差,長度就是讓他彈出的元素的位置與彈出他之後的棧頂元素位置之差減

原创 LeetCode289. 生命遊戲

1.題目 根據 百度百科 ,生命遊戲,簡稱爲生命,是英國數學家約翰·何頓·康威在 1970 年發明的細胞自動機。 給定一個包含 m × n 個格子的面板,每一個格子都可以看成是一個細胞。每個細胞都具有一個初始狀態:1 即爲活

原创 redis源碼註釋一:雙端鏈表adlist.c adlist.h

源碼註釋倉庫 1. 鏈表結構 1.1 結點結構 鏈表中每個結點的結構在adlist.h中: typedef struct listNode { struct listNode *prev; //指向前驅結點的指針

原创 C語言如何實現封裝繼承和多態

1. 封裝 成員變量比較好說,關鍵是成員函數怎麼辦?C中的結構體如何放一個成員函數呢? 答:可以使用函數指針。 typedef struct Base { int a; void (*print)(struct Base* t

原创 C++菱形繼承問題

1. 什麼是菱形繼承 基類A,B繼承A,C繼承A,D繼承BC。D中的B對象有A,D中的C對象還有A,重複了,如果調用函數,則不知道是B中的函數還是C中的函數。 #include <iostream> using namespac

原创 redis源碼註釋四:跳錶

0. 跳錶 0.1 簡介 跳躍表(skiplist)是一種隨機化的數據,由William Pugh 在論文《Skip lists: a probabilistic alternative to balanced trees》中提

原创 redis源碼註釋六:對象系統

1. 對象類型和內部編碼 我們之前分析了幾種redis底層的數據結構,包括簡單字符串、雙端鏈表、字典、跳錶、整數集合、壓縮列表等,這些還不是redis的對象類型,redis的對象類型總共包含5種,分別是字符串、列表、集合、有序集合

原创 redis源碼註釋五:整數集合intset.c intset.h

0. 源碼註釋位置 1. 何爲整數集合 整數集合,顧名思義,是整數的集合,用於實現redis中的set,redis中的set也可以通過哈希表實現,爲什麼要有整數集合呢?這裏考慮的是省內存,整數集合在數據量較小的情況下會佔用更少的內

原创 LeetCode460:LFU緩存-hard

1.題目 參考題解:https://leetcode-cn.com/problems/lfu-cache/solution/shuo-de-ming-bai-by-jason-2/ 2. 數據結構 數據結構:哈希表,鏈表+鏈表

原创 leetcode 5379. 石子游戲 III

題目鏈接:5379. 石子游戲 III 動態規劃: 狀態定義:dp[i]表示從i往後能多拿多少。 狀態轉移: 解釋: 如果先手選擇拿1堆,即nums[i],則後手將會多拿dp[i+1],先手比後手多拿nums[i] -

原创 《劍指Offer》字符流中第一個不重複的字符

實現下面兩個函數,Insert函數插入一個字符,FirstAppearingOnce函數返回數據流中第一個出現的字符。 class Solution { public: //Insert one char from stri

原创 LeetCode716:最大棧

這是一道被鎖住的題,需要LeetCode會員才能做。 還好lintcode上也有。最大棧 分析:前4個操作比較簡單,最難處理的是第5個操作。 思路: 1.可以使用兩個棧,但是這樣的複雜度爲O(n),不太好。 2.使用list+m

原创 groupcache源碼分析一:LRU

1.LRU簡介 LRU(Least Recently Used)是一種緩存淘汰策略. 受內存大小的限制,不能將所有的數據都緩存在內存中,當緩存超過規定的容量時,再往裏面加數據就要考慮將誰先換出去,即淘汰掉. LRU的做法是:淘汰最

原创 go中的list

1.結點Element 1.1 結點結構 // Element is an element of a linked list. type Element struct { // Next and previous pointer