113 身心障礙特考三等 統計 資料處理 考古題詳解
第 一 題20 分
在作業系統執行中的程式稱為行程(Process),試說明:
(一)行程在其生命週期中共有幾個狀態及其變化?(15 分)
(二)行程和執行緒(Thread)的差別。(5 分)
登入後即可作答並保存紀錄。
核心觀念
行程是作業系統執行中的程式。作業系統會依行程目前的執行情形,將它記錄在不同狀態中,並透過排程與事件處理,在狀態間轉換。
本題採用基本的五狀態模型:新建、就緒、執行、等待(阻塞)、結束。不同教材也會列出暫停等延伸狀態,因此作答時應先說明採用的狀態模型。
解題方法:說明五種狀態與轉換
- 新建(New):作業系統正在建立行程,配置必要的資料結構與資源。
- 就緒(Ready):行程已具備執行條件,正在等待 CPU。
- 執行(Running):行程目前正在 CPU 上執行。
- 等待/阻塞(Waiting/Blocked):行程正在等待某項事件,例如 I/O 完成或資源可用;事件尚未完成前,不能繼續執行。
- 結束(Terminated/Exit):行程已完成或遭終止,作業系統進行資源回收。
主要狀態轉換如下:
此外,執行中的行程還有兩種重要轉換:
- 執行 就緒:時間片用完,或較高優先權行程搶占 CPU。
- 執行 結束:行程正常完成,或被作業系統終止。
注意,「等待 就緒」表示所等待的事件已完成;該行程仍須等待 CPU 排程,才會進入執行狀態。
解題技巧與常見陷阱
第 二 題30 分
MS SQL Server 或 MySQL 都屬於關聯式資料庫系統(RDBMS),請問:
(一)何謂 Transaction?並舉例說明使用時機。(10 分)
(二)Transaction 具備的 4 個特性 ACID 為何?(10 分)
(三)何謂 SQL Injection?並舉例說明。(10 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查關聯式資料庫的交易處理與資料庫安全。作答時,先說明 Transaction 如何把一組資料庫操作視為單一工作單位,再逐一解釋 ACID 四項特性,最後說明 SQL Injection 的成因與防護方式。本題不涉及法條。
解題方法
(一)Transaction 與使用時機
**Transaction(交易)**是資料庫中一組彼此相關的操作,資料庫將它們視為一個不可分割的工作單位:全部成功就提交(COMMIT);其中任何關鍵操作失敗,就取消或復原整組變更(ROLLBACK),避免資料只更新一半。
例如銀行轉帳:甲帳戶轉出 1,000 元,乙帳戶轉入 1,000 元,兩項操作應放在同一個交易中。若甲已扣款但乙入帳失敗,便應回復甲帳戶的扣款;若兩項都成功,才提交交易。
START TRANSACTION;
UPDATE Account
SET Balance = Balance - 1000
WHERE AccountId = 'A';
UPDATE Account
SET Balance = Balance + 1000
WHERE AccountId = 'B';
COMMIT;
若第二項操作失敗,應執行 ROLLBACK,使第一項扣款也不生效。交易適用於必須維持整體一致性的情境,例如轉帳、訂單成立時同時扣庫存與記錄訂單,以及多人同時更新同一筆資料等。
(二)ACID 四項特性
| 特性 | 中文說明 | 意義 |
|---|---|---|
| Atomicity(原子性) | 全有或全無 | 交易中的操作全部成功,或全部取消,不留下只完成一部分的結果。轉帳時扣款與入帳必須同時成功或同時回復。 |
| Consistency(一致性) | 維持資料一致 | 交易完成前後,資料都必須符合資料庫的完整性規則與業務規則。例如帳戶餘額不得違反設定的限制。 |
| Isolation(隔離性) | 交易彼此隔離 | 多個交易同時執行時,其互相干擾應受到控制;交易的中間狀態不應讓其他交易讀到不完整或不一致的資料。 |
第 三 題20 分
最小生成樹(Minimum Spanning Tree)在網路設計中有重要的用途。如下圖,請依要求找出最小生成樹,須清楚說明每一步驟加入的點或邊。若需起點,以 A 點為起點。(每小題 10 分,共 20 分)
原卷附有包含節點 A、B、C、D、E、F、G、H、I、J、K 的網路圖;文字層未擷取出圖中連線與權重,請參考原卷。
(一)請以 Prim 演算法找出最小生成樹,並詳述每一步驟加入的點或邊。
(二)請以 Kruskal 演算法找出最小生成樹,並詳述每一步驟加入的點或邊。
登入後即可作答並保存紀錄。
核心觀念
最小生成樹(Minimum Spanning Tree, MST)是在連通且加權的無向圖中,連接全部頂點、沒有迴圈,且總權重最小的生成樹。圖中共有 個頂點,因此最小生成樹須包含 條邊。
Prim 演算法從指定起點開始,每次加入一條連接「已加入頂點」與「尚未加入頂點」的最低權重邊。Kruskal 演算法則依邊權重由小到大檢視,遇到會形成迴圈的邊就略過。
解題方法
依圖中連線與權重作答。同權邊依下列步驟所列順序處理;同權邊的選擇順序不同,可能得到不同的最小生成樹,但總權重相同。
(一)Prim 演算法:以 A 為起點
每一步從目前已加入的頂點集合,選擇連至集合外頂點的最低權重邊:
| 步驟 | 加入的邊 | 權重 | 加入後的頂點集合 |
|---|---|---|---|
| 起點 | — | — | |
| 1 | 3 | ||
| 2 | 2 | ||
| 3 | 4 | ||
| 4 | 1 | ||
| 5 | 2 | ||
| 6 | 1 | ||
| 7 | 2 | ||
| 8 | 2 | ||
| 9 | 4 | ||
| 10 | 2 |
因此,Prim 所得最小生成樹的邊為
第 四 題30 分
請參考下列資料表,並利用結構化查詢語言(SQL)回答下列問題。(每小題 10 分,共 30 分)
學生資料表:
| 學號 | 姓名 |
|---|---|
| S01 | 李白 |
| S02 | 杜甫 |
| S03 | 王維 |
教師資料表:
| 編號 | 姓名 |
|---|---|
| T01 | 陳桂林 |
| T02 | 王桂林 |
課程資料表:
| 課號 | 名稱 | 教師 |
|---|---|---|
| C01 | 國文 | T01 |
| C02 | 國文 | T02 |
| C03 | 數學 | T01 |
選課資料表:
| 課號 | 學號 |
|---|---|
| C01 | S01 |
| C02 | S01 |
| C03 | S01 |
| C01 | S02 |
| C02 | S02 |
| C03 | S02 |
| C01 | S03 |
| C02 | S03 |
| C03 | S03 |
成績資料表:
| 學號 | 課程 | 分數 |
|---|---|---|
| S01 | C01 | 90 |
| S01 | C03 | 95 |
| S02 | C02 | 80 |
| S02 | C03 | 85 |
| S03 | C01 | 70 |
| S03 | C02 | 75 |
(一)不考慮缺考情況,列出課程名稱、授課教師姓名、不及格(分數小於 60 分)人數之 SQL 指令。
結果如下:
| 名稱 | 姓名 | 不及格人數 |
|---|---|---|
| 國文 | 王桂林 | 2 |
| 國文 | 陳桂林 | 1 |
(二)不考慮缺考情況,列出所有學生姓名及平均分數,並由高分至低分排序之 SQL 指令。
結果如下:
| 姓名 | 平均分數 |
|---|---|
| 李白 | 72.5 |
| 杜甫 | 65 |
| 王維 | 52.5 |
(三)列出缺考學生的姓名及課程名稱之 SQL 指令。
結果如下:
| 姓名 | 名稱 |
|---|---|
| 李白 | 國文 |
| 杜甫 | 國文 |
| 王維 | 數學 |
登入後即可作答並保存紀錄。
核心觀念
本題考查關聯式資料庫查詢,重點是多表連接、分組彙總、條件篩選,以及以反向連接找出缺考資料。
- 連接(JOIN):利用共同欄位把學生、課程、教師、選課與成績資料對應起來。
- 分組與彙總(GROUP BY、COUNT、AVG):依課程或學生分組,計算不及格人數或平均分數。
- 條件篩選(WHERE):先挑出分數小於 60 分的成績紀錄。
- 缺考判斷:以「已選課但沒有成績紀錄」代表缺考,可用
LEFT JOIN搭配IS NULL找出。
題目指定「不考慮缺考情況」,因此計算不及格人數與平均分數時,只以成績資料表中實際存在的成績紀錄為準。
(一)課程名稱、授課教師姓名及不及格人數
先從成績資料表篩選分數小於 60 分的紀錄,再連接課程與教師資料,依課程及教師分組計算人數。
SELECT C.名稱,
T.姓名,
COUNT(*) AS 不及格人數
FROM 成績 AS G
JOIN 課程 AS C
ON G.課程 = C.課號
JOIN 教師 AS T
ON C.教師 = T.編號
WHERE G.分數 < 60
GROUP BY C.課號, C.名稱, T.編號, T.姓名;
依題目資料,成績低於 60 分的紀錄為:
- S01、C02:國文、T02 王桂林,分數 55 分。
- S02、C02:國文、T02 王桂林,分數 50 分。
- S03、C03:數學、T01 陳桂林,分數 45 分。
- S03、C02:國文、T02 王桂林,分數 55 分。
依課程與教師分組後,國文由王桂林授課有 3 人不及格,數學由陳桂林授課有 1 人不及格。題目所列結果表為「王桂林 2 人、陳桂林 1 人」,與提供的成績資料不一致;依表中成績逐筆計算,國文/王桂林應為 3 人。
(二)所有學生姓名與平均分數,依平均分數由高至低排序
以成績資料表連接學生資料表,按學生分組,再以 AVG 計算平均分數。排序時使用平均分數由大到小的 DESC。
SELECT S.姓名,
AVG(G.分數) AS 平均分數
FROM 學生 AS S
JOIN 成績 AS G
ON S.學號 = G.學號
GROUP BY S.學號, S.姓名
ORDER BY AVG(G.分數) DESC;
計算如下: