軟件設計師筆記

上午題

1、計算機組成原理與結構體系

數據的表示

進制轉換

R進制轉十進制 : 按權展開法程序員

例如二進制 10100 = $1\times2^4+1\times2^2$ = 20算法

例如七進制 604 = $6\times7^2 + 4\times7^0$ = 298數據庫

十進制轉R進制 : 短除法編程

例如20轉二進制設計模式

2|20 餘 0數組

2|10 餘 0安全

2|5 餘1服務器

2|2 餘0網絡

2|1 餘1數據結構

​ 0

餘數從下往上就是10100

二進制轉八進制與十六進制

轉八進制,從右到左三位一段

例如 10001110 = 216

轉十六進制,從右到左四位一段

例如10001110 = 8E

原碼反碼補碼移碼

正數 1 負數 1 正1加負1 (1-1)
原碼 0000 0001 1000 0001 1000 0010
反碼 0000 0001 1111 1110 1111 1111
補碼 0000 0001 1111 1111 0000 0000
移碼 1000 0001 0111 1111 1000 0000

原碼:

1B(字節byte) = 8bit

若是用一個字節表示1,會先轉成二進制,再在右邊補7個0,其中最右邊的0是符號位,0表明正數,1表明負數

即1=0000 0001

-1=1000 0001

當1+(-1)時,原碼1000 0010,值是-2,值是不對的,因此有其餘編碼方式

反碼:

正數和原碼同樣.

負數符號位不變,其餘按位取反,即0變1,1變0,即1111 1110

1+(-1) = 1111 1111 ,變成原碼 = 1000 0000 值爲 -0

補碼:

正數和原碼同樣.

負數在反碼的基礎上+1

1+(-1) =1 0000 0000 爲0 (其實補碼應該用模的概念)

移碼:

特定場合運用,浮點運算

在補碼基礎上,符號位取反

數值表示範圍

整數
原碼 $-(2^{n-1}-1)$ ~ $2^{n-1}-1$
反碼 $-(2^{n-1}-1)$ ~ $2^{n-1}-1$
補碼 $-2^{n-1}$ ~ $2^{n-1}-1$

浮點數運算

浮點數表示(科學計數法)

$N= M\times R^e$

M成爲尾數(必須是非0的個位數),e是指數,R是基數

進行浮點運算

對階(低階兌成高階) -> 尾數計算 -> 結果格式化 (確保尾數是個位數)

例如1000+119

$1 \times 10^3 +1.19 \times 10^2 = 1 \times 10^3 +0.119 \times 10^3 = 1.119 \times 10^3​$

計算機結構

主機只包括兩個部分,一個CPU,一個主存儲器(內存)

CPU運算器

  1. 算術邏輯單元ALU
  2. 累加寄存器AC
  3. 數據緩衝寄存器DR
  4. 狀態條件寄存器PSW

CPU控制器

  1. 程序計數器PC
  2. 指令寄存器IR
  3. 指令譯碼器
  4. 時序部件

Flynn分類法

體系結構類型 結構 關鍵特性 表明
單指令流單數據流SISD 控制部分 : 一個
處 理 器 : 一個
主存模塊 : 一個
單處理器系統
單指令流多數據流SIMD 控制部分 : 一個
處 理 器 : 多個
主存模塊 : 多個
各處理器以異步的形式
執行同一條指令
並行處理機
陣列處理機
超級向量處理機
多指令流多數據流MISD 控制部分 : 多個
處 理 器 : 一個
主存模塊 : 多個
不存在 理論上的,不存在
多指令流多數據流MIMD 控制部分 : 多個
處 理 器 : 多個
主存模塊 : 多個
可以實現做業、任務、
指令等各級全面並行
多處理機系統
多計算機

CISC與RISC

指令系統類型 指令 尋址方式 實現方式 其餘
CISC (複雜) 數量多,使用頻率差異大,可變長格式 支持多種 微程序控制技術(微碼) 研製週期長
RISC (精簡) 數量少,使用頻率接近,定長格式,
大部分爲單週期指令,操做寄存器,
只有Load/Store操做內存
支持方式少 增長了通用寄存器;
硬佈線邏輯控制爲主;
適合採用流水線
優化編譯,
有效支持高級語言

CISC的背景是計算機還沒普及時,機構買計算機須要從硬件到指令都定製

RISC的背景是計算機普及,因此刪掉複雜指令,把基礎指令提取出來,例如乘法能夠由加法指令實現,多在寄存器操做

流水線技術

流水線概念

流水線是指在程序執行時,多條指令重疊進行操做的一種準並行處理實現技術

執行指令順序 --> 取指 --> 分析 --> 執行

未使用流水線執行指令狀況:

時間1 時間2 時間3 時間4 時間5 時間6
取指 1 2
分析 1 2
執行 1 2

使用流水線執行指令狀況:

時間1 時間2 時間3 時間4
取指 1 2
分析 1 2
執行 1 2

流水線時間計算

流水線週期爲執行時間最長的一段

例如,取指耗時2ns,分析2ns,執行1ns,那麼流水線的週期就是2ns

流水線計算公式爲

1條指令執行時間 + (指令條數-1)*流水線週期

理論公式 $(t1+t2+...+tk)+(n-1)*\Delta t$

實踐公式 $(k+n-1)*\Delta t$

其中k爲指令執行部分(如取指,分析,執行則k=3)

$\Delta t$ 是流水線週期

考試時,有理論的選項值先選理論,沒理論選實踐選項值

流水線吞吐率計算

流水線的吞吐率是隻在單位時間內流水線所完成的任務數量或輸出的結果數量

吞吐率 $TP = \frac{指令條數}{流水線執行時間} $

最大吞吐率 $TP_{max} = \frac{1}{流水線週期}$

流水線的加速比計算

完成同一批任務,不使用流水線所用的時間與使用流水線所用時間之比稱爲流水線的加速比

$S= \frac{不使用流水線執行時間}{使用流水線執行時間}$

流水線的效率

流水線的效率是指流水線的設備利用率

在時空圖上,流水線的效率定義爲n個任務佔用的時空區域k個流水段總得時空區之比

$E = \frac{n個任務佔用的時空區}{k個流水段的總的時空區} = \frac{T_0}{KT_k} $

存儲系統

層次化存儲結構

CPU 寄存器
$\uparrow$ Cache 按需內容存取 $\downarrow$
$\uparrow$ 內存(主存) $\downarrow$
外存(輔存) 硬盤,光盤,U盤等

Cache

Cache的功能 : 提升CPU數據輸入輸出的速率

在計算機的儲存系統中,Cache是訪問速度最快的層次(若是算寄存器的話則寄存器最快)

使用Cache改善系統性能的依據是程序的局部性原理

使用"Cache+主存儲器"的平均週期

$t3 = ht_1+(1-h)t_2$

$t_1$ 表示Cache的週期時間 好比 1ns

$t_2$表示主存儲器週期時間 好比1000ns

h 表示對Cache的命中率(CPU能在Cache中訪問到數據時讀Cache,不然讀主存), 好比95%

那麼 $t_3= 0.951+0.051000 = 50.95ns$

局部性原理

  • 時間局部性 (例如,循環時,循環體的存儲位置不斷被重複訪問)
  • 空間局部性 (例如,數組,訪問某個元素存儲位置時,頗有可能訪問下一個存儲位置)
  • 工做集理論 : 工做集是進程運行時被頻繁訪問的頁面集合

主存

分類:

  • 隨機存取存儲器 RAM
  • 只讀存儲器 ROM

編址:(要會算)

例如:內存地址從AC000H到C7FFFH,總共有___K個地址單元?

大-小+1,如0到9是10個數字

C7FFFH - AC000H +1 = C7FFFH + 1 - AC000H = C8000H -AC000H = 1C000H

轉換成K 就是 $\frac{1C000H}{1024} = \frac{116^4+1216^3}{2^{10}} = 112$

若是該內存地址按字(16bit)編址,有23片芯片構成,已知每片芯片有16K個存儲單元,則該芯片每一個存儲單元存儲__位

設每一個存儲單元存儲x位 則 $112K 16 = 2816K*x$ 求得x=4

磁盤結構與參數

磁盤讀取數據時,磁頭會先找到對應的磁道,磁盤再轉動,直到對應的扇區轉到磁頭的 地方

總線系統

  • 內部總線 (芯片與處理器的總線)
  • 系統總線 (插件板和系統板的總線)
    • 數據總線 (傳輸數據)
    • 地址總線 (傳輸地址)
    • 控制總線 (傳輸控制信號和時序信號)
  • 外部總線 (微機和外部的總線)

可靠性

  • 串聯繫統
    • $R = R_1R_2...*R_n$
  • 並聯系統
    • $R = 1-(1-R_1)(1-R_2)...*(1-R_n)$
  • 串並混合
    • 先看總體,若是是串聯,就先算並聯;若是是並聯,就先算串聯

校驗碼

循環校驗碼CRC

(在要傳輸數據後添加的冗餘位)

模2除法:在作除法運算的過程當中不計其進位的觸發

例:原始報文爲"10111",其生成多項式爲"$x^3+x+1$",對其進行CRC編碼後的結果爲?

多項式二進制爲 111 ,冗餘位爲多項式長度-1個0,即:

111丿$\overline{1011100}$

​ 111

​ $\overline{0101100}$

​ 111

​ $\overline{0010100}$

​ 111

​ $\overline{0001000}$

​ 111

​ $\overline{0000110}$

​ 111

​ $\overline{0000001}$

把最後的結果替換冗餘位,即CRC編碼後的結果是1011101

能夠把結果與111進行模2除法運算,若是爲0就是對的

海明校驗碼

算信息位和校驗位

$2^k-1\geq n+k$

校驗位都是在2的次方的位置

海明碼從1開始,沒有0,因此$2^k-1$

k是校驗位

n是信息位

好比3個校驗位最多能傳7個狀態數,其中信息位最多7-3=4

算校驗位和海明碼

例如:求1011的海明碼

信息位爲4,帶入公式得出校驗位爲3,總位數爲4

7 6 5 4($2^2$) 3 2($2^1$) 1($2^0$) 位數
X4 值爲1 X3 值爲0 X2值爲1 X1值爲1 信息位
J3 J2 J1 校驗位

$7=2^2+2^1+2^0$

$6=2^2+2^1$

$5=2^2+2^0$

$3=2^1+2^0$

那麼J1的值是全部含有$2^0$的信息位值的異或(同值爲0,異值爲1),即 $J_1 = X_1 \bigoplus X_2 \bigoplus X_4 =1\bigoplus 1\bigoplus 1=1$

同理,J2 = 0 , J3 =0 ,即 海明碼爲1010101

海明碼糾錯

將受到的校驗碼和原始校驗碼進行異或,得出的位置就是出錯的位置

例如,假如收到的海明碼爲1011101,校驗碼J3=1,J2=0,J1=1

與原始校驗碼001異或,得出100

說明是第$1*2^2+0+0=4$的位置出錯了,取反得正確海明碼1010101

2、操做系統基本原理

操做系統概述:

  • 管理系統的硬件,軟件,數據資源
  • 控制程序運行
  • 人機之間的接口
  • 應用軟件與硬件之間的接口

進程管理

進程的狀態

基本的三態 : -->等待-->就緒-->運行

五態 : 加入了靜止就緒和靜止阻塞狀態

進程的狀態

前趨圖

描述程序的某個部分的前後依賴關係

考試通常配合PV操做一塊兒考

PV操做

  • 進程的同步與互斥

    互斥 : 千軍萬馬過獨木橋,只能走一個

    同步 : 兩人一塊兒去游泳館,一個走路,一個騎自行車,但爲了同時到,騎車的人須要時不時停下來等走路的人

  • PV操做

    臨界資源 : 諸進程間須要互斥方式對其進行共享的資源,如打印機

    臨界區 : 每一個進程中訪問臨界資源的那段代碼

    信號量 : 是一種特殊的變量,通常用S表示

    PV操做

    P操做至關於阻塞 , 每次執行時信號量S=S-1,當信號量S<0時掛起

    V操做至關於釋放 , 每次執行時信號量S=S+1,當信號量$S\leq 0$時 激活P執行

    在解PV題時,須要先判斷是同步仍是互斥 , 同步時須要判斷他們的前後依賴條件 ,進行阻塞

    例如 : 消費者和收銀員兩個進程.

    沒買東西是不能觸發收銀員收錢的,因此消費者購買東西 V(S1) 激活收銀員收錢 P(S1)

    收銀員沒收完錢消費者是不能拿着東西走的,因此收銀員收完錢 V(S2) 激活消費者拿東西離開 P(S2)

​ 在解趨勢圖和PV操做混合題時,條件是V,導向的結果是P

  • 死鎖問題

    若是沒有資源讓進程執行完就會發生死鎖

    通常考試最少多少個資源不會發生死鎖

    $ M=n*(k-1)+1 $

    n爲進程數,k爲每一個進程須要的資源

    例如,3個進程都須要5個系統資源,則若是有13個資源就不會發生死鎖,由於若是都先分配4個,剩下的一個隨便分配都能完成,並釋放資源

存儲管理

  • 段頁式存儲

    • 頁式存儲(頁號+頁內地址)

      • 頁表存的是頁號和物理塊號

      • 頁面大小都同樣

        邏輯地址和物理地址轉換,組成都是 頁號/塊號 + 頁內地址

        二者的頁內地址都是相同的,先區分邏輯地址中的頁號和頁內地址,經過邏輯地址的頁號找到物理地址的塊號就好了

        例如:

        頁面大小爲4K,訪問邏輯地址爲5A29H,那麼4K是$2^{12}$,對應16進制的三位,即A29是頁內地址,5是頁號,可經過頁號5去頁表裏查物理塊號

        若是須要淘汰頁號,則淘汰狀態在內存中,而且沒有訪問的頁號

    • 段式存儲(段號+段內地址)

      • 段表存的是段號+段長+基址
      • 按邏輯結構分,因此分割的段不同大
    • 段頁式存儲

      • 先分段再分頁
  • 頁面置換(淘汰 )算法

    • 最優算法
    • 隨機算法
    • 先進先出算法
    • 最近最少使用算法

文件管理

  • 索引文件
  • 位示圖
    • 第多少字從1開始算
    • 第多少位置從0開始算

做業管理

設備管理

  • 數據傳輸控制方式

微內核操做系統

  • 虛設備與SPOOLING技術
    • 可理解爲隊列,先進先出

3、數據庫系統

數據庫模式

數據庫模式

三個模式:

  • 外 模式 (視圖)
  • 概念模式 (表)
  • 內模式 (存儲方式)

兩級映射:

  • 外模式/概念模式映射. 當表改變時,視圖不用變,保證了邏輯獨立性
  • 概念模式/內模式映射. 當存儲方式改變時,表結構不用變,保證了物理獨立性

ER模型

注意轉關係模式和聯繫

  • 一個實體轉爲一個關係模式
  • 一對一的關係,1個實體轉成1個關係模式,中間的聯繫能夠轉成一個關係模式或合併到任意一個實體裏
  • 一對多的關係,1個實體轉成1個關係模式,中間的聯繫能夠轉成一個關係模式或合併到多的實體裏,好比部門對員工
  • 多對多的關係,1個實體轉成1個關係模式,中間的聯繫必須轉成一個關係模式

關係代數與元組演算

  • 笛卡爾積 "X"
    • 結果是行*行,列+列
  • 投影 "π"
    • 選中的列 ,參數是字段名(或數字列)
  • 選擇 "σ"
    • 選中的行,參數是屬性值(或數字列)
  • 聯接 "⋈"
    • 聯接後會把相同字段去掉(與笛卡爾積比較)
    • 天然聯接是默認條件是相同的字段

規範化理論

函數依賴

  • 函數依賴 A ->B
  • 部分函數依賴 A+B -> C ; A->C
  • 傳遞函數依賴 A -> B -> C

求候選鍵

給出必定關係,和函數依賴,求候選鍵

畫圖,候選鍵能推導出全部的關係

範式

  • 1NF : 屬性值都是不可分的原子值
  • 2NF : 在1NF的基礎上消除主屬性對候選鍵的部分依賴
  • 3NF : 在2NF的基礎上消除主屬性對候選鍵的傳遞依賴
  • BCNF : 在3NF的基礎上消除主屬性對候選鍵的傳遞依賴
    • BCNF至關於每一個屬性都部分依賴於候選鍵也傳遞依賴於候選鍵

主屬性:候選關鍵字裏的屬性

非主屬性:候選關鍵字外的屬性

單主鍵不可能存在部分依賴,只有複合主鍵纔可能有部分依賴

模式分解

  • 保持函數依賴分解
  • 無損分解
    • 無損:能夠還原; 有損:不能還原

併發控制

事務

  • 原子性 事情要麼作要麼不作,不能拆分
  • 一致性 能量守恆,作完前作完後總量一致
  • 隔離性 獨立進行,互不影響
  • 持續性 執行後結果影響是持續的

封鎖協議

丟失修改: 事務A修改數據R,但結束前其餘事務也修改了數據R,致使數據丟失

讀髒數據: 事務A讀取了其餘事務還沒提交的數據

不可重複讀: 數據A兩次讀取數據R之間,其餘事務修改了數據R,致使同一數據先後讀取不一致

X鎖,是事務T對數據A加上X鎖時,只容許事務T讀取和修改數據A

S鎖,是事務T對數據A加上S鎖時,其餘事務只能再對數據A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。

  • 一級封鎖協議
    • 加X鎖直到事務結束 (防止丟失修改)
    • 在一級協議中,若是隻是讀數據而不對其修改,是不會加鎖的,因此不能保證不讀髒數據和可重複讀
  • 二級封鎖協議
    • 在一級協議基礎上,讀前加S鎖,讀完釋放S鎖 (防止丟失修改 , 防止讀"髒"數據)
  • 三級封鎖協議
    • 在一級協議基礎上,讀前加S鎖,事務結束釋放S鎖 (防止丟失修改, 防止讀"髒"數據, 防止不可重複讀)
  • 兩段鎖協議
    • 可串行化的,可能發生死鎖
    • 加鎖階段和解鎖階段,出現解鎖後就不能再加鎖了,例如: 加加加加解解解解

數據庫完整性約束

實體完整性約束 (主鍵,不能爲空,不能重複)

參照完整性約束 (外鍵,其它表的主鍵,容許爲空)

用戶自定義完整性約束 (字段的約束,好比只讓填0,1,只讓填日期等等)

觸發器 (提供給程序員和數據分析員來保證數據完整性的一種方法)

4、計算機網絡

七層模型

層次 名稱 主要功能 主要設備及協議
7 應用層 實現具體的應用功能
6 表示層 數據的格式與表達、加密、壓縮
5 會話層 創建、管理和終止會話
4 傳輸層 端到端的連接 TCP、UDP
3 網絡層 分組傳輸和路由選擇 三層交換機、路由器
2 數據鏈路層 傳送以幀爲單位的信息 網橋、交換機、網卡
1 物理層 二進制傳輸 中繼器、集線器

網絡技術標準與協議

網絡技術標準與協議

TCP三次握手

DHCP自動分配IP

DNS的迭代查詢和遞歸查詢

網絡類型和拓撲結構

按分佈範圍分: 局域網/城域網/廣域網/因特網

按拓撲結構分: 總線型/星型/環形

網絡規劃與設計

分層設計

  • 接入層 向本地網段提供用戶接入(最底層,只有一層)
  • 匯聚層 網絡訪問策略控制、數據包處理、過濾、尋址 (中間層,能夠有多層)
  • 核心層 數據交換 (最上層,只有一層)

IP地址和子網劃分

IPv4轉成2進制總共有32位

IP地址 = 網絡位 + 主機位

A類地址 前8位是網絡位,以0開頭,最多主機位$2^{(32-8)}-2$

B類地址 前16位是網絡位,以10開頭,最多主機位$2^{(32-16)}-2$

C類地址 前24位是網絡位,以110開頭,最多主機位$2^{(32-24)}-2$

實際使用時,一個A類或B類的主機位太多了,容易浪費,因此引入了子網劃分,節約資源

無分類編址,172.18.129.0/24

24表明前24位爲網絡位,因此能容納的主機位爲 $2^{8}-2$

子網掩碼 : 轉二進制後,爲1的部分是網絡位,爲0是主機位

5、信息安全

安全屬性

  • 保密性 : 最小受權原則, 防暴露 , 信息加密 , 物理保密
  • 完整性 : 安全協議 , 校驗碼 , 密碼校驗 , 數字簽名 , 公證
  • 可用性 : 綜合保障 ( IP過濾 , 業務流控制 , 路由選擇控制 , 審計跟蹤 )
  • 不可抵賴性 : 數字簽名

加密(保密性)

  • 對稱加密 祕鑰加密,祕鑰解密 (DES, AES, RC-5, IDEA) 加密速度快,適合大量文本
  • 非對稱加密 公鑰加密,私鑰解密 (RSA, Elgamal, ECC, 揹包算法, Rabin, D-H) 加密速度慢,適合少許文本

信息摘要(完整性)

單向Hash函數,固定長度的散列值.經常使用的右MD5和SHA

數字簽名(不可抵賴)

好比A發信息給B,用A的私鑰加密(數字簽名),B收到後用A的公鑰解密(驗證簽名),若是能解開,說明該信息是A發出的,由於只有A纔有A的私鑰

數字證書與PGP

數字信封

發送方將原文對稱加密(適合大量文本)傳輸過去,再把加密祕鑰用接收方公鑰加密發送給對方

接收方用本身的私鑰解開加密的祕鑰,再用祕鑰解開對稱加密的原文

數字證書

若是B給A的公鑰被C截獲並篡改成C的公鑰,那麼A發給B的信息會被C解開.

這時須要正規的組織CA來公佈權威的主體公鑰信息,相似官方發佈

各個網絡層次的安全保障

網絡攻擊與威脅

威脅名稱 描述
重放攻擊 ( ARP ) 截獲某次通信數據並拷貝,出於非法的目的重發
拒絕服務 ( DOS ) 合法訪問被阻止
竊聽 竊取信息
業務流分析 長期監(竊)聽,並分析
信息泄露 信息泄露給別人
破壞信息完整性 非受權的增刪改破壞數據
非受權訪問 繞開受權非法訪問
假冒 欺騙系統冒充合法用戶或大權限用戶
旁路控制 利用系統缺陷獲取非受權信息
受權侵犯 被受權的人用於非受權的目的,"內部攻擊"
特洛伊木馬 軟件中包含某段程序,執行時破壞用戶安全
陷阱門 在系統中某個地方設置"機關"
抵賴 否定本身發的消息,僞造他人信息

防火牆

  • 網絡級 效率比較高,相似海關只檢查發貨地

  • 應用級 效率比較低,相似海關開箱檢查

    • 屏蔽子網

      外網->防火牆->被屏蔽子網(WEB服務器,郵件服務器等能被外網訪問的)->防火牆->內部網絡

6、數據結構與算法基礎

數組與矩陣

數組

數組類型 存儲地址計算
一維數組a[n] a[i]的存儲地址爲 : a+i*len
二位數組$a[m][n]$ $a[i][j]$的存儲地址按行爲 : a+(i * n+j) len
$a[i][j]$的存儲地址按行爲 : a+(j
m+i) *len

稀疏矩陣

考試時直接帶入答案計算會更方便

線性表

順序表與鏈表

  • 順序表 連續空間存儲

  • 鏈表 非連續空間存儲

    • 單鏈表
    • 循環鏈表
    • 雙向鏈表

    注意鏈表的結構和增刪結點

優缺點 :

空間上,順序表存儲密度更優(不用存指針),鏈表容量分配更優(動態分配)

時間上,順序表讀效率高,鏈表新增刪除效率高

隊列與棧

  • 隊列 先進先出
  • 棧 先進後出

廣義表

例如 LS = ( a , ( b , c ) , ( d , e ) )

長度 : 表的元素個數,上面長度爲3

深度 : 表的遞歸層數,上面深度爲2

(可用多維數組理解)

基本運算 :

  • 取表頭 head(LS) : 表中第一個元素 ,結果爲 a
  • 取表尾 tail(LS) : 表中除第一個元素的其餘元素 , 結果爲 ( ( b , c ) , ( d , e ) )

樹與二叉樹

瞭解清楚樹的基本概念

滿二叉樹和徹底二叉樹的特色

二叉樹的遍歷

  • 前序遍歷
    • 根左右
  • 中序遍歷
    • 左根右
  • 後續遍歷
    • 左右根
  • 層次遍歷
    • 從上到下,從左到右

樹轉二叉樹

全部的孩子結點轉成左子樹結點

全部的兄弟結點轉成右子樹結點

查找二叉樹(排序二叉樹)

左子樹結點都小於根,右子樹結點都大於根

最優二叉樹(哈夫曼樹)

  • 樹的路徑長度 : 層數-1

  • 權 : 每一個節點的權值
  • 帶權路徑長度 : 路徑長度 * 權值
  • 樹的帶權路徑長度(樹的代價) : 全部葉子結點帶權路徑長度相加

給定權值構造哈夫曼樹 :

先把給定的權值按從小到大的順序排列

取出最小的兩個組成新的結點,如2,3組成5,再把新的結點參與到給定的權值中再次從小到大排序

依次遞歸,能從下到上構造出哈夫曼樹

線索二叉樹

因爲二叉樹裏葉子結點的指針沒有利用起來,爲了遍歷方便

產生了前序, 中序, 後序線索二叉樹

即:根據前序, 中序, 後序的排列規則,把葉子結點的指針指向對應排序的先後結點

平衡二叉樹

任意結點的左右子樹深度相差不超過1

每一個結點的平衡度只能爲-1,0或1 (左右子樹深度差)

  • 無向圖
  • 有向圖

圖的存儲用鄰接矩陣(無向圖因爲是對稱的矩陣因此能夠用上三角矩陣或下三角矩陣)和鄰接表

圖的遍歷能夠有深度優先和廣度優先

拓撲排序,用有向圖能夠表達出任務完成的前後順序

最小生成樹

  • 普里姆算法 選取任意一點作紅點,其餘爲藍點,選一條紅點到藍點最短的線,連起來的藍點也成爲紅點,依次類推
  • 克魯斯卡爾算法 距離從小到大開始選,只要不組成環路就行

算法基礎

算法的特性

  • 有窮性 : 執行有窮步後結束
  • 肯定性 : 算法中的每條指令都必須有確切的含義
  • 有效性 : 算法的每一個步驟都能有效執行並獲得肯定結果,如0不能作分母
  • 輸入 大於等於0條
  • 輸出 大於等於1條(有輸出)

算法的複雜度

  • 時間複雜度
    • $O(1)<O(log_2n)<O(n)<O(n*log_2n)<O(n^2)<O(n^3)<O(2^n)$
    • 推導時間複雜度
      • 若是運行時間是常數量級,用常數1表示
      • 只保留時間函數中的最高階項
      • 若是最高階項存在,則省去最高階項前面的係數
    • 舉例:
      • 常數級就是O(1)
      • 排序二叉樹查找就是$O(log_2n)$
      • 一層循環就是O(n)
      • 循環裏嵌套二叉樹查找就是$O(n*log_2n)$
      • 循環嵌套循環就是$O(n^2) O(n^3)$
  • 空間複雜度

查找

順序查找

從頭至尾依次比較,平均查找長度爲$\frac{n+1}{2}$, 時間複雜度爲O(n)

二分查找

有序排列才能用二分查找法,最多查找次數爲$\lfloor log_2n \rfloor +1$ , 時間複雜度爲$O( log_2n )$

例若有數組下標1~12的值從小到大排列

(1+12)/2=6.5向下取整得6

把值與下標6的比較,若是小則取$\lfloor (1+5)/2 \rfloor$ ,若是比6大則$\lfloor (7+12)/2 \rfloor$

由於已經排除下標6了,因此下次比較從 1 ~ 5或 7 ~ 12

與其結果下標的值繼續比較,以此類推找到正確的值

散列表

設計一個Hash函數 , 以關鍵字爲自變量 ,將關鍵字映射到一個有限的,地址連續的區間中,這個區間就是散列表

散列查找中使用的轉換函數就叫散列函數

排序

  • 排序的概念
    • 穩定與不穩定排序 (好比相同值,誰先誰後)
    • 內排序與外排序
  • 排序方法分類
    • 插入類排序
      • 直接插入排序
      • 希爾排序
    • 選擇類排序
      • 直接選擇排序
      • 堆排序
    • 交換類排序
      • 冒泡排序
      • 快速排序
    • 歸併排序
    • 基數排序

直接插入排序

相似排隊作早操時,不知道站那裏,找到比你高的和比你矮的中間插進去就行

希爾排序

直接選擇排序

先選第一小的,再選第二小的,一直到最後

堆排序

什麼是堆

初建堆

先把序列依次變成徹底二叉樹,而後從最後一個非葉子結點起,把該結點與它的子結點比較大小,而後作交換

交換後若是有子結點的還要繼續對比一下

堆排序

把堆的根節點取走,再把剩下的造成新的堆,再取走根結點,最後造成有序的排列

取走根結點後,把最後一個葉子結點放到根節點,而後和處建堆時候比較同樣,與子結點進行比較,往下移,再與子結點比較,再下移

冒泡排序

快速排序

分而治之,和劫匪搶銀行同樣,以劫匪爲基準,男的站左邊,女的站右邊,站好後對兩組再排序

歸併排序

基數排序

先比較個位排序,再比較十位排序,再比較百位排序...

排序的時間和空間複雜度

7、程序設計

編譯與解釋

文法

  • 認識終結符和非終結符

    • P : 產生式α→β
    • S : 起始符
    • V : 非終結符是能推導出其餘符的,經常使用大寫表示,如A,B等
    • T : 終結符是不能再推導出其餘的,經常使用小寫表示,如a,b等
  • 文法的類型

    在產生式α→β中

    類型 別稱 說明 對應自動機
    0型 短語文法 α至少包含一個非終結符 圖靈機
    1型 上下文有關文法 在0基礎上,β的長度大於等於α 線性界限自動機
    2型 上下文無關文法 在1的基礎上,α爲非終結符 非肯定的下推自動機
    3型 正規文法 在2的基礎上,A→a|aB ,必定要有或"|" 有限自動機
  • 如何判斷一個串是否爲某個文法的句型

正規式

正規式與正規文法之間的轉換

文法產生式 正規式
規則1 A→xB; B→y A=xy
規則2 A→xA|y A=x*y
規則3 A→x,A→y A=x|y

有限自動機

表達式

中綴表達式是人經常使用的方式,可由中序遍歷生成

求其餘X綴式時,可換成對應的X序遍歷

傳值與傳址

傳值至關於複製內存中的某個值到另外一個空間,值改變時原值不變

傳址至關於公用內存中的某個地址,值改變時,原來的值也會跟着變

使用"&"符號傳址

多種程序語言特色

語言 特色
Fortran 科學計算
Pascal 爲教學開發,表達能力強
C 指針操做強,高效
Lisp 函數式程序語言,人工智能
C++ 面向對象,高效
Java 面向對象,中間代碼,跨平臺
C# 面向對象,中間代碼,.Net
Prolog 邏輯推理,簡潔性,表達能力,數據庫和專家系統

8、法律法規

所涉及的法律法規角度

  • 著做權法
  • 計算機軟件保護條例
  • 商標法
  • 專利法

保護期限

主體和權利 保護期限
公民的做品和軟件產品 (發表權,使用權,得到報酬權等) 終生+死後50年年末 (署名權是永久的)
單位的做品和軟件產品 (發表權,使用權,得到報酬權等) 首發後的50年年末
註冊商標 有效期10年(到期滿6月必須續注)
發明專利權 申請之日開始20年
實用新型和外觀設計專利權 (已經存在的事物優化) 申請之日開始10年
商業祕密 不肯定,公開後公衆可用

知識產權人肯定

狀況說明 歸屬
在單位的任何狀況,包括下班,離職一年內的本職工做 單位
委託開發 有合同約定歸約定方;
沒約定歸創做方
合做開發 打雜的(物質場地提供等)不享有著做權;
共同創做,共同享有
商標 誰先申請歸誰;
同時申請,提供誰先使用的證據歸誰;
沒法提供證據,協商解決,不行就抓鬮
專利 誰先申請歸誰;
同時申請協商解決

侵權斷定

中國公民,法人或者其餘組織的做品,不管是否發表,都享有著做權

開發軟件所用的思想,處理過程,方法等不受保護

著做權法不適用的情形 :

  • 國家機關的決議相關文件和正式譯文

  • 時事新聞

  • 曆法、通用數表等

標準化

國際、國外標準代號 : 標準代號+專業類號+順序號+年代號

我國國家標準代號

GB : 強制性標準代號

GB/T : 推薦性標準代號

GB/Z : 指導性標準代號

GSB : 實物標準代號

行業標準代號

由漢語拼音大寫字母組成,重複的會換,如電子行業爲SJ (GJB國家軍用標準如今也屬於行業標準)

地方標準代號

DB + 省級行政區代碼前兩位

企業標準代碼

Q + 企業代號

9、多媒體基礎

音頻相關概念

聲音的帶寬

  • 人耳朵聽到 : 20Hz~20KHz

  • 人說話 : 300~3400Hz

  • 樂器 : 20Hz~20KHz (和人耳聽到的同樣)

採樣

  • 採樣頻率 採樣頻率越高說明單位時間內採集的點越多(聲波的x軸)
  • 採樣精度 精度越高只聲波範圍劃分越細(聲波的y軸)
  • 採樣頻率應爲聲音最高頻率的兩倍(電話通常用8k(人聲的兩倍),樂器通常用44k)

圖像的相關概念

彩色空間

  • RGB 電腦的顯示屏,光的三原色紅綠藍,由於是自主發光
  • YUV(電視,兼容) 爲了兼容老式的黑白電視
  • CMY(CMYK) 顏料的三原色, 青,品紅,黃(節省成本直接加黑),由於是反射光
  • HSV(HSB) 色相,飽和度,明度

媒體的種類

  • 感受媒體 五官感受,聽,視,嗅,觸,味
  • 表示媒體 文字,圖像,視頻,音頻等
  • 顯示媒體(表現媒體) 輸入設備和輸出設備
  • 存儲媒體 磁盤光盤內存等
  • 傳輸媒體 光纖電纜等

多媒體的計算

注意單位

b轉B須要除以8

K1204,只有存儲是用K

k1000,傳輸時用

10、開發模型

瀑布模型(SDLC)

被淘汰的根本緣由在需求不明確,常常改

因此只適用於需求明確或二次開發

原型模型、演化模型、增量模型

  • 原型 構造一個簡易的小demo,先給用戶看,通常用於需求確認(需求不肯定時用原型)
  • 演化模型 客戶看了原型慢慢修改需求達到的最終產品
  • 增量模型 先寫核心功能模塊,最後在覈心功能作好的狀況下慢慢添磚加瓦

螺旋模型

包含了原型的特性,引入了風險分析

V模型、噴泉模型、快速開發模型(RAD)

  • V模型 強調了測試,測試貫穿開發始終
  • 噴泉模型 面向對象
  • 快速開發模型RAD

構件組裝模型(CBSD)

提升了軟件開發的複用性(構件模塊能夠重複使用)

敏捷開發方法

適合小項目

信息系統開發方法

需求的分類

結構化設計

內聚從低到高

偶然內聚->邏輯內聚->瞬時內聚->過程內聚->通訊內聚->順序內聚->功能內聚

耦合從低到高

非直接耦合->數據耦合->標記耦合->控制耦合->外部耦合->公共耦合->內容耦合

測試原則和類型

測試用例設計

測試階段

McCabe複雜度

有向邊數 - 結點數 + 2

系統運行與維護

軟件能力成熟度集成CMMI

未經過CMMI稱爲混亂級

已管理級是我的對項目積累的經驗

已定義級是組織和企業積累的經驗和解決方案(文檔化標準化)

定量管理是企業有量化標準(量化)

優化級(持續優化)

項目管理基礎知識

  • 時間管理
    • Gantt圖和PERT圖
    • 要會算PERT圖的最先開始時間和最晚開始時間(經過最後一個節點的最先開始時間反推最晚開始時間)
  • 風險管理
    • 風險曝光度 = 風險出現機率*風險可能形成的損失

11、面向對象設計

面向對象基本概念

UML

設計原則

  • 單一職責原則 : 設計目的單一的類
  • 開放-封閉原則 : 對擴展開放,對修改封閉
  • 李氏替換原則 : 子類能夠替換父類
  • 依賴倒置原則 : 要依賴於抽象,而不是具體實現;針對接口編程,不要針對實現編程
  • 接口隔離原則 : 使用多個專門的接口比使用單一的總接口要好
  • 組合重用原則 : 要儘可能使用組合,而不是繼承關係達到重用目的
  • 迪米特原則 : 一個對象應當對其餘對象有儘量少的瞭解

設計模式的概念

  • 架構模式
    • 最高層級.全局的,例如C/S結構
  • 設計模式
    • 中間層級,局部的,關注軟件的系統設計,與具體實現語言無關
  • 慣用法
    • 最低層級,關注軟件系統的設計與實現,與具體實現語言有關

設計模式的分類

  • 建立型模式 建立對象
  • 結構型模式 處理類或對象的組合問題
  • 行爲型模式 描述類或對象交互狀況和指責分配

建立型模式

結構型模式

行爲型模式

下午題

1、數據流圖

數據流圖基本概念

數據流圖的分層(DFD)

數據字典

數據流圖平衡原則

  • 父圖與子圖的平衡
    • 父圖和子圖的流入和流出要一致
  • 子圖內的平衡
    • 只有輸入稱爲黑洞,只有輸出稱爲奇蹟,要有輸入也有輸出

答題技巧

先分析出題目的實體,加工,數據流,數據存儲等信息,再用數據平衡原則分析

2、數據庫設計

數據庫設計過程

ER模型

  • 實體間的聯繫類型

  • ER圖向關係模式轉換
    • 轉換基本原則是 : 實體和聯繫分別轉成關係,屬性則轉換成相應的關係屬性
    • 一對一 : 聯繫可單獨做爲關係模式,合併能夠把聯繫合併到聯繫中的任何一個實體裏
    • 一對多 : 聯繫可單獨做爲關係模式,合併只能把聯繫合併到多的一個實體裏
    • 多對多 : 聯繫只可單獨做爲關係模式

答題技巧

  • 詳細分析試題說明
  • 熟練掌握基本知識

3、UML建模

用例圖

  • include 包含, 必須的用例.登記用戶信息時,必需要用到用戶登陸
  • extend 擴展, 非必要用例

類圖

  • 泛化 是一種繼承關係,描述子類特化父類的全部特徵行爲.例如:老虎是動物的一種
  • 實現 類與接口的關係,表示相似接口全部特徵和行爲的實現.例如:老虎叫和鴨子叫
  • 關聯 是一種擁有關係,能夠說是雙向的能夠是單向的.例如老師和學生,學生和課程
    • 聚合 總體和部分的關係. 例如:大雁組成雁羣
    • 組合 一種強的總體和部分關係,例如:鳥必須有翅膀
  • 依賴 是一種使用關係. 例如:動物使用氧氣和水

各類關係的強弱順序:

泛化= 實現> 組合> 聚合> 關聯> 依賴

順序圖

通常考填消息和對象名

活動圖

狀態圖

通信圖

和順序圖同樣,統稱交互圖,只是順序圖更強調時間概念

4、數據結構及算法

分治法

遞歸技術

二分查找

回溯法

貪心法

動態規劃法

動態規劃法和分治法最大的區別是,動態規劃法須要填表,經過表來求解

5、面向對象程序設計

記清楚各個關鍵字,練習上下文填寫代碼

相關文章
相關標籤/搜索