【软考】软件设计师知识点整理(待更新)
【軟考】軟件設計師知識點整理(待更新)
Note:以希賽網,信管網的題目為導向而整理的知識點
文章目錄
- 【軟考】軟件設計師知識點整理(待更新)
- 一、計算機組成與體系結構
- 二、操作系統
- 三、數據庫系統
- 四、計算機網絡
- 五、信息安全
- 六、軟件工程
- 七、面向對象
- 八、數據結構與算法基礎
- 九、程序設計語言
- 十、多媒體基礎
- 十一、知識產權標準化
- 十二、案例分析
- 1、結構化分析
- 2、數據庫設計
- 3、統一建模語言UML
- 4、設計模式
一、計算機組成與體系結構
-
【計組】時鐘周期、機器周期、指令周期、總線周期、存儲周期(指令周期 > 機器周期 > 時鐘周期)
Note:- 時鐘周期:計算機中最小的時間單位,等于cpu主頻的倒數。
- 機器周期(cpu周期):計算機中為了方便管理,常把一條指令 的執行過程劃分為若干個階段(如取指、間址、執行、中斷等)每一階段完成一個基本操作。
- 指令周期:從取指開始到執行完成該指令所需要的全部時間。指令周期包含若干機器周期。
- 總線周期:存儲器和I/O端口是掛接在總線上的,CPU對存儲器和I/O接口的訪問通過總線實現。把CPU通過總線對微處理器外部(存儲器或I/O接口)進行一次訪問所需時間稱為一個總線周期。
采用DMA方式傳送數據時,每傳送一個數據都需要占用一個總線周期。 - 存儲周期:存儲周期包含存取時間和恢復時間。指兩次獨立訪問存儲器操作之間的最小間隔。
-
原碼、反碼、補碼詳解
-
浮點數加減法運算(對階(階碼小向階碼大看齊)、尾數求和、規格化、舍入、溢出判斷)
Note:- 浮點數能表示的數的范圍由 階碼 的位數決定,精度 由 尾數 的位數決定。
-
定點數的移位、加法與減法運算
Note:- 符號數算術運算的溢出可根據運算結果的符號位 和 進位標志判別。該方法適用于兩同號數求和或兩異號數求差時判別溢出。溢出的邏輯表達式為:VF=SF?\bigoplus?CF即利用符號位和進位標志相異或,當異或結果為1時(兩符號位不同)表示發生溢出,當異或結果為0時,則表示沒有溢出。
- 換句話說:兩個符號位相同的補碼相加,如果和的符號位與加數的符號相反,則表明運算結果溢出;
兩個符號位相反的補碼相減,如果差的符號位與被減數的符號位相反,則表明運算結果溢出。
-
計算機的內部存儲(緩存cache、內存main memory),解釋概念:內存 = 主存 + cache、外存 = 輔存、閃存、RAM、SRAM、DRAM、ROM、PROM、EPROM、EEPROM
-
cache-主存的三種映射方式(cache比主存快,用于平衡CPU和主存的速率,兩者的地址映射需要專門的硬件自動完成)
-
相聯存儲器的工作原理(按內容訪存,cache、快表中應用),相聯存儲器(Cache,快表是一種相聯存儲器,按內容訪問,而不是按地址訪問)
Note:- 從訪問速度上看,寄存器 > 緩存 > 內存 > 閃存 > 磁盤
- 高速緩沖存儲器(緩存)一般使用是存儲速度更快的 SRAM(靜態隨機訪問存儲器),成本比DRAM(動態隨機訪問存儲器)高,為了擴大緩存容量,使用SRAM作為一級緩存,使用DRAM作為二級緩存。CPU訪問數據先是在一級緩存中找,找不到再到二級緩存中找,再沒有就去內存中找。
- ROM不能隨意更改。ROM主要用于檢查計算機系統的配置情況并提供最基本的輸入輸出(I/O)程序,如存儲BIOS參數的CMOS芯片。ROM的特點是計算機斷電后存儲器中的數據仍然存在。
- 主存儲器就是我們常說的(狹義的)“內存” ,使用的是DRAM。它之所以叫動態,是因為將數據寫入DRAM后,一段時間過后數據會丟失,需要一個額外的電路不斷對其進行刷新操作才行。因為DRAM儲存數據利用的是電容中是否有電荷,有代表1,無代表0。但是電容會放電或吸電,刷新操作會對其進行檢查。如果電量大于滿電量的1/2,則將電充滿,否則將電全部放掉。
SRAM雖然不需要刷新操作,但是斷電后仍會丟失數據。 所以 RAM都要在有電源時工作。 - 內存和緩存在廣義上整體被稱為內存儲器(簡稱內存)或主存儲器,而其他外部不依賴電存儲數據的設備(如磁盤、光盤等)統稱外存儲器或輔助存儲器。
- 緩存 ?\notin∈/ 內存,緩存是CPU的一部分,內存中被CPU訪問最頻繁的數據和指令被復制到CPU中的緩存中。
- 快閃存儲器(閃存)是一種外部存儲器,多用于照相機、音樂播放器、手機等設備(如SD卡,Secure Digital Memory Card)。現在的游戲卡一般都是閃存,U盤用的也是快閃技術。另外,快閃存儲器也在作為磁盤存儲器的替代品越來越多地被使用,即所謂的”固態硬盤(ssd,solid state disk)“。
閃存在進行數據刪除時不是以單個的字節為單位而是以固定的區塊為單位,區塊大小一般為256KB到20MB。閃存是電子可擦除只讀存儲器(EEPROM)的變種,EEPROM與閃存不同的是,它能在字節水平上進行刪除和重寫而不是整個芯片擦寫,這樣閃存就比EEPROM的更新速度快。由于其斷電時仍能保存數據,閃存通常被用來保存設置信息。
閃存不像RAM(隨機存取存儲器)一樣以字節為單位改寫數據,因此不能取代RAM,也不能替換主存(RAM)。但是在嵌入式中,可以用閃存代替ROM存儲器。(2021上午4) - 在進行主存地址容量計算時,DFFFFH - A0000H = E0000H - A0000H = (5?1)×164(5 - 1) \times 16^4(5?1)×164
- CPU設置高速緩存的目的:用來解決CPU與內存之間速度、容量不匹配的問題,與外存無關,無法提高外存儲器的訪問速度,可以提高CPU訪問主存數據或指令的效率。
-
計算機指令流水線時間計算,計算機指令-流水線和吞吐率,流水線吞吐率的計算
Note:- 由歸納法可知,指令流水線的總執行時間 = 單條指令執行時間 +(指令條數-1)* 最長的子過程時長
-
總線復用的概念及目的
Note:- 總線復用常見有:時分多路復用、頻分多路復用和碼分多路復用,目的是減少總線中信號線的數量。
-
擴展操作碼技術 & 單雙操作數
-
指令的尋址方式
Note:- 尋址是指尋找操作數的地址或下一條將要執行的指令地址。確定指令存放位置的過程稱為指令尋址,確定操作數存放位置的過程稱為數據尋址。
- 常見的數據尋址方式包括:立即尋址(該數是操作數),直接尋址(地址碼字段給出操作數的主存地址),隱含尋址,間接尋址,寄存器尋址(地址碼字段給出操作數的寄存器地址),基址尋址,變址尋址等。
其中按速度快慢排序:立即尋址 > 寄存器尋址 > 直接尋址 - 指令系統中采用不同尋址方式目的是擴大尋址空間并提高編程靈活性。
- 計算機內存一般分為靜態數據區、代碼區、棧區和堆區,若某指令的操作數之一采用立即數尋址方式,則該操作數位于代碼區。
- 程序運行時,需要將程序代碼(機器指令序列)和代碼所操作的數據加載至內存,指令代碼加載至代碼區,數據則根據綁定關系可能位于靜態數據區、棧或堆區。
舉一反三:直接尋址方式、間接尋址方式、寄存器尋址方式 和 寄存器間接尋址的指令操作數都位于代碼區
-
虛擬存儲器
-
中斷方式DMA方式的區別 - (DMA獲得總線控制權,CPU無需調用中斷程序處理IO,共同點就是CPU和IO外設可以實現并行工作),查詢 / 中斷 / DMA / 通道
-
CPU寄存器是否對用戶可見
-
計算機組成之總線結構(單總線/多總線,總線結構可以減少信息傳輸線的數量),計算機總線結構詳解
-
計算機中三大總線:地址總線、數據總線、控制總線,CPU數據總線和地址總線 內存和外存
Note:- CPU通過地址總線尋址,然后通過數據總線與外部設備互換信息(即通過地址總線確定要訪問的內存地址,再由數據總線傳輸數據)。若內存容量為4GB,字長為32,則地址總線寬度為32(232=4?210?210?210=4G2^{32} = 4* 2^{10} * 2^{10} * 2^{10}=4G232=4?210?210?210=4G),數據總線長度為32(字長32)
- 地址總線的位數(寬度)決定CPU的尋址范圍;數據總線的位數(寬度)決定CPU單次通信能交換的信息數量,即CPU與其他元器件一次最大傳送的數據量。
- 總線寬度為32bit,時鐘頻率為200MHz,若總線上每5個時鐘周期傳送一個32bit的字,則該總線的帶寬為:一個T為1/(2?108)1/(2 * 10^8)1/(2?108) s,1s內共2?1082 * 10^82?108個周期,傳輸了2?108/52 * 10^8 / 52?108/5個32bit字,共160MB/S(注意字節和比特的換算:1B = 8bit)。
-
Flynn分類法(根據指令流和數據流,對計算機體系結構分類:SISD/SIMD/MISD/MIMD)
-
CPU的RISC和CISC架構的區別
Note:- RISC在設計時要遵循的基本原則:
1)指令條數少,一般為幾十條指令。
2)尋址方式盡可能少。
3)采用等長指令,不管功能復雜的指令還是簡單的指令,均用同一長度.
4)設計盡可能多的通用寄存器。 - CISC的指令豐富的優勢,使得它的編譯器可以少做很多事情,編譯器的設計更簡單.而RISC在實現一個功能的時候,需要的指令條目數會更多一些,程序也會更大。
- CISC vs RISC
指令系統類型指令尋址方式實現方式其它 CISC 數量多,使用頻率差別大,可變長格式 支持多種 微程序控制技術(微碼) 研制周期長 RISC 數量少,使用頻率接近,定長格式,大部分為單周期指令,操作寄存器,只有Load/Store操作 支持方式少 增加了通用寄存器,硬布線控制邏輯為主,適合采用流水線 優化編譯,有效支持高級語言
- RISC在設計時要遵循的基本原則:
-
中央處理器—CPU的功能和基本結構
Note:- 在編碼時,每一種二進制代碼,都賦予了特定的含義,即都表示了一個確定的信號或者對象。而譯碼就是編碼的逆過程。CPU中的譯碼器的主要作用是對指令進行譯碼。
-
計組中CPI和MIPS怎么算, 及其之間的換算關系
Note:- 假如CPU主頻為2.8GHz,平均CPI為3.5,MIPS=f/(CPI×106)=2.8×109Hz/(3.5×106)=800MIPS = f / (CPI \times 10^6) = 2.8 \times 10^9Hz / (3.5 \times 10^6) = 800MIPS=f/(CPI×106)=2.8×109Hz/(3.5×106)=800
-
奇偶校驗碼、海明碼、CRC碼
Note:- 在奇偶校驗碼中
- 若有奇數個數據位出錯,則可以檢測出該錯誤但無法糾正錯誤
- 若有偶數個數據位出錯,則無法檢測出該錯誤
- CRC冗余校驗碼的計算
-
例1:設生成多項式G(x)=X3+X2+1G(x)=X^3+X^2+1G(x)=X3+X2+1 ,數據序列為101001 ,求對應的CRC碼?參考CRC碼
解析:通過多項式,得到除數為1101,數據序列需要左移3位(除數位-1),得到101001000,接著使用如下方法進行計算(異或運算,相同取0,不同取1) :
得到最終的余數001拼接在原數據序列101001 后面,得到CRC冗余校驗碼(101001 001)。
-
例2:設生成多項式P(x)=x4+x+1P(x)=x^4+x+1P(x)=x4+x+1 ,信息碼為 101011 ,求對應的CRC碼?參考CRC循環冗余校驗(計算機網絡)
解析:通過多項式,得到除數為10011,數據序列需要左移4位(除數位-1),得到1010110000,接著使用如下方法進行計算(異或運算,相同取0,不同取1) :
-
CRC冗余校驗碼如何檢錯和糾正錯誤:
用生成的CRC碼除以生成多項式G(x)所對應的的二進制數碼,若余數為0,則信息碼在傳輸過程中沒有產生錯誤,數據正確。
-
- 在奇偶校驗碼中
-
吞吐量(數)和網絡負載(百分比)的區別,jmeter之吞吐量 / 吞吐率 / TPS / 帶寬及壓力測試和負載測試及其區別
Note:- 流水線的吞吐率是指單位時間內流水線處理機輸出的結果的數目,因此流水線的吞吐率為一個流水級時間的倒數,即最長流水級時間的倒數。
二、操作系統
-
字符、字、字長、字節、比特、位
-
操作系統中調度算法(FCFS、RR、SPN、SRT、HRRN)
-
頁面變換表
-
位示圖的概念
Note:- 位示圖是利用二進制的一位(eg: 1bit)來表示磁盤中的一個盤塊(eg:4MB)的使用情況。
-
位示圖的計算、頁式存儲、磁盤管理
-
進程資源圖,化簡,阻塞(非阻塞),死鎖(死鎖并不一定會發生,死鎖的四個必要條件)
-
什么是死鎖?死鎖發生的四個必要條件是什么?如何避免和預防死鎖產生?
-
嵌入式系統初始化過程
Note:嵌入式操作系統的特點:- 1)微型化:從性能和成本角度考慮,希望占用的資源和系統代碼量少;
- 2)可定制:從減少成本和縮短研發周期考慮,要求嵌入式操作系統能運行在不同的微處理器平臺上,能針對硬件變化進行結構與功能上的配置,以滿足不同應用的需求;
- 3)實時性:嵌入式操作系統主要應用于過程控制、數據采集、傳輸通信、多媒體信息及關鍵要害領域需要迅速響應的場合,所以對實時性要求較高;
- 4)可靠性:系統構件、模塊和體系結構必須達到應有的可靠性,對關鍵要害應用還要提供容錯和防故障措施;
- 5)易移植性:為了提高系統的易移植性,通常采用硬件抽象層和板級支撐包的底層設計技術。
-
存儲管理之頁式、段式、段頁式存儲 以及 優缺點,頁式存儲、段式存儲、段頁式存儲
Note:- 頁式管理:
- 優點:沒有外碎片,每個內碎片不超過頁的大小。
- 缺點:程序全部裝入內存,要求有相應的硬件支持,如地址變換機構缺頁中斷的產生和選擇淘汰頁面等都要求有相應的硬件支持。增加了機器成本和系統開銷。
- 段式管理:
- 優點:可以分別編寫和編譯,可以針對不同類型的段采取不同的保護,可以按段為單位來進行共享,包括通過動態鏈接進行代碼共享。
- 缺點:會產生碎片。
- 段頁式管理:
- 優點:段頁式管理是段式管理和頁式管理相結合而成,具有兩者的優點。
- 缺點:由于管理軟件的增加,復雜性和開銷也增加。另外需要的硬件以及占用的內存也有所增加,使得執行速度下降。
- 頁式管理:
-
文件管理-索引文件結構
Note:
假設在采用索引節點管理的某文件系統中,磁盤索引塊和磁盤數據塊大小均為1KB,每個文件索引節點有8個地址項:iaddr[0]~iaddr[7],每個地址項為4B,其中- iaddr[0]~iaddr[4]為直接地址索引,每個直接索引地址指向一個磁盤數據塊,共5個磁盤索引塊;
- iaddr[5]~iaddr[6]為一級間接地址(的起始)索引,即每個一級間接地址索引指向一個磁盤索引塊,該磁盤索引塊可以劃分成1024/4=256個間接索引地址,每個間接索引地址指向1個磁盤數據塊,因此兩個一級間接地址索引實際上間接指向了2 * 256 = 512個磁盤索引塊;
- iaddr[7]為二級間接地址(的起始)索引(指向一級間接地址索引),即每個一級間接地址索引指向一個磁盤索引塊,每個磁盤索引塊又分成256個一級間接地址,存放著二級間接地址索引,每個二級間接地址索引指向一個磁盤索引塊,每個磁盤索引塊又分成256個二級間接地址,每個二級間接地址指向1個磁盤數據塊,因此對于該文件的地址項iaddr[7],最多可以指向256 * 256 = 65535個磁盤數據塊。
由于每個磁盤數據塊大小均為1KB,因此該文件的最大長度是(5 + 512 + 65535)* 1KB
-
磁盤尋道調度算法(FCFS, SSTF, SCAN, CSCAN)
Note:- 文件的存取時間 = 尋道時間 + 等待時間,尋道時間是指磁頭移動到磁道所需的時間;等待時間為等待讀寫的扇區轉到磁頭下方所用的旋轉延遲時間。
三、數據庫系統
-
笛卡爾積(非等值連接,左表一條元組拼接右表所有元組),等值連接,自連接,非等值連接,外連接的原理
-
自然連接(兩表相同列名自然等值拼接) & 等值連接
-
內連接(有條件)、自然連接(無條件)、外連接的區別
-
一文搞懂候選碼、主碼、全碼、外碼、主屬性、主鍵、主關鍵字、非主屬性清晰總結(候選碼(畫圖后)可以遍歷所有屬性), 數據庫的規范理論
-
SQL 形式化語言——關系代數(?為自然連接,σ為選擇(select),Π為投影(where))
-
數據庫范式 & 模式分解 詳細介紹(1NF,2NF,3NF,BCNF,4NF), 數據庫的規范理論
Note:- 函數依賴:
- 如果碼為(A,B),A,B →\rightarrow→ 非主屬性E,則非主屬性E完全函數依賴于(A,B)
- 如果碼為(A,B),B →\rightarrow→ 非主屬性C,D,則非主屬性C,D部分函數依賴于(A,B)
- 如果碼為A,存在A->BC,B->D,A->D,則非主屬性D傳遞函數依賴于A
- 數據庫范式:
舉個例子,假設已知表SLC為(Sno - 學生號, Sdept - 部門, Sloc - 學生住處, Cno - 課程編號, Grade - 學生成績)- 1NF:如果一個關系模式R的所有屬性都是不可分的基本數據項,則R∈1NFR \in1NFR∈1NF;
第一范式是對關系模式的最起碼的要求,不滿足第一范式的數據庫模式不能稱為關系數據庫。
上圖中SLC符合1F,原因是 S-L-C的碼為(Sno,Cno),其中:- (Sno,Cno) →\rightarrow→ 決定 →\rightarrow→Grade,則非主屬性Grade完全函數依賴于(Sno,Cno)
- Sno →\rightarrow→ 決定 →\rightarrow→Sdept和Sloc,則非主屬性Sdept和Sloc部分函數依賴于(Sno,Cno)
- 2NF的定義為:滿足1NF,非主屬性 完全函數依賴 于候選碼;
如果去除掉1F圖中的部分函數依賴,則變成如下:
上圖中SLC符合2F,原因是 S-L-C的碼為(Sno,Cno),其中:- 非主屬性Grade完全函數依賴于(Sno,Cno)
- 非主屬性Sdept和Sloc部分函數依賴于(Sno)
- 在S-L中,Sno →\rightarrow→ 決定 →\rightarrow→ Sdept和Sloc,非主屬性Sdept →\rightarrow→ 決定 →\rightarrow→ Sloc,因此存在Sno →\rightarrow→ Sdept,Sdept →\rightarrow→ Sloc,則非主屬性Sloc傳遞函數依賴于Sno
- 3NF的定義為:符合2NF,并且消除了非主屬性對于候選碼的 傳遞函數依賴。
如果去除掉2F圖中S-L的傳遞函數依賴,則變成如下:
將一個2NF關系分解為多個3NF的關系后,仍然不能完全消除關系模式中的各種異常情況和數據冗余。
- 1NF:如果一個關系模式R的所有屬性都是不可分的基本數據項,則R∈1NFR \in1NFR∈1NF;
- 關系模式規范化的基本步驟:
- 目的:盡量消除插入、刪除異常,修改復雜,數據冗余;
- 基本思想:逐步消除數據依賴中不合適的部分
- 實質:概念的單一化
- 函數依賴:
-
關系模式的范式(帶例題詳細解析):非主屬性和主碼之間是否存在依賴傳遞
-
什么是事務和事務回滾?
-
數據庫設計過程(需求階段形成的數據字典,數據流圖和需求說明文檔是邏輯結構設計的依據),數據庫設計的主要步驟
-
三種數據模型—層次模型、網狀模型以及關系模型
Note:- 不同的數據模型具有不同的數據結構形式。目前最常用的數據結構模型有層次模型(hierarchical model)、網狀模型(network model)、關系模型(relational Model)和面向對象數據模型(object oriented model)。
- 其中層次模型和網狀模型統稱為非關系模型(Nosql)。層次數據模型只能表示實體之間的1:n的關系,不能表示m:n的復雜關系。而網狀模型結構復雜,使用不易,隨著應用環境的擴大,數據結構越來越復雜,數據的插入、刪除牽動的相關數據太多,不利于數據庫的維護和重建。
非關系模型的數據庫系統在20世紀70年代非常流行,在數據庫系統產品中占據了主導地位。到了20年紀80年代,逐漸被關系模型的數據庫系統取代,但某些地方,由于歷史的原因,目前層次和網狀數據庫系統仍在使用。 - 關系模型(sql)是目前最常用的數據模型之一。關系數據庫系統采用關系模型作為數據的組織方式,在關系模型中用二維表格結構表達實體集以及實體集之間的聯系,其最大特色是描述的一致性。
-
詳解MySQL事務(超詳細),Mysql的四個隔離級別是如何實現的
Note:- 4大屬性:原子性/一致性/隔離性/持久性;
- 隔離性:當多個事務并發執行時,任一事務的更新操作直到其成功提交的整個過程,對其他事務都是不可見的。
- 不同隔離級別產生的問題:臟讀/不可重復讀/幻讀
- 臟讀:
對于兩個事務 T1和T2, T1 讀取了已經被 T2 更新(update) 但還沒有被提交(commit)的字段. 之后, 若 T2 回滾, T1讀取的內容就是臨時且無效的( T2 update →\rightarrow→ T1 read →\rightarrow→ T2 rollback ). - 不可重復讀: 讀兩次前后數據變了
對于兩個事務T1和T2,T1 讀取了一個字段, 然后 T2 更新(update)了該字段之后, T1再次讀取同一個字段, 值就不同了(T1 read →\rightarrow→ T2 update →\rightarrow→ T1 read). - 幻讀: 讀兩次行數變了
對于兩個事務T1和T2, T1 從一個表中讀取了一個字段, 然后 T2 在該表中插入了一些新的行之后, 如果 T1 再次讀取同一個表, 就會多出幾行(T1 read →\rightarrow→ T2 insert →\rightarrow→ T1 read)
- 臟讀:
- 4大隔離級別 及 如何實現:
- 讀未提交(RU):三個問題都不可以解決
- 所有的讀不加鎖,讀到的數據都是最新的數據,性能最好。
- 所有的寫加行級鎖,寫完釋放。
- 讀已提交(RC使用MVVC技術實現):可以解決臟讀;
- 寫操作:加行級鎖。事務開始后,會在UNDO日志中寫入修改記錄,數據行中的隱藏列DATA_POLL_PTR存儲指向該行的UNDO記錄的指針。
- 讀操作:不加鎖。在讀取時,如果該行被其它事務鎖定,則順著隱藏列DATA_POLL_PTR指針,找到上一個有效的歷史記錄(有效的記錄:該記錄對當前事務可見,且DELETE_BIT=0)。
- 可重復讀(RR):可以解決臟讀和可重復讀;
- 寫操作:加行級鎖;讀操作:不加鎖;
- RR讀寫操作和加鎖邏輯和RC相同,都是使用MVVC(多版本并發控制)技術實現
- 不同點在于:行記錄對于當前事務的可見性(可見性:即哪個版本的行記錄對這個事務是可見的)。RC級別對數據的可見性是該數據的最新記錄,RR級別對數據的可見性是事務開始時,該數據的記錄。
- 串行化:可以解決幻讀(設置讀鎖(共享鎖)和寫鎖);
- 讀未提交(RU):三個問題都不可以解決
- mysql鎖的分類:
- 按照鎖的粒度可以把鎖分為表級鎖和行級鎖:
- 表級鎖:Mysql中粒度最大的一種鎖,會鎖住當前操作的整張表,并發性能低,但表鎖的實現簡單,耗費資源少,加鎖快,不會出現死鎖。
- 行級鎖:Mysql中粒度最小的一種鎖,只會鎖住當前操作的數據行。行鎖極大地提高了Mysql的并發性能,但行鎖的開銷較大,速度較慢,會出現死鎖。
- 按照鎖的性質可以把鎖分為共享鎖和排它鎖:
- 共享鎖(S鎖):又稱讀鎖,若事務T對數據對象A加上S鎖,其他事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖;其他事務可以讀取被共享鎖鎖住的數據行,不能修改該數據行。
- 排他鎖(X鎖):又稱寫鎖。若事務T對數據對象A加上X鎖,該事務可以讀取和修改該數據行,其他事務不能再對A加任何鎖,直到T釋放A上的鎖。
- 按照鎖的粒度可以把鎖分為表級鎖和行級鎖:
- 4大屬性:原子性/一致性/隔離性/持久性;
四、計算機網絡
- 傳輸層TCP / UDP知識點總結
Note:- 傳輸控制協議(TCP)是面向連接的,提供可靠交付,有流量控制,擁塞控制,提供全雙工通信,面向字節流,每一條 TCP 連接只能是點對點的(一對一,單播)的傳輸層通信協議。TCP將用戶數據打包成報文段,它發送后會啟動一個定時器。
- 用戶數據報協議(UDP)是一種不可靠的、無連接的協議,沒有連接管理能力,不負責重新發送丟失或出錯的數據消息,也沒有流量控制,擁塞控制的功能。它面向報文,支持單播、多播、廣播的交互通信。
- TCP使用的流量控制協議是 可變大小的滑動窗口協議。
- URL地址的兩種格式(傳統/Restful),URL的地址格式(Restful 統一了資源接口)
Note:- 一個標準的URL格式如下:協議://主機名.域名.域名后綴或IP地址(:端口號)/目錄/文件名。
比如http://www.dailynews.com.cn/channel/welcome.htm中,www為主機名,dailynews為本地域名,com為組織域名,cn為最高層域名(表示中國) - RESTful架構遵循統一接口原則,不論什么樣的資源,都是通過使用相同的接口進行資源的訪問。接口應該使用標準的HTTP方法如GET,PUT和POST。
- 一個標準的URL格式如下:協議://主機名.域名.域名后綴或IP地址(:端口號)/目錄/文件名。
- 網絡基礎之沖突域和廣播域,沖突域和廣播域隔離設備
Note:- 第一層設備(中繼器,集線器)無法隔離沖突域和廣播域,第二層設備(網橋,交換機)只能隔離沖突域,第三層設備(路由器)才能隔離廣播域。
- 交換機能隔離沖突域,交換機的每一個端口就是一個沖突域
- 路由器既能隔離沖突域,又能隔離廣播域。只有路由器能隔離廣播域,因此三個端口對應三個廣播域。
- 廣播域可以跨網段,而沖突域只是發生在同一個網段的。沖突域是基于第一層(物理層),而廣播域是基于第二層(數據鏈路層)
- ftp 20 和 21端口,常見的網絡端口及對應服務
- IP地址的分類 & 子網劃分 & 私有地址
- IPv4到IPv6的過渡方案和機制,從IPv4 到 IPv6 的過渡技術
Note:- 如果一臺主機同時支持IPv6和IPv4兩種協議,那么該主機既能與支持IPv4協議的主機通信,又能與支持IPv6協議的主機通信,則IPv6和IPv4節點可以通過雙協議棧技術實現通信。
- 局部的IPv6網絡通過IPv4骨干網絡相連,如果要讓 IPv6節點和IPv4網絡 進行通信,必須使用隧道技術。
- IPv6節點與IPv4節點的通信時需借助于中間的協議轉換服務器(翻譯技術),此協議轉換服務器的主要功能是把網絡層協議頭進行IPv6/IPv4間的轉換,以適應對端的協議類型。
- IPV6(21282^{128}2128)的地址空間是IPV4(2322^{32}232)的2962^{96}296倍
- 常見網絡協議
- 網絡協議知識點匯總
- 默認路由,主機路由,網絡路由
- 網關、默認路由、特定選擇路由
- MAC地址的分類(單播,組播,廣播)
- 路由和交換機的區別
Note:- 交換機通過MAC表,進行局域網內網數據的轉發和過濾;路由器用于連接局域網和外網,通過路由表尋址和轉發。
- 路由器內集成了交換機的功能(路由器可以用來搭建WLAN),但不足之處是可擴展的接口不如交換機多,而且交換機通常由硬件加速轉發,路由器主要靠軟件尋址,速度慢。
- VLAN的概述與優勢
Note:- VLAN允許邏輯地劃分網段
- 控制網絡的廣播風暴(并不是減少廣播域的數量)
- 確保網絡安全
- 簡化網絡管理
- WLAN的優勢和缺點
- 無線局域網技術概述(Wireless LANs)——802.11協議
- CSMA/CD協議詳解,CSMA/CD協議詳解1
- CSMA/CA協議詳解,CSMA/CD與CSMA/CA比較
- 子網劃分
- 子網劃分詳解與子網劃分實例精析
- Nat網絡地址轉換,NAT百科
- ARP 協議工作原理(request時發送廣播幀,response時發送單播幀,如果存在環路,會出現廣播風暴)
- 簡單網絡管理協議SNMP(SNMP是TCP/IP協議簇中的應用層協議,采用UDP封裝報文段)
- 綜合布線系統基礎,綜合布線系統
Note:- 綜合布線系統由六個子系統組成,分別是:工作區子系統、水平子系統、管理間子系統、垂直子系統、設備間子系統、建筑群子系統(園區子系統)。
- CRC(循環冗余校驗),CRC校驗原理及步驟
- 域名解析全過程
Note:
域名解析過程:(假設域名為www.baidu.com)- 先在HOSTS表或者本地主存中的DNS緩存中查詢
- 如果沒有,再通過遞歸查詢查找本地DNS服務器
- 如果還沒找到,本地DNS服務器通過迭代查詢查找根域名服務器,根域名服務器返回.com域的頂級域名服務器;
接著本地域名服務器向.com的頂級域名服務器發出請求,返回baidu.com權限域名服務器;
本地域名服務器向baidu.com權限域名服務器發送請求,得到了www.baidu.com的IP地址。
五、信息安全
-
淺談常見的七種加密算法及實現,參考加密,簽名,token解釋及場景分析,摘要算法和加密算法區別
Note:-
摘要算法和加密算法是不同的:
- 摘要算法:用于生成簽名,而簽名主要用于身份驗證。簽名的生成方式通過密鑰 + 時間 +消息內容 + 自定義算法(比如抽取消息內容中截取一些字符)來生成。
摘要算法只能用于對數據的單項運算,無法還原被摘要源數據,其特點為定長輸出、雪崩效應(少量消息位的變化會引起信息摘要的許多位變化)。摘要算法有三個特性,一是不可逆,即無法從摘要算法的輸出推出輸入;二是唯一,即在同一種摘要算法下,不同的輸入一定會產生不同的輸出;三是輸出結果長度固定。基于以上特性,摘要算法通常用來判斷某個消息在傳輸過程中是否被改變,這里的改變包括惡意篡改和噪聲。
簡單理解,配合密鑰的摘要算法(參考token驗證過程)將明文處理成密文,密文作為簽名用于比較驗證,無法處理成明文。 - 加密算法:加密是對數據進行機密性保護,過程是發送者對明文進行加密,接收者對密文進行解密的過程。
- 摘要算法:用于生成簽名,而簽名主要用于身份驗證。簽名的生成方式通過密鑰 + 時間 +消息內容 + 自定義算法(比如抽取消息內容中截取一些字符)來生成。
-
Token也是基于簽名的,是在服務器端和客戶端進行發送的,比如說服務器用HMAC-SHA256算法(信息摘要算法),加上一個密鑰(加密算法), 對用戶名的數據(通常對userId)做一個簽名,并將“數據 + 簽名”作為token保存在客戶端的cookies中。
在驗證的時候,客戶端通過cookies向服務端發送token,服務端會使用私鑰對數據部分進行解密得到新的簽名,并與原token中的簽名進行比較,如果相等則驗證通過,如果不等說明數據已被篡改。參考加密,簽名,token解釋及場景分析,cookie、session與token的真正區別
-
RSA是非對稱加密算法;SHA-1與MD5屬于信息摘要算法(不屬于加密算法);RC-5屬于對稱加密算法。
-
這些算法中SHA-1與MD5是不能用來加密數據的,而RSA由于效率問題,一般不直接用于大量的明文加密,適合明文加密的,也就只有RC-5了。
-
-
對稱加密、非對稱加密、摘要算法介紹
Note:- 公開密鑰加密(public-key cryptography),也稱為非對稱加密(asymmetric cryptography),一種密碼學算類型,在這種密碼學方法中,需要一對密鑰,一個是私人密鑰,另一個則是公開密鑰。
常見的公鑰加密算法有:RSA、EIGamal、背包算法、Rabin(RSA的特例)、迪菲-赫爾曼密鑰交換協議中的公鑰加密算法、橢圓曲線加密算法(Elliptic Curve Cryptography,ECC);
DSA數字簽名(又稱公鑰數字簽名), 將摘要信息用發送者的私鑰加密,接收者只有用發送者的公鑰才能解密被加密的摘要信息,也是屬于公開密鑰加密算法。 - DES是典型的私鑰加密體制,屬于對稱加密,不屬于公開秘鑰加密,所以本題選擇D選項。
- 公開密鑰加密(public-key cryptography),也稱為非對稱加密(asymmetric cryptography),一種密碼學算類型,在這種密碼學方法中,需要一對密鑰,一個是私人密鑰,另一個則是公開密鑰。
-
什么是數字簽名?(數字簽名又稱公鑰數字簽名)
Note:- 數字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于驗證。數字簽名用到了非對稱密鑰加密技術與數字摘要技術。
- IDEA,DES和RC4算法都是對稱加密算法(私鑰加密體制),只能用來進行數據加密。
- MD5算法是消息摘要算法,只能用來生成消息摘要,無法進行數字簽名。
- RSA算法是典型的非對稱加密算法,主要具有數字簽名和驗證的功能。
-
數字證書及CA詳解
Note:- 某電子商務網站向CA申請了數字證書,用戶可以通過使用 CA的公鑰 驗證 CA的簽名 的真偽來確定該網站的合法性。
- 1)網站向機構發送公鑰;
2)機構對網站發過來的公鑰用私鑰對其加上數字簽名(即數字證書 = 網站公鑰 + 機構在網站公鑰上做的數字簽名);
3)接著用戶獲得了網站的數字簽名證書和網站的公鑰,利用機構提供的公鑰對數字簽名進行解密,將解密后的結果與數字證書中網站所提供的原始公鑰進行匹配,驗證網站的公鑰的合法性。
4)用戶先使用網站提供的公鑰對消息進行加密,再向網站發送消息。
5)網站收到用戶發過來的密文之后,使用私鑰進行解密。 - 數字簽名中應該沒用到摘要算法,否則用戶無法使用CA的公鑰對CA密鑰加密后的數字簽名進行解密。
- 某電子商務網站向CA申請了數字證書,用戶可以通過使用 CA的公鑰 驗證 CA的簽名 的真偽來確定該網站的合法性。
-
PPP與PPPoe
Note:- PPP的簡介:
1、PPP的NCP可以承載多種協議的三層數據包。
2、PPP使用LCP控制多種鏈路的參數(建立、認證、壓縮、回撥) - PPP的認證類型
1、PPP的pap認證是通過二次握手建立認證(明文不加密)
2、PPP的chap質詢握手認證協議,通過三次握手建立認證(密文采用MD5加密)
3、PPP的雙向驗證,采用的是chap的主驗證風格
4、PPP的加固驗證,采用的是兩種(pap,chap)驗證同時使用
- PPP的簡介:
-
公開密鑰 和 共享密鑰
-
防火墻技術 - 百度百科
-
防火墻技術(包過濾)
Note:- 防火墻是位于兩個(或多個)網絡間,實施網絡間訪問控制的一組組件的集合,它是一套建立在內外網絡邊界上的過濾封鎖機制。防火墻的主要功能有:過濾掉不安全服務和非法用戶;控制對特殊站點的訪問;提供了監視Internet安全和預警的方便端點。
- 漏洞掃描系統通常是指基于漏洞數據庫,通過掃描等手段,對指定的遠程或者本地計算機系統的安全脆弱性進行檢測,發現可利用的漏洞的,利用漏洞掃描系統可以獲取某FTP服務器中是否存在可寫目錄的信息。
- 入侵檢測是防火墻的合理補充,幫助系統對付網絡攻擊,擴展了系統管理員的安全管理能力(包括安全審計、監視、進攻識別和響應),提高了信息安全基礎結構的完整性。它從計算機網絡系統中的若干關鍵點收集信息,并分析這些信息,看網絡中是否有違反安全策略的行為和遭到襲擊的跡象。入侵檢測被認為是防火墻之后的第二道安全閘門,在不影響網絡性能的情況下能對網絡進行監測,從而提供對內部攻擊、外部攻擊和誤操作的實時保護。
- 病毒防御系統是一個用來防止黑客、病毒、木馬的防御系統。
-
計算機病毒的6大特征
Note:- 病毒的特性:計算機病毒的特性包括隱蔽性、傳染性、潛伏性、觸發性和破壞性等
- 感染特洛伊木馬后的典型現象是有未知程序試圖建立網絡連接。
-
計算機病毒分類
Note:- 引導區病毒:破壞引導盤和文件目錄。
- 宏病毒:宏病毒感染的對象是使用某些程序創建的文本文檔、數據庫、電子表格等文件,比如破壞office相關文件,一般感染以doc為后綴名的文件。
- 特洛伊木馬病毒:特洛伊木馬是一種秘密潛伏且能夠通過遠程網絡進行控制的惡意程序。控制者可以控制被秘密植入木馬的計算機的一切動作和資源,是惡意攻擊者竊取信息的工具。比如X臥底,冰河。
- 蠕蟲病毒:蠕蟲程序駐于一臺或多臺機器中,它會掃描其他機器是否有感染同種計算機蠕蟲,如果沒有,就會通過其內建的傳播手段進行感染,以達到使計算機癱瘓的目的。比如紅色代碼、愛蟲病毒、熊貓燒香、Nimda病毒、愛麗茲病毒、震網病毒,歡樂時光等。
-
DDOS - 分布式拒絕服務攻擊
Note:- 拒絕服務(DOS): 對信息或其它資源的合法訪問被無條件地阻止。
- 會話攔截:未授權使用一個已經建立的會話。
- 修改數據命令:截獲并修改網絡中傳輸的數據命令。
- 系統干涉:指的是攻擊者獲取系統訪問權,從而干涉系統的正常運行,一般可以歸于被動攻擊。
拒絕服務,會話攔截和修改數據命令為主動攻擊,系統干涉為被動攻擊。
-
網絡安全管理(如何進行內防內控,強化訪問控制策略:訪問控制策略,網絡權限控制策略等)
Note:- 加強內防內控主要通過訪問授權、安全策略、安全檢查與行為審計等多種安全手段的綜合應用來實現。
- 終端接入的數量影響的是網絡的規模、數據交換的性能,不是內防內控關注的重點。
六、軟件工程
- 軟件開發過程模型——噴泉模型
- 軟件工程五大模型(瀑布 / 原型 / 漸增 / 螺旋 / 噴泉)
Note:- 螺旋模型考慮風險因素
- 敏捷開發方法 水晶法/Scrum/ASD(方法論和思想)
Note:- 極限編程是一種輕量級的開發方法,它提出了四大價值觀:溝通、簡單、反饋、勇氣。五大原則:快速反饋、簡單性假設、逐步修改、提倡更改、優質工作。“Extreme”(極限) 是指,對比傳統的項目開發方式,XP強調把它列出的每個方法和思想做到極限、做到最好;其它XP所不提倡的,則一概忽略(如開發前期的整體設計等)。一個嚴格實施XP的項目,其開發過程應該是平穩的、高效的和快速的,能夠做到一周40小時工作制而不拖延項目進度。
- 水晶法強調經常交付,認為每一種不同的項目都需要一套不同的策略、約定和方法論。水晶方法相較于XP,紀律性較弱,但其管理運作與團隊產出相協調。
- 并列爭球法(SCRUM)的核心是迭代、增量交付,按照30天進行迭代開發交付可實際運行的軟件。Scrum開發流程中的三大角色分別為產品負責人,流程管理員和開發團隊,開發方式包括站立會議,任務看板,計劃紙牌。
- 自適應軟件開發的核心是三個非線性的,重迭的開發階段:猜測、合作、學習。
- 敏捷開發方法XP的12個最佳實踐
- 數據流圖DFD(數據字典,結構化分析),軟件工程 – 數據流圖的畫法,軟件工程:數據流圖和結構圖怎么畫?
Note:- 數據流圖概念:
- 數據流圖是結構化分析的工具,結構化方法就是采用自頂向下逐層分解的思想進行分析建模的。隨著分解層次的增加,抽象的級別也越來越低,即越來越接近問題的解。
數據流圖建模應遵循:自頂向下、從抽象到具體的原則。 - 數據流圖中的基本圖形元素包括數據流、加工、數據存儲和外部實體。其中,數據流、加工和數據存儲用于構建軟件系統內部的數據處理模型,而外部實體表示存在于系統之外的對象,用來幫助用戶理解系統數據的來源和去向。
外部實體包括:人/物、外部系統、組織機構等。 - 數據源的起點和終點(外部實體)用矩形框表示,數據處理用圓角框表示,數據存儲用棧/隊列表示,數據流用箭頭表示。
- 數據流圖中的元素在數據字典中進行定義。
- 在繪制數據流圖時,應遵循父圖與子圖平衡的原則,所謂平衡是指父圖的輸入/輸出數據流與子圖的輸入/輸出數據流一致,有時看起來不一致,但是經過查數據字典可能發現是一致的。
- 數據流圖是結構化分析的工具,結構化方法就是采用自頂向下逐層分解的思想進行分析建模的。隨著分解層次的增加,抽象的級別也越來越低,即越來越接近問題的解。
- 結構圖概念:
- 結構化設計方法中使用結構圖來描述軟件系統的體系結構,指出一個軟件系統由哪些模塊組成,以及模塊之間的調用關系。
- 通常先根據軟件的功能需求繪制數據流圖,在繪制好數據流圖之后,分級繪制結構圖。 結構圖的基本成分包括模塊、調用和數據。
- 模塊是指具有一定功能并可以用模塊名調用的一組程序語句,如函數、子程序等,它們是組成程序的基本單元。
- 調用表示模塊之間的關系,用從一個模塊指向另一個模塊的箭頭來表示,其含義是前者調用了后者。
- 數據是指模塊調用過程中來回傳遞的信息,用帶注釋的短箭頭表示。
- 數據流圖概念:
- 集成測試 - 自頂向下 & 自底向上(樁函數模擬未開發的函數)
- 樁程序
- 軟件測試—白盒測試(先畫流程圖,再考慮路徑覆蓋還是語句覆蓋),參考語句覆蓋、條件覆蓋(分支覆蓋)、判定覆蓋、條件-判定覆蓋、組合覆蓋、路徑覆蓋 的區別
Note:- 路徑覆蓋:覆蓋被測試程序中所有可能的路徑。
- 條件覆蓋:每一個判定語句中每個邏輯條件的各種可能的取值至少滿足一次(條件語句覆蓋,每個判定中包含多個條件,eg: a > 0 && b > 0)。
- 分支覆蓋:又叫做判定覆蓋,被測程序每個判定表達式至少獲得一次“真”值和“假”值。
- 語句覆蓋:被測試程序中的每條語句至少執行一次。
- 模塊的作用范圍與控制范圍
- McCabe度量法
Note:- 在2017年上半年軟件設計師上午試卷36題中,對于路徑個數的計算,即計算從開始節點出發到結束節點的路徑個數(這里計算共4條),而MaCabe度量法計算環路復雜度時,開始和結束節點納入節點個數的計算中(即13 - 11 + 2 = 4)。
- 如果題目只提供代碼,不要忘了將每一個語句看成是一個節點,并補充畫上“開始”和“結束”節點。
- 軟件工程中的所有耦合類型,軟件設計模塊之間7種耦合關系,7大內聚類型(模塊的聯系程度)
Note:- 7大內聚類型:
- 1)功能內聚:完成一個單一功能,各個部分協同工作,缺一不可。
- 2)順序內聚:處理元素相關,而且必須順序執行
- 3)通信內聚:所有處理元素集中在一個數據結構的區域上
- 4)過程內聚:處理元素相關,而且必須按特定的次序執行
- 5)瞬時內聚(時間內聚):所包含的任務必須在同一時間間隔內執行。
- 6)邏輯內聚:完成邏輯上相關的一組任務。
- 7)偶然內聚(巧合內聚):完成一組沒有關系或松散關系的任務(不是內容內聚)
- 7大耦合類型(傳參3,直接訪問3):
根據耦合性從低到高為:非直接耦合、數據耦合、標記耦合、控制耦合、外部耦合、公共耦合和內容耦合。- 1)非直接耦合:彼此間沒有直接關系,而是通過主模塊調用來建立兩模塊間的聯系;
- 2)數據耦合:彼此間通過參數傳遞進行信息交換;
- 3)標記耦合:彼此間通過 參數表(數據結構) 傳遞進行信息交換
- 4)控制耦合:模塊A通過傳遞標志變量參數(flag,或者叫做控制變量),來控制模塊B執行某一個功能。
- 5)外部耦合:一組模塊訪問同一個全局變量(非全局數據結構)
- 6)公共耦合:一組模塊訪問同一個公共數據環境(全局數據結構,共享通信區等)
- 7)內容耦合:模塊A 直接訪問模塊B的內部數據;一個模塊不通過正常入口轉到另一個模塊內部;兩個模塊有一部分程序代碼重疊;一個模塊有多個入口。
- 軟件設計原則始終強調高內聚、低耦合的設計原則,具體包括:
1)保持模塊的大小適中
2)盡可能減少調用的深度
3)多扇入,少扇出:
扇入是指該模塊被多少個上級模塊給調用,扇入大表示模塊的復用程度高。
扇出是指該模塊直接調用的下級模塊的個數,扇出大表示模塊的復雜度高,需要控制和協調過多的下級模塊。參考什么是扇入和扇出?
4)單入口,單出口:
單入口單出口指為了保證開發程序的質量,要求過程中的數據流控制是必須在固定的程序段入口進入, 固定的出口返回,不允許在編程中隨意使用數據。參考什么是單入口單出口
5)模塊的作用域應該在模塊之內
6)功能應該是可以被預測的。 - 耦合性也叫塊間聯系,指軟件系統結構中各模塊間相互聯系緊密程度的一種度量。
模塊間耦合的高低取決于模塊間接口的復雜性,調用的方式以及傳遞的信息(模塊被調用的次數),并不取決模塊的功能數。
- 7大內聚類型:
- 軟件容錯技術(恢復能力) - (實現容錯的主要手段是冗余)
- 冗余技術 - 結構 / 時間 /信息冗余
- 軟件調試的具體方法(演繹法,歸納法等)
- CMM(軟件能力成熟度模型)
Note:- 初始級(無管理,無定義):
- 對于軟件的管理制度較為缺乏,過程缺乏定義。
- 可重復級(有管理制度):
- 管理制度化,建立了基本的管理制度以及規程,管理工作有章可循。
- 已定義級(有評審制度):
- 在開發的過程中,技術工作以及管理工作開始文檔化和標準化。采用了評審的制度保證了軟件質量(關注過程的組織標準化和部署)。
- 已管理級(有數據分析,產品質量監控過程):
- 能夠制訂效率目標并且收集和測試,可以利用統計數據進行相應的改進,對于軟件進程以及產品質量有定量的理解和控制(過程制度化)。
- 優化級(過程優化):
持續改進軟件的過程,效率以及質量都穩步提升。
- 初始級(無管理,無定義):
- 模型驅動技術
- 軟件維護類型
Note:- 改正性維護是指改正在系統開發階段已發生而系統測試階段尚未發現的錯誤(維護工作量的17%~21%)。
- 適應性維護是指使用軟件適應信息技術變化和管理需求變化而進行的修改(維護工作量的18%~25%)。
- 完善性維護是為擴充功能和改善性能而進行的修改,主要是指對已有的軟件系統增加一些在系統分析和設計階段中沒有規定的功能與性能特征(維護工作量的50%~60%)。
- 預防性維護為了改進應用軟件的可靠性和可維護性,為了適應未來的軟硬件環境的變化,應主動增加預防性的新的功能,以使應用系統適應各類變化而不被淘汰(維護工作量的4%)。
- 軟件維護工具(版本控制/文檔分析/開發信息庫/逆向工程/再工程,不包括配置管理)
- 軟件可靠性和可用性的區別(可靠性強調在時間間隔內有效,可用性強調在某時刻有效)
Note:- 軟件產品的可靠性指的是:軟件產品與在規定的一段時間內和規定的條件下維持其性能水平有關的能力,是一個系統對于給定時間間隔內、在給定條件下無失效運作的概率。它的子特性包括:成熟性、容錯性、易恢復性
- 對于軟件可靠性與軟件潛在錯誤的數量、位置有關,并且與軟件產品的使用方式有關,對于軟件產品的開發方式并不能決定軟件產品的可靠性。
- 若MTTF和MTTR分別表示平均無故障時間和平均修復時間,則可用公式MTTF / (1 + MTTF)計算軟件可靠性;MTBF/(1+MTBF)可以用來度量可用性;1/(1+MTTR)可以用來度量可維護性。參考MTTR、MTTF、MTBF詳解
- 計算機系統是一個復雜的系統,而且影響其可靠性的因素也非常繁復,很難直接對其進行可靠性分析。參考預測可靠性模型公式_《可靠性設計》—可靠性預計與分配
- 若采用串聯方式,則系統可靠性為每個部件的乘積 R=R1×R2×R3×...×RnR=R_1 \times R_2 \times R_3 \times...\times R_nR=R1?×R2?×R3?×...×Rn?;
- 若采用并聯方式,則系統的可靠性為R=1?(1?R1)×(1?R2)×(1?R3)×...×(1?Rn)R=1-(1- R_1)\times(1-R_2)\times(1-R_3)\times...\times(1-R_n)R=1?(1?R1?)×(1?R2?)×(1?R3?)×...×(1?Rn?)。
- 若采用串并聯方式(假設兩個并聯1個串聯),則系統可靠性為(1?(1?R)2)×R×(1?(1?R)2)(1 - (1 - R)^2) \times R \times(1 - (1 - R)^2)(1?(1?R)2)×R×(1?(1?R)2)
- 軟件相關文檔匯總
Note:- 概要設計說明書:主要說明系統的功能分配、模塊劃分、程序的總體結構、I/O及接口設計、運行設計、數據結構設計,數據庫設計和錯誤處理設計等內容;(結構圖)
- 詳細設計說明書:著重描述每個模塊是如何實現的,對模塊內的數據結構進行設計,對數據庫進行物理設計,對每個模塊進行詳細的算法設計,代碼設計、輸入輸出設計、用戶界面設計等其他設計;
- 用戶手冊:幫助用戶了解軟件的使用,需要描述軟件的功能、性能和用戶界面;
- 用戶需求說明書:是開發人員和用戶經過充分溝通后對軟件需求的共同理解,主要說明軟件的功能、性能和運行環境等內容。
- 軟件評審(管理評審,技術評審,文檔評審和過程評審)
Note:- 技術評審的輸入內容包括需求文檔、源代碼、測試用例等,技術評審的輸出是技術評審報告。
- 正式的技術評審FTR(Formal Technical Review)是軟件工程師組織的軟件質量保證活動,技術評審的指導原則是
- 評審軟件產品,不要涉及對軟件生產者能力的評價;
- 評審前要制定嚴格的評審計劃,并嚴格遵守預計的日程安排;
- 對評審中出現的問題要記錄在案,不要過多地討論解決方案,把問題留給軟件生產者來解決:
- 要限制參與者人數,并要求參加評審的人員在評審會之前仔細閱讀文檔,做好充分的準備。
- 軟件設計的質量評審包括(不包括功能與模塊之間的對應關系):
- 評價軟件的規格說明是否合乎用戶的要求,即總體設計思想和設計方針是否正確。
- 評審可靠性,即是否能避免輸入異常(錯誤或超載等)、硬件失效及軟件失效所產生的失效,一旦發生應能及時采取代替手段或恢復手段。
- 評審保密措施實現情況,即是否提供對使用系統資格、對特定數據的使用資格及特殊功能的使用資格進行檢查,在查出有違反使用資格情況后,能否向系統管理人員報告有關信息,是否提供對系統內重要數據加密的功能。
- 評審操作特性實施情況,即操作命令和操作信息的恰當性,輸入數據與輸入控制語句的恰當性,輸出數據的恰當性,應答時間的恰當性等。
- 評審軟件是否具有可修改性、可擴充性、可互換性和可移植性。
- 評審軟件是否具有可測試性。
- 評審軟件是否具有復用性。
- 軟件風險和風險管理,PMP之項目風險管理
Note:- 一般認為軟件風險包含兩個特性:不確定性和損失,不確定性即指風險可能發生也可能不發生。
- 如果風險可以預測,可以避免其發生,有些風險可以預測但無法避免。
- 風險的優先級通常是根據風險暴露設定的。
- 風險暴露又稱風險曝光度,測量的是資產的整個安全性風險,它將表示實際損失的可能性與表示大量可能損失的資訊結合到單一數字評估中。在形式最簡單的定量性風險分析中,風險曝光度可透過將風險可能性及影響相乘算出。風險曝光度(Risk Exposure) = 錯誤出現率(風險出現率)× 錯誤造成損失(風險損失)。
- ISO/IEC 9126軟件質量模型
Note:- ISO/IEC 9126軟件質量模型中可靠性質量特性是指在規定的一段時間內和規定的條件下,軟件維護其性能水平有關的能力。包括的子特性有成熟性、容錯性(故障)和易恢復性(失效)。
- 易使用性的子特性包括:易學性,易理解性,易性操作性。
- 可維護性的子特性包括:易分析性
- 軟件測試:失效,故障,缺陷,錯誤
Note:- 軟件失效:失效是面向用戶的,軟件在運行時偏離了用戶需求,比如登錄功能失效
- 軟件故障:故障是面向開發者的,程序在執行時輸出錯誤結果,比如數組越界,程序崩潰,功能失效等
- 軟件缺陷:軟件缺陷是存在于軟件(文檔、數據、程序)之中的那些不希望或不可接受的偏差。缺陷是錯誤的結果(缺陷是錯誤的表現),缺陷很難捕獲。
當一個軟件缺陷被激活時,便產生一個軟件故障;同一個軟件缺陷在不同條件下被激活,可能產生不同的軟件故障。 - 軟件錯誤:軟件錯誤即人為錯誤,指軟件開發人員在開發軟件的過程中無意間犯下的技術錯誤。
- 四者的因果關系(->表示導致):錯誤 -> 缺陷 -> 故障 -> 失效
- 決策表是什么?怎么使用決策表?(條件和事件豎著來標識,對于事件相同但條件不同的列可以進行合并,進而計算條件組合數)
- 「軟件項目管理」成本估算模型——Walston-Felix模型 和 COCOMO Ⅱ模型(COCOMO-81包括基本/中級/高級,COCOMO Ⅱ模型中項目估算的三個階段:規劃 / 設計/ 開發階段,不同階段使用不同估算單位)
Note:- IBM模型和基本COCOMO模型為靜態單變量模型
- Putnam模型為動態多變量模型(軟件方程和人力增加方程,適合70000行以上的項目)
- 中級COCOMO模型在基本模型中已計算的軟件開發工作量的基礎上,在用涉及產品、硬件、人員、項目和項目的15個成本驅動因素來調整工作量的估算。高級COCOMO模型不但包括中級COCOMO模型的所有特性,而且為上述15個因素在軟件生存周期的不同階段賦予了不同的權重。
- 人機交互“黃金三原則”(用戶操縱控制、減輕用戶的記憶負擔、保持界面的一致性)
七、面向對象
-
uml邊界類例子_UML中邊界對象、控制對象、實體對象
-
設計模式的3大類型和6大原則(先判斷是創建型/結構型/行為型,再確定是哪個模式)
-
組件聚合原則(復用/發布原則,共同閉包原則,共同復用原則)
Note:面向對象設計的幾大原則- 單一職責原則:在面向對象設計時,就一個類而言,應該僅有一個引起變化的原因。
- 里氏替換原則:子類可以替換父類。
- 依賴倒置原則:要依賴于抽象,而不是具體實現;針對接口編程,不要針對實現編程(沒有強調不強迫客戶依賴于他們不用的方法)。
- 接口分離原則:使用多個專門的接口要比使用單一的總接口要好。不強迫客戶依賴于他們不用的方法,即:依賴于抽象,不依賴于具體,同時在依賴級別不應有對于細節的依賴。
- 開放-封閉原則:對擴展開放,對修改關閉。
- 共同封閉原則:包中的所有類對于同一性質的變化應該是共同封閉的。一個變化若對一個包產生影響,則將對該包里的所有類產生影響,而對于其他的包不造成任何影響。
- 共同重用原則:一個包里的所有類應該是共同重用的。如果重用了包里的一個類,那么就要重用包中的所有類。
-
JAVA實現23種設計模式,Java中常用的設計模式
Note:- 創建型對象模式:單例模式,簡單工廠模式,抽象工廠模式,生成器模式,原型模式
- 結構型對象模式:組合模式,適配器模式,裝飾者模式,代理模式,外觀模式,橋接模式,享元模式
- 行為型對象模式:策略模式,模板方法模式,觀察者模式,迭代器模式,責任鏈模式,命令模式,備忘錄模式,狀態模式,訪問者模式,中介者模式,解釋器模式
-
觀察者模式,狀態模式(行為型),建造者(生成器)模式
-
橋接模式(結構型,接口和實現類),責任鏈模式(行為型),迭代器模式(行為型)
-
組合模式(結構型;部分整體模式;依據樹形結構來組合對象,用來表示部分以及整體層次)
Note:- 原型模式的適用場景:當一個系統應該獨立于它的產品創建、構成和表示時。
- 工廠模式的適用場景:當一個類希望由它的子類來指定它所創建的對象的時候。
- 抽象工廠模式的適用場景:當要強調一系列相關的產品對象的設計以便進行聯合使用時
- 生成器模式的適用場景:當構造過程必須允許被構造的對象有不同的表示時
-
MVC 模式
-
面向對象分析的5個活動(識別對象,類定義與類繼承,對象間的通信)
Note:- 認定對象:在應用領域中,按自然存在的實體確立對象。在定義域中,首先將自然存在的“名詞”作為一個對象,這通常是研究問題定義域實體的良好開始。通過實體間的關系尋找對象常常沒有問題,而困難在于尋找(選擇)系統關心的實質性對象。實質性對象是系統穩定性的基礎。例如在銀行應用系統中,實質性對象應包含客戶賬務、清算等,而門衛值班表不是實質性對象,甚至可不包含在該系統中。
- 組織對象:分析對象間的關系,將相關對象抽象成類,其目的是為了簡化關聯對象,利用類的繼承性建立具有繼承性層次的類結構。抽象類時可從對象間的操作或一個對象是另一個對象的一部分來考慮;如房子由門和窗構成,門和窗是房子類的子類。由對象抽象類,通過相關類的繼承構造類層次,所以說系統的行為和信息間的分析過程是一種迭代表征過程。
- 描述對象的相互作用:描述出各對象在應用系統中的關系。如一個對象是另一個對象的一部分,一個對象與其他對象間的通信關系等。這樣可以完整地描述每個對象的環境,由一個對象解釋另一個對象,以及一個對象如何生成另一個對象,最后得到對象的界面描述。
- 確定對象的操作。
- 定義對象的內部信息。
識別對象目的是為了定義類,而類可以分為三種:實體類、接口類(邊界類)和控制類,所以一開始就需要對對象進行好好分析,接著組織對象(創建類,類繼承),描述對象相互作用(傳參或者設置為類屬性)
-
UML中類之間的關系
Note:-
類與類之間6種關系:依賴(帶箭頭的虛線),關聯(不帶箭頭的實線),聚合(空心菱形,has a),組合(實心菱形,contain a),泛化 / 繼承(空心三角形,實線),實現(空心三角形,虛線)(在UML中聚合和組合表示容易記錯,這里用諧音來記:聚(ju 類似 zuo)空;組實(主食),因此轉化成“做空,主食”來記;兩者的強弱等級也容易記錯,這里可以通過字典序j < z,判斷聚合的關聯等級低于組合的等級)
-
聚合和組合的區別:兩者都是整體和部分之間的關系,但在聚合關系中,成員對象可以脫離整體對象而獨立存在,例如,學校與老師的關系;在組合關系中,一旦整體對象不存在,部分對象也將不存在,部分對象不能脫離整體對象而存在。例如,頭和嘴的關系
-
類與類之間的6種關系,按相互聯系程度由強至弱依次為:繼承/泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴
-
依賴是通過類方法來調用,即其他類的對象通過方法參數與當前類交互;關聯是通過類的實例化來創建,即對于兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關系時(類A對象是類B的成員變量),這兩個對象之間為關聯關系。關聯關系分為單向關聯和雙向關聯,在java中:
- 單向關聯表現為:類A當中使用了類B,其中類B是作為類A的成員變量。
- 雙向關聯表現為:類A當中使用了類B作為成員變量;同時類B中也使用了類A作為成員變量。
因此組合和聚合也屬于關聯,只不過組合和聚合強調類之間的主次關系(只能在類的設計階段看出來,僅通過代碼看不了),而關聯沒有。組合例子:人和人的生命;聚合例子:筆和筆芯;關聯的例子:筆記本和鼠標;參考關聯,聚合,組合三者之間的關系
A的某個屬性是類B的一個對象,并且類A對象消失時,類B對象也隨之消失,則類A與類B的關系應為組合關系。
UML三種關系簡化為繼承(實現,泛化),關聯和依賴,參考UML類圖的依賴和關聯詳解(含代碼)
-
-
UML之狀態圖
Note:- UML狀態圖(state diagram) 展現了一個狀態機,它由狀態(簡單狀態和組合狀態)、轉換(遷移)、事件和活動組成。
當某個事件(滿足監護條件) 發生后,對象的狀態將發生變化。轉換是兩個狀態之間的一種關系,表示對象將在源狀態中執行一定的事件或動作,并在某個 特定事件發生而且某個特定的監護條件滿足時離開當前狀態而進入目標狀態。
由于狀態可以嵌套,所以活動可以在狀態內執行,也可以在狀態遷移時執行。(2019下半年41題) - [tries<3]和tries++分別表示監護條件和轉換,帶有【】表示限制條件,沒帶【】的具體操作表示一個狀態到另外一個狀態的轉換。
- UML狀態圖(state diagram) 展現了一個狀態機,它由狀態(簡單狀態和組合狀態)、轉換(遷移)、事件和活動組成。
-
時序圖,時序圖學習2_組成元素之角色和對象
Note:- 同步消息進行阻塞調用,調用者中止執行,等待控制權返回,需要等待返回消息;
- 異步消息的調用者是發送消息后繼續執行,不引起調用者的阻塞,也不必等待返回消息。
- 從圖示中判斷異步消息,就是找沒有實線返回消息的請求消息。
從概念上講,就是不需要等待返回消息就可以去做其他事情的請求消息就是異步消息。有返回消息的就是同步消息。
-
UML圖:活動圖詳細介紹(動作狀態、活動狀態、起始點、結束點、分支與合并、泳道和對象流)
Note:- 對一個復雜用例中的業務處理流程進行進一步建模的最佳工具是UML活動圖。
- 活動圖 和 狀態圖的區別:
- 1)活動圖著重表現從一個活動到另一個活動的控制流,是內部處理驅動的流程,強調對象間的控制流程。
- 2)狀態圖著重描述從一個狀態到另一個狀態的流程,主要有外部事件的參與。
- 活動圖 和 時序圖的區別:
- 1)時序圖(順序圖)著重描述處理過程,它的主要控制結構是順序、分支和循環,各個處理之間有嚴格的順序和時間關系(時序圖中每個參與者都有一條生命線,表示處理的時間段,而且具有循環分支結構)。
- 2)活動圖(流程圖)描述的則是對象活動的順序關系所遵循的規則,它著重表現的是系統的行為,而非系統的處理過程。
- 3)活動圖能夠表示并發活動的情形,時序圖不能。
-
軟考必考題型之UML圖形
Note:UML中提供了多種建模系統需求的圖,體現系統的靜態方面和動態方面。- 類圖(Class Diadram)展現了一組對象、接口、協作和它們之間的關系。在面向對象系統的建模中,最常見的就是類圖,它給出系統的靜態設計視圖。
- 對象圖(Object Diagram)展現了某一時刻一組對象以及他們之間的關系
對象圖描述了在類圖中所建立的事物的實例的靜態快照,給出系統的靜態設計視圖或靜態進程視圖。 - 用例圖(Use Case Diagram)展現了一組用例、參與者(Actor)以及它們之間的關系。這個視圖主要支持系統的行為,即該系統在它的周邊環境的語境中所提供的外部可見服務。用例圖用于對一個系統的需求進行建模,包括說明這個系統應該做什么(從系統外部的一個視點出發), 而不考慮系統應該怎樣做。
- 序列圖(順序圖)展示的是一個用例與多個對象的行為(對單個用例圖的擴展)
- 活動圖(activity diagram) 將進程或其他計算結構展示為計算內部一步步的控制流和數據流。活動圖專注于系統的動態視圖。它對系統的功能建模和業務流程建模特別重要,并強調對象間的控制流程。
- 交互圖用于對系統的動態方面進行建模。一張交互圖表現的是一個交互,由一組對象和它們之間的關系組成,包含它們之間可能傳遞的消息。交互圖表現為通信圖、交互概覽圖和時序圖,每種針對不同的目的,能適用于不同的情況。
- 通信圖是強調接收和發送消息的對象的結構組織的交互圖;
- 交互概覽圖強調控制流的交互圖。
- 時序圖/順序圖(Timing Diagram)關注沿著線性時間軸、生命線內部和生命線之間的條件改變。
系統順序圖和順序圖的區別參考系統順序圖與順序圖區別
- 部署圖(Deploy Diagram)是用來對面向對象系統的物理方面(軟件和硬件)建模的方法,展現了運行時處理結點以及其中構件(制品)的配置。
- 組件圖(Component Diagram)展現了一組組件之間的組織和依賴。
- 構件應是可替換的;
- 構件表示的是物理模塊而不是邏輯模塊;
- 構件應是組成系統的一部分;
- 構件與類處于不同的抽象層次;
-
模型驅動架構(模型驅動分析方法包括 結構化分析,面向對象分析),結構化開發方法 & 數據流圖
-
C++中的public,protected,private繼承機制 - (C++默認使用私有繼承,三者區別在于 派生類會將父類的成員轉換成那種類型 & 對象訪問權限)
-
java的繼承機制
Note:- java默認使用私有繼承,因此子類將父類的public,protected方法變成子類的private方法,此時需要重寫父類中的這些public,protected方法,才能讓對象訪問到。
- 對于java的成員屬性和方法,如何不加任何訪問修飾符,通常稱為“default訪問模式“。該模式下,只允許在同一個包中進行訪問,訪問權限僅次于private。
- 與C++不同的是,java只允許單繼承一個父類,但是接口允許多繼承。
- 抽象類不能直接進行實例化。
- 特殊 / 一般關系也叫做泛化(Generalization)關系,可以理解成:特殊元素(即子類對象)是一般元素(即父類對象)的一種特殊體現。
-
java中的public,protected,private,default詳解(對象中的成員是否可訪問)
-
重寫和重載及其區別
-
參數多態、包含多態、過載多態和強制多態,C++>多態,強制多態,參數類型多態,重載多態,包含多態(運行時多態)
Note:- 強制多態:強制類型轉換
- 過載多態:函數重載
- 包含多態:子類對父類方法的重寫
- 參數多態:泛型
- 特定多態包含 強制多態 和 重載多態, 通用多態包含參數多態 和 包含多態。
其中在面向對象方法中,動態綁定是實現多態的基礎(通過動態綁定機制,在調用子類對象方法或屬性時,會選擇調用子類還是父類的方法或屬性),換句話說,運行時結合是動態綁定(泛化過程的實現),編譯時結合是靜態綁定。參考java的動態綁定機制(不是動態分配)(2019下半年40題)
八、數據結構與算法基礎
- 逆波蘭表達式(后綴表達式)
- Gantt圖與Pert圖 - 關鍵路徑計算
- 經典算法之關鍵路徑(拓撲結構,最早 - 前驅max,最遲 - 后繼min)
- 計算AOE網關鍵路徑
Note:-
參考2019下半年第18題,可以先求解關鍵路徑(最長路徑)確定里程碑節點,接著利用里程碑節點子圖,計算"活動BE最多可以晚 ()天開始而不影響工期"
比如關鍵路徑為:A-B-F-J-L和A-D-G-I-J-L,那么計算BE最晚推遲幾天動工時可以只考慮B-F-J-L和B-E-H-J兩個子圖,發現(6+5)-(2+2+5) = 2即為答案。
-
- 最優二叉樹(哈夫曼樹)
- 一文詳解:二叉樹之前序遍歷、中序遍歷、后序遍歷(相對root節點位置而言)
- 二叉排序樹 (平衡二叉排序樹 - 二分查找)
- 平衡二叉樹(判斷非平衡類型,找最小非平衡子樹)
Note:- 在二叉搜索樹下插入新的節點,并判斷插入到節點是否導致非平衡,如果非平衡,判斷是屬于哪種類型:LL,RR,LR,RL,其中LL表示新插入的節點位于根結點左孩子(L)的左子樹(L)上。
- 從新加入的節點開始,向上尋找最小非平衡子樹,以子樹的根結點為基準,使用LL/RR/LR/RL進行調整。
- 其中LR類型的非平衡可以先通過LL調整方式,再通過RR調整方式進行調整;RL類型可以先通過RR,再通過LL進行調整。
- 選擇排序為什么不穩定
- 最長公共子序列(LCS) - 動態規劃
- 回溯法(深搜,全解)和分支限界法(廣搜,一解),分支限界法詳解1,分支定界算法求解線性規劃問題,分治法 / 動態規劃法 / 貪心法 / 回溯法 / 分支限界法的區別和聯系以及適用情況
- 鄰接矩陣(稠密圖)/鄰接表(稀疏圖)
- 連通圖、強連通圖、弱連通圖、生成樹、完全圖
Note:- 連通圖:圖中任意兩點之間均至少有一條通路,否則稱為不連通圖
- 強連通圖:在有向圖中, 若對于每一對頂點v1和v2, 都存在一條從v1到v2和從v2到v1的路徑,則稱此圖是強連通圖。
- 強連通和弱連通的概念只在有向圖中存在。
- 六大排序算法:插入/ 希爾 / 選擇 / 冒泡 / 堆 / 快速排序,八大排序算法的比較(歸并排序和堆排序z在最好和最壞的情況下,時間復雜度都為O(nlgn)),常見排序算法的時間復雜度、空間復雜度、穩定性比較
Note:- 不同排序算法在時間復雜度,空間復雜度,穩定性上的比較:
- 為什么說選擇排序是不穩定的呢?舉個例子,序列arr = [5 8 5 2 9],我們知道第一遍選擇第1個元素5會和2交換,那么原序列中兩個5的相對前后順序就被破壞了,所以選擇排序是一個不穩定的排序算法。參考選擇排序為什么是不穩定的?
- 為什么說冒泡排序是穩定的呢?因為每次都是從子序列第一個元素開始交換,最終得到子序列最大值,比如8,5(2)交換并不會影響5(1),5(2)的順序。
- 歸并排序可以通過手搖算法將空間復雜度降到O(1),但是時間復雜度會提高。
- 基數排序時間復雜度為O(N*M),其中N為數據個數,M為數據位數
- 希爾排序流程(間隔排序):假設原始序列為3,7,6,5,4
- 第一趟間隔為 5 / 2 = 2:即分別依次對3,6,4,7,5排序,得到3,4,6和5,7
- 第二趟間隔為 2 / 2 = 1:即對3,4,6,5,7依次進行排序
- 桶排序流程:假設原始序列為1,45,32,23,22,31,47,24,4,15,假設按十位數分為5個桶
- 第一趟:將原始序列逐一放入桶中,序列為:1,4 | 15 | 23,22,24 | 32,31 | 45,47
- 第二趟:對每個桶分別進行排序。
- 基數排序流程(桶排序的擴展):假設原始序列為1,45,32,23,22,31,47,24,4,15,由于最大只有十位數,因此可以進行兩次桶排序:
- 第一趟對個位數進行分桶:依次放入1,31 | 32,22 | 23 | 24,4 | 45,15 | 47,得到序列為1,31,32,22,23,24,4,45,15,47
- 第二趟對十位數進行分桶:依次放入為1,4 | 15 | 22,23,24 | 31,32 | 45,47,輸出即為有序序列
- 快速排序流程:假設原始序列為1,45,32,23,22,31,47,24,4,15,策略是選擇每個分組中的首元素作為基數,每一趟執行順序為:假設左i右j,循環依次←\leftarrow←(j--)找比基數小的值并與i替換,→\rightarrow→(i++)找比基數大的值并與j替換,每一趟結束會得到{比基數小},基數,{比基數大}
- 第一趟,基數為1:序列沒變,即{1},{45,32,23,22,31,47,24,4,15}
- 第二趟,基數為45,子序列排序為:{15,32,23,22,31,4,24},45,{47}
…
- 堆排序流程:假設原始序列為1,45,32,23,22,31,47,24,4,15
- 第一趟,逐一構建大根堆,最終得到:47,24,45,23,22,31,32,1,4,15,接著將堆頂47與堆底15進行交換。
- 第二趟:對子序列重新構造大根堆,再交換堆頂與堆底元素…
- 不同排序算法在時間復雜度,空間復雜度,穩定性上的比較:
- 歸并排序詳解(分治思想;對于兩個排好序的子區間([2,6]和[4,8]),需要開辟一個O(n)的數組,以及2個指針來完成兩個子區間的歸并)
- 堆排序算法(圖解詳細流程,插入一個元素的時間復雜度為O(lgn))
Note:- 先依次掃描數組中的每一個元素,每一次掃描完成當前索引構成的子數組的堆的初始化(升序采用大頂堆,降序采用小頂堆)
- 大頂堆 和 小頂堆在數組中是亂序的,為了讓數組元素有序,交換堆頂和堆底元素,再從剩余元素中重新調整成堆。
- 堆排序,計數排序,桶排序,基數排序
- 線性表: 順序表和鏈表詳解
- 雙端隊列梳理分析(無受限/輸入受限/輸出受限的雙端隊列)
- 算法的時間復雜度(遞歸如何計算時間復雜度),算法空間復雜度(額外添加的變量個數),遞歸算法時間復雜度分析
- 圖的鄰接表表示法,有向圖的鄰接矩陣、鄰接表和逆鄰接表
Note:- 圖的遍歷是指從給定的源點出發,沿著某條搜索路徑對每一個頂點進行訪問且僅訪問一次的過程,而不是“從給定的源點出發對每一個頂點僅訪問一次的過程”,因此環路不影響圖的遍歷。
- 無向圖和有向圖都可以用鄰接表和鄰接矩陣表示,深度優先/廣度優先都適用于無向圖的遍歷。
- 無向圖鄰接表的存儲空間為n + 2e,鄰接矩陣的存儲空間為n2n^2n2。因此鄰接矩陣多用于邊多的稠密圖;而鄰接表多用于邊少的稀疏圖。
- 有向圖鄰接表找出度易,找入度難;逆鄰接表找入度易,找出度難。
- 使用鄰接表存儲結構,深度優先遍歷和廣度優先遍歷運算的時間復雜度均為O(n+e)O(n + e)O(n+e)。
- 樹的三種存儲方式,樹的三種存儲結構
Note:- 雙親表示法用數組實現,容易查找當前節點的父節點。
- 孩子表示法用數組和單鏈表來實現,該節點指向第一個孩子,其他孩子依次用鏈表串起來,容易查找當前節點的孩子節點。
- 孩子兄弟表示法用二叉鏈表來實現,該節點左指針指向第一個孩子,右指針指向它的兄弟節點,容易查找當前節點的孩子節點和兄弟節點。
- 圖的經典四大算法-Prim和Kruskal,Dijkstra和Floyd算法,參考【數據結構】克魯斯卡爾(Kruskal)算法 —PK— 普里姆(Prim)算法,Dijkstra算法和Floyd算法詳解
Note:-
最小生成樹算法:
-
Prim:從任意頂點出發選擇與當前頂點集最近的一個頂點(記憶方法:prim 和 prince相似,prince有家族,所以是prim是頂點集算法)
構建最小生成樹的步驟:-
在生成樹的構造過程中,圖中n個頂點分屬兩個集合:已落在生成樹上的頂點集合U 和 尚未落在生成樹上的頂級集合V-U,則應在所有連通U中頂點和V-U中的頂點的邊中選取權值最小的邊。
-
-
Kruskal:從邊開始,把所有的邊按照權值先從小到大排列,接著按照順序選取每條邊,如果這條邊的兩個端點不屬于同一集合,那么就將它們合并(記憶方法:Kruskal中有ru,聯想ruler,所以是基于邊的貪心算法)
構建最小生成樹的步驟:- T的初始化狀態 T = (V, 空 ) ,即最小生成樹T是圖G的生成零圖。
- 將圖G中的邊按照權值從小到大的順序排序
- 依次選取每條邊,若選取的邊未使生成樹T形成回路,則加入TE中,否則舍棄。直至TE中包含n-1條邊為止。
兩者均采用貪心思想。
-
-
單源最短路徑(假設以v1v_1v1?為起點,求v1v_1v1?到各頂點的最短路徑)vs 任意點最短路徑:
-
Dijkstra算法是單源最短路徑算法:把網中所有的頂點分成兩個集合S和T、S集合的初態只包含頂點v0, T集合的初態為網中除v0之外的所有頂點。凡以v0為源點,已經確定了最短路徑的終點并入S集合中(記憶方法:Dijkstra中有Tesla(斯特拉 = 特斯拉),聯想到開車尋路,即兩點的最短路徑問題,可以和prim區分開)
-
Floyd算法是任意點最短路徑算法:核心代碼就有五行,主要用公式min(Dis(i,j),Dis(i,k)+Dis(k,j))min(Dis(i,j),Dis(i,k)+Dis(k,j))min(Dis(i,j),Dis(i,k)+Dis(k,j))來不斷優化帶權鄰接矩陣,最后得到矩陣就是每對頂點之間的最短距離了
Dijkstra算法采用貪心思想,而Floyd算法采用動態規劃思想。
-
-
- Hash沖突,數據結構 - 散列表(沖突解決方法 & 裝填因子)
Note:- 關鍵字e的同義詞,指的是其他關鍵字利用哈希函數進行求值時,得到的函數結果與e是一致的,此時這些關鍵字就是e的同義詞。在哈希表查找關鍵字e時成功且經過多次比較,可以知道經過計算e的位置。
- 采用線性探測法解決哈希沖突,此時該位置對同義詞開放,對非同義詞也是開放的,也就是說,其他非同義關鍵字在使用線性探測法解決沖突時,也有可能直接占據該位置。
九、程序設計語言
-
有限自動機;正規式->NFA->DFA->最小化DFA->詞法分析器
Note:- 不確定的有限自動機(NFA):NFA是一個五元組,M=(S,Σ,move,s0,F)
- S是有限個狀態的集合
- Σ是有限個輸入字符(包括ε)的集合
- move是一個狀態轉移函數,move(si,ch) = sj表示當前狀態si下若遇到輸入字符ch,則遷移到狀態sj
- s0是唯一的初態
- F是終態集,它是S的子集,包含了所有的終態
- 確定的有限自動機(DFA):DFA是NFA的特例,其特點是某個狀態通過指定字符轉移到下一個狀態具有確定性,即對每一個狀態s和每一個字符a,最多有一個下一個狀態。
- NFA 和 DFA 能識別的字符串從初始態出發,到終止態結束(期間可多次轉移至初始態或終止態)
- 若兩個FA識別同一個正規集,則這兩個FA等價。對于每個NFA,都存在與之等價的DFA。
- 不確定的有限自動機(NFA):NFA是一個五元組,M=(S,Σ,move,s0,F)
-
語法分析器的輸入
Note:-
詞法分析是編譯過程的第一階段,其任務是對源程序從前到后(從左到右)逐個字符地掃描,從中識別出一個個的“單詞”符號(2019下半年20題中,詞法分析輸出的結果為 記號流,不是字符流(Java Reader)。
完成的工作:檢測非法字符、單詞拼寫錯誤等 -
語法分析的任務是在詞法分析的基礎上,根據語言的語法規則將單詞符號序列分解成各類語法單位,如“表達式”、“語句”和“程序”等。
完成的工作:標點符號錯誤、表達式中缺少操作數、括號不匹配等有關語言結構上的錯誤。 -
(靜態)語義分析階段主要檢查源程序是否包含語義錯誤,并收集類型信息供后面的代碼生成階段使用。只有語法和語義都正確的源程序才能被翻譯成正確的目標代碼。
- 這里要注意的是語義錯誤有動態語義錯誤和靜態語義錯誤。靜態語義錯誤是指在編譯的語義分析階段可以發現。動態語義錯誤是指在運行時才能發現。在語義分析階段并不能識別出所有的語義錯誤,只能發現靜態語義錯誤。
- 完成的工作:完成類型檢查,運算符與運算對象類型不合法等錯誤。
-
目標代碼(機器碼)生成是編譯器工作的最后一個階段(動態語義分析)。這一階段的任務是把中間代碼(匯編語言) 變換成特定機器上的絕對指令代碼、可重定位的指令代碼或匯編指令代碼,這個階段的工作與具體的機器密切相關。
完成的工作:動態語義錯誤,包括陷入死循環、變量取零時做除數、引用數組元素下標越界等錯誤等。 -
從原理上講,對源程序進行語義分析之后就可以直接生成目標代碼,但由于源程序與目標代碼的邏輯結構往往差別很大,特別是考慮到具體機器指令系統的特點,要使翻譯一次到位很困難,而且用語法制導方式機械生成的目標代碼往往是繁瑣和低效的,因此有必要設計一種中間代碼,將源程序首先翻譯成中間代碼表示形式,以利于進行與機器無關的優化處理。
由于中間代碼實際上也起著編譯器前端和后端分水嶺的作用,所以使用中間代碼也有助于提高編譯程序的可移植性。常用的中間代碼有后綴式、三元式、四元式和樹(圖)等形式。中間代碼并不依賴于具體的機器。 -
源程序不可避免地會有一些錯誤,這些錯誤大致可分為語法錯誤和語義錯誤。
- 語法錯誤是指語言結構上的使用錯誤,是指編譯時所發現的程序錯誤,如單詞拼寫錯誤、標點符號錯、表達式中缺少操作數、括號不匹配等有關語言結構上的錯誤。
- 對于語義錯誤有動態語義錯誤和靜態語義錯誤。靜態語義錯誤為在編譯的語義分析階段可以發現。動態語義錯誤為在運行時才能發現。因此語義分析階段并不能發現程序中所有的語義錯誤。
-
-
上下文有關文法(1型文法)/ 上下文無關文法(2型文法),文法和正規式(四種文法)
Note:-
上下文有關文法(1型文法):此文法對應于線性有界自動機,它是在0型文法的基礎上增加了一條對于每一個a->b,都存在|a|<=|b|,這里的|b|表示的是b的長度,而不是絕對值。即由Ab->B不屬于1型文法,而A->Bba則屬于1型文法。即左側可以既有終結符也有非終結符。
-
上下文無關文法(2型文法):左側只含有一個非終結符,在推導式的過程中,左側會被完全替換掉,只起到一個中間的作用。如A->Ba符合2型文法要求,如Ab->Bab不是2型文法,因為Ab不是非終結符。
-
正規文法(3型文法):它對應于有限狀態自動機,它是在2型文法的基礎上滿足:A->a|aB(右線性)或A->a|Ba(左線性)。如果有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型文法的要求。正規文法要求,不能夠推導出兩個終結符,而且左線性和右線性只能使用一種,不能夠同時出現。
-
大多數程序設計語言的語法規則用 上下文無關文法 來描述。
-
-
編譯原理之求FIRST集,FIRST集合FOLLOW集
-
正規文法和正規式的相互轉換(理解正規文法的概念,以及正規式轉正規文法的規定)
-
正規式和有限自動機的轉換(有限自動機轉正規式的3個圖 / 正規式轉有限自動機的3個圖)
-
根據文法進行表達式推導
-
什么是腳本,腳本語言?
Note:- 腳本語言是介乎于 HTML 和諸如 JAVA 、 Visual Basic 、 C++ 等編程語言之間的一種特殊的語言。常見的腳本語言有:Python、JavaScript。
- 腳本語言一般都有相應的腳本引擎來解釋執行,是一種解釋性語言,一般需要解釋器才能運行。也就是指令被立即執行,不存在一個編譯的中間狀態。
- 腳本語言運行效率比匯編語言低。
- 動態程序一般有兩種實現方式,一是二進制方式,一是腳本方式。
- 二進制方式是先將我們編寫的程序進行編譯,變成機器可識別的指令代碼(如.exe文件),然后再執行。
- 腳本簡單地說就是一條條的文字命令,以文本形式存在。
- 編譯和解釋是語言處理的兩種基本方式。
- 編譯過程包括詞法分析、語法分析、語義分析、中間代碼生成、代碼優化和目標代碼生成等階段,以及符號表管理與出錯處理模塊。
- 解釋過程在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但是在運行用戶程序時,它直接執行源程序或源程序的內部形式(解釋過程不會生成目標程序)。
- 這兩種語言處理程序的根本區別是:
- 在編譯方式下,機器上運行的是與源碼程序等價的目標程序,源程序和編 譯程序都不再參與目標程序的執行過程;
- 而在解釋方式下,解釋程序和源程序(或其某種等價表示)要參與到程序的運行過程中,運行程序的控制權在解釋程序。
- 在編譯方式下,詞法、語法和語義分析是必須要進行的工作,而生產中間代碼和優化則是可以進行也可以不進行。
- 腳本語言是介乎于 HTML 和諸如 JAVA 、 Visual Basic 、 C++ 等編程語言之間的一種特殊的語言。常見的腳本語言有:Python、JavaScript。
-
編譯與反編譯詳解,C語言編譯過程(預處理,編譯(匯編碼),匯編(機器碼),鏈接)
Note:- 編譯是將高級語言源程序 翻譯成 機器語言程序(匯編形式或機器代碼形式),反編譯是編譯的逆過程。
- 反編譯通常不能把可執行文件 還原成 高級語言源代碼,只能轉換成功能上等價的匯編程序。
-
可視化程序設計的基本理論
Note:- 可視化程序設計主要是讓程序設計人員利用軟件本身所提供的各種控件,像搭積木式地構造應用程序的各種界面。
- 可視化程序設計最大的優點是設計人員可以不用編寫或只需編寫很少的程序代碼,就能完成應用程序的設計,這樣就能極大地提高設計入員的工作效率。
- 在可視化程序設計中,采用解釋方式可隨時查看程序的運行效果。
- 能進行可視化程序設計的語言很多,比較常用的有微軟的Visual Basic、Visual C++、Visual C#、中文Visual Foxpro、Borland公司的Delphi等。
-
強類型&弱類型語言、動態&靜態語言有什么區別,強類型語言和弱類型語言的區別
Note:- 強類型語言有些類型不支持隱式類型轉換,需要通過強制類型轉換才可實現,比如java,python;python代碼如下:b = 3 c = 3.1415926 print(b + c) --- 6.1415926a = "123" b = 3 print(a + b) --- TypeError: can only concatenate str (not "int") to str 弱類型語言中所有類型都支持隱式類型轉換,比如js,php;js代碼如下:var a = "123" var b = 3 console.log(a + b) --- 1233 對于弱類型語言,需要弄清楚不同類型之間是如何隱式變換的,比如str + int →\rightarrow→ str
- 動態類型語言在運行期間才去做數據類型檢查(python);而靜態類型語言在編譯期間就去做數據類型檢查(java,c++)。
- 許多程序設計語言規定,程序中的數據都必須具有類型,其作用包括:
- 便于為數據合理分配存儲單元;
- 便于對參與表達式計算的數據對象進行檢查;
- 便于規定數據對象的取值范圍及能夠進行的運算;
十、多媒體基礎
- 多媒體開發你必須知道的各種音頻格式之間的比較(WAV/MIDI/AAC…)
- WAV格式音頻
Note:- 聲音(音頻)信號的一個基本參數是頻率,它是指聲波每秒鐘變化的次數,用Hz表示。人耳能聽到的音頻信號的頻率范圍是 20Hz ~ 20KHz。
- CIF是Common Intermediate Format的簡稱,即常用的標準化圖像格式。在H.323協議簇中,規定了視頻采集設備的標準采集分辨率CIF=352×288像素。
- 使用150DPI的掃描分辨率掃描一幅3×4英寸的彩色照片,得到原始的24位真彩色圖像的數據量是3?4?150?150?24/8=8100003 * 4 * 150 * 150 *24 / 8 = 8100003?4?150?150?24/8=810000 字節
- 矢量圖中的圖形元素稱為圖元。而另一類圖具有代表性的圖像表示形式是位圖圖像,該圖采用像素來表示圖。
- 某數碼相機內置128MB的存儲空間,拍攝分辨率設定為1600×1200像素,顏色深度為24位(bit),若不采用壓縮存儲技術,使用內部存儲器最多可以存儲 128?1024?1024?8/(1600?1200?24)=23128 * 1024 * 1024 * 8 / (1600 * 1200 * 24 ) = 23128?1024?1024?8/(1600?1200?24)=23 張照片(顏色空間為2242^{24}224種顏色,而存儲空間只有8位)。
- 計算機通過MIC(話筒接口) 收到的信號是模擬信號:通過話筒傳入計算機的是人類的聲音,而這種聲音信號是一種連續的模擬信號,而非離散的數字信號,在接收到模擬信號以后,經過采樣、量化等工作將模擬信號轉換為數字信號在計算機中處理。
- 未經壓縮的數字音頻數據傳輸率可按下式計算:數據傳輸率(b/s)=采樣頻率(Hz) ×量化位數(b)×聲道數,比如對于44.1khz、樣本精度為16b/s的雙聲道數字音頻其數據傳輸率為44.1 * 16 * 2 = 1411.2kb/s
十一、知識產權標準化
- 知識產權與標準化
- 知識產權(包括著作權法(保護期限,權利歸屬,侵權判定))和標準化(標準化知識,軟件工程國家標準(標準種類,文檔指南,軟件質量特性,軟件質量保證))
Note:- 按照我國著作權法的權利保護期,署名權,修改權和保護作品完整權受到永久保護。
- 其中法律依據,著作權法規定“執行本單位的任務或者主要是利用本單位的物質條件所完成的職務作品,其權利屬于該單位。”
- 某軟件公司參與開發管理系統軟件的程序員張某,辭職到另一公司任職,于是該項目負責人將該管理系統軟件上開發者的署名更改為李某(接張某工作),該項目負責人的行為侵犯了張某開發者身份權(署名權)。
- 著作權有可復制性。著作權的對象是作品,是指文學、藝術、和科學領域內具有獨創性并能以某種有形形式復制的智力成果,因此,著作權必然具有可復制性,但是復制并原封不動發行別人的作品就屬于侵權。
- 軟件著作權保護目標程序、源程序、軟件文檔,但不包護開發軟件的所有操作方法(比如IDE等工具)(2021上12)
- 據《中華人民共和國商標法》,煙草制品中必須使用注冊商標。
- 甲乙兩公司的財務軟件產品功能基本一致,這兩公司分別申請“大堂”和“大唐”商標注冊(無法區分誰先使用)。兩財務軟件相似,且經協商雙方均不同意用其申請注冊的商標標識。此情形下由甲乙抽簽結果確定誰獲準注冊。但如果甲第一次使用時間為2019年7月,而乙第一次使用時間為2019年5月,如果兩公司同一天申請注冊商標,則乙公司的"大唐"獲準注冊。
原因分析:- 這個是同一類產品,構成近似商標,“近似商標”是指文字、數字、圖形、三維標志或顏色組合等商標的構成要素的發音、視覺、含義或排列順序及整體結構上雖有一定區別,但又使人難以區分,容易產生混滑的商標。上述案例會產生商標故不能同時注冊。由雙方協商決定。
- 首先第一原則是,誰先申請誰獲得;其次,同時申請時,誰先使用誰獲得;
如果無法區分誰先使用,則協商歸屬,協商不成可以抽簽決定。
- 按照我國著作權法的權利保護期,署名權,修改權和保護作品完整權受到永久保護。
- 商業秘密一般是指不為公眾所知悉,能為權利人帶來經濟利益,具有實用性并經權利人采取保密措施的技術信息和經營信息。對于公司采取保密措施的行為,該公司具有商業秘密權。
十二、案例分析
Note:下午案例分析題共5道題,每題15分。算法題變化性較大,個人建議要保證1,2,3,5題的正確性,爭取每題拿到12分以上。
1、結構化分析
- 數據流圖(結構化分析)
Note:-
數據流圖中存在3種數據流向:
-
1)實體(E) →\rightarrow→ 加工(P)→\rightarrow→ 存儲(D)
-
2)實體(E) ←\leftarrow← 加工(P)←\leftarrow← 存儲(D)
-
3)加工(P) →\rightarrow→ 加工(P)(例如2021上半年案例分析:P1(車輛識別) →\rightarrow→ 車輛入場信息 →\rightarrow→ P5(道閘控制) )
-
不存在E →\rightarrow→ E,D →\rightarrow→ D,D→\rightarrow→ E,E →\rightarrow→ D的數據流,必須有P加工的過程。
-
-
數據流圖的題目經常會問存儲(D)的名稱,最簡單的解題規范:“直接使用數據流傳入 或 傳出的名稱” + “信息表”,比如2019年上半年題1:
其中D2為學生信息,D3為校園場所信息;如果想要獲得更準確的D的名稱,可以在"數據流缺失問題求解"上進行修補。比如2021年上半年題1:D2初定為會員信息表,后來確定為兩張表:車位信息表和車主余額表。
-
在問數據流圖缺失情況時(補充圖中缺失的數據流及其起點和終點),即分析數據流圖中的 數據流向 是否完整(是否滿足上面2種),如果不完整,再判斷該數據流圖是否存在“分布式”存儲:
- 步驟1:比如2019年上半年題1,D2、D1的數據流向雖然不完整,但是是“分布式”存儲,因此缺失的數據流從D4、D3開始分析:
- 步驟2:經過補充后圖中的數據流向是完整的,接著從題目中挖掘,分析是否存在某個字段信息沒有被存儲,由于題目中要求學生信息中要包含家長ID,這時就找到了D2。
如何對步驟2中題干內容的提煉,決定著我們是否能找到缺失數據流的關鍵,以2021年上半年案例分析為例,題干內容和數據流圖如下,假設我們已知:E1:汽車,E2:車主,E3:支付系統,E4:管理人員,E5:道閘控制系統;D1:停車記錄表,D2:用戶或車主賬號儲存余額表/會員信息表,D3:車位信息表/基礎信息表。
1、信息維護。管理人員E4對車位(總數、空余車位數等)計費規則等基礎信息D3進行設置。
2、會員注冊。車主E2提供手機號、車牌號等信息D3進行注冊,提交充值信息D2(等級、綁定并授權支付系統進行充值或交費的支付賬號),不同級別和充值額度享受不同停車折扣點。
3、車牌識別。當車輛E1進入停車場時,若有(空余車位數大干1),自動識別車牌號P1后進行道閘控制P5 ,當車主開車離開停車場時,識別車牌號P1,計費成功P3后,請求道閘控制P5。
4、計費。更新車輛離場時間,根據計費規則計算出停車費用,若車主E2是會員,提示停車費用P2:若儲存余額夠本次停車費用,自動扣費P3,更新余額D2 ,若儲值余額D2不足,自動使用授權繳費賬號請求支付系統E3進行支付,獲取支付狀態。若非會員臨時停車,提示停車費用,車主通過掃描費用信息中的支付碼調用支付系統E3自助交費P3,獲取支付狀態。
5、道閘控制。根據道閘控制P5請求向道閘控制系統E5發送若干放行指令和接收道閘執行狀態。若道閘執行狀態為正常放行時,對入場車輛,(道閘控制P5)將車牌號及其入場時間信息存入停車記錄,修改空余車位數D3 ;(道閘控制P5)對出場車輛更新停車狀態,修改空余車位數D3。當因道閘重置系統出現問題(斷網斷電或是故障為抬杠等情況),而無法在規定的時間內接收到其返回的執行狀態正常放行時, 系統P5向管理人員發送異常告警信息,之后管理人員E4安排故障排查處理P4 ,確保車輛有序出入停車場。
問:缺失數據流及其起點和終點?
答題思路:已完成1~2題對實體(E)和存儲(D)的補充之后,先從題干中圈出并標記每個實體E,加工P和存儲D,然后再通過標記去逐一檢查那條數據流丟失了,一般丟失情況包括一開始介紹的3種數據流情況。如上面刪除線表示:
標準答案為:- P3到D2:余額(若儲存余額夠本次停車費用,自動扣費,更新余額)
- P5到D3:車位數(修改空余車位數)
- P1到P5:車輛入場信息
- P4到P5:故障排查處理
- 步驟1:比如2019年上半年題1,D2、D1的數據流向雖然不完整,但是是“分布式”存儲,因此缺失的數據流從D4、D3開始分析:
-
在問數據流“學生狀態”,“學生信息” 的組成時,其實是在問這些數據在數據庫中用哪些字段進行存儲,此時需要結合題意和數據流圖進行分析。
- 學生狀態包括:學生卡ID,學生心率,體溫(攝氏度)等健康指標及其所在位置等信息;
- 學生信息包括:家長ID,學生ID,學生卡ID,班主任等信息
-
如果要求使用結構化語言對業務需求進行分析時,解題步驟為:
- 1)從題干中抽取“動詞 + 名詞” 或者 “名詞 + 動詞”,而不是直接COPY整個句子。
- 2)從題干內容中提煉出IF,WHILE:比如2021上半年1題中,車輛入場和出場是想對的概念,因此是IF;比如2020下半年1題中,圖像采集是一個WHILE過程。
- 3)利用偽代碼(參考latex代碼格式,參考Latex寫偽代碼)書寫,常見語法包括:while(...) do {xxx} end while,if(...) then {xxx} end if
例如2020下半年第一題,需求如下,要求用結構化語言對缺陷檢測的加工邏輯進行描述。
缺陷檢測。根據檢測模型和檢測質量標準對圖像采集所收到的產品檢測信息中所有圖像進行檢測或所有圖像檢測合格。若一個產品出現一張圖像檢測不合格,就表示該產品不合格,對不合格產品,其檢測結果包括,產品型號和不合格類型。
WHILE(接收圖像)DO{檢測所收到的所有圖像;IF(出現一張圖像檢測不合格)THEN{返回產品不合格;不合格產品檢測結果=產品星號+不合格類型;}END IF }END WHILE
參考答案:
-
2、數據庫設計
- 實體聯系圖(ER圖有實體(entity)、屬性(attribute)、關系(relationship)三部分),『數據庫』 E-R圖(實體聯系圖)你都不會,你設計什么數據庫?
Note:- 用矩形框表示實體型,矩形框內寫明實體名稱;
- 用橢圓框表示 實體的屬性,將屬性名記入框中;(矩形框 或者 菱形框 都可以通過橢圓框添加屬性)
- 用菱形框表示實體型之間的關系,在菱形框內寫明關系名,即實體 – 聯系 – 實體;而關聯關系的一般性約束包括:一對一(1 : 1),一對多(1 : *),多對多(* : *)的關系
- 用實心連線表示:實體與屬性之間;實體與聯系之間;聯系與屬性之間用直線相連,并在直線上標注聯系的類型。
- 一文搞懂候選碼、主碼、全碼、外碼、主屬性、主鍵、主關鍵字、非主屬性清晰總結(候選碼(畫圖后)可以遍歷所有屬性),什么是外鍵/外鍵的作用(如果一個實體的某個字段指向另一個實體的主鍵則稱為外鍵;主從表關系;作用是保證數據的一致性)
Note:-
如果一名培訓師可以講授多門課程、一門課程可由多名培訓師講授,如果關系模式設計如下:
- 員工(員工號,姓名,部門號,崗位,基本工資,電話,家庭住址);
- 講授(課程號,員工號,培訓地點)
- 課程(課程號,課程名稱,學時)
則關于講授關系的主鍵為 (課程號,員工號);講授關系的外鍵為 (課程號,員工號),即這兩個字段分別對應 員工表 和 課程表的主鍵。(2019下半年第二題)
-
如果A->BC,B->D,則存在傳遞依賴A->D;比如關系模式設計如下:
- 部門(部門號,部門名,部門負責人,電話)
- 員工(員工號,姓名,部門號,崗位,基本工資,電話,家庭住址);
- 崗位 (崗位號,基本工資)
題目給定不同崗位設置不同的基本工資,因此員工號(主鍵A)可以決定崗位號(B),崗位號(主鍵B)可以決定基本工資(C),則員工與基本工資之間存在傳遞依賴。(2019下半年第二題)
-
比如問某個字段(所屬公司代碼,投資方編號)的完整性約束關系(2019年上半年第二題),則把該字段在哪個表中作為外鍵,主鍵都羅列出來,比如:
- 員工 - 外鍵:所屬公司代碼
- 項目 - 外鍵:投資方編號
- 項目 - 主鍵:(項目編號,投資方編號)組合
有時要注意題干中給出的字段信息不全,主鍵/外鍵信息可能沒有明確在題干中顯示,需要自己歸納出一個字段名(比如2020年下半年第二題),題干如下:
業務部關系模式需要記錄的信息包括業務部的編號、名稱、地址、電話和分公司編號,業務部編號唯一標記分公司關系模式中的每一個元素,每個業務部各有一名主管負責業務部的管理工作,每個業務部有多名職員,每個職員只能來源于一個業務部。
在確定業務部關系模式中的主外鍵時,業務部的主鍵很容易得到,即業務部的編號,但業務部的外鍵不單單只有分公司編號,還有主管編號(題目中未明確給出,建議參照第二問的ER圖歸納得到)。
-
- 數據庫范式 & 模式分解 詳細介紹(1NF,2NF,3NF,BCNF,4NF), 數據庫的規范理論
Note:-
如果題目中問表設計是否合理時,可以從數據是否存在冗余、插入異常、更新異常、刪除異常等問題考慮。比如2020下半年第二題問:
職員關系模式需要記錄的信息包括職員號、姓名、所屬業務部編號、崗位、電話、家庭成員姓名和成員關系。在職員關系模式中,假設每個職員有多名家庭成員,那么職員關系模式存在什么問題?應如何解決?
在原來的職員關系表中,主鍵為(職員號,家庭成員姓名),有些非主屬性存在部分依賴于職員號,即該表符合1F但不符合2F。這里可以將字段(職員號,家庭成員姓名)從表中抽離出來,并共同構成主鍵。
參考答案為:對職員關系模式進行拆分,職員1(職員號、姓名、崗位、所屬業務部編號,電話);職員2(職員號,家庭成員姓名,關系)。這樣非主屬性完全依賴于碼(2F)。
-
3、統一建模語言UML
- ER圖和類圖之間的關系,用例圖、類圖、順序圖操作
Note:- 在用例圖中:
- 每個用例用 “動詞 + 名詞” 來表示,比如2020下半年第三題題干中寫的是:“將房產信息從系統中刪除”,在寫用例時則要替換成:“刪除系統中的房產信息”。
- 關聯關系包含3種:包含,擴展和繼承;參考 用例圖里3種關系的內涵和2021年上半年題3
- include:基用例是一個抽象的用例,不能單獨作為一個完整用例,需要配合子用例使用
- extend:基用例是一個擴展點,子用例在執行時必須先激活基用例;
- generalize:子用例繼承基用例的所有屬性和通信方式, 與extend不同的是,基用例并不是一個擴展點,子用例在執行時不需要先激活基用例;
- 參與者不一定是人
- 在類圖中(類可分為3種,不一定是現實中的實體類):
-
類圖是軟件的藍圖,用于詳細描述系統內各個對象的相關的類,以及這些類之間的靜態關系。設計類是已經完成了規格說明并且達到能夠被實現程度的類。
-
類組件:類名 - 如果是抽象類需要斜體
-
類屬性:可見性 名稱:類型 [=缺省值]
+(public),–(private), #(protected) ~(package) -
六種類間關系(耦合度由低到高):依賴關系use-a、關聯關系has-a、聚合關系(has a)、組合關系(contain a)、泛化關系is a、實現關系(類與接口)
-
類可以分為三種:實體類、接口類(邊界類)和控制類。
- 實體類的對象表示現實世界中真實的實體,如人、物等。
- 接口類(邊界類)的對象為用戶提供一種與系統合作交互的方式,分為人和系統兩大類,其中人的接口(用戶界面)可以是顯示屏、窗口、Web窗體、對話框、菜單、列表框、其他顯示控制、條形碼、二維碼或者用戶與系統交互的其他方法。系統接口涉及把數據發送到其他系統,或者從其他系統接收數據。
- 控制類的對象用來控制活動流,充當協調者。
-
實體類是應用領域的核心類,一般用于保存系統中的信息以及提供針對這些信息的相關處理行為,主要負責數據和業務邏輯;
-
接口類(邊界類)是系統內對象和系統外參與者的聯系媒介,負責和用戶進行交互,即用戶界面;
-
控制類主要是協調實體類和邊界類之間的交互。
-
- 在進行用例描述時,必須包括基本事件流和備選數據流,參考場景法:基本流、備選流、構造場景
- 基本事件流:按照正確的業務流程來實現的一條操作路徑;
- 備選數據流:導致程序出現錯誤的操作流程;
- 在用例圖中:
- 用例圖里3種關系的內涵(include基用例為抽象用例;extend基用例為擴展點;generalize基用例被子用例繼承)
Note:
用例之間的include,extend和generalize關系的內涵。- include:包含關系,當兩個或多個用例中共用一組相同的動作,這時可以將這組相同的動作抽出來作為一個獨立的子用例,供多個基用例共享。因為子用例被抽出,基用例并非一個完整的用例,所以include關系中的基用例必須和子用例一起使用才夠完整,子用例也必然被執行。include關系在用例圖中使用帶箭頭的虛線表示(在線上標注<<include>>),箭頭從基用例指向子用例。如2021上半年題3,文字描述和用例圖如下:
3)確認處方。患者登錄后,可以查看醫生開具的所有處方。患者選擇需要抓藥的處方和數量(需要抓幾副藥),同時說明是否需要煎制。選擇取藥方式:自行到店取藥或者送藥上門,若選擇送藥上門,患者需要提供提供收貸人姓名、聯系方式和收貨地址。系統自動計算本次抓藥的費用,患者可以使用微信或支付寶等支付方式支付費用。支付成功之后,處方被發送給藥師進行藥品配制。
答:因為U1作為基用例,即抽象的用例,需要配合U2子用例一起使用,由題干可知U1:確認處方,U2:支付 - extend:擴展關系,表示對基用例的擴展。基用例是一個完整的用例,即使沒有子用例的參與,也可以完成一個完整的功能。extend的基用例中存在一個擴展點,只有當擴展點被激活時,子用例才會被執行。extend關系在用例圖中也使用帶箭頭的虛線表示(在線上標注<<extend>>),但箭頭是從子用例指向基用例。
- generalize:泛化關系,是一種繼承關系。子用例將繼承基用例的所有行為關系和通信關系,也就是說在任何使用基用例的地方都可以用子用例來代替。泛化關系在用例圖中使用實線空心箭頭表示,箭頭方向從子用例指向基用例。
如2021上半年題3,文字描述和用例圖如上,由題干可知:U3,U4繼承于U2(支付) ,而U1(確認處方) 又包含著U2(支付) ,因此U3、U4分別為微信支付、支付寶支付。
- include:包含關系,當兩個或多個用例中共用一組相同的動作,這時可以將這組相同的動作抽出來作為一個獨立的子用例,供多個基用例共享。因為子用例被抽出,基用例并非一個完整的用例,所以include關系中的基用例必須和子用例一起使用才夠完整,子用例也必然被執行。include關系在用例圖中使用帶箭頭的虛線表示(在線上標注<<include>>),箭頭從基用例指向子用例。如2021上半年題3,文字描述和用例圖如下:
4、設計模式
- Java中常用的設計模式(23種)
- JAVA實現23種設計模式
Note:- 歷年題型整理:
- 生成器模式:2017上,2018上
- 橋接模式(無類圖):2017下
- 狀態模式:2018下
- 策略模式:2019上
- 觀察者模式:2019下
- 組合模式:2021上
- 答題技巧:該題型較為簡單,不要求對設計模式有較深的理解(難的考點已放在上午題了),該題更注重的是代碼的閱讀理解能力。選擇擅長的編程語言(C++/Java二選一),利用接口與實現類、抽象類與子類的關系,直接進行代碼填充即可(試了2017~2021的設計模式題,親測有效)。
- 可以通過設計模式題目中給出的類圖,理解要實現什么一個功能,而在代碼填充上主要還是依賴于平時對編程語言的熟悉掌握程度,以及代碼的閱讀理解能力;
- 注意不要馬虎大意,比如多寫了標點符號,少寫了abstract等
- 歷年題型整理:
總結
以上是生活随笔為你收集整理的【软考】软件设计师知识点整理(待更新)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eviews3种面板模型的选择-F检验操
- 下一篇: 什么原数据更容易平稳_时序数据处理难题攻