110 經濟部聯招(台電、中油、台水、台糖)新進職員 資訊 國營事業聯招 (資訊管理、程式設計)B 考古題詳解

110 年・經濟部聯招(台電、中油、台水、台糖)・新進職員・資訊
試題代碼 110年國營事業聯招 資訊(資訊管理、程式設計)B

第 一 題15 分

資訊系統的安全威脅與日俱增,企業必須採取有效的防護措施,才能避免因為發生資安問題所造成的損失。資訊系統包含硬體、軟體、資料、程序及人員等 5 項元件,其中硬體及軟體可藉由 5 個資訊技術防護措施進行安全防護,請詳細說明之?(15 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查資訊系統的安全防護,以及硬體、軟體面對未授權存取、惡意程式、網路攻擊與資料竊取時所採用的資訊技術控制措施。

資訊系統的安全目標通常包括:

  1. 機密性(Confidentiality):避免資料遭未授權人員取得。
  2. 完整性(Integrity):避免資料或程式遭未授權竄改。
  3. 可用性(Availability):確保硬體、軟體與服務能正常運作。

針對硬體及軟體,常見的五項資訊技術防護措施如下:

  • 身分認證與存取控制
  • 防火牆
  • 防毒與反惡意程式
  • 入侵偵測與入侵防禦
  • 加密技術

解題方法

本題要求「詳細說明五個防護措施」,作答時應採取「防護措施名稱+防護原理+實際功能+可防範的威脅」的方式逐項說明,並將措施與機密性、完整性、可用性相互連結,答案即可完整涵蓋配分重點。

五項資訊技術防護措施

一、身分認證與存取控制

身分認證是確認使用者、設備或程式是否為合法對象;存取控制則是在確認身分後,依照權限決定其可使用的資源與操作範圍。

常見作法包括:

  • 帳號與密碼
  • 多因素認證
  • 晶片卡、憑證
  • 指紋、臉部辨識等生物特徵辨識
  • 角色型存取控制(RBAC)
  • 最小權限原則

例如,系統管理員可以安裝軟體與修改系統設定,一般員工只能使用業務系統,不能直接存取作業系統核心檔案。

此措施可防止:

  • 冒用他人帳號
  • 未授權登入
  • 一般使用者任意修改軟體
  • 內部人員超越職務權限存取系統

密碼不應以明文儲存,應使用雜湊及適當的加鹽機制保存;權限設定也應定期檢視,離職人員帳號須立即停用。

二、防火牆(Firewall)

防火牆部署於內部網路與外部網路之間,依據來源位址、目的位址、通訊埠號、通訊協定及連線狀態等規則,允許或阻擋網路封包。

防火牆的主要功能包括:

  • 阻擋未授權的外部連線
  • 限制內部主機對外連線
  • 控制特定服務與通訊埠
  • 區隔不同安全區域
  • 記錄網路連線與異常流量

例如,只允許外部使用者連線至公開網站的 HTTPS 服務,封鎖不必要的遠端管理埠,可降低駭客掃描與入侵的機會。

防火牆可分為封包過濾型、狀態檢查型、代理伺服器型及次世代防火牆等。企業也可利用 DMZ 將對外服務主機與內部重要系統隔離。

但防火牆主要控制網路流量,無法單獨防止合法帳號遭竊用,也無法完全阻止使用者自行安裝的惡意程式,因此必須搭配其他防護措施。

三、防毒與反惡意程式軟體

防毒軟體及反惡意程式軟體用來偵測、阻擋、隔離與移除病毒、蠕蟲、木馬程式、勒索軟體、間諜軟體及其他惡意程式。

主要偵測方式包括:

  • 特徵碼比對
  • 啟發式分析
  • 行為分析
  • 即時監控
  • 沙箱分析
  • 雲端威脅情報比對

其防護範圍涵蓋:

  • 作業系統檔案
  • 應用程式
  • 電子郵件附件
  • USB 隨身碟
  • 下載檔案
  • 記憶體及執行中的程序

防毒軟體必須定期更新病毒特徵碼及程式版本,並配合作業系統修補、使用者教育與應用程式白名單,才能降低零時差攻擊及勒索軟體造成的損害。

此措施主要維護軟體與資料的完整性及系統的可用性,但無法取代防火牆、存取控制及備份機制。

四、入侵偵測與入侵防禦系統(IDS/IPS)

入侵偵測系統(IDS)負責監控主機或網路流量,發現可疑行為時發出警報;入侵防禦系統(IPS)除偵測外,還能即時阻擋、丟棄或中斷可疑連線。

常見功能包括:

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二 題15 分

某書局採會員制販售各式國、高中參考書,系統的關聯式資料庫(Relational Database)包含 4 個資料表(table)如下,有底線者為主鍵:

參考書(<u>書籍編號</u>、書籍名稱、出版商編號、單價、會員折扣數) 出版商(<u>出版商編號</u>、出版商名稱、聯絡人) 銷售(<u>銷售編號</u>、會員編號、銷售日期、書籍編號、數量、售價、購買總額) 會員(<u>會員編號</u>、名字、入會日期、聯絡電話)

若非會員,銷售資料表之欄位(會員編號)紀錄為 N99,書籍之售價採參考書資料表的欄位(單價)販售;反之,若為會員,則採參考書資料表的欄位(單價)乘以欄位(會員折扣數)販售。

針對下列問題,請分別寫出 SQL 指令來進行查詢。(3 題,每題 5 分,共 15 分)

(一) 請列出每本參考書的銷售數量,並按書籍編號由小到大排序。 (二) 若書籍編號 B3169 的銷售量為最好,請列出會員與非會員的購買總額,各是多少? (三) 書籍編號 B6188 為新出版上架之參考書,店員第一天將會員折扣數由 92 折誤輸入為 82 折,直到當天盤點結帳才發現,請問當天書局少收了多少錢?

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查:

  • 資料表之間以外鍵進行連接(JOIN)。
  • GROUP BY 分組彙總。
  • SUM 計算數量或金額總和。
  • CASE 依會員與非會員身分分類。
  • LEFT JOIN 保留尚未有銷售紀錄的參考書。
  • 會員折扣數為價格乘數,例如 92 折應表示為 0.920.92,82 折應表示為 0.820.82。

以下 SQL 以資料表及欄位名稱可直接使用中文識別字為前提;若資料庫系統要求識別字加括號,可依該系統語法調整。


(一)列出每本參考書的銷售數量,並按書籍編號排序

解題方法

以「參考書」為主表,使用 LEFT JOIN 連接「銷售」資料表,確保即使某本書尚未銷售,也能列出該書,並將銷售數量顯示為 00。

由於一本書可能有多筆銷售紀錄,因此必須使用:

銷售數量=∑(銷售.數量)\text{銷售數量}=\sum(\text{銷售.數量})

SQL 指令

SELECT
 B.書籍編號,
 B.書籍名稱,
 COALESCE(SUM(S.數量), 0) AS 銷售數量
FROM 參考書 AS B
LEFT JOIN 銷售 AS S
 ON B.書籍編號 = S.書籍編號
GROUP BY
 B.書籍編號,
 B.書籍名稱
ORDER BY
 B.書籍編號 ASC;

解題技巧與陷阱

  • 若使用 INNER JOIN,沒有銷售紀錄的書籍會被排除,無法真正列出「每本」參考書。
  • SUM 對沒有配對資料時可能得到 NULL,因此使用 COALESCE(..., 0) 顯示為 00。
  • GROUP BY 必須包含 SELECT 中未彙總的欄位。
  • 題目要求按書籍編號由小到大排序,因此使用 ORDER BY 書籍編號 ASC。

(二)列出書籍編號 B3169 的會員與非會員購買總額

解題方法

非會員的「會員編號」固定記錄為 N99,因此可用 CASE 將銷售紀錄分成兩組:

  • 會員編號 = 'N99':非會員。
  • 會員編號 <> 'N99':會員。

「購買總額」已存在於銷售資料表,因此直接加總該欄位即可。

SQL 指令

SELECT
 CASE
 WHEN 會員編號 = 'N99' THEN '非會員'
 ELSE '會員'
 END AS 會員類別,
 SUM(購買總額) AS 購買總額
FROM 銷售
WHERE 書籍編號 = 'B3169'
GROUP BY
 CASE
 WHEN 會員編號 = 'N99' THEN '非會員'
 ELSE '會員'
 END;

若希望會員與非會員固定各列一筆

若某一類沒有購買紀錄,仍希望顯示為 00,可使用條件彙總:

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 三 題20 分

簡答題:(4 題,每題 5 分,共 20 分)

(一) 請說明何謂 SQL Injection?如何防範? (二) 請說明物聯網(IoT)技術涵蓋的 4 項範疇。 (三) 請說明雲端運算服務的 3 項類別。 (四) 請說明何謂資訊倫理?

登入後即可作答並保存紀錄。

這一題的完整詳解

第三題 簡答題詳解

(一)何謂 SQL Injection?如何防範?

核心觀念

SQL Injection(SQL 隱碼攻擊)是指攻擊者將惡意 SQL 語法嵌入使用者輸入資料,使應用程式將該輸入內容誤認為 SQL 指令的一部分,進而改變原本的查詢、驗證或資料處理邏輯。

常見受害功能包括:

  • 帳號密碼登入
  • 網站搜尋
  • 資料查詢
  • 網址參數傳遞
  • 後台管理系統

其根本原因是「使用者輸入資料」與「SQL 指令字串」混合組合,且程式未妥善驗證及隔離輸入內容。

解題方法

答題時可依「定義、成因、危害、防範」四個層次說明。

例如程式以字串串接方式組合 SQL:

SELECT * FROM users
WHERE account = '使用者輸入'
AND password = '密碼輸入';

若輸入內容含有特殊 SQL 語法,可能使原本的條件被改寫,造成:

  • 未授權登入
  • 查詢機密資料
  • 新增、修改或刪除資料
  • 取得資料庫結構
  • 進一步控制伺服器

防範方式

  1. 使用參數化查詢(Parameterized Query)或預備陳述式(Prepared Statement)

將 SQL 指令與輸入資料分開傳送,輸入內容只被視為資料,不會被當成 SQL 語法執行。這是最主要且最有效的防禦方式。

  1. 使用安全的 ORM 或資料存取框架

透過 ORM、資料庫 API 等機制,避免自行以字串串接 SQL 指令。

  1. 進行輸入驗證

依欄位需求限制資料格式、長度、字元範圍及資料型別。例如年齡應限制為整數,帳號應限制長度及可使用字元。

  1. 避免字串直接串接 SQL

不應將使用者輸入直接嵌入 SQL 語句。單純以跳脫字元處理輸入,只能作為輔助措施,不能取代參數化查詢。

  1. 採最小權限原則

應用程式連接資料庫的帳號只授予必要權限,避免遭攻擊後能任意刪除資料或執行管理操作。

  1. 隱藏錯誤細節並進行日誌監控

對外只顯示一般錯誤訊息,避免洩漏資料表、欄位及資料庫類型;同時記錄異常查詢及登入行為,以利偵測與追蹤。

解題技巧

SQL Injection 的判斷關鍵是:攻擊者不是單純輸入錯誤資料,而是讓輸入內容改變 SQL 指令的「結構或邏輯」。

防範答案至少應寫出:

  • 參數化查詢或 Prepared Statement
  • 輸入驗證
  • 最小權限

只寫「將特殊符號過濾掉」並不完整,因為過濾規則可能被繞過,也無法取代安全的資料庫介面。

【答案】

SQL Injection 是攻擊者將惡意 SQL 語法置入輸入欄位,使應用程式將輸入內容與 SQL 指令混合執行,導致未授權登入、資料外洩、資料遭竄改或刪除。防範方式包括使用參數化查詢或 Prepared Statement、採用安全 ORM、進行輸入驗證、避免字串串接 SQL、限制資料庫帳號權限,並配合錯誤訊息控管及日誌監控。


(二)請說明物聯網(IoT)技術涵蓋的 4 項範疇

核心觀念

物聯網(Internet of Things, IoT)是將各種實體物件連接至網路,使其能夠感測環境、傳遞資料、接受控制並提供服務。

IoT 的完整運作通常可分為四項範疇:

  1. 感知與辨識
  2. 網路與通訊
  3. 資料處理與平台
  4. 應用與服務

解題方法

可依資料流向說明:

感知資料→網路傳輸→平台處理→應用服務\text{感知資料} \rightarrow \text{網路傳輸} \rightarrow \text{平台處理} \rightarrow \text{應用服務}

四項範疇

  1. 感知與辨識層(Sensing and Identification)

負責蒐集物理世界資料及辨識物件身分,例如:

  • 溫度、濕度、壓力、位置感測器
  • RFID
  • 條碼與 QR Code
  • 攝影機及各類環境感測設備

此層重點是「取得資料」與「辨認物件」。

  1. 網路與通訊層(Network and Communication)

負責將感測設備所取得的資料傳送至其他設備、伺服器或雲端平台,也負責傳回控制命令。相關技術包括:

  • Wi-Fi
  • Bluetooth
  • Zigbee
  • 5G
  • LoRaWAN
  • Ethernet

此層重點是裝置間的連線、資料傳輸及通訊協定。

  1. 資料處理與平台層(Data Processing and Platform)

負責接收、儲存、分析及管理 IoT 裝置產生的資料,常使用:

  • 雲端運算
  • 邊緣運算
  • 大數據分析
  • 人工智慧
  • 裝置管理平台
  • 資料庫與事件處理系統

此層可將大量原始資料轉換為有意義的資訊或控制決策。

  1. 應用與服務層(Application and Service)

將處理後的資料提供給使用者或其他系統,形成具體服務,例如:

  • 智慧家庭
  • 智慧醫療
  • 智慧交通
  • 智慧工廠
  • 智慧農業
  • 智慧城市

此層重點是實際應用、決策支援及自動控制。

解題技巧

IoT 四項範疇可用「感、傳、算、用」記憶:

  • 感:感測與辨識
  • 傳:網路與通訊
  • 算:資料處理與平台
  • 用:應用與服務
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 四 題15 分

下列問題,請用遞迴(Recursive)的方式來撰寫:(共 2 題,共 15 分)

(一) 實驗室培養某細胞,此細胞區分為成年與幼年細胞。每個成年細胞於 1 個月後會生出 2 個幼年細胞,幼年細胞於 1 個月後會變為成年細胞。請用遞迴方式撰寫一函式 CellNumber,輸入為 NN 個月後,其傳回為 NN 個月後細胞的總數。(8 分) (二) 請用遞迴方式撰寫一函式 GCD,輸入為 2 個正整數,其傳回為此 2 個正整數之最大公因數。(7 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查遞迴函式的設計,重點包括:

  1. 設定適當的基底條件(Base Case)。
  2. 找出目前問題與較小規模問題之間的遞迴關係。
  3. 確保每次遞迴呼叫都使問題規模縮小,最後能回到基底條件。
  4. 最大公因數使用歐幾里得演算法(Euclidean Algorithm)。

(一)細胞總數函式 CellNumber

解題方法

假設第 00 個月開始時有 11 個成年細胞,且沒有幼年細胞。

設:

  • AnA_n:第 nn 個月的成年細胞數
  • YnY_n:第 nn 個月的幼年細胞數
  • Cn=An+YnC_n=A_n+Y_n:第 nn 個月的細胞總數

每個月的變化如下:

  • 成年細胞仍然存在,並且每個成年細胞產生 22 個幼年細胞。
  • 幼年細胞經過 11 個月後變為成年細胞。

因此:

An+1=An+YnA_{n+1}=A_n+Y_n Yn+1=2AnY_{n+1}=2A_n

細胞總數為:

Cn+1=An+1+Yn+1C_{n+1}=A_{n+1}+Y_{n+1}

代入上式:

Cn+1=An+Yn+2AnC_{n+1}=A_n+Y_n+2A_n Cn+1=Cn+2AnC_{n+1}=C_n+2A_n

又因為第 n−1n-1 個月的成年細胞,於第 nn 個月會變成幼年細胞;可整理得到:

Cn=Cn−1+2Cn−2C_n=C_{n-1}+2C_{n-2}

基底條件

第 00 個月:

C0=1C_0=1

第 11 個月:

  • 原本的成年細胞仍為成年細胞 11 個
  • 產生幼年細胞 22 個

所以:

C1=3C_1=3

遞迴程式

Function CellNumber(N)
 If N = 0 Then
 Return 1
 Else If N = 1 Then
 Return 3
 Else
 Return CellNumber(N - 1) + 2 * CellNumber(N - 2)
 End If
End Function

範例驗算

C0=1C_0=1 C1=3C_1=3 C2=C1+2C0=3+2(1)=5C_2=C_1+2C_0=3+2(1)=5 C3=C2+2C1=5+2(3)=11C_3=C_2+2C_1=5+2(3)=11

因此細胞總數依序為:

1, 3, 5, 11, 21,…1,\ 3,\ 5,\ 11,\ 21,\ldots

解題技巧與常見陷阱

  • 必須先明確設定第 00 個月的初始細胞狀態。本解採「開始時有 11 個成年細胞」的標準假設。
  • 成年細胞不會消失,幼年細胞才會在下一個月轉為成年細胞。
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 五 題15 分

某銀行有多台取號機供民眾取號,每台取號機提供多項服務的取號,同一服務會依據各取號機之取號的先後時間,依序給予連續的號碼,且最小的號碼為 1。請使用下列所有的函式來撰寫一取號函式 GetNumber,輸入為服務代碼與鎖定號碼變數失敗的上限次數,其傳回為此服務的下一個號碼,但當鎖定號碼變數失敗超過其上限次數時,則傳回 0。(15 分)

int lock(int serviceid) /* 鎖定指定服務代碼的號碼變數。輸入為服務代碼,其傳回為是否鎖定成功,當鎖定成功時,則傳回 1,當鎖定失敗時,則傳回 0。 */

unlock(int serviceid) /* 解鎖指定服務代碼的號碼變數。輸入為服務代碼。 */

int get(int serviceid) /* 取得指定服務代碼的號碼變數之值。輸入為服務代碼。 */

set(int serviceid, int value) /* 設定指定服務代碼的號碼變數之值。輸入為服務代碼與此服務代碼的號碼變數欲設定之值。 */

sleep() /* 執行暫停 0.1 秒 */

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查:

  1. 互斥鎖(Lock)與臨界區(Critical Section)
  • get 與 set 必須視為不可被其他取號機插入的連續操作。
  • 必須先使用 lock(serviceid) 成功鎖定該服務的號碼變數,才能讀取與更新。
  1. 競爭情況(Race Condition)
  • 若不加鎖,多台取號機可能同時讀到相同號碼,造成重複取號。
  • 鎖定範圍應包含 get、計算下一號、set 三個步驟。
  1. 失敗重試機制
  • lock 失敗時,應暫停 0.10.1 秒後再嘗試。
  • 當失敗次數超過指定上限,傳回 00。

號碼變數採用「下一個可發出的號碼」設計:

  • 初始值為 11。
  • 取出目前值 nn 作為本次號碼。
  • 將號碼變數更新為 n+1n+1。
  • 傳回 nn。

解題方法

設變數 failcount 紀錄鎖定失敗次數。

流程如下:

  1. 將失敗次數設為 00。
  2. 呼叫 lock(serviceid)。
  3. 若鎖定失敗:
  • failcount 加 11。
  • 若 failcount > maxfail,傳回 00。
  • 呼叫 sleep 暫停 0.10.1 秒,再重新嘗試。
  1. 若鎖定成功:
  • 呼叫 get(serviceid) 取得目前號碼。
  • 將號碼加 11。
  • 呼叫 set(serviceid, number + 1) 更新號碼變數。
  • 呼叫 unlock(serviceid) 解除鎖定。
  • 傳回本次取得的 number。

參考程式碼

int GetNumber(int serviceid, int maxfail)
{
 int failcount = 0;
 int number;

 while (1)
 {
 if (lock(serviceid) == 1)
 {
 number = get(serviceid);

 set(serviceid, number + 1);

 unlock(serviceid);

 return number;
 }
 else
 {
 failcount++;

 if (failcount > maxfail)
 {
 return 0;
 }

 sleep;
 }
 }
}

程式正確性說明

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 六 題20 分

某電梯管理系統控制多台電梯,當某樓層之等待區按下按鈕時,會將其樓層號碼傳送到系統之共用 Queue 中,系統會定時自共用 Queue 中讀取一筆目標樓層號碼,並尋找離此目標樓層最近的電梯來提供服務。請使用下列所有的函式,來撰寫一選取電梯函式 SelElev,輸入為電梯的總數,其傳回為離目標樓層最近的電梯號碼,但當未選擇到電梯時,則傳回 0。另外,當電梯總數為 NN 時,電梯號碼為 1 到 NN;樓層號碼為 1 代表 1 樓、2 代表 2 樓、0 代表地下 1 樓、-1 代表地下 2 樓(依此類推)。(20 分)

int getqueue() /* 自共用 Queue 中取得下一筆目標樓層號碼。其傳回為下一筆目標樓層號碼,當無資料時,則傳回 999。 */

int getcurfloor(int elevid) /* 取得指定電梯目前所在的樓層。輸入為電梯號碼,其傳回為此電梯目前所在的樓層,但當此電梯不提供服務時,則傳回 999。 */

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查:

  1. Queue 先進先出(FIFO):以 getqueue 取得共用 Queue 中下一筆目標樓層。
  2. 循序搜尋:逐一檢查編號 11 到 NN 的電梯。
  3. 最近距離判定:電梯與目標樓層的樓層距離為
∣電梯目前樓層−目標樓層∣\left|\text{電梯目前樓層}-\text{目標樓層}\right|
  1. getcurfloor(elevid) 回傳 999 代表該電梯不提供服務,必須排除。
  2. getqueue 回傳 999 代表 Queue 無資料,此時不選擇電梯,回傳 00。

地下樓層以數值表示具有連續性,例如:

  • 11 樓:11
  • 22 樓:22
  • 地下 11 樓:00
  • 地下 22 樓:−1-1

因此直接使用兩個樓層號碼相減後取絕對值,即可計算實際樓層距離。

解題方法

解題步驟如下:

  1. 呼叫 getqueue 取得目標樓層。
  2. 若回傳值為 999,表示 Queue 沒有資料,直接回傳 00。
  3. 設定目前最短距離為一個很大的值,並將選取電梯編號設為 00。
  4. 依序檢查電梯 11 到 NN:
  • 呼叫 getcurfloor(i) 取得第 ii 部電梯所在樓層。
  • 若回傳 999,跳過該電梯。
  • 計算其與目標樓層的距離。
  • 若距離小於目前最短距離,更新最短距離與電梯編號。
  1. 搜尋完成後回傳選取到的電梯編號。若所有電梯均不提供服務,則仍維持回傳 00。

同樣距離時,本解採用「編號較小的電梯優先」作為平手規則,因此只在新距離嚴格小於目前最短距離時更新。

參考程式碼

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

其他考古題

資訊《國營事業聯招 (資訊管理、程式設計)B》其他年度

110 年經濟部聯招(台電、中油、台水、台糖)新進職員・其他類科的《國營事業聯招 (資訊管理、程式設計)B》