知識點總結正則表達式
第一週編程
l Man命令:man
是manul的縮寫,咱們能夠經過man man來查看man
的幫助,以下圖: man
有一個-k
選項用起來很是好,這個選項讓你學習命令,編程時有了一個搜索引擎,能夠觸類旁通。 咱們經過一個例子來講明,好比數據結構中學過排序(sort),我不知道C語言中有沒有完成這個功能的函數,能夠經過「man -k sort」來搜索,由於是找C庫函數,咱們關注帶3的,qsort好像是個好選項。vim
l Cheat命令:cheat是做弊,小抄的意思。cheat命令是在GNU通用公共許可證下,爲Linux命令行用戶發行的交互式備忘單應用程序。它提供顯示Linux命令使用案例,包括該命令全部的選項和簡短但尚可理解的功能。數組
l find查找一個文件在系統中的什麼位置,locate是神速版本的find(Windows下有個Everything工具和locate相似).grep 能夠對文件全文檢索,支持正則表達式,正則表達式也是一個重要的元知識whereis,which告訴你使用的命令工具裝在什麼地方。緩存
Linux基礎:1)重要快捷鍵:安全
l [tab]補全命令,補全目錄,補全命令參數等等服務器
l [Ctrl+c]強行終止當前程序,不退出終端數據結構
l [Ctrl+d] 鍵盤輸入結束或退出終端app
l [Ctrl+s] 暫定當前程序,暫停後按下任意鍵恢復運行異步
l [Ctrl+z] 將當前程序放到後臺運行,恢復到前臺爲命令fg
l [Ctrl+a] 將光標移至輸入行頭,至關於Home鍵
l [Ctrl+e] 將光標移至輸入行末,至關於End鍵
l [Ctrl+k] 刪除從光標所在位置到行末
l [Alt+Backspace] 向前刪除一個單詞
l [Shift+PgUp] 將終端顯示向上滾動
l [Shift+PgDn] 將終端顯示向下滾動
2) 歷史輸入命令
l ↑能夠恢復你輸入過的指令
3) 通配符
l 通配符是一種特殊語句,主要有星號(*)和問號(?),用來對對字符串進行模糊匹配(好比文件名,參數名)。當查找文件夾時,可使用它來代替一個或多個真正字符;當不知道真正字符或者懶得輸入完整名字時,經常使用通配符代替一個或多個真正的字符。
l grep命令的經常使用參數:
參數 說明
-b 將二進制文件做爲文原本進行匹配
-c 統計以模式匹配的數目
-i 忽略大小寫
-n 顯示匹配文本所在行的行號
-v 反選,輸出不匹配行的內容
-r 遞歸匹配查找
-A n n爲正整數,表示after的意思,除了列出匹配行以外,還列出後面的n行
-B n n爲正整數,表示before的意思,除了列出匹配行以外,還列出前面的n行
--color=auto 將輸出中的匹配項設置爲自動顏色顯示
第二週
l Vim編輯器:
1.普通模式
Vim的普通模式用的編輯器命令,好比移動光標,刪除文本等等。這也是Vim啓動後的默認模式,而不是大多數編輯器的插入模式。
普通模式命令每每須要一個操做符結尾。
普通模式進入插入模式的方法:a鍵(append/追加)鍵或者i(insert/插入)鍵。
2.插入模式
在這個模式中,大多數按鍵都會向文本緩衝中插入文本。大多數新用戶但願文本編輯器編輯過程當中一直保持這個模式。
插入模式中回到普通模式:ESC鍵。
3.可視模式
與普通模式相似,但移動命令會擴大高亮的文本區域。高亮區域能夠是字符、行或者是一塊文本。當執行一個非移動命令時,命令會被執行到這塊高亮的區域上。
4.選擇模式
這個模式中,能夠用鼠標或者光標鍵高亮選擇文本。
若是輸入任何字符,Vim會用這個字符替換選擇的高亮文本塊,而且自動進入插入模式。
5.命令行模式
在命令行模式中能夠輸入會被解釋成並執行的文本。例如執行命令(:鍵),搜索(/和?鍵)或者過濾命令(!鍵)。
在命令執行以後,Vim返回到命令行模式以前的模式,一般是普通模式。
6.Ex模式(Ex mode)
這和命令行模式比較類似,在使用:visual命令離開Ex模式前,能夠一次執行多條命令。
l 編譯器GCC
getsudo apt-install build-essential
安裝到usr/lib中,到usr/bin中(可執行文件),到usr/include中(頭文件)
c 只編譯不連接,生成目標文件.o-
S 只編譯不彙編,生成彙編代碼-
E 只進行預編譯,不作其餘處理-
g 在可執行程序中包含標準調試信息-
o file 將file文件指定爲輸出文件-
v 打印出編譯器內部編譯各過程的命令行信息和編譯器的版本-
I dir 在頭文件的搜索路徑列表中添加dir目錄-
static 進行靜態編譯,即連接靜態庫,禁止使用動態庫-
shared 1.能夠生成動態庫文件-
2.進行動態編譯,儘量的連接動態庫,沒有動態庫時纔會連接同名靜態庫
L dir 在庫文件的搜索路徑列表中添加dir目錄-
lname 連接稱爲libname.a或者libname.so的庫文件。-
若是兩個庫文件都存在,根據編譯方式是static仍是shared進行連接
fPIC 生成使用相對地址的位置無關的目標代碼,-
(-fpic)而後一般使用gcc的-static選項從該pic目標文件生成動態庫文件。
EcE預處理:gcc –hello.–o hello.i; gcc –調用cpp 生成中間文件
SS編 譯:gcc –hello.i –o hello.s; gcc –調用ccl 翻譯成彙編文件
ccas匯 編:gcc –hello.s –o hello.o; gcc -調用 翻譯成可重定位目標文件
鏈 接:gcc hello.o –o hello ; gcc -o 調用ld** 建立可執行目標文件
-o後面是接的你給生成的文件指定的名字,若是不指定,則默認爲a.out
在命令行上運行這個可執行目標文件須要輸入它的名字:
a.out ./
爲何?
Window下,搜索一個東西會從當前目錄下,找不到去PATH環境變量中找;Linux下只從PATH環境變量中找,因此即便當 前目錄有,也要指出來; "."表示當前目錄,「./libvector.a」 表示用當前目錄下的libvector.a庫文件。 凡是不帶前綴的,都是PATH中有,但不安全。
因此其實這行代碼只是在輸入它的名字, ./ 表示當前目錄
外殼調用操做系統中一個叫加載器的函數,拷貝可執行文件p中的代碼和數據到存儲器,而後將控制轉移到這個程序的開頭。
技巧:前三步,GCC的參數連起來是「ESc」,相應輸入的文件的後綴是「iso」
l 調試工具gdb
使用GCC編譯時要加「-g」參數
GDB最基本的命令有:
programm(啓動GDB)gdb
l 查看所載入的文件
b 設斷點
binfo 查看斷點狀況
run開始運行程序
bt 打印函數調用堆棧
p 查看變量值
c 從當前斷點繼續運行到下一個斷點
n 單步運行(不進入)
s 單步運行(進入)
quit退出GDB
四種斷點:
b[行數或函數名] <條件表達式>
b[函數名] <條件表達式>
bif[行數或函數名] <表達式>
<條件表達式>tbreak [行數或函數名]
l Make和Makefile
make工具最主要也是最基本的功能就是根據makefile文件中描述的源程序至今的相互關係來完成自動編譯、維護多個源文件工程。
而makefile文件須要按某種語法進行編寫,文件中須要說明如何編譯各個源文件並連接生成可執行文件,要求定義源文件之間的依賴關係。
最終實現——自動化編譯
進入Makefile?
$ Makefilevim
Makefile的通常寫法:
一個Makefile文件主要含有一系列的規則,每條規則包含如下內容:
第三週
l 第二章 信息的表示和處理
字
字長決定虛擬地址空間的最大大小。
字長爲w,虛擬地址的範圍爲1-(2^w-1)
w=32或64:也就是咱們一般所說的電腦是32位仍是64位。也能夠理解爲CPU一次處理數據的位數。
布爾代數
經常使用運算符號:
與: &
或: |
非: ~
異或:^
邏輯運算
邏輯運算符
與:&&
或:||
非:!
左移<<
x<>
右移分爲邏輯右移和算術右移。
邏輯右移:
在左端補k個0,多用於無符號數移位運算
在左端補k個最高有效位的值,多用於有符號數移位運算。
第四周
l 第三章 程序的機器級表示
是機器級程序的格式和行爲,定義了處理器狀態、指令的格式,以及每條指令對狀態的影響。
看上去是一個很是大的字節數組,其實是將多個硬件存儲器和操做系統軟件組合起來。
操做數的三種類型
2.結果存放的兩種可能
3.尋址方式
(1)當即數尋址方式
格式:$後加用標準c表示法表示的整數,如$0xAFF
(2)寄存器尋址方式
如%eax,與彙編中學過的AX寄存器類比。
(3)存儲器尋址方式
通用形式:
do
body-statement
whiletest (-expr);
循環體body-statement至少執行一次。
能夠翻譯成:
loop:
body-statement
t = test-expr;
if (t)
gotoloop ;
即先執行循環體語句,再執行判斷。
通用形式:
whiletest(-expr)
body-statement
GCC的方法是,使用條件分支,表示省略循環體的第一次執行:
iftest(!-expr)
done goto;
do
body-statement
whiletest (-expr);
done:
接下來:
testt =-expr;
if(!t)
done goto:
loop:
body-statement
test t =-expr;
if (t)
goto loop;
done:
歸根究底,仍是要把循環改爲do-while的樣子,而後用goto翻譯。
棧幀結構
棧用來傳遞參數、存儲返回信息、保存寄存器,以及本地存儲。
1.棧幀
爲單個過程分配的那部分棧稱爲棧幀,通用結構見149頁
因此本質上棧幀仍是棧。
2.兩個指針
最頂端的棧幀以兩個指針界定:
寄存器%ebp-幀指針
寄存器%esp-棧指針
棧指針可移動,因此信息訪問多相對於幀指針。
3.調用的過程
課本150頁過程P調用過程Q的示例。
調用者的幀應該在被調用者的下面,而且調用者返回地址是它的棧幀末尾,這樣能夠保證被調用者執行完畢全都出棧後,程序可以繼續向下執行。
關於被調用者Q用棧的幾個用處:
1.保存不能存放在寄存器中的局部變量。
當要對一個局部變量使用地址操做符&的時候,就必需要爲它生成一個地址,因此要入棧。這個用法!之前沒見過!
2.存放它調用的其餘過程的參數。
第五週
第四章處理器體系結構
Y86指令集基本上是IA32指令集的一個子集,只包括四字節整數操做,尋址方式比較少,操做也較少。
彙編碼錶示和字節編碼參見課本232頁。
每條指令須要1-6個字節不等,每條指令的第一個字節代表指令的類型。
這個字節分爲兩個部分,每一個部分4位:
Stat描述程序執行的整體狀態
1. AOK正常操做
2. HLT處理器執行halt指令
3. ADR遇到非法地址
4. INS遇到非法指令
Y86——處理器中止運行指令。
1.Y86有時須要兩條指令來完成IA32一條指令就能完成的事
2.Y86沒有伸縮尋址模式
第六週
第六章存儲器層次結構
隨機訪問存儲器(RAM)
RAM分類:
1.傳統的DRAM
(1)超單元
(2)信息的流入流出
信息經過引腳流入流出芯片,每一個引腳攜帶一個1位的信號。
(3)存儲控制器
這個電路能夠一次傳入或傳出w位。
加強的DRAM
RAM斷電丟失數據,是易失的;
ROM是非易失的,統稱爲只讀存儲器
(1)分類
可擦除PROM,可以被編程的次數的數量級在10的五次方。
基於EEPROM,爲大量的電子設備提供快速而持久的非易失性存儲。
存在於:數碼相機、手機、音樂播放器、PDA、筆記本、臺式機、服務器計算機系統
(3)固件
存儲在ROM設備中的程序一般被稱爲固件,當一個計算機系統通電之後,他會運行存儲在ROM中的固件。
5.訪問主存
(1)總線
總線是一組並行的導線,能攜帶地址、數據和控制信號。
總線分類:
a.系統總線——鏈接CPU和I/O橋
b.存儲器總線——鏈接I/O橋和主存
c.I/O總線(具體見6.1.2.4)
I/O橋將系統總線的電子信號翻譯成存儲器總線的電子信號,也將系統總線和存儲器總線鏈接到I/O總線。
.磁盤容量——一個磁盤上能夠記錄的最大位數
(1)影響因素:
提升面密度便可提升容量。
計算公式:
3.磁盤操做
磁盤以扇區大小的塊來讀寫數據。
訪問時間的分類:
(1)尋道時間
2)旋轉時間
3)傳送時間
局部性原理:
一個編寫良好的計算機程序,經常傾向於引用臨近於其餘最近引用過的數據項的數據項,或者最近引用過的數據項自己。
分類:
緩存
高速緩存:是一個小而快速的存儲設備,它做爲存儲在更大、更慢的設備中的數據對象的緩衝區域。
緩存:使用高速緩存的過程稱爲緩存。
數據老是以塊大小爲傳送單元在第k層與第k+1層之間來回拷貝。任一對相鄰的層次之間塊大小是固定的,可是其餘的層次對之間能夠有不一樣的塊大小。
通常來講:層越低,塊越大。
緩存命中
緩存不命中
.緩存不命中的種類
(1)強制性不命中/冷不命中
2
)衝突不命中
3)容量不命中
編寫高速緩存友好的代碼
1.基本方法:
2.重要問題:
收穫總結
半個學期的學習,最大的收穫應該算是心態上的改變。想一想過去的兩年,學習上真的是混過來的,每一個期末考前突擊,而後拿個及格分心滿意足,什麼都沒學到。這個學期剛開學還想繼續以前的狀態,平時基本不花時間在學習上,可是又要完成老師佈置的任務,每到週末都會壓力很大。以後儘可能跟上老師的要求,天天花點時間學習,這樣作了一段時間,發現天天過的不會很空虛,也不會壓力很大。如今以爲確實天天應該把學習放在第一位。
說到收穫的知識,一開始幾周仍是沒有徹徹底底的完成學習任務,以後的也沒有學的特別清楚,此次的知識總結基本上是把閆佳歆同窗的博客學習了一遍。以後會把前面沒有作好的實驗補上,也多多複習以前的知識。
本身的不足
我以爲本身的不足仍是懶,懶得看書、懶得動手、懶得動腦子。就像老師說的,我遇到不會的字都不去查字典,由於我懶得查。但是這樣的心態對待學習,那就等於學不到東西。在學習上真是付出了多少,就獲得多少。說到改進,如今已經能愈來愈把心思用在學習上了,通過幾周的學習,發現若是靜下心,仍是能把書看進去,若是本身多研究一下,實驗仍是能作得出來的。平時不學習,也只不過是把時間浪費在了其餘地方,以此逃避學習,這樣的逃避沒有任何益處,與其這樣不如把時間用在學習上。還有就是我遇到問題,不能解決的老是喜歡不了了之,之後會多向老師同窗請教。
課程建議和意見
課程中我最喜歡的機制就是每週成績的公佈,這樣能知道本身的學習狀況,對教學質量的提升也有幫助。我不喜歡的地方就是咱們自學的比重那麼大,我更適合聽講來學習,但願以後的課程中老師能把內容講的全面、詳細一些。
參考資料:
閆佳歆同窗博客 http://www.cnblogs.com/20135202yjx/
實驗樓實驗指導: https://www.shiyanlou.com/courses/413