原创 最長上升子序列

這是一道老題,有兩種思路,時間複雜度分別是O(n^2)和O(nlgn). O(n^2)的方法是典型的DP思路,較爲常見,現在整理下O(nlgn)的算法思路。 算法思路 最長上升子序列的查找用到了多個數組。a數組作爲存儲原始數據的

原创 求二叉搜索樹任一節點的前驅後繼節點

二叉搜索樹節點的前驅後繼節點 之前寫過文章介紹了二叉搜索樹以及其上的基本操作,但不包括求節點的前驅結點和後繼節點。 這是一個很老的問題了,首先看下某節點前驅和後繼節點的定義。一個節點的 前驅結點:節點val值小於該節點val值並

原创 二叉搜索樹

二叉搜索樹是一種常用的數據結構,其也是面試中常被問到的問題,因此掌握二叉搜索樹十分必要。 本文就二叉搜索樹上的一些常見操作進行較爲詳細的介紹。 二叉搜索樹 首先看一下二叉搜索樹的定義: 二叉搜索樹或者是一棵空樹,或者是具有下

原创 刪除二叉樹

刪除一個二叉樹很簡單,但是通常我們是用遞歸的方式,若用迭代的方式則需要額外的空間來保存信息。 如何在O(N)的時間內使用O(1)的空間來完成二叉樹空間的釋放呢?這是我在面試中遇到的一個問題. Morris中序遍歷 利用Morri

原创 找工作總結(一)

實習面試經歷 從今天年初就開始着手複習CS相關的知識,希望今年校招能找到一個不錯的工作,所以在3月4月的時候就開始找實習,面試了幾家公司之後,最終因爲自己的準備不充分,知識相對匱乏還是沒能找到心儀的實習公司,現特此整理一下過去的實習面試經

原创 CSAPP——實驗三 內存攻擊(一)

《Hardware/Software Interface》實驗三 是內存攻擊,通過注入多餘的數據造成緩存溢出從而改變棧中的數據,進而改變進程的運行軌跡。這個實驗能幫助我們加深理解函數間調用的過程以及棧空間的使用,是非常棒的一個實驗。 實驗

原创 Linux下模擬驗證NAT功能

Linux下模擬驗證NAT功能 NAT(網絡地址轉換)功能能夠方便內網與外網(通常是Internet)連接,既減少了有效IP的使用量又保護了內網主機的信息。 Linux下的NAT功能嵌入在Linux最新一代防火牆Netfilter中,並提

原创 歐拉定理與費馬小定理

歐拉定理與費馬小定理 進來回顧了下歐拉定理,筆記整理一下。 剩餘數系統 要講歐拉定理,我們最好先了解下剩餘數系統。 完全剩餘數系統(Complete residue system (CRS) modulo n: Zn )的定義是:

原创 CSAPP——實驗二 拆炸彈

《Hardware/Software Interface》實驗二 是拆炸彈,也是實驗裏面比較有意思的一個實驗,實驗能幫助我們加深理解函數的調用過程,提升用GDB調試代碼的能力,話不多說,把實驗內容附上。 附實驗環境: 64位Linux操

原创 線段樹

線段樹 本文總結自己學習線段樹的一些知識點。我最初是通過區間最值查詢問題學習到線段樹,查詢一個區間的最值可以使用RMQ離線算法,該離線算法需要O(nlgn)的預處理時間和O(1)的查詢時間。但是一個區間的某個值修改後,又需要重新計算,對於

原创 CSAPP——實驗三 內存攻擊(二)

內存攻擊 承接上文,本文繼續介紹《Hardware/Software Interface》的實驗三。 Level 2: Firecracker Your task is to get bufbomb to execute the code

原创 二分查找

二分查找 二分查找是一種用於有序數列的折半查找算法。二分查找優點是比較次數少,查找速度快,平均性能好;時間複雜度爲O(lgN)。因此二分查找也成爲了面試中的常問問題。但是要寫出一個完全正確的二分查找並不容易,下面我們先來看個錯誤的二分查找

原创 C++中的虛函數

本文雖是起了個想要把C++中虛函數徹底透徹介紹的標題,但實際上只是本人記錄虛函數一些要點的文章。 最近讀了《Effective C++》,裏面有幾個關於虛函數的條款,以前對於虛函數不太瞭解,看了條款之後發現需要記錄下來加深自己的印象。

原创 CSAPP——實驗一 位運算

最近學習了Coursera上面的《Hardware/Software Interface》 。該課源自於華盛頓大學計算機專業,華盛頓大學將該課搬到了Coursera,現在已經是公開課性質的,視頻完全可以自由下載。 課程鏈接如下:Cours

原创 PowerPC架構下Linux系統讀寫PCI設備

最近需要完成一個linux系統下的PCI驅動程序,然而處理器是PowerPC架構,以爲在linux用戶態就可以實現,但是發現不行。 上一篇文章中通過I/O端口訪問了PCI設備,但是x86家族之外的的處理器都不爲端口提供獨立的地址空間,因此