軟考 2020下半年軟體設計師 易錯知識點(5)

2021-10-09 12:54:19 字數 2143 閱讀 7944

1、編譯系統基本原理

①詞法分析階段

輸入源程式,對構成源程式的字串進行掃瞄和分解,識別出乙個個「單詞」符號,刪掉無用資訊,報告分析時的錯誤。

乙個程式語言的基本語法符號分為五類:關鍵字、識別符號、 常量、運算子、界符等。

詞法分析器所輸出單詞符號常常表示成如下的二元式:

(單詞種別,單詞符號的屬性值)

描述詞法規則通常用:正規式 和 有限自動機。

②語法分析

語法分析器以單詞符號作為輸入,分析單詞符號串是否形成符合語法規則的語法單位,如表示式、賦值、迴圈等, 按語法規則分析檢查每條語句是否有正確的邏輯結構。 語法分析的方法: 自上而下分析法 ; 自下而上分析法

③語義分析— 型別分析和檢查錯誤

語義分析階段主要是檢查源程式是否存在語義錯誤,並收集型別資訊供後面的**生成階段使用,只有語法和語義都正確的源程式才能翻譯成正確的目標**。

語義分析的主要工作是進行各型別分析和檢查。賦值語句的右端和左端的型別不匹配。表示式的除數是否為零等。

④中間**生成

中間**生成階段的工作是根據語義分析的輸出生成中間**。它是一種簡單且含義明確的記號系統,他們的共同特徵是與機器無關。中間**的設計原則:一是容易生成,二是容易被翻譯成目標**。

語義分析和中間**生成所依據的是語言的語義規則。

⑤**優化

由於編譯器將源程式翻譯成中間**的工作是機械的,因此,生成中間**往往在計算時間上和儲存空間上有很大的浪費。優化過程可以在中間**生成階段進行,也可以在目標**生成階段進行。優化所依據的原則是程式的等價變換規則。

⑥目標**生成

目標**生成是編譯器工作的最後乙個階段。這一階段的任務是把中間**變換成特定機器上的絕對指令**、可重定位的指令**或彙編指令**, 這個階段的工作與具體的機器密切相關。

⑦符號表管理

符號表的作用是記錄源程式中各個符號的必要資訊, 以輔助語義的正確性檢查和**生成, 在編譯過程中需要對符號表進行快速有效地查詢、插入、修改和刪除操作.

⑧出錯處理

使用者編寫的源程式不可避免地會有一些錯誤,這些錯誤大致可分為靜態錯誤和動態錯誤。

動態錯誤也稱動態語義錯誤, 他們發生在程式執行時, 例如變數取零作除數、陣列下標越界等錯誤。

靜態錯誤是編譯時所發現的程式錯誤,可分為語法錯誤和靜態語義錯誤, 如單詞拼寫錯誤、標點符號錯誤、表示式中缺少運算元、括號不匹配等有關語言結構上的錯誤稱為語法錯誤; 而語義分析時發現的運算子與運算物件型別不合法等錯誤屬於靜態語義錯誤。

2、事務加鎖

(1)排他型封鎖(x封鎖)

如果事務t對資料a(可以是資料項、記錄、資料集以至整個資料庫)實現了x封鎖,那麼只允許事務t讀取和修改資料a,其他事務要等事務t解除x封鎖以後,才能對資料a實現任何型別的封鎖。可見x封鎖只允許乙個事務獨鎖某個資料,具有排他性。

(2)共享型封鎖(s封鎖)

s封鎖允許併發讀,但不允許修改,也就是說,如果事務t對資料a實現了s封鎖,那麼允許事務t讀取資料a,但不能修改資料a,在所有s封鎖解除之前決不允許任何事務對資料a實現x封鎖。

3、二叉樹組合

具有n個結點的二叉樹一共有多少個組合。

3個結點:5個

4個結點:14個

公式:

4、線性探查法

將元素的值按雜湊函式進行雜湊計算得到雜湊位址,再將元素值儲存到該位址。

如果該位址已有元素,稱之為存在「衝突」,當衝突後,將計算得到雜湊位址+1,

再判斷該位址是否有元素,如果沒有則存入該位址。這種衝突處理方式稱為「線性探查法」。

5、折半查詢(二分查詢)

先給資料排序,形成有序表,把待查資料值與查詢範圍的中間元素值進行比較,會有四種情況出現:

1)待查詢數值與中間元素值相等,返回中間元素值的索引。

2)待查詢數值比中間元素值小,則以整個查詢範圍的前半部分作為新的查詢範圍,執行1),直到找到相等的值。

3)待查詢數值比中間元素值大,則以整個查詢範圍的後半部分作為新的查詢範圍,執行1),直到找到相等的值

4)如果最後找不到相等的值,則返回錯誤提示資訊。

6、無線網路技術中,覆蓋範圍最小的是

802.15.4 zigbee

7、分治法,動態規劃法,貪心法,回溯法,分支限界法的區別和聯絡以及適用情況

軟考 2020下半年軟體設計師 易錯知識點(1)

1 串聯系統和併聯系統的可靠性 串聯 r r1 r2 rn 併聯 r 1 1 r1 1 r2 1 rn 注意r的位置 1 1 r 2 r r在前,先串後並 r在後,先並後串 2 十六進製制計算 cffffh a0000h 1 30000h 30000h 0 16 0 0 16 1 0 16 2 0 ...

2023年下半年 軟體設計師 準備環節

本人預計打算在2018年下半年考軟體設計師,因此,為了督促自己學習,同時也是為了幫助csdn的博友們一起共同學習,所以,我會將我做的筆記的紙質版以 或者 文字記錄的方式傳入上來,到時候希望,關注我的朋友一起學習和了解 我本身不是計算機方向畢業的,所以,基礎不是那麼好,因此,預計打算採用的思路如下 1...

軟考 軟體設計師 演算法

分類 插入排序 直接插入,希爾排序 選擇排序 簡單選擇,堆排序 交換排序 氣泡排序,快速排序 歸併排序 基數排序 直接插入排序 每一步將乙個待排序列根據乙個元素值的大小插入已經排好序的那部分去。首個元素歸入已排好序列 第二個元素跟已排好序列比較,放於那位子,後續元素遞推。希爾排序 對直接插入排序的改...