軟件設計師筆記

PS:非原創!辛苦原作者的整理

作者序言

爲什麼要分享軟設筆記?

一直以來,我都認爲人類世界最美好的事情莫過於用一個生命去影響另一個生命(前提是正面影響)。如果我的一點點努力,能夠幫助你通過軟考,我想,這將是很有意義的一件事情。考軟設的人很多,我作爲過來人,希望能夠給予你們一些幫助。

爲什麼要寫序言?

每一位讀者,都不是我本人。看這本筆記,未必知道如何去看,所以我寫下想說的話,希望你們在看筆記的過程中,少走彎路。

軟設,我付出了許多的心血,雖然不至於頭懸梁錐刺股,但也是爲其折騰了許多日子,至少,是送了好多錢……這一路走來,有很多感想,寫在這裏,也算是將其作爲一個樹洞吧。

軟考難嗎?

相信許多初次考軟設的人都喜歡問老司機這個問題,其實沒有人能給你正確答案,除了你自己。對於一般人來說,上清華北大難嗎?當然難,但是當中不乏NB之人,能夠輕易過線,對他們來說就是so easy。所以,難與不難,取決與你的實力。

爲什麼要考軟考?

軟考的中級證書是能夠拿來直接評職稱的(聽說),也許你不知道什麼是職稱,其實我也不知道……感覺好像是蠻有用的東西,自行百度吧。我只是個學生,大學時間相對工作而言還是比較多的,考考證,也不是什麼壞事。而且,努力久了,軟設不僅僅是一門專業證書的考試,更是我的信仰。

對於求職,聽說沒什麼大用,畢竟,計算機的發展大家也都知道,技術是第一位的。但是軟設證書,如果人家有,你沒有,我想這感覺應該不會太好。

對於經濟,考一次140RMB(浙江省價格)。曾經有人在羣裏收購軟設掛證,開價3000元,對於學生的我,還是蠻開心的。

這個筆記與《軟件設計師教程》的區別

先說說這個筆記的由來吧。人腦畢竟存儲空間有限,且極易遺忘。所以我把重要的知識點都會記下來,反覆看。有本《軟件設計師教程》(以下簡稱教程),他寫的非常詳細。如果要買,我建議去某魚看看,正版太貴了,個人建議阿,如果你錢多,或者堅決支持正版,當我沒說。

我與這本書的主要區別在於精。教程一共700頁,共計100萬漢字,寫得非常非常詳細,但是一般人都看不了多少頁,枯燥難懂。而我的筆記,根據多套試卷的考點考頻來綜合考慮,記錄了高頻的一些知識點。且用最簡單易懂的語言來解釋,有必要的話,我也配上了練習題與解析總共才2萬漢字,幾乎都是高頻考點,如果我的筆記寫的不夠詳細,可以再去看對應教程中的知識點。

複習軟設的注意事項

         第一點,建議你們買一本《軟件設計師同步輔導》,這本書是比較簡短的知識點,詳細度不如教程,但是他不僅僅是按章節分類,更是具備了課後習題與解析。雖然不得不說,解析不咋滴。

         第二點,千萬不要以爲得到了這本筆記就和得到了《九陰真經》一樣,這本書,最適合的讀者是誰?是我!他針對的是我的弱點,每個知識點都是一針見血。對於讀者,我寫的知識點未必是你不會的,沒寫的知識點未必是你會的。只能說,最適合的讀者是我。所以,我建議大家只是把這本筆記當作一個小小的參考資料,根據自己的做題經驗,去寫本專屬自己的筆記。

         第三點,不用去搜什麼模擬卷,真題多的是。網上都有,另外,不要做年份太早的,我最初是從06年開始做的,知識點差的太多了。建議大家刷2010年之後的題。

         第四點,雖然我是計算機專業,但是我的office功底確實渣的一批,所以排版也是非常糟糕的,只會用標題一,標題二,標題三來區分知識點的從屬關係。我以個人的理解,將衆多的知識分成了多個章節,數據結構、軟件工程、多媒體等。所以可能分的不太科學,只是根據自己的理解而已。但是沒關係,考試不會考你某個知識點是屬於哪個章節的,你會做就可以。這本筆記的最佳使用方法是打開word的導航窗體,根據章節去看。

明天,也很美好

明天,就是2016年下半年的軟設開考之日。沒錯,作爲這本筆記的書寫者,自己都還沒通過軟設……我程序員考了2次才過,軟設,這是第2次考,希望能過吧。但是講實話,若是沒過,我也不會特別難過,放平心態吧,盡人事聽天命。只能說技不如人,不能怨天尤人。擁有一個良好的心態,我覺得比擁有所謂的證書更重要。留個QQ吧,我也不知道留了有啥用,出版社也不會來找我,我就是想留一個……948832626.如果學習的過程中有疑問的,還是別+我QQ了,我考完就忘了,回答不了你。我留QQ純粹就是覺得應該有一個自己的標識,就是這樣……

希望這本筆記,能讓你們早日成爲軟件設計師!

2016年11月11日

數據結構

鄰接矩陣

無向圖

無向圖鄰接矩陣:其鄰接矩陣第i行元素的和即爲頂點i的度,例如:頂點4的度就是第四行的和,即2。

有向圖

其鄰接矩陣的第i元素之和爲頂點i的出度,而鄰接矩陣的第j元素之和爲頂點j的入度。例如:頂點3的出度和入度分別爲5和16.

存儲結構

順序存儲結構

用一組地址連續的存儲單元依次存儲線性表的各個數據元素, 適用於頻繁查詢時使用。

鏈式存儲結構

在計算機中用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的),適用於在較頻繁地插入、刪除、更新元素時使用。

單鏈表

循環鏈表

雙鏈表

各鏈表的比較

因爲雙鏈表有兩個指針域,因此,雙鏈表的靈活度優於單鏈表,但是雙鏈表的開支要大一些

散列存儲結構

數據元素存儲位置關鍵碼之間建立確定對應關係的查找技術,即鍵值對

索引存儲結構

索引是一個單獨的、物理的數據庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。比如數據庫

二叉排序樹

若它的左子樹非空,則左子樹上所有節點的值均小於它的根節點的值

若它的右子樹非空,則右子樹上所有結點的值均大於等於它的根節點的值

它的左、右子樹也分別爲二叉排序樹。查找的時候,中序遍歷二叉樹,得到一個遞增序列

關鍵字最大的結點可以有左子樹,但一定沒有右子樹

哈夫曼樹(最優二叉樹)

定義

帶權路徑(WPL)最短的樹,權值越大的葉子節點越靠近根節點。

構造哈夫曼樹及WPL計算

例題

已知一個文件中出現的各字符及其對應的頻率如下表所示。若採用定長編碼,則該文件中字符的碼長應爲()。若採用Huffman編碼,則字符序列“face”的編碼應爲()。

http://www.educity.cn/tiku/uploadfiles/2016-03/54c645ddf9b34d88a16cc0cfe4343ac9_.png

A.2

B.3

C.4

D.5

A.110001001101

B.001110110011

C.101000010100

D.010111101011

解析:所謂定長編碼是指用多少位二進制足夠表示字符,圖中字符是有6個的,a、b、c、d、e、f,可用000到101表示a到f,這樣編碼字符的碼長可以爲3,4位當然也是可以,但我們是找最合適的,自然3位能滿足要求。第二問,哈夫曼樹的左節點未必要比右節點小,但是通常做題時需要寫成左小右大的形式,再左0右1賦值,所謂“face”編碼,是指找到這4個字母,從根節點出發,要經歷的編碼數。如下圖所示,所以答案爲BA

http://www.educity.cn/wenda/user_img/e623500569664283a50dc8eaa4700cce.jpg

平衡二叉樹

平衡二叉樹(Baland Binary Tree)又被稱爲AVL樹(有別於AVL算法),且具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

滿二叉樹

除最後一層無任何子節點外,每一層上的所有結點都有兩個子結點或0個子節點的二叉樹。

查找方法

二分查找法(折半查找法)

適用情況

不經常變動而查找頻繁的有序列表

優點

1、比較次數少

2、查找速度快

3、平均性能好

缺點

1、要求待查表爲有序表

2、插入刪除困難

實現算法

    首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。重複以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在爲止,此時查找不成功。

分塊查找

適用情況

節點動態變化的情況

優點

比順序查找算法(就是一個一個的去比較)快得多

缺點

速度不如折半查找法

實現算法

把一個大的線性表分解成若干塊,每塊中的節點可以任意存放,但塊與塊之間必須排序。假設是按關鍵碼值非遞減的,那麼這種塊與塊之間必須滿足已排序要求,實際上就是對於任意的i,第i塊中的所有節點的關鍵碼值都必須小於第i+1塊中的所有節點的關鍵碼值。此外,還要建立一個索引表,把每塊中的最大關鍵碼值作爲索引表的關鍵碼值,按塊的順序存放到一個輔助數組中,顯然這個輔助數組是按關鍵碼值費遞減排序的。查找時,首先在索引表中進行查找,確定要找的節點所在的塊。由於索引表是排序的,因此,對索引表的查找可以採用順序查找或折半查找;然後,在相應的塊中採用順序查找,即可找到對應的節點。

平均查找長度(E(n))

假設某個線性表中共有n個節點,分成大小相等的b塊,每塊有s=n/b,則

 

 

排序

直接插入排序

每一趟將一個待排序的記錄,按照其關鍵字的大小插入到有序隊列的合適位置裏,直到全部插入完成,比如鬥地主抽牌就是這樣的規則。

http://images2015.cnblogs.com/blog/318837/201604/318837-20160422101457913-263070230.png

簡單選擇排序

每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束爲止。

http://images2015.cnblogs.com/blog/318837/201604/318837-20160422104021288-937621481.png

冒泡排序

兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求爲止。

http://images2015.cnblogs.com/blog/318837/201604/318837-20160421153233585-1624619374.png

希爾排序

把記錄按步長 gap 分組,對每組記錄採用直接插入排序方法進行排序。隨着步長逐漸減小,所分成的組包含的記錄越來越多,當步長的值減小到 1 時,整個數據合成爲一組,構成一組有序記錄,則完成排序。

http://images2015.cnblogs.com/blog/318837/201604/318837-20160422102024757-37862627.png

快速排序

通過一趟排序將要排序的數據分割成獨立的兩部分:分割點左邊都是比它小的數,右邊都是比它大的數。然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。採用了分治法的算法策略。

http://images2015.cnblogs.com/blog/318837/201604/318837-20160421155746320-2138416137.png

堆排序

堆排序中堆的定義:n個元素的序列{k1,k2,…,kn}當且僅當滿足下列關係時,稱爲堆。

kik2ikik2i+1kik2ikik2i+1i=1,2,···,n2

歸併排序

將待排序序列R[0...n-1]看成是n個長度爲1的有序序列,將相鄰的有序表成對歸併,得到n/2個長度爲2的有序表;將這些有序序列再次歸併,得到n/4個長度爲4的有序序列;如此反覆進行下去,最後得到一個長度爲n的有序序列。

http://images2015.cnblogs.com/blog/318837/201604/318837-20160422105330898-383478645.png

基數排序

基數排序與本系列前面講解的七種排序方法都不同,它不需要比較關鍵字的大小。它是根據關鍵字中各位的值,通過對排序的N個元素進行若干趟“分配”與“收集”來實現排序的。

設有一個初始序列爲: R {50, 123, 543, 187, 49, 30, 0, 2, 11, 100}。

我們知道,任何一個阿拉伯數,它的各個位數上的基數都是以0~9來表示的。所以我們不妨把0~9視爲10個桶。 我們先根據序列的個位數的數字來進行分類,將其分到指定的桶中。例如:R[0] = 50,個位數上是0,將這個數存入編號爲0的桶中。

http://images2015.cnblogs.com/blog/318837/201604/318837-20160422105037773-812274188.png

分類後,我們在從各個桶中,將這些數按照從編號0到編號9的順序依次將所有數取出來。這時,得到的序列就是個位數上呈遞增趨勢的序列。 按照個位數排序: {50, 30, 0, 100, 11, 2, 123, 543, 187, 49}。

排序的比較

排序方法

最好時間複雜度

平均時間複雜度

最壞時間複雜度

輔助空間

穩定性

直接插入

O(n)

O(n2)

O(n2)

O(1)

穩定

簡單選擇

O(n2)

O(n2)

O(n2)

O(1)

不穩定

冒泡排序

O(n)

O(n2)

O(n2)

O(1)

穩定

希爾排序

不存在

O(n1.3)

不存在

O(1)

不穩定

快速排序

O(nlog2n )

O(nlog2n )

O(n2)

O(log2n )

不穩定

堆排序

O(nlog2n )

O(nlog2n )

O(nlog2n )

O(1)

不穩定

歸併排序

O(nlog2n )

O(nlog2n )

O(nlog2n )

O(n)

穩定

基數排序

O(d(n+rd))

O(d(n+rd))

O(d(n+rd))

O(rd)

穩定

 

例題

堆是一種數據結構,(34)是堆排序

 

A.(10,  50,  80,  30,  60,  20,  15,  18)

B.(10,18,15,20,50,80,30,60)

C.(10,15,18,50,80,30,60,20)

D.(10,30,60,20,15,18,50,80)

根據定義可知選B

廣義表

廣義表的長度是將最外面那層的括號刪了以後所剩下的元素(組)個數,深度是括號的層數

例題

L1=((a,(a,b),((a,b),c))),L2=((1,2,3)),L3=(1,2,3)。求L1、L2、L3的長度和深度

答案:

 

長度

深度

L1

1

4

L2

1

2

L3

3

1

歸併排序的歸併路數

歸併路數 =|logkm|,其中m爲元素個數,k爲多路歸併趟數

例題

若對27個元素只進行三趟多路歸併排序,則選取的歸併路數爲  (37)  。

 

A.2    B.3    C.4    D.5

根據公式可得log以3爲底,以27爲真數的答案爲3。所以選B

表達式的記法

前綴表達式(前綴記法、波蘭式)

從右至左掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(棧頂元素 op 次頂元素),並將結果入棧;重複上述過程直到表達式最左端,最後運算得出的值即爲表達式的結果。

例如前綴表達式“- × + 3 4 5 6”:

(1) 從右至左掃描,將6、5、4、3壓入堆棧;

(2) 遇到+運算符,因此彈出3和4(3爲棧頂元素,4爲次頂元素,注意與後綴表達式做比較),計算出3+4的值,得7,再將7入棧;

(3) 接下來是×運算符,因此彈出7和5,計算出7×5=35,將35入棧;

(4) 最後是-運算符,計算出35-6的值,即29,由此得出最終結果。

中綴表達式

我們平常用的表達式a+b-c這樣的就是中綴表達式

後綴表達式(後綴記法、逆波蘭式)

從左至右掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(次頂元素 op 棧頂元素),並將結果入棧;重複上述過程直到表達式最右端,最後運算得出的值即爲表達式的結果。

例如後綴表達式“3 4 + 5 × 6 -”:

(1) 從左至右掃描,將3和4壓入堆棧;

(2) 遇到+運算符,因此彈出4和3(4爲棧頂元素,3爲次頂元素,注意與前綴表達式做比較),計算出3+4的值,得7,再將7入棧;

(3) 將5入棧;

(4) 接下來是×運算符,因此彈出5和7,計算出7×5=35,將35入棧;

(5) 將6入棧;

(6) 最後是-運算符,計算出35-6的值,即29,由此得出最終結果。

系統基礎

符號數

原碼

正數的原碼等於自身的二進制數,負數的原碼第一位爲1(符號位,表示負數),後面爲自身的二進制數

反碼

正數的反碼等於自身的二進制數,負數的反碼符號位不動,其餘各位按位取反

補碼

正數的補碼等於自身的二進制數,負數的補碼是在反碼的基礎上+1

移碼(增碼)

無論正負數,只要將其補碼的符號位取反即可

符號數的應用

在計算機中,最適合數字加減運算的數字編碼是補碼,最適合表示浮點數階碼的數字編碼是移碼

定點數

所謂定點數,就是小數點的位置固定不變的數。小數點的位置通常有兩種約定形式:定點整數(純整數,小數點在最低有效數值位之後)和定點小數(純小數,小數點在最高有效數值位之前)。

機器字長爲n時各種碼製表示的帶符號數的範圍

碼制

定點整數

定點小數

原碼

[-(2n-1-1),2n-1-1]

[-(1-2-(n-1)),1-2-(n-1)]

反碼

[-(2n-1-1),2n-1-1]

[-(1-2-(n-1)),1-2-(n-1)]

補碼

[-2n-1,2n-1-1]

[-1,1-2-(n-1)]

移碼

[-2n-1,2n-1-1]

[-1,1-2-(n-1)]

記憶技巧

當A=2n-1,B=1-2-(n-1)時,則有以下規律

碼制

定點整數

定點小數

原碼

[-(A-1),A-1]

[-B,B]

反碼

[-(A-1),A-1]

[-B,B]

補碼

[-A,A-1]

[-1,B]

移碼

[-A,A-1]

[-1,B]

計算機指令系統

立即尋址      :操作數包含在指令中,獲取操作數是最快的

直接尋址      :操作數的地址在指令中

寄存器尋址    :操作數在寄存器中

寄存器間接尋址:操作數的地址在寄存器中

中央處理器

CPU的組成

運算器、控制器、寄存器和內部總線,其中控制器不僅要保證程序的正確執行,而且要能夠處理異常事件。

存儲系統

存儲器的分類

按位置分類

內存(主存)、外存(輔存)

按材料分類

磁存儲器、半導體存儲器、光存儲器

按工作方式分類

讀寫存儲器、只讀存儲器

按訪問方式分類

按地址訪問的存儲器、按內容訪問的存儲器(相聯存儲器)

按尋址方式分類

隨機存儲器、順序存儲器、直接存儲器

軟件測試

測試階段劃分

單元測試(模塊測試)

一般是在編程階段完成,由程序員對自己編寫的模塊自行測試,檢查模塊是否實現了詳細設計說明書中規定的功能算法,通常使用白盒測試

單元測試計劃應該在詳細設計階段制定。

單元測試期間着重從:模塊接口、局部數據結構、重要的執行通路、出錯處理、邊界條件這幾個方面對模塊進行測試。

集成測試(組裝測試)

主要目標是發現模塊間的接口通信問題。集成測試主要發現概要設計階段產生的錯誤,通常採用黑盒測試集成測試計劃應該在概要設計階段制定集成的方式可分爲非增殖式和增殖式

確認測試

檢查軟件的功能、性能和其他特徵是否與用戶的需求一致。它是以需求規格說明書作爲依據的測試,通常採用黑盒測試。軟件確認測試首先要進行有效性測試以及軟件配置審查,然後進行驗收測試。

確認測試一般有以下三個步驟:

  1. 有效性測試
  2. 軟件配置審查
  3. 驗收測試

α測試與β測試(當一個軟件是作爲產品被許多客戶使用時需要用這種測試)

系統測試

系統測試的任務是把軟件放在實際的硬件和網絡環境中進行測試,主要測試軟件的非功能需求和質量屬性是否得到滿足。系統測試是根據系統方案說明書來設計測試用例,通常採用黑盒測試。常見的系統測試有:恢復測試、安全性測試、強度測試、性能測試、可靠性測試和安裝測試。在已確認的計算機軟硬件環境下,通過與系統需求對比,發現系統與用戶需求不符或矛盾的地方。

迴歸測試

在軟件發生變更後進行的測試,以發現變更時引起的其他錯誤

白盒測試

語句覆蓋

使被測程序中的每條語句至少執行一次

判定覆蓋(分支覆蓋)

使被測程序中的每個判定表達式至少獲得一次“真”值和“假”值

條件覆蓋

使被測程序中的每個邏輯條件的各種可能的值至少滿足一次

判定/條件覆蓋

使得判定中的每個條件的“真”值和“假”值至少出現一次,並使本身判定結果的“真”值和“假”值至少出現一次

條件組合覆蓋

使得每個判定中條件的各種可能值的組合都至少出現一次。滿足條件組合覆蓋的測試用例是一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋的

路徑覆蓋

覆蓋被測試程序中所有可能的路徑

面向對象測試

以下四個層次由低到高的順序排列

(1)測試與對象關聯的單個操作,即算法層。

(2)測試單個對象類,類層。

(3)測試對象集羣,模板層

(4)測試面向對象系統,系統層。

編譯原理

校驗碼

奇偶校驗

通常用於對少量數據的校驗

奇校驗

將信息數據的各位進行模二加法並作爲校驗碼的稱爲奇校驗。

偶校驗

將信息數據的各位進行模二加法並取反作爲校驗碼的稱爲偶校驗。

海明碼

採用多位校驗碼的方式,可以發現、糾正錯誤。數據位和校驗位必須滿足關係式:2校驗位-1≥數據位+校驗位。碼距至少是3

循環冗餘校驗碼

檢錯能力非常強,但是不能糾錯。編碼長度(CRC字長)爲數據位+校驗位

文法

終結符和非終結符

文法格式通常爲:ɑ→β,若字符爲大寫字母,則是非終結符,若字符爲小寫字母,則是終結符

文法的分類

0型文法(短語文法)

設G=(VN,VT,P,S),如果它的每個產生式α→β是這樣一種結構:α∈(VN∪VT)*且至少含有一個非終結符,而β∈(VN∪VT)*,則G是 一個0型文法。一個非常重要的理論結果是:0型文法的能力相當於圖靈機(Turing)。或者說,任何0型文語言都是遞歸可枚舉的,反之,遞歸可枚舉集必定是一個0型語言。0型文法是這幾類文法中,限制最少的一個,所以我們在試題中見到的,至少是0型文法。

1型文法(上下文有關文法)

此文法對應於線性有界自動機。它是在0型文法的基礎上每一個α→β,都有|β|>=|α|。這裏的|β|表示的是β的長度。

注意:雖然要求|β|>=|α|,但有一特例:α→ε也滿足1型文法。

如有A->Ba則|β|=2,|α|=1符合1型文法要求。反之,如aA->a,則不符合1型文法。

2型文法(上下文無關文法)

此文法對應於下推自動機。2型文法是在1型文法的基礎上,再滿足:每一個α→β都有α是非終結符。如A->Ba,符合2型文法要求。大多數程序設計語言的語法規則可以用上下文無關文法描述


如Ab->Bab雖然符合1型文法要求,但不符合2型文法要求,因爲其α=Ab,而Ab不是一個非終結符。

3型文法(正規文法)

此文法對應於有限狀態自動機。它是在2型文法的基礎上滿足:A→α|αB(右線性)或A→α|Bα(左線性)。

如有:A->a,A->aB,B->a,B->cB,則符合3型文法的要求。但如果推導 爲:A->ab,A->aB,B->a,B->cB或推導 爲:A->a,A->Ba,B->a,B->cB則不符合3型方法的要求了。具體的說,例子 A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定義,如果把後面的ab,改成“一個非終結 符+一個終結符”的形式(即爲aB)就對了。例子A->a,A->Ba,B->a,B->cB中如果把B->cB改爲 B->Bc的形式就對了,因爲A→α|αB(右線性)和A→α|Bα(左線性)兩套規則不能同時出現在一個語法中,只能完全滿足其中的一個,才能算 3型文法。

數據流圖(Data Flow Diagram,DFD)

在面向數據流的設計方法中,一般把數據流圖中的數據流劃分爲兩種類型,一種是變換流,一種是事務流。DFD由數據流、加工、數據存儲和外部實體4個要素構成。

編譯過程

詞法分析

從左到右逐個字符地掃描,從中識別出一個個“單詞”符號。“單詞”符號是程序設計語言的基本語法單位,如關鍵字、標識符、常數、運算符和分隔符等。

語法分析

根據語言的語法規則將單詞符號序列分解成各類語法單位,比如表達式、語句和程序等。語法規則就是各類語法單位的構成規則。通過語法分析確定整個輸入串是否構成一個語法上正確的程序。

語義分析

檢查源程序是否包含靜態語義錯誤,並收集類型信息供後面的代碼生成階段使用。只有語法和語義都正確的源程序才能被翻譯成正確的目標代碼。

語義分析的一個主要工作是進行類型分析和檢查。程序語言中的一個數據類型一般包含兩個方面的內容:類型的載體及其上的運算。例如:整除取餘運算只能對整型數據進行運算,若其運算對象中有浮點數就認爲是類型不匹配的錯誤。靜態的語義錯誤是指編譯程序可以發現,動態的語義錯誤是指源程序雖然能夠被編譯和執行,但是結果不對,一般是邏輯上的錯誤。

進程

進程的三態圖

進程的五態圖

PV操作

進入臨界區時執行P操作(申請),退出臨界區時執行V操作(釋放)

操作系統

內存編址

已知主存容量爲16MB,且按①,求該主存地址至少需要多少位

當①的內容爲“字節編址”時

字節編址就是8位的意思,所以16MB=(16*1024)KB=(16*1024*1024)byte=24*210*210=224 byte.所以需要24位

當①的內容爲“4位編址”時

先將編址方式湊成8位,即2*4位,相應的主存容量也擴充2倍爲32MB,所以32MB=(32*1024)KB=(32*1024*1024)byte=25*210*210=225byte.所以需要25位

例題

若內存按字節編址,用存儲容量爲32K×8比特的存儲器芯片構成地址編號 A0000H~DFFFFH的內存空間,則至少需要______片。

 

1、A.4    B.6    C.8    D.10

空間大小爲DFFFF-A0000+1=262144byte=256kb。

組成內存儲器的芯片數量=內存儲器的容量/單個芯片的容量=(256kb*8b)/(32k*8b)=8,所以選C

指令運行參數

設定變量T爲指令運行總時間,t爲所需時間最長部分指令的時間(週期),n爲指令條數

指令相關公式

順序方式運行指令所需時間:T*n

流水方式運行指令所需時間:T+(n-1)t

重疊方式運行指令所需時間:(n+2)*t

吞吐率:n/流水方式運行指令所需時間

效率:效率=吞吐率*t

加速比:加速比=效率*n

例題

若指令流水線把一條指令分爲取指、分析和執行三部分,且三部分的時間分別是2ns,2ns,1ns,則100條指令全部執行完畢所需的時間是多少ns

答:因爲指令運行時間=T+(n-1)t,所以(2+2+1)+(100-1)*2=203。注意,若選擇題中沒有相應的選擇,則將每段指令所需時間均設置爲最長時間,就本題而言,應該是2ns,2ns,2ns。(因爲目前對於指令運行時間的算法沒有統一)

    若每一條指令都可以分解爲取指、分析和執行三步。已知取指時間t取指=5Δt,分析時間t分析=2Δt,執行時間t執行=5Δt。如果按順序方式從頭到尾執行完500條指令需_____Δt。如果按照[執行] k、分析 k+1、[取指] k+2重疊的流水線方式執行指令,從頭到尾執行完500條指令需_____Δt。

4、A.5590    B.5595    C.6000    D.6007

5、A.2492    B.2500    C.2510    D.2515

第一個空符合順序方式,則時間爲T*n=12*500=6000,第二個空符合重疊的流水線方式,則時間爲(n+2)*t=(500+2)*5=2510,所以選C,C

 某指令流水線由5段組成,各段所需要的時間如下圖所示。連續輸入10條指令時的吞吐率爲_____ 。

6、A.10/70Δt    B.10/49Δt    C.10/35Δt    D.10/30Δt

吞吐率= n/ T+(n-1)t=10/((1+3+1+2+1)+9*3)= 10/35Δt,所以選C

內存管理

分配方案的比較

分配辦法

單一連續分配

固定分區分配

可變分區分配

分配類型

靜態分配法

靜態分配法

動態分配法

分配特點

不分區,所有用戶空間給某個進程或作業

分成大小不等的區域,區域分完後固定不變

分成大小不等的區域,根據用戶要求動態分配

 

可變分區分配算法

首次適應法

從主存低地址開始,尋找第一個可用(即大於等於作業需求的內存)的自由區,這種方法可實現快速分配,縮短查找時間。

循環適應法

是首次適應法的一個變種,也就是不再是每次都從頭開始匹配,而是連續向下匹配。

最佳適應法

選擇最接近作業需求的內存自由區進行分配。這種方法可以減少碎片,但同時也可能帶來更多小得無法再用的碎片。

最差適應法

選擇整個主存中最大的內存自由區。

虛存管理

頁式存儲

題目往往是給出下圖求物理地址,首先,我們知道所謂的邏輯地址是頁號+頁內地址,頁內地址=頁面大小位數。具體的做法是:將邏輯地址轉換爲二進制,從右邊開始數頁內地址位數,剩下的左邊二進制即爲頁號。根據圖片找到對應的塊號,則物理地址爲塊號(二進制)+頁內地址。

例題

段式存儲

不同管理方式之間的優缺點

 

優點

缺點

段式存儲

便於多道程序共享內存,便於對存儲器的保護,各段程序修改互不影響

內存利用率低,內存碎片浪費大

頁式存儲

利用率高,產生的內存碎片小,內存間分配及管理簡單

要有相應的硬件支持,增加了系統開銷,請求調頁的算法如選擇不當,有可能產生抖動現象

段頁式存儲

空間浪費小,存儲共享容易、存儲保護容易、能動態連接

由於管理軟件的增加,複雜性和開銷也隨之增加,需要的硬件以及佔用的內容也有所增加,使得執行速度大大下降

頁面置換算法

最優置換算法

後續頁面最先被訪問的頁面保留,淘汰那些很久纔會被使用的頁面

先進先出算法

優先淘汰最先進入的頁面

最近最少使用算法

優先淘汰存在最久的頁面

局部性原理

時間局部性

一個頁面被訪問後,很有可能再次被訪問

空間局部性

一個頁面被訪問後,很有可能訪問其周圍的頁面

作業管理

作業時間

作業週轉時間

T=作業完成時間-作業提交時間

T=作業等待時間+作業運行時間

作業平均週轉時間

T平均=(T1+T2+……Tn)/n

帶權作業週轉時間

單個作業帶權週轉時間

W=作業週轉時間/作業實際運行時間

作業平均帶權週轉時間

W=(W1+W2+……+Wn)/n

作業調度算法

先來先服務

按作業序號依次運行

最短作業優先

優先運行所需運行時間最短的作業

優先數

優先級高優先運行

定時輪轉

規定一個時間片大小,作業按序號依次運行,每次運行時間與時間片大小等同,到期後繼續運行下一個時間片長度的任務,重複步驟。

Cache(高速緩存)

Cache的讀寫過程

寫直達

當要寫Cache時,數據同時寫回主存

寫回

當相應數據從Cache中被淘汰時寫回主存

標識法

取數據時添加一個有效位爲1,當修改主存數據後設置有效位爲0.

地址映像

直接映像

主存與Cache的映像

主存的每一頁與Cache的每一頁相同大小,因爲主存比Cache大得多,所以儘管每一頁相等,主存的總頁數遠大於Cache的總頁數。因此,根據Cache的頁數大小,主存將相同分爲多個組,每個組的頁數與Cache總頁數相等,其中的每一頁正好配對。編號不一致的頁是不能相互映像的。

優缺點

優點:地址變換簡單。

缺點:每塊相互對應,不夠靈活。

主存與Cache的地址組成

主存:區號+塊號+塊內地址

Cache:塊號+塊內地址

示意圖

全相聯映像

主存與Cache的映像

將主存與Cache劃分成若干個大小相等的塊,主存中每一塊都可以調到Cache中的每一塊。

特點

優點:訪問靈活,衝突率低,只有Cache滿時纔會出現在衝突。缺點:地址變換比較複雜,速度相對慢。

主存與Cache的地址組成

主存:塊號+塊內地址

Cache:塊號+塊內地址

示意圖

組相聯映像

主存與Cache的劃分

主存:主存根據Cache大小劃分成若干個區,每個區內劃分成若干個組,每個組再劃分成若干個塊。

Cache:劃分成若干個組,每個組劃分成若干個塊。

主存與Cache的映像

主存的每個分區與Cache採用直接映像,主存的每個組之內採用全相聯映像。

特點

融合了直接映像與全相聯映像兩種映像方式,結合了兩者的優據點。具體實現容易,命中率與全相聯映像接近。

主存與Cache的地址組成

主存:區號+組號+塊號+塊內地址

Cache:組號+塊號+塊內地址

示意圖

塊衝突次數比較

發生塊衝突次數從大到小排序爲:直接映像>組相聯映像>全相聯映像

例題

某 32 位計算機的 cache 容量爲 16KB,cache 塊的大小爲 16B,若主存與 cache 的地址映射採用直接映射方式,則主存地址爲 1234E8F8(十六進制)的單元裝入的 cache 地址爲____。

A. 00 0100 0100 1101 (二進制)

B. 01 0010 0011 0100 (二進制)

C. 10 1000 1111 1000 (二進制)

D. 11 0100 1110 1000 (二進制)

cache的容量爲16KB,塊大小爲16B,因此一共有16KB/16B=1024個頁,所以需要10位來存儲(210=1024)。塊所需要的存儲地址位數爲4位(24=16)。因爲採用的是直接映射方式,所以主存與cache的地址關係爲:

主存:區號+塊號+塊內地址

Cache:塊號+塊內地址

所以,cache地址一共是14位,將主存地址轉換爲二進制後最後14位就是Cache地址了,選C

 “Cache+主存儲器”系統的平均週期

若t1爲Cache的週期時間,t2爲主存儲器週期時間,h爲Cache的訪問命中率,則系統的平均週期爲h*t1+(1-h)*t2

命中率

Cache由兩部分組成:控制部分和Cache存儲器部分。控制部分的功能是判斷CPU要訪問的信息是否在Cache存儲器中,若在即爲命中,若不在則沒有命中。命中時直接對Cache存儲器尋址;未命中時,要按照替換原則決定主存的一塊信息放到Cache存儲器的哪一塊裏。

Cache命中率=(平均存取時間-主存存取時間)/(高速緩存存取時間-主存存取時間)

例題

高速緩存cache與主存間採用全相聯地址映像方式,高速緩存的容量爲4MB,分爲 4塊,每塊1MB,主存容量爲256MB。  若主存讀寫時間爲30ns,高速緩存的讀寫時間爲3ns,平均讀寫時間爲3.27ns,則該高速緩存的命中率爲______

由公式可得命中率爲99%

總線系統的數據傳送速率

計算公式

公式Q=W*F/N,其中Q爲總線數據傳輸率,W爲總線數據寬度(總線位寬/8),F爲總線工作頻率,N爲完成一次數據傳送所需的總線時鐘週期個數。

例題

若總線位寬爲16位,總線工作頻率爲8MHZ,完成一次數據傳送需2個總線時鐘週期,則總線的數據傳輸速率爲多少?

Q的計算公式爲:((16/8)*8M)/2=8MB/s

中斷響應時間

從發出中斷請求到進入中斷處理所用的時間

系統的可靠性

設p1,p2爲2個部件的可靠度

串聯與並聯系統

若爲並聯,則可靠度=1-(1-p1)(1-p2)

若爲串聯,則可靠度=p1p2

N模冗餘系統

http://d.hiphotos.baidu.com/baike/w%3D268/sign=652405f9cb1349547e1eef626e4f92dd/3ac79f3df8dcd100815a4559728b4710b8122f87.jpg

N模冗餘系統是當有一定量的部件做出相同的處理結果時,則輸出該結果,概念太複雜,懶得寫了,直接舉例子吧,如上圖所示,若該3個部件中有2個部件正常運行,則輸出結果,因此要計算2個部件的情況和3個部件的情況,計算公式如下,其中N爲總部件數,i爲當前計算的正常運行的部件數,R爲可靠性。

平均無故障時間(MTBF)

MTBF=1/λ,λ爲失效率

例題

   三個可靠度R均爲0.8的部件串聯構成一個系統,如下圖所示:

   

則該系統的可靠度爲 _____

由串聯公式可得:0.8×0.8×0.8=0.512

同理,當R爲0.5時可計算出可靠性爲0.5,所以選擇BA

若某計算機系統是由500個元器件構成的串聯繫統,且每個元器件的失效率均爲10-7/H,在不考慮其他因素對可靠性的影響時,該計算機系統的平均故障間隔時間爲_____小時。

根據公式可得MTBF=1/5*10-5=2*104

緩衝區

單緩衝區

花費的時間=(讀緩衝時間+傳送用戶時間)*磁盤塊+每個磁盤處理時間

雙緩衝區

花費的時間=讀緩衝時間*磁盤塊+傳送用戶時間+每個磁盤處理時間

軟件工程

軟件生命週期

問題定義

要求系統分析員與用戶進行交流,弄清“用戶需要計算機解決什麼問題”然後提出關於“系統目標與範圍的說明”,提交用戶審查和確認

可行性研究

一方面在於把待開發的系統的目標以明確的語言描述出來

另一方面從經濟、技術、法律等多方面進行可行性分析。

需求分析

確定軟件系統的功能需求和非功能需求;

分析軟件系統的數據要求:

導出系統的邏輯模型;

修正項目開發計劃;

如有必要,可以開發一個原型系統。

開發階段

1,設計

2,實現:根據選定的程序設計語言完成源程序的編碼。

3,測試

維護  

1,改正性維護:在軟件交付使用後,由於開發測試時的不徹底、不完全、必然會有一部分隱藏的錯誤被帶到運行階段,這些隱藏的錯誤在某些特定的使用環境下就會暴露。

2,適應性維護:是爲適應環境的變化而修改軟件的活動。

3,完善性維護:是根據用戶在使用過程中提出的一些建設性意見而進行的維護活動。

4,預防性維護:是爲了進一步改善軟件系統的可維護性和可靠性,併爲以後的改進奠定基礎。

統一過程(UP)

簡介

每個階段達到某個里程碑時結束,以下列出了各個階段的里程碑

初啓階段

生命週期目標

精化階段

生命週期架構

構建階段

初始運作功能

移交階段

產品發佈

CMM(Capability Maturity Model,軟件能力成熟度模型)

初始級

軟件工程管理制度缺乏,過程缺乏定義、混亂無序

可重複級

建立了基本的項目管理過程和實踐來追蹤項目費用、進度和功能特性

已定義級

所有項目都採用根據實際情況修改後得到的標準軟件過程來開發和維護軟件

已管理級

收集對軟件過程和產品質量的詳細度量,對軟件過程和產品都有定量的理解與控制

優化級

過程的量化反饋和先進的新思想,新技術促使過程不斷改進

CMMI(Capability Maturity Model Integration,軟件能力成熟度集成模型)

未完成級

表明過程域的一個或多個特定目標沒有被滿足

已執行級

過程通過轉化可識別的輸入工作產品,產生可識別的輸出工作產品,關注於過程域的特定目標的完成

已管理級

過程作爲已管理的過程制度化,針對單個過程實例的能力

已定義級

過程作爲已定義的過程制度化,關注過程的組織級標準化和部署

量化管理級

過程作爲定量管理的過程制度化

優化級

過程作爲優化的過程制度化,表明過程得到很好地執行且持續得到改進

COCOMO

基本COCOMO模型

靜態單變量模型,用於對整個軟件系統進行估算。

中級COCOMO模型

靜態多變量模型,將軟件系統模型分爲系統和部件兩個層次

詳細COMO模型

將軟件系統模型分爲系統、子系統和模塊三個層次,除包括中級模型所考慮的因素外,還考慮了在需求分析、軟件設計等每一步的成本驅動屬性的影響。

COCOMOII

應用組裝模型

在軟件工程的前期階段使用,這時用戶界面的原型開發、對軟件和系統交互的考慮、性能的評估以及技術成熟度的評價是最重要的

早期設計階段模型

在需求已經穩定並且基本的軟件體系結構已經建立時使用

體系結構階段模型

在軟件的構造過程中使用

Putnam估算模型

動態多變量,它是假設在軟件開發的整個生存週期中工作量有特定的分佈。

ISO/IEC 9126(軟件質量模型)

簡介

由3個層次組成:第一層是質量特性,第二層是質量子特性

特性含義

其中各六個質量特性與二十七個質量子特性的關係如下表:

質量特性

功能性

可靠性

易使用性

效率

可維護性

可移植性

質量子特性

適合性

成熟性

易理解性

時間特性

易分析性

適應性

準確性

容錯性

易學性

資源特性

易改變性

易安裝性

互用性

易恢復性

易操作性

 

穩定性

一致性

依從性

 

 

 

易測試性

易替換性

 

UML(Unified Modeling Language,統一建模語言)

構件圖

用來以圖形化的方式描述系統的物理結構,它可以用來顯示程序代碼如何分解成模塊

部署圖

描述系統中硬件軟件物理架構,它描述構成系統架構的軟件構件、處理器和設備

用例圖

以圖形化的方式描述系統與外部系統及用戶的交互。對系統的使用方式進行分類。

協作圖

強調收發消息的對象之間的結構組織

序列圖

描述了在一個用例或操作的執行過程中以時間順序組織的對象之間的交互活動,關注系統的動態視圖

對象圖

展現了一組對象以及它們之間的關係,描述了在類圖中所建立的事物的實例的靜態快照

類圖

展現了一組對象、接口、協作和它們之間的關係,給出系統的靜態視圖,對系統的靜態設計視圖建模(對系統的詞彙建模、對簡單協作建模、對邏輯數據庫模式建模)

狀態圖

用於類、接口、協作的行爲建模,強調對象行爲的事件順序,關注系統的動態視圖

活動圖

是一種特殊的狀態圖,展現了在系統內從一個活動到另一個活動的流程。活動圖專注於系統的動態視圖,它對於系統的功能建模特別重要,並強調對象間的控制流程

順序圖

強調的是對象間發送消息的順序

類之間的相互聯繫

在類與類之間的5種關係中,從弱到強依次爲:依賴,關聯,聚合,組合和繼承

項目管理

Gantt

無法描述任務之間的依賴關係,也無法確定影響進度的關鍵任務

PERT和CPM

pert無法描述任務之間的並行關係

耦合

無直接耦合

兩個模塊之間沒有直接的關係,它們分別從屬於不同模塊的控制與調用,它們之間不傳遞任何信息。因此,模塊間耦合性最弱,模塊獨立性最高

數據耦合

兩個模塊之間有調用關係,傳遞的是簡單的數據值

標記耦合

兩個模塊之間傳遞的是數據結構,如高級語言的數組名,記錄名,文件名等這些名字即爲標記,其實傳遞的是這個數據結構的地址.

控制耦合

模塊間傳遞的信息不但有數據,還包括控制信息。例如:一個模塊通過傳遞開關、標誌對某一模塊的多種功能進行選擇,則這兩個模塊之間的耦合方式是控制耦合。

內容耦合

當一個模塊直接使用另一個模塊的內部數據,或通過非正常入口而轉入另一個模塊內部

外部耦合

模塊間通過軟件之外的環境聯結(如I/O將模塊耦合到特定的設備、格式、通信協議上)

公共耦合

通過一個公共數據環境相互作用的那些模塊間的耦合

內聚

功能內聚

完成一個單一功能,各個部分協同工作,缺一不可

順序內聚

處理元素相關,而且必須順序執行

通信內聚

所有處理元素集中在一個數據結構的區域

過程內聚

處理元素相關,而且必須按特定的次序執行

瞬時內聚

所包含的任務必須在同一時間間隔執行,如初始化模塊

邏輯內聚

完成邏輯上相關的一組任務

偶然內聚

完成一組沒有關係或鬆散關係的任務

軟件開發模型

瀑布模型

給出了軟件生存週期中制定開發計劃、需求分析、軟件設計、編碼、測試和維護等階段以及各階段的固定順序,上一階段完成後才能進入到下一階段,整個過程如同瀑布流水。該模型爲軟件的開發和維護提供了一種有效的管理模式,但在大量的實踐中暴露出其缺點,其中最爲突出的是缺乏靈活性,特別是無法解決軟件需求不明確或不準確的問題。這些問題有可能造成開發出的軟件並不是用戶真正需要的,並且這一點只有在開發過程完成後才能發現。所以瀑布模型適用於需求明確,且很少發生較大變化的項目

演化模型

允許在獲取了一組基本需求後,通過快速分析構造出軟件的一個初始可運行版本(稱作原型),然後根據用戶在適用原型的過程中提出的意見對原型進行改進,從而獲得原型的新版本。這一過程重複進行,直到得到令用戶滿意的軟件。該模型主要用於對軟件需求缺乏準確認識的情況。

螺旋模型

將瀑布模型和演化模型進行結合,在保持二者優點的同時,增加了風險分析,從而彌補了二者的不足。該模型沿着螺線旋轉,並通過笛卡爾座標的四個象限分別表示四個方面的活動:制定計劃、風險分析、實施工程和客戶評估。螺旋模型爲項目管理人員及時調整管理決策提供了方便,進而可降低開發風險。

噴泉模型

面向對象的軟件開發方法爲基礎,以用戶需求爲動力,以對象來驅動的模型。該模型主要用於描述面向對象的開發過程,體現了面向對象開發過程的迭代和無間隙特性。迭代指模型中的活動通常需要重複多次,相關功能在每次迭代中被加入新的系統。無間隙是指在各開發活動(如分析、設計、編碼)之間沒有明顯邊界。

軟件開發方法

結構化方法

面向數據流、自頂向下、適合數據處理領域的問題、不適合大規模、複雜的項目、難以適應需求的變化

Jackson方法

面向數據結構、適合小規模的項目、當輸入數據結構與輸出數據結構之間沒有對應關係時,難以應用此方法

原型化方法

適合需求不清、業務理論不確定、需求經常變化的情況。

冗餘附加技術

屏蔽硬件錯誤的容錯技術

冗餘附加技術包括:關鍵程序和數據的冗餘及調用;檢測、表決、切換、重構和復算的實現。

屏蔽軟件錯誤的容錯技術

冗餘附加技術包括:冗餘備份程序的存儲及調用;實現錯誤檢測和錯誤恢復的程序;實現容錯軟件所需的固化程序。

風險管理

軟件風險

項目風險

項目風險威脅到項目計劃,若發生項目風險,就有可能拖延項目的進度和增加項目的成本。項目風險是指預算、進度、人員、資源、利益相關者、需求等方面的潛在問題以及他們對軟件項目的影響。項目複雜度、規模及結構不確定性也屬於項目風險因素

技術風險

技術風險威脅到要開發軟件的質量及交付時間。若發生技術風險,開發工作就可能變得很困難或根本不可能。技術風險是指設計、實現、接口、驗證和維護等方面的潛在問題。此外,規格說明的歧義性、技術的不確定性、技術陳舊以及前沿技術也是技術風險因素。

商業風險

市場風險

開發了一個沒有人真正需要的優良產品或系統

策略風險

開發的產品不再符合公司的整體商業策略

銷售風險

開發了一個銷售部們不知道如何去銷售的產品

管理風險

由於重點的轉移或人員的變動而失去了高級管理層的支持

預算風險

沒有得到預算或人員的保證

風險識別

風險識別的方法

建立風險條目檢查表

風險識別的類型

產品規模

與要開發或要修改的軟件的總體規模相關的風險

商業影響

與管理者或市場所施加的約束相關的風險

客戶特性

與客戶的素質以及開發者的客戶定期溝通的能力相關的風險

過程定義

與軟件過程定義的程度以及該過程被開發組織遵守的程度相關的風險

開發環境

與用來開發產品的工具的可得性及質量相關的風險

開發技術

與待開發軟件的複雜性及系統所包含技術的“新奇性”相關的風險

人員才幹及經驗

與軟件工程師的總體技術水平及項目經驗相關的風險

網絡安全

主動攻擊和被動攻擊

主動攻擊

包括篡改數據流或僞造數據流,這種攻擊試圖改變系統資源或影響系統運行

被動攻擊

對信息的保密性進行攻擊,即通過竊聽網絡上傳輸的信息並加以分析從而獲得有價值的情報,但它並不修改信息的內容。它的目標是獲得正在傳送的信息,其特點是偷聽或監視信息的傳遞。被動攻擊只對信息進行監聽,不對其進行修改。被動攻擊包括信息內容泄露和業務流分析2大類

數據安全與保密

對稱加密技術

加密系統的加密密鑰和解密密鑰相同,或者雖然不同,但從其中的任意一個可以很容易地推導出另一個。

示例

DES(數據加密標準算法)

DES主要採用替換和移位的方法加密。它用56(64位密鑰只有56位有效密鑰)密鑰對64二進制數據塊進行加密,每次加密可對64位的輸入數據進行16輪編碼,經一系列替換和移位後,輸入的64位原始數據轉換成完全不同的64位輸出數據。其優點是加密速度快,密鑰產生容易。

3DES(TDES)

在DES的基礎上採用三重DES,即用兩個56位的密鑰K1、K2,發送方用K1加密,k2解密,再使用k1加密。接受方則使用k1解密,k2加密,再使用k1解密,其效果相當於將密鑰長度加倍。

IDEA

其明文和密文都是64位,密鑰長度爲128位。它比DES的加密性好,而且對計算機功能要求也沒有那麼高。

RC-5

1994年開發出來的,知道是對稱算法即可。

優點

  1. 加/解密速度快,適合對大量數據加密
  2. 適宜一對一的信息加密傳輸

缺點

  1. 密鑰難於傳輸
  2. 密鑰的數目難於管理
  3. 無法提供信息完整性的鑑別
  4. 對稱密鑰的管理和分發工作是一件具有潛在危險和繁瑣的過程

非對稱加密技術

公鑰和私鑰是不一樣的,公鑰對外開放,私鑰僅限自己知道

示例

RSA

知道是非對稱加密技術即可

ECC

知道是非對稱加密技術即可

優點

  1. 安全性好

缺點

1、加/解密速度慢,只適合對少量數據進行加密

消息摘要

消息摘要算法實際上就是一個單向散列函數。數據塊經過單向散列函數得到一個固定長度的散列值,攻擊者不可能通過散列值而編造數據塊,使得編造的數據塊的散列值和原數據塊的散列值相同。

例子

MD5

散列值爲128位

SHA

散列值爲160位

安全性比較

由於SHA通常採用的密鑰長度較長,因此安全性高於MD5。

數字簽名

實現原理

以下題爲例,A想要傳送一段文本給B,則A先利用信息摘要技術產生一段字符串,再利用自身的私鑰對字符串進行加密生成密碼串。將密碼串與明文一同發送給B。B接受後,利用A的公鑰對密碼串進行解密,產生字符串,再對明文進行信息摘要產生字符串,將2個字符串相比較,如果一致,則證明該明文的確來自A且未被修改。

優點

  1. 可以證明消息來源是否爲本人
  2. 保證明文沒有被人篡改過

數字時間戳

屬於數字簽名技術的變種應用。數字時間戳服務(Digtal Time Stamp Service,DTS)是網上電子商務安全服務項目之一,能提供電子文件的日期和時間信息的安全保護。

時間戳是一個經加密後形成的憑證文檔,它包括3個部分:

  1. 需加時間戳的文件的摘要
  2. DTS收到文件的日期和時間
  3. DTS的數字簽名

病毒

文件型

感染可執行文件,包括EXE和COM文件

引導型

影響軟盤或硬盤的引導扇區

目錄型

修改硬盤上存儲的所有文件的地址

宏病毒

前綴爲Macro,感染word或者excel文件

數據通信與網絡基礎

OSI七層模型及相關考點

記憶技巧:All people seem to need data processing.

分層模型

OSI模型

進程/應用層

應用層

表示層

會話層

主機-主機層

傳輸層

網絡互聯層

網絡層

網絡接口層

數據鏈路層

物理層

 

已知IP地址與掩碼求網絡號與主機號

IP地址A.B.C.D一共4個字段,各個字段各佔1字節,若轉化爲二進制,則一共32位,每個字段佔8位

A類地址最高位是0,網絡地址佔1字節,主機地址佔3字節

B類地址最高位是10,網絡地址佔2字節,主機地址佔2字節

C類地址最高位是110,網絡地址佔3字節,主機地址佔1字節

D類地址最高位是1110,用於組播,無網絡地址與主機地址

E類地址最高位是1111,實驗保留,無網絡地址與主機地址

子網掩碼的1代表網絡號,0代表主機號

網絡號求法:將IP地址與子網掩碼轉化爲二進制後取與運算後,根據子網掩碼1的位數取字節

以下數據爲例:

IP地址:202.197.119.110

掩碼  :255.255.255.0

IP 地址二進制 :1100 1010.1100 0101.0111 0111.0110 1110

子網掩碼二進制:1111 1111.1111 1111.1111 1111.0000 0000

求得網絡號    :1100 1010.1100 0101.0111 0111(因爲子網掩碼有24個1,所以取3個字節)

主機號求法:先將子網掩碼按位取反再與IP地址進行取與運算,根據子網掩碼0的位數取字節

IP 地址二進制 :1100 1010.1100 0101.0111 0111.0110 1110

子網掩碼取反  :0000 0000.0000 0000.0000 0000.1111 1111

主機號        :                              0110 1110(因爲子網掩碼有8個0,所以取1個字節)

判斷2個IP地址是否在一個網段

分別求出2個IP地址的網絡號,如果相同則說明是同一個網段的IP地址,否則不在同一個網段

可連接的主機數

2n-2,n爲主機號位數

例題

一個局域網中某臺主機的IP地址爲176.68.160.12,使用22位作爲網絡地址,那麼該局域網的子網掩碼爲______,最多可以連接的主機數爲_____

子網掩碼的1是網絡位,0是主機位,22位網絡地址代表着子網掩碼有22個1,所以子網掩碼爲11111111.11111111.11111100.00000000,轉化爲十進制則是255.255.252.0。既然網絡位爲22位,則主機位爲32-22=10位,可以連接的主機數爲210-2=1022

端口

默認端口

FTP 

從服務器端向客戶端發起連接,稱之爲主動模式,默認數據端口是20

從客戶端向服務器端發起連接,稱之爲被動模式,默認數據端口是1025-65535

默認控制端口是21

HTTP

默認端口號是80

SMTP

默認端口是25

POP3

默認端口是110

NNTP news

新聞組傳輸協議默認端口是119

Telnet

默認內部端口與外部端口均爲23

端口範圍

公共服務保留端口

0~1023(有時是不算0號端口的)

註冊端口

1024~49151

動態或私有端口

49152~65535

多媒體

計算公式

數據傳輸率

採樣頻率(Hz)×量化位數(bit)×聲道數,單位爲b/s

聲音信號數據量

數據傳輸率×持續時間/8

音頻容量的計算公式

存儲量=採樣時間(s) *採樣頻率(Hz) *量化位數(位) *聲道數/8/1024(kb)

圖片容量的計算公式

存儲量=水平像素*垂直像素*顏色位數/8/1024(kb)

若提示爲X位或X位色,則顏色位數就是X,若提示爲X色,那麼顏色位數爲log2X

視頻容量的計算公式

存儲量=每幀圖像容量*圖像幀數

=水平像素*垂直像素*顏色位數*幀頻*時間(秒)/8/1024(kb)

PAL  制:25幀/秒

NTSC制:30幀/秒

例題

CD上聲音的採樣頻率爲44.1kHz,樣本精度爲16b/s,雙聲道立體聲,那麼其未經壓縮的數據傳輸率爲_____

 

14、A.88.2kb/s    B.705.6kb/s    C.1411.2kb/s    D.1536.0kb/s

數據傳輸率=採樣頻率(Hz)×量化位數(bit)×聲道數=44100*16*2=1411200b/s,選C

冗餘

空間冗餘(幾何冗餘)

多個像素點都是重複的,例如,一幅蔚藍的天空中漂浮着白雲的圖像,其蔚藍的天空及白雲本身都具有較強的相關性,這種相關性的圖像部分,在數據中就表現爲冗餘。

時間冗餘

對於電視動畫類的圖像,在其序列的前後相鄰的2幅圖像中,其圖像呈現較強的相關性,這就反映爲時間冗餘。如某一幀圖像經過T時間後,在某下一幀圖像中帶有較強的相關性(即畫面像素相似)。

http://e.hiphotos.baidu.com/zhidao/wh%3D600%2C800/sign=ac3760e94d086e066afd374d323857cc/b7fd5266d0160924bfb65ec3d50735fae7cd3452.jpg

知覺冗餘

知覺冗餘指那些處於人們聽覺和視覺分辨力以下的視頻音頻信號,若在編碼時捨去這種在感知界限以下的信號,雖然會使恢復原信號產生一定的失真,但並不能爲人們所感知,爲此,此種超出人們感知能力部分的編碼就稱爲知覺冗餘。例如,一般的視頻圖像採用28的灰度等級,而人們的視覺分辨力僅達26的等級,此差額即爲知覺冗餘。

信息熵冗餘

信息熵是指一組數據所攜帶的信息量,信息的碼符號的信息量大於該信息本身的信息量即是信息熵冗餘。

結構冗餘

有些圖像從大的區域上看存在着非常強的紋理結構,例如,布紋圖像和草蓆圖像在結構上存在冗餘。

知識冗餘

有許多圖像的理解與某些基礎知識有相當大的相關性。例如,人臉的圖像有固定的結構,嘴的上方有鼻子,鼻子的上方有眼睛,鼻子位於正面圖像的中上方等。這類規律性的結構可由先驗知識和背景知識得到,稱此類冗餘爲知識冗餘。

MPEG標準

MPEG-1

數字電視標準,MP3。

MPEG-2

數字電視標準。

MPEG-4

多媒體應用標準。

MPEG-7

多媒體內容描述接口標準。

MPEG-21

多媒體框架結構標準。

媒體

感覺媒體

感覺媒體指的是能直接作用於人們的感覺器官,從而能使人產生直接感覺的媒體。如文字、數據、聲音、圖形、圖像等。

在多媒體計算機技術中,我們所說的媒體一般指的是感覺媒體。

表示媒體

表示媒體指的是爲了傳輸感覺媒體而人爲研究出來的媒體,藉助於此種媒體,能有效地存儲感覺媒體或將感覺媒體從一個地方傳送到另一個地方。如語言編碼、電報碼、條形碼等。

表現媒體

表現媒體指的是用於通信中使電信號和感覺媒體之間產生轉換用的媒體。如輸入、輸出設備,包括鍵盤、鼠標器、顯示器、打印機等。

存儲媒體

存儲媒體指的是用於存放表示媒體的媒體。如紙張、磁帶、磁盤、光盤等。

 

傳輸媒體

傳輸媒體指的用於傳輸某種媒體的物理媒體。如雙絞線、電纜、光纖等。

算法設計

迭代法

用於求方程的近似根。

1、若方程無解,則算法求出的近似根序列就不會收斂,迭代過程會變成死循環,因此在使用迭代算法前應先考查方程是否有解,並在程序中對迭代的次數給予限制。

2、方程雖有解,但迭代公式選擇不當,或迭代的初始近似根選擇不合理,也會導致迭代失敗。

窮舉搜索法

對可能是解的衆多候選解按某種順序進行逐一枚舉和檢查,並從中找出符合要求的候選解作爲問題的解

遞推法

利用問題本身所具有的一種遞推關係求問題解的一種方法

遞歸法

執行過程分遞推和迴歸兩個階段:在遞推階段,把較複雜的問題的求解分解成比原問題簡單一些的問題的求解。在迴歸階段,從獲得的最簡單情況的解,逐級返回,依次獲得稍複雜問題的解。(遞歸法就是把問題轉化爲規模縮小了的同類問題的子問題)

分治法

把大問題分解成一些較小的問題,然後由小問題的解方便地構造出大問題的解,每個小問題都是相互獨立的。

示例

二分查找法、漢諾塔問題、斐波那契、歸併排序

動態規劃法

基本思想也是將大問題分解爲多個小問題,但是與分治法不同的是,動態規劃法的子問題往往不是獨立的。因此,動態規劃法可以避免大量重複的計算。以自底向上的方式計算出最優值

示例

最大子段問題

貪心法(貪婪法)

不追求最優解,只希望得到較爲滿意解的方法。可以快速得到滿意的解,不考慮整體情況,所以貪心法不要回溯。

示例

哈夫曼編碼

回溯法(試探法、通用解題法)

該方法首先暫時放棄關於問題規模大小的限制,並將問題的候選解按某種順序逐一枚舉和檢驗。當發現當前候選解不可能是解時,就選擇下一個候選解;倘若當前候選鍵除了不滿足問題規模要求外,滿足所有其他要求,繼續擴大當前候選解的規模,並繼續試探。如果當前候選解滿足包括問題規模在內的所有要求,該候選鍵就是問題的一個解。在回溯法中,放棄當前候選解,尋找下一個候選解的過程被稱爲回溯;擴大當前候選解的規模,以繼續試探的過程稱爲向前試探,回溯法以深度優先的方式搜索解空間樹。

分支限界法

類似於回溯法,也是在問題的解空間樹上搜索問題解的方法。但在一般情況下,二者的求解目標不同。回溯法是找出解空間樹中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函數值達到極大或極小的解,即在某種意義下的最優解。分支限界法以廣度優先或以最小耗費優先的方式搜索解空間樹。

示例

單源最短路徑問題

算法複雜度

一般地,當遞歸方程爲T(n) = aT(n/c) + O(n), T(n)的解爲:

O(n)                            (a<c && c>1)

O(nlog2n)                   (a=c && c>1)

O(nlogca)                   (a>c && c>1)

第一問套用第三個公式即可解決,選D。

第二問,算法B比A快,意味着B的時間複雜度比A小。那麼選項中均符合第三個公式的情況,那麼B的時間複雜度爲O(nlog4X),可求得當X=64時,與A的算法時間複雜度相等,根據題意選C

概率算法

數值概率算法

適用於數值問題的求解,這類算法得到的往往是近似解,且近似解的精度隨時間的增加不斷提高。在多數情況下,要計算出問題的精確解是不可能的或是沒有必要的,因此數值概率算法可得到相當令人滿意的解。

蒙特卡羅算法

適用於求問題的精確解,該算法能求得一個解,但該解未必是正確的,正確的概率依賴算法所用的時間,時間約久,正確率越高。因此,該算法的缺點就是無法有效地判斷所得到的解是否正確。

拉斯維加斯算法

如果該算法找到一個解,那一定是正確的解,得到正確解的概率依賴算法所用的時間。

舍伍德算法

一定能找到一個正確的解,該算法設法消除最壞情形與特定實例之間的關聯性

類之間的關係

名稱 概念 實(虛)線 三角形(菱形) 實(空)心

名稱

概念

實(虛)線

三角形(菱形)

實(空)心

依賴

有2個元素X,Y,若修改X的定義可能會引起對另一個元素Y的定義的修改,則稱Y依賴於X

虛線

三角形

實心

泛化

父類是子類的泛化

實線

三角形

空心

關聯(聚合)

表示兩個對象之間是整體和部分的弱關係,部分的生命週期可以超越整體。如電腦和鼠標。

實線

菱形

空心

關聯(組合)

表示兩個對象之間是整體和部分的強關係,部分的生命週期不能超越整體,或者說不能脫離整體而存在。

實線

菱形

實心

實現

接口和實現藉口的類

虛線

三角形

空心

 

面向對象設計模式

創建型模式

簡單工廠模式 (Simple Factory Pattern)

工廠方法模式 (Factory Method Pattern)

抽象工廠模式 (Abstract Factory Pattern)

單例模式 (Singleton Pattern)

建造者模式 (Builder Pattern)

原型模式 (Prototype Pattern)

結構型模式

橋接模式 (Bridge Pattern)

組合模式 (Composite Pattern)

裝飾者模式 (Decorator Pattern)

外觀模式 (Facade Pattern)

代理模式 (Proxy Pattern)

享元模式 (Flyweight Pattern)

適配器模式 (Adapter Pattern)

行爲型模式

模板方法模式 (Template Method Pattern)

命令模式 (Command Pattern)

迭代器模式 (Iterator Pattern)

觀察者模式 (Observer Pattern)

解釋器模式 (Interpreter Pattern)

中介者模式 (Mediator Pattern)

職責鏈模式 (Chain of Responsibility Pattern)

備忘錄模式 (Memento Pattern)

策略模式 (Strategy Pattern)

訪問者模式 (Visitor Pattern)

狀態模式 (State Pattern)

泛化(概化)

表示把幾類對象類的公共屬性和行爲抽象成超類,然後其屬性和方法被那些子類繼承

聚合

表示一個較大的“整體”類包含一個或多個較小的“部分”類

合成

表示關係中“整體”負責其“部分”的創建和銷燬,如果“整體”不存在了,“部分”也將不存在。

單例

保證一個類僅能夠生成一個對象

組合

表示“部分-整體”的層次結構,並且對部分和整體的使用具有一致性

裝飾

動態地給一個對象增加一些額外的職責,無須改變類的設計和實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章