原创 單連通圖(算法導論22.3-12)

注意此處的單連通(singleconnected)指任意兩個結點u,v,從u到v至多隻有一條簡單路徑。這個問題作爲上星題有難度,對於一次DFS來講,如果存在forward edge則表明必定不是單連通圖,但還要考慮cross edge,如

原创 強連通分支之Tarjan 算法

比Kosaraju算法更神奇,只需要一次DFS就可以獲得強連通分支。其原理是每一個強連通分支,均包含在DFS樹的某個子樹中,只要找到這個子樹的樹根,再逐一將該連通分支所有結點取出即可。 數據結構: 1)        棧,DFS訪問結點時

原创 判斷一個圖是否爲二分圖且輸出結點二分的兩個部分(算法導論22.2-6)

這題實際上是判斷圖是否爲二分圖,可以假設此圖爲連通圖(非連通圖時對其各個連通分支作相同操作即可)。 二分圖的充要條件是“所有環路的長度均爲偶數”,剛開始我也從這方面着手,努力證明如果此圖有環路,則環路長度不可能爲奇數,繼而發現此路不通,而

原创 BFS 最短路徑證明及實現

BFS最短路徑感覺是顯而易見的,但證明卻頗費工夫,以下證明大部分摘自CLRS,使用倒序形式進行證明比較好理解。首先需要證明一條引理,即BFS中所有點的d值按照入隊列成升序排列,即d(s) <= d(v1) <= ... <=d(vr)。

原创 netfilter forward 接收到大包的問題

在netfilter 的forward上作了HOOK,但經常發現會收到非常大的數據包,很是奇怪。 最後發現是網卡的GRO屬性導致的,而且這個屬性默認開啓,很是怪異,我們這個設備主要是路由設備,使用GRO對性能提高沒有任何好處,真不知道L

原创 串口調試Linux虛擬機

串口調試Linux虛擬機 背景        由於修改Linux內核,因此在調試程序時經常會導致Linux虛擬機panic,但看不到有用的panic 信息,故十分有必要看到panic 的現場信息。本文通過串口方式將信息保存下來。以下過程中

原创 docker之數據存儲

1     簡介 docker鏡像是一個只讀的文件系統,容器是鏡像的運行環境,即在鏡像基礎上再加一層可讀寫的層,因此所有容器中的數據寫入時均寫到容器中,會隨着容器的銷燬而消失。爲確保容器可以存儲數據,docker引入數據卷volume來處

原创 docker之compose

1     簡介 對於某個應用可能會有多個容器,比如一個django項目,用到了mysql、django、redis、nginx這些容器,每個容器都有自己獨特的配置,啓動這些容器至少需要四條語句。爲簡化應用配置,docker開發了comp

原创 docker之鏡像製作

1     簡介 docker image,即鏡像,是docker的關鍵元素,它是一個可讀的文件系統,又是一個多層的文件系統,可以導出成一個tar包文件,也可以上傳到鏡像倉庫供其他人下載使用。 2     製作鏡像 2.1    基本原理

原创 gdb 調試網絡程序發現connect 失敗(interrupted system call)

問題現象 直接執行程序一切正常,但使用gdb啓動程序時,即使沒有任何斷點,發現tcp connect 總是失敗,原因是(interrupted system call)。抓包發現主機會發送FIN或者RST斷開這條連接。 程序是一個多線程

原创 Linux 雜項,記錄Linux 下的一些點滴心得,以供參考

1. netfilter 看到的skb 報文非線性 問題現象 netfilter 看到的skb 報文非線性,即報文全體並不存在於skb->data 內存空間內,導致我們的應用協議處理故障 詳細過程 使用tcpreplay 打包測試,H

原创 python3 小技巧記錄(此文檔會不定期更新)

1. \x字符串轉換成不要打印字符串 有一個可打印的字符串,需要將\x轉換成一個字節內容,最終實現很簡單,僅一行,如下: src=“\x01abcd\x023456”eval("'"+src+"'") 注意上文的引號,有三層,

原创 Linux 內核SMP 競爭問題

問題現象 netfilter 掛一個hook,按流來處理數據包。在慢速場景下沒有問題,但一旦稍微速度快些,就會發現某條流的數據包會隨機的丟失、亂序 問題解決 使用tcpreplay 重放包測試,記錄一條流的所有包的相關信息,詳細查看每個

原创 文本文件行處理,8進制數據替換成16進制

使用gawk 完成,由shell 查找所有需要處理的文件,然後通過管道送給awk處理,awk 一個文件一個文件處理,故使用了BEGINFILE 和ENDFILE 兩個模式,即在文件開始處理之前生成一個臨時文件,用來存儲awk 處理之後輸出

原创 linux panic 記錄文件

1     設計 1.1    技術 使用kdump(kexec)引導第二個內核啓動,在第二個內核中捕捉panic信息,同時將系統內核的內存鏡像存儲到/proc/vmcore文件中,由於此文件與內存大小一致,故不能直接使用此文件。使用ke