原创 RedHat7更換爲CentOS7 的yum

銀行等很多用戶的Linux都是RedHat系統的,而RedHat是收費的,平日個人使用有些不便,而CentOS是最接近RedHat的系統,這裏記錄了將RedHat7的yum重裝的過程。只是一個記錄,以後再安裝的時候方便以後查看。

原创 數據結構:稀疏表

稀疏表 在許多應用中,表似乎是最自然的一種選擇,但有時出於對空間的考慮,就有可能放棄這種選擇。當只用表的一小部分時尤其如此,這種類型的表稱爲稀疏表(sparse table),因爲表中只是稀疏地放置了一些數據,它的大部分單元都是空

原创 圖的表示與遍歷

圖是非常重要的數據結構,現實中的很多問題都歸結於圖的問題,這裏我們討論一下圖,關於圖的基礎:頂點、邊等概念可參考文檔:Graph Data Stucture,這裏不再細述。 圖的表示 圖有兩種表示方法:鄰接矩陣、鄰接鏈表。不同的場

原创 2020總結與反思

2017年,在同學的推薦下開始嘗試在CSDN寫博客,後來逐漸習慣了Markdown編輯,將平時學習到的內容寫下來。基本以學習筆記爲主吧。再回顧之前寫的文章,更多是的講的這個怎麼做,但背後的原理分析思考的比較少,也沒有深度思考爲什麼

原创 分組密碼及AES算法初識

對稱密碼算法 常用對稱密碼算法AES、Blowfish、DES、RC5等,DES目前認爲已不安全,當前使用最多的是AES加密算法,因其應用的廣泛,目前主流CPU已經實現了AES-NI(全稱是:Advanced Encryption

原创 AES加密算法工作原理

密碼學博大精深,這裏所說的AES加密算法原理可以理解爲AES工作流程,至於爲什麼這麼設計,這麼設計爲什麼是安全的,有待今後的學習與思考。 分組密碼設計的兩個原則 分組密碼設計的兩個原則:混淆(confusion)和擴散(diffu

原创 二叉查找樹的平衡(DSW)

樹適合於表示某些領域的層次結構(比如Linux的文件目錄結構),使用樹進行查找比使用鏈表快的多,理想情況下樹的查找複雜度O(log(N)),而鏈表爲O(N),但理想情況指的是什麼情況呢?一般指樹是完全平衡的時候。哪最壞的情況是什麼

原创 二叉查找樹的Morris遍歷算法

二叉查找樹的遍歷方法有多種,遞歸實現,利用棧實現,線索樹實現,這幾種遍歷方法,其時間複雜度都爲O(n),而空間複雜度遞歸和棧爲O(h),線索樹需要額外的標識位來表明是線索還是節點指針,空間複雜度爲O(n),當節點數量非常大時,樹高

原创 稀疏表

稀疏表 在許多應用中,表似乎是最自然的一種選擇,但有時出於對空間的考慮,就有可能放棄這種選擇。當只用表的一小部分時尤其如此,這種類型的表稱爲稀疏表(sparse table),因爲表中只是稀疏地放置了一些數據,它的大部分單元都是空

原创 最短路徑算法:Bellman-ford算法

最短路徑問題 在圖結構中,求解最短路徑問題有多種算法,Bellman-Ford是其中之一,它可以處理含有負權邊的情況,同樣是單源最短路徑算法,而之前講到的Dijkstra算法不能處理含有負權邊的情況。對應的代價就是其算法時間複雜度

原创 分佈式系統中時間、時鐘和事件序列

在程序中,我們經常需要知道事件序列,在單體應用中,事件序列是較爲簡單的,最簡單的辦法就是用時間戳,但在分佈式系統中,事件序列是很困難的,Leslie Lamport大神在論文Time, Clocks, and the Orderi

原创 UUID的學習與思考

我們在進行分佈式系統相關開發的時候,經常需要ID號(例如,訂單號,消息id號)。如果不是分佈式系統的化,生成一個ID號是非常簡單的,因爲你自己知道自己生成的所有ID號,但是分佈式系統環境下,你自己生成ID號的時候你是不知道其他人生

原创 Protocol Buffers工作原理

這裏記錄一下學習與使用Protocol Buffer的筆記,優點缺點如何使用這裏不再敘述,重點關注與理解Protocol Buffers的工作原理,其大概實現。 我們經常使用Protocol Buffer進行序列化與反序列化。理解

原创 堆排序

選擇排序 選擇排序的基本思路是:每次都從原序列中順序查找出最小的元素,放入新的序列的下一個位置(在具體實現中,一般是還是放在原序列中,採用依次交換位置的方法)。這種最簡單實現的選擇排序時間複雜度爲O(n2)O(n^2)O(n2)。

原创 自組織鏈表

引入跳躍鏈表的目的是爲了加速查找過程。而加速策略其中一個非常重要的觀點就是並非所有的元素使用的頻率都相同。我們自然希望高頻使用的元素在鏈表的頭部,而低頻的在鏈表尾部。單向鏈表和雙向鏈表需要進行順序查找以定位某個元素,還可以用某種方