原创 深入理解計算機系統 -- 程序的機器級表示

1. 程序優化等級       假設有源文件 p1.c 和 p2.c,使用 gcc -Og -o p p1.c p2.c 編譯生成代碼,-Og 會告訴編譯器使用符合原始 C 代碼整體結構的機器代碼優化等級。(PS: -O0 所得到的彙編代碼

原创 深入理解計算機系統 -- homework && lab

https://github.com/lawliet9712/csapp-3e

原创 【轉】sed命令的基本操作

原文鏈接 sed命令行格式爲:          sed [-option]  ‘command’  輸入文本/文件         常用選項:        -n∶取消默認的輸出,使用安靜(silent)模式。在一般 sed 的用法中,所

原创 深入理解計算機系統 -- 計算機系統漫遊

1. 從源文件到可執行程序的過程 這裏以最簡單的例子 helloworld 爲例,新建一個 hello.c 的源文件,添加如下代碼 #include "stdio.h" int main() { printf("hello world \

原创 【轉】Linux下vim的基本操作

原文鏈接 Linux vi/vim 所有的 Unix Like 系統都會內建 vi 文書編輯器,其他的文書編輯器則不一定會存在。 但是目前我們使用比較多的是 vim 編輯器。 vim 具有程序編輯的能力,可以主動的以字體顏色辨別語法的正確性

原创 深入理解計算機系統 -- 信息的表示和處理

1. 信息的存儲     大多數計算機使用 8 位的塊,或者字節,作爲最小的尋址內存單位,而非訪問內存中單獨的位,機器級程序將內存視爲一個非常大的字節數組,稱爲 虛擬內存 ,內存的每個字節都用一個唯一的數字標識,稱爲它的 地址 。以 C 語

原创 62. 不同路徑

1. 題目 一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲“Finish”)。 問總共有多少條不同的路徑?   例如,

原创 Redis設計與實現 -- 動態字符串對象(SDS)

1. 動態字符串( simple dynamic string, SDS)   在 Redis 中,當需要可以被重複修改的字符串時,會使用 SDS 類型 ,而不是 C 語言中默認的 C 字符串類型 。舉個例子: SET msg "Hell

原创 371. 兩整數之和

1. 題目 不使用運算符 + 和 - ​​​​​​​,計算兩整數 ​​​​​​​a 、b ​​​​​​​之和。 示例 1: 輸入: a = 1, b = 2 輸出: 3 示例 2: 輸入: a = -2, b = 3 輸出: 1 2.

原创 55. 跳躍遊戲

1. 題目 給定一個非負整數數組,你最初位於數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後一個位置。 示例 1: 輸入: [2,3,1,1,4]輸出: true解釋: 從位置 0 到 1 跳 1

原创 Redis設計與實現 -- 鏈表與字典

1. 鏈表 1.1 鏈表的結構 在 Redis 中,鏈表的實現是雙向鏈表,除此之外與常規的鏈表不同的是它還有三個函數指針,dup 函數用於複製鏈表節點所保存的值,free 函數用於釋放鏈表節點保存的值,match 函數則用於對比鏈表節點的

原创 230. 二叉搜索樹中第k小的元素

1. 題目 給定一個二叉搜索樹,編寫一個函數 kthSmallest 來查找其中第 k 個最小的元素。 說明:你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜索樹元素個數。 示例 1: 輸入: root = [3,1,4,null,2],