115 原住民特考四等 電子工程類科 計算機概要 考古題詳解
第 1 題2 分
中央處理器(Central Processing Unit, CPU)是計算機的大腦,用來執行儲存在記憶體的程式指令,控制數位資料的處理及運算。有關中央處理器的主要組成部分,下列何者錯誤?
核心觀念
本題考查中央處理器(CPU)的主要組成,以及 CPU 與主記憶體的功能區分。
傳統計算機組織中,CPU 的核心組成包括:
- 算術邏輯單元(ALU):執行算術運算與邏輯運算。
- 控制單元(CU):負責擷取、解碼指令,並發出控制訊號。
- 暫存器(Register):CPU 內部的高速儲存單元,用來暫存指令、資料、位址及運算結果。
**隨機存取記憶體(RAM)**則屬於主記憶體,主要用來儲存目前執行中的程式與資料,並非 CPU 的主要組成部分。
解題方法
判斷各選項是否屬於 CPU 的內部功能單元即可:
- 負責運算與判斷的單元是 ALU。
- 負責指揮指令執行流程的單元是 CU。
- CPU 內部用來快速暫存資料與控制資訊的是暫存器。
- 儲存正在執行的程式與資料、但位於 CPU 外部主記憶體系統的元件是 RAM。
因此,RAM 不屬於傳統 CPU 的主要組成部分,錯誤選項為 (C)。
選項分析
(A) 算術邏輯單元(ALU)— 正確
ALU 是 CPU 的運算核心,負責:
- 加、減等算術運算;
- AND、OR、NOT、XOR 等邏輯運算;
- 大小比較、位元移位等運算。
因此,ALU 是 CPU 的主要組成部分。
(B) 暫存器(Register)— 正確
暫存器位於 CPU 內部,具有速度快、容量小的特性,用來暫存:
- 指令;
- 運算元;
- 記憶體位址;
- 中間運算結果;
- 程式計數器等控制資訊。
第 2 題2 分
當 CPU 從記憶體中取出(Fetch)一個指令後,程式計數器(Program Counter, PC)的值會發生什麼變化?
核心觀念
程式計數器(Program Counter, PC)是 CPU 內部的重要暫存器,用來儲存「下一個要被取出的指令位址」。
在一般的指令取出(Fetch)流程中,CPU 依照 PC 所指向的位址,從記憶體讀出指令;完成取指後,PC 會更新為下一個指令的位址,讓 CPU 能依序執行後續指令。
若每個指令占用固定長度,PC 通常可表示為:
因此,取出一個指令後,PC 會遞增至下一個指令的位址。
解題方法
本題直接依照 PC 的功能判斷:
- CPU 先讀取 PC 目前指向的記憶體位址。
- 從該位址取出指令。
- 為了讓下一次取指能取得後續指令,PC 更新為下一個指令的位址。
因此,PC 的值會向前遞增,選項為「程式計數器的值會遞增至下一個指令的位址」。
需注意,PC 增加的數值不一定永遠是 。若指令長度為多個位元組,PC 應增加相應的指令長度;本題以一般「遞增至下一個指令位址」的概念作答。
選項分析
第 3 題2 分
在常見的資訊單位中, 約為 的多少倍?
核心觀念
本題考查常見資訊容量單位中,國際單位前綴的倍率關係:
- kilo(k)=
- tera(T)=
因此:
解題方法
要求 是 的多少倍,直接相除:
因此:
所以正確答案為 (C)。
選項分析
-
(A) :錯誤。 ,只相當於相鄰三級前綴的倍率,例如 ,不是 TB 與 kB 的倍率。
-
(B) :錯誤。 ,是 MB 與 kB之間的錯誤判斷,未正確計算 tera 與 kilo 的指數差。
第 4 題2 分
將二進位數 轉換為十六進位數,下列表示法何者正確?
核心觀念
二進位轉換為十六進位時,利用:
因此,只要將二進位小數點左右分別以 位一組分組,再查十六進位對照表即可。
常用對照如下:
解題方法
題目為:
整數部分從小數點向左,每 位分成一組;最左側不足 位時,在左邊補 :
逐組轉換:
所以整數部分為:
小數部分從小數點向右,每 位分成一組;最右側不足 位時,在右邊補 :
逐組轉換:
所以小數部分為:
合併可得:
因此正確答案為 (A)。
選項分析
- (A) :正確。
整數部分:
小數部分:
故完整結果為:
- (B) :錯誤。
原二進位整數部分分組後為:
第 5 題2 分
在邏輯中,有關命題 的「逆命題(converse)」,下列何者正確?
核心觀念
原命題為:
其中:
- :前件
- :後件
命題 的「逆命題(converse)」定義為:將前件與後件互換,因此為:
逆命題不等於否定原命題,也不等於原命題的邏輯等值式。
解題方法
判斷逆命題時,只需將原命題的前件、後件互換:
因此正確選項為 (A)。
例如:
- 原命題:若某數是 的倍數,則該數是偶數。
- 逆命題:若某數是偶數,則該數是 的倍數。
原命題可以成立,但逆命題不一定成立,因為 是偶數,卻不是 的倍數。因此,原命題與逆命題通常不具邏輯等值關係。
選項分析
(A) :正確
此式將原命題 的前件與後件互換,正是逆命題的定義。
(B) :錯誤
此式同時否定前件與後件,稱為「否命題(inverse)」:
它不是逆命題。
(C) :錯誤
第 6 題2 分
若有二輸入 NOR 閘,其兩個輸入為 、,則輸出應為多少?
核心觀念
NOR 閘(Not OR gate,或非閘)的輸出為 OR 閘輸出的反相結果,布林代數表示為:
其中:
- 表示 OR 運算;
- 上方橫線表示 NOT 反相運算。
二輸入 NOR 閘只有在兩個輸入皆為 時,輸出才為 ;只要任一輸入為 ,輸出即為 。
解題方法
題目給定:
先進行 OR 運算:
再將 OR 運算結果反相:
因此,二輸入 NOR 閘的輸出為 。
選項分析
第 7 題2 分
在作業系統中,Deadlock 需要滿足四個必要條件。假設一個系統已經發生 Deadlock,下列何種方法無法解除 Deadlock 的狀況?
核心觀念
Deadlock(死結)是指一組程序彼此永久等待資源,導致所有程序都無法繼續執行。其發生必須同時具備以下四個必要條件:
- 互斥(Mutual Exclusion):資源一次只能由一個程序使用。
- 持有並等待(Hold and Wait):程序已持有部分資源,同時等待其他資源。
- 不可搶先(No Preemption):程序所持有的資源不能被系統強制取回,只能由程序自行釋放。
- 循環等待(Circular Wait):程序之間形成環狀等待關係。
解除 Deadlock 的基本方法,就是破壞上述至少一項必要條件,例如強制回收資源、終止程序,或限制資源請求順序。
解題方法
題目已明確指出系統「已經發生 Deadlock」,因此應判斷各選項是否能破壞 Deadlock 的必要條件、釋放被占用資源,或使等待循環失效。
其中,若只是讓更多程序提出更多資源需求,會增加資源競爭與等待關係,無法破壞任何一項必要條件,反而可能使系統更加嚴重。因此無法解除 Deadlock 的選項為 D。
選項分析
(A) 強制回收某些資源並重新分配
正確。此方法直接破壞「不可搶先」條件。
系統可將某程序持有的資源強制取回,再分配給其他等待中的程序,使部分程序得以繼續執行,進而釋放其原本持有的資源,逐步解除 Deadlock。
此方法稱為資源搶先(Resource Preemption),屬於 Deadlock recovery 的典型做法。不過實務上必須考慮程序回復、資料一致性,以及資源是否允許被安全取回等問題。
(B) 規定所有資源必須按照特定順序請求
錯誤。此方法可破壞「循環等待」條件。
例如規定所有程序必須依照資源編號由小到大請求資源。若程序已取得編號較大的資源,就不能再請求編號較小的資源,因而無法形成環狀等待。
第 8 題2 分
假設一台電腦擁有 (megabytes)的記憶體(memory),需要多少位元(bits)來定址(address)記憶體中的單一位元組(single byte)?
核心觀念
本題考查記憶體容量、位元組定址(byte addressing)與位址位元數的關係。
若記憶體採用「位元組定址」,每一個位址代表一個位元組。若共有 個可定址的位元組,所需位址位元數為 ,則:
題目中的 ,在計算機概要中通常採用二進位容量定義:
解題方法
記憶體容量為:
因為:
所以:
每個位址指定一個位元組,因此需要能表示 個不同位址,所需位址位元數為:
因此正確答案為 位元。
選項分析
- (A) :錯誤。 位元可定址的位元組數為:
其可定址容量大於題目的 ,因此不是本題所需的最少位址位元數。
第 9 題2 分
專家系統(Expert System)為智慧型系統(Intelligent System)的其中一種類型。在人工智慧中,有關專家系統的主要組件(Component),下列何者錯誤?
核心觀念
專家系統(Expert System)是人工智慧的一種應用系統,模擬特定領域專家的知識與推理能力,協助使用者進行診斷、判斷或決策。
其主要組件通常包括:
- 知識庫(Knowledge Base):儲存特定領域的事實、規則與專業知識。
- 推論引擎(Inference Engine):依據知識庫中的規則,對使用者提供的資料進行推理。
- 使用者介面(User Interface):負責使用者與系統之間的輸入、輸出與互動。
- 解釋功能(Explanation Facility):說明系統如何得到某項結論。
- 知識取得機制(Knowledge Acquisition):協助將專家知識轉換並建置到知識庫中。
本題要求判斷何者不是專家系統的主要組件。
解題方法
逐一檢查各選項是否屬於專家系統完成「知識儲存、推論處理及人機互動」所需的核心功能:
- 能儲存專業知識者,屬於知識庫。
- 能依據規則進行推理者,屬於推論引擎。
- 能讓使用者輸入問題、取得結果者,屬於使用者介面。
- 虛擬實境則是提供三維沉浸式互動環境的技術,並非專家系統的基本組件。
因此,不屬於專家系統主要組件的是虛擬實境。
選項分析
(A) 推論引擎(Inference Engine)—正確
推論引擎是專家系統的核心處理單元,負責將使用者輸入的事實與知識庫中的規則進行比對,並依據推理策略產生結論。
例如,知識庫中有:
- 若病人發燒且咳嗽,則可能罹患某種疾病。
- 某病人目前發燒且咳嗽。
推論引擎便可依據上述規則推導出相應結論。因此,推論引擎是專家系統的主要組件。
第 10 題2 分
依據以下的函式定義,輸出呼叫 tryit(3, 2.5) 的結果?
double tryit(int x, double y) { return (x * 2) + y / 2; }
核心觀念
本題考查函式呼叫、運算子優先順序,以及整數與浮點數的算術運算。
函式定義為:
呼叫:
因此:
函式回傳式為:
乘除法的優先順序高於加法,因此須先計算乘法與除法,再進行加法。
解題方法
將 、 代入函式:
先計算乘法與除法:
再相加:
由於函式回傳型別為 double,結果以浮點數表示,數值為 。
選項分析
第 11 題2 分
有關區塊鏈主要價值的敘述,下列何者正確?
核心觀念
本題考查區塊鏈(Blockchain)的主要價值與核心特性。
區塊鏈是一種以分散式帳本技術(Distributed Ledger Technology, DLT)為基礎的資料紀錄系統,資料不由單一中央機構獨占管理,而是由多個節點共同保存、驗證與同步。其重要特性包括:
- 去中心化
- 分散式儲存
- 共識機制
- 資料難以竄改
- 可追溯性
- 交易紀錄透明
在各項特性中,「去中心化」是區塊鏈最具代表性的核心價值,能降低對單一中央管理者的依賴,並避免單點失效。
解題方法
判斷本題可先抓住「主要價值」四字,再比較各選項是否屬於區塊鏈的核心功能。
區塊鏈透過多個節點共同維護帳本,交易須經由共識機制確認後寫入區塊,並利用雜湊值與鏈結結構提高資料竄改的困難度。其核心精神是:
因此,最符合區塊鏈主要價值的選項是「去中心化」。
選項分析
(A) 效率提升
錯誤。
區塊鏈在特定情境下可以減少中介機構、簡化對帳流程,因而提升交易或資料交換效率。但區塊鏈通常需要多節點驗證、共識處理及資料同步,交易速度與處理量未必高於傳統集中式資料庫。
因此,「效率提升」可能是某些應用所產生的附帶效益,並非區塊鏈最根本、最主要的價值。
(B) 去中心化
正確。
第 12 題2 分
關於資料庫管理系統(Database Management System, DBMS)的敘述,下列何者正確?
核心觀念
本題考查資料庫管理系統(Database Management System, DBMS)的基本功能,重點包括:
- 資料抽象化(Data Abstraction):隱藏資料的實際儲存細節,讓應用程式以較簡單的方式存取資料。
- 資料獨立性(Data Independence):資料的儲存方式變更時,通常不必同步修改所有應用程式。
- 交易管理(Transaction Management):確保資料庫操作符合交易的完整性與一致性要求。
- 分散式資料庫支援:現代 DBMS 可支援分散式資料庫、網路環境及多伺服器架構。
解題方法
判斷本題各選項時,應以「DBMS 是否負責管理資料庫,並隔離應用程式與底層儲存細節」為主要切入點。
DBMS 位於應用程式與資料庫儲存結構之間,應用程式通常透過 SQL、API 或其他資料庫介面提出資料存取要求,由 DBMS 負責:
- 資料的新增、刪除、修改與查詢;
- 儲存空間與檔案結構管理;
- 權限控管與安全性;
- 交易處理與並行控制;
- 備份、復原及故障處理;
- 提供資料抽象層與資料獨立性。
因此,正確敘述應是 DBMS 提供抽象層,使應用程式不必直接了解資料實際儲存方式。
選項分析
(A) DBMS 允許應用程式直接修改資料庫的底層儲存結構,以提高存取效率。
錯誤。
DBMS 的重要目的之一,就是將應用程式與底層儲存結構分離。應用程式應透過 DBMS 所提供的介面存取資料,不應直接修改資料檔案、索引結構或磁碟配置。
若應用程式直接修改底層儲存結構,可能造成:
- 資料格式不一致;
- 索引損壞;
- 資料完整性遭到破壞;
- 交易管理與復原機制失效;
- 應用程式與特定儲存結構過度相依。
DBMS 確實會自行調整索引、緩衝區及儲存配置,以改善效能,但這是 DBMS 的內部管理功能,不代表允許應用程式直接修改底層結構。
(B) DBMS 的主要功能之一是提供抽象層,讓應用程式能夠存取資料,而無需了解其實際存放方式。
正確。
DBMS 提供資料抽象化,使使用者或應用程式可以透過較高層次的資料模型與查詢語言操作資料,而不必了解資料實際儲存於哪些磁碟區塊、資料檔案如何排列、索引如何建立等細節。
例如,應用程式執行下列 SQL:
第 13 題2 分
使用 C 語言宣告一個名稱為 CAT 的陣列(Array),下列寫法何者正確?
核心觀念
本題考查 C 語言的陣列宣告語法。
C 語言宣告陣列的基本格式為:
例如:
int CAT[10];
表示宣告一個名為 CAT 的陣列,陣列中有 10 個 int 型態元素,其索引範圍為 0 至 9。
解題方法
判斷 C 語言陣列宣告時,可依序檢查三項:
- 是否具有合法的資料型態,例如
int。 - 是否具有合法的變數名稱,例如
CAT。 - 變數名稱後是否使用方括號
[]指定陣列大小。
符合「資料型態+陣列名稱+[元素個數]」格式者,才是正確的陣列宣告。
選項分析
(A) int CAT[10];
正確。
int:表示陣列元素的資料型態為整數。CAT:陣列名稱。[10]:表示陣列具有 10 個元素。;:表示敘述結束。
因此,此敘述宣告了一個包含 10 個整數元素的陣列。
(B) int CAT;
錯誤。
此敘述只宣告一個名為 CAT 的 int 型態單一變數,並未使用方括號指定陣列大小,因此不是陣列宣告。
第 14 題2 分
某個瀏覽器提供「回到上一頁(Back)」功能,常用來回到上一個網頁。若想用一種結構來儲存歷史瀏覽紀錄,並支援「回到上一頁」動作,最符合需求的是下列何種結構?
核心觀念
本題考「資料結構的存取順序」。
瀏覽器使用「回到上一頁(Back)」功能時,必須先回到最近瀏覽的上一個網頁,再依序回到更早之前的網頁。也就是:
- 最後存入的瀏覽紀錄,最先被取出。
- 先進入的網頁,反而較晚被取出。
這種「後進先出」的特性稱為 LIFO(Last In, First Out),正是堆疊(Stack)的基本特性。
堆疊常用兩個基本操作表示:
push:將資料放入堆疊頂端。pop:從堆疊頂端取出最近放入的資料。
例如瀏覽順序為:
按下「Back」時,應依序返回:
因此最符合需求的資料結構是堆疊。
解題方法
判斷本題的關鍵,在於找出「瀏覽紀錄的取出順序」。
假設使用者依序瀏覽網頁 、、:
- 瀏覽 ,將 存入紀錄。
- 瀏覽 ,將 存入紀錄。
- 瀏覽 ,將 存入紀錄。
- 按下 Back,必須先回到 。
- 再按一次 Back,才回到 。
此時最後加入的紀錄 最先被處理,符合:
而堆疊的定義正是:
所以正確選項為堆疊。
選項分析
(A) 陣列(Array)
陣列是一種以連續記憶體位置儲存資料的結構,通常可透過索引直接存取元素,例如存取第 個元素。
陣列本身主要強調:
- 固定索引位置。
- 隨機存取。
- 依索引取得資料。
它不限定資料必須採用「後進先出」的方式取出。雖然陣列可以被用來實作堆疊,但陣列本身不是專門表示 LIFO 行為的抽象資料結構,因此不是本題最符合需求的答案。
(B) 佇列(Queue)
第 15 題2 分
有關在「佇列(Queue)」中若進行連續取出與放入而產生的問題,可以使用「環狀佇列(Circular Queue)」來解決,下列敘述何者正確?
核心觀念
佇列(Queue)遵循「先進先出」(FIFO)原則:
- 從前端(Front)取出元素。
- 從尾端(Rear)放入元素。
在一般線性佇列中,元素持續取出與放入後,前端位置會逐漸向後移動。即使前方已經留下可用的記憶體空間,尾端指標若已移至陣列最後位置,仍可能無法繼續插入元素,形成「假溢位」(False Overflow)。
環狀佇列將陣列的尾端與前端視為相連。當尾端到達陣列最後位置時,可利用循環方式回到陣列起始位置,重複使用前方已釋出的空間,因此可解決線性佇列的假溢位問題。
解題方法
判斷各選項是否正確的關鍵,是確認環狀佇列主要解決的問題。
假設佇列容量為 ,尾端指標移動時可採用:
當 時,下一次移動會回到索引 。只要佇列尚未真正存滿,就能利用前方因取出元素而產生的空間。
例如容量為 的線性佇列經過多次取出與放入後,可能呈現:
雖然前方仍有兩個空位,但尾端已在陣列末端,線性佇列無法直接向後插入,因而產生假溢位。環狀佇列則可將新元素放入前方空位:
此時元素數量仍未超過容量,卻能繼續使用剩餘空間。
選項分析
(A) 滿溢(Overflow)與欠位(Underflow)的衝突問題
錯誤。
Overflow 是佇列已滿時仍嘗試插入元素;Underflow 是佇列為空時仍嘗試取出元素。兩者是不同的錯誤狀況,並非環狀佇列主要要解決的問題。
第 16 題2 分
將運算式建構為運算式樹(二元樹,Binary Tree)後,下列何種表示法對電腦的運算而言較佳?
核心觀念
本題考「運算式樹」的三種走訪表示法,以及它們對運算式求值的便利性。
假設運算式樹中:
- 葉節點為運算元,例如
- 內部節點為運算子,例如
三種走訪方式如下:
- 前序(Preorder):根節點 → 左子樹 → 右子樹
- 中序(Inorder):左子樹 → 根節點 → 右子樹
- 後序(Postorder):左子樹 → 右子樹 → 根節點
其中,後序表示法即常見的「後置式」或「逆波蘭表示法(Reverse Polish Notation, RPN)」。
解題方法
從「電腦如何依序讀取並計算」的角度判斷。
例如運算式:
其運算式樹如下:
- 根節點為
- 左子樹為
- 右子樹為
三種表示法分別為:
- 前序:
- 中序:
- 後序:
後序表示法具有以下特性:
- 運算元會先出現。
- 運算子會在其所需的運算元之後出現。
- 不需要額外判斷括號或運算子優先順序。
- 可使用堆疊直接進行求值。
以後序式 為例:
- 讀取 ,推入堆疊。
- 讀取 ,推入堆疊。
- 讀取 ,取出 ,計算 ,再將結果推入堆疊。
- 讀取 ,推入堆疊。
- 讀取 ,取出 ,計算 。
因此,後序表示法可以配合堆疊,以單次由左至右掃描完成運算,這是電腦處理運算式時的重要優點。
選項分析
(A) 前序表示法(Pre Order)錯誤
前序表示法將運算子放在運算元之前,例如:
第 17 題2 分
樹的總節點數(Node)為 ,總邊(Edge)數為 ,下列何者正確?
核心觀念
本題考查圖論中「樹(Tree)」的基本性質。
樹是一個連通且無循環的圖。若樹的總節點數為 ,總邊數為 ,則有限樹必定滿足:
因此:
所以正確答案為 (A) 。
解題方法
可由樹的基本公式直接判斷:
將兩邊整理可得:
由於節點數比邊數多 ,因此:
例如:
- 僅有 個節點的樹:
- 個節點相連:
- 個節點形成鏈狀:
均符合 。
另一種理解方式是:樹可以從單一節點開始,每增加一個新節點,只需增加一條邊將其連接至原有樹,因此每次增加節點時, 與 同時增加 ,但始終維持 。
選項分析
(A) :正確
樹的邊數公式為:
所以:
第 18 題2 分
有 個點的無向圖形擴充樹(spanning tree)會有幾條邊線?
核心觀念
本題考查無向圖的「擴充樹」(spanning tree)定義與樹的基本性質。
擴充樹是原無向圖的一個子圖,必須同時符合:
- 包含原圖的全部 個頂點。
- 連通。
- 不含任何迴路。
所有具有 個頂點的樹,邊數固定為:
因此,含有 個點的無向圖,其任一擴充樹均有 條邊。
解題方法
可從「逐一加入頂點」推導:
- 第 1 個頂點不需要邊。
- 為使第 2 個頂點與既有部分連通,需加入 條邊。
- 第 3 個頂點需再加入 條邊。
- 依此類推,第 個頂點需加入 條邊。
因此邊數為:
其中共有 個 ,所以:
也可利用樹的基本公式:
代入頂點數 :
選項分析
(A) 條:正確
擴充樹本身是一棵包含全部 個頂點的樹。任何具有 個頂點的樹都恰有 條邊,因此此選項正確。
(B) 條:錯誤
第 19 題2 分
【此題原卷文字擷取不全,請參考原卷】
下圖為邊活動網路(Activity-on-Edge Networks, AOE Networks),由節點 A 開始,節點 L 為完成。下列敘述何者錯誤?
核心觀念
本題考查 AOE 網路中的:
- 節點最早發生時間
- 節點最晚發生時間
- 關鍵路徑:總工期中,所有活動允許延遲時間為 的路徑
- AOE 網路的計算方式:
- 正向計算最早時間:取前置節點時間加活動時間的最大值。
- 反向計算最晚時間:取後續節點最晚時間減活動時間的最小值。
圖中各活動時間如下:
解題方法
一、正向計算節點最早時間
令起點 的最早時間為 :
依序計算:
節點 有兩個前置節點:
節點 :
節點 :
節點 :
節點 :
節點 :
終點 :
因此整個計畫的最早完成時間為 。
二、反向計算節點最晚時間
終點 的最晚時間等於計畫完成時間:
依序反向計算:
第 20 題2 分
當資料量增多時效率較優(時間複雜度較低)的排序演算法,下列何者正確?
核心觀念
本題考查排序演算法的時間複雜度。當資料量 增加時,應比較各演算法的成長率;成長率越低,資料量變大時效率通常越好。
常見排序演算法的時間複雜度如下:
| 排序法 | 最佳情況 | 平均情況 | 最壞情況 |
|---|---|---|---|
| 氣泡排序 | |||
| 插入排序 | |||
| 合併排序 |
其中,當 足夠大時:
因此,合併排序的時間複雜度成長較慢,資料量增加時效率較佳。
解題方法
判斷本題的關鍵,是比較各選項排序法在一般情況下的時間複雜度。
合併排序採用「分割與征服」策略:
- 將 筆資料分成兩半。
- 逐層分割,總共有約 層。
- 每一層進行合併時,需處理全部 筆資料,成本為 。
因此其遞迴關係為:
由此可得:
氣泡排序與插入排序在平均及最壞情況下皆需進行大量兩兩比較或移動,時間複雜度通常為:
所以資料量增多時,合併排序的效率較優,正確答案為 C。
選項分析
(A) 氣泡排序(bubble sort)錯誤
氣泡排序反覆比較相鄰元素,若順序錯誤便交換。在平均及最壞情況下,需進行約 輪比較,每輪約需處理 筆資料,因此時間複雜度為:
雖然若資料已接近排序完成,且實作具有「本輪無交換即停止」的最佳化設計,最佳情況可達 ,但不能因此認定其在資料量增加時整體效率優於合併排序。
第 21 題2 分
有關插入排序法(insertion sort)的特性,下列敘述何者正確?
核心觀念
插入排序法(insertion sort)的概念,是將數列分成:
- 已排序部分
- 尚未排序部分
排序時,每次從尚未排序部分取出第一個元素,與已排序部分的元素比較,並插入適當位置,使已排序部分的範圍逐步擴大。
例如數列:
開始時可視第一個元素 為已排序部分,接著依序取出 、、,插入目前已排序數列的適當位置。
解題方法
判斷插入排序法的關鍵,在於掌握其核心操作:
以遞增排序為例:
- 初始已排序部分:
- 取出 ,插入 前方:
- 取出 ,插入 與 之間:
- 取出 ,插入 後方:
因此,符合插入排序定義的是「每次從未排序數列中取第一個數,插入已排序數列的適當位置」。
選項分析
(A) 從最後一個元素開始比較
第 22 題2 分
搜尋引擎(Search Engine)在大量資料中搜尋資訊時,為什麼通常能比單純使用二元搜尋法(Binary Search)更加快速且有效率?
核心觀念
本題考查搜尋引擎的資料索引技術,以及其與單純二元搜尋法的差異。
二元搜尋法適用於「資料已依照某一關鍵值排序」的情況。搜尋時反覆比較中間位置的資料,將搜尋範圍縮小一半,其時間複雜度為:
但搜尋引擎處理的通常是大量文件、網頁及關鍵字,並非單純在一個已排序的一維陣列中尋找單一資料。搜尋引擎會事先建立索引,例如:
- 倒排索引(Inverted Index):建立「關鍵字」與「包含該關鍵字的文件」之間的對應關係。
- 多層次索引:利用多層索引結構快速縮小搜尋範圍。
- 排序與排名資料:依相關性、權重、熱門程度等因素排列搜尋結果。
- 分散式索引:將龐大資料分散至多部伺服器或多個資料分片中處理。
因此,搜尋時不必逐一檢查所有文件,而是直接透過預先建立的索引找出相關資料,再進行排序與呈現。
解題方法
判斷本題的關鍵,在於辨認「搜尋時重新處理全部資料」與「事先建立索引、搜尋時直接查表」的差異。
單純二元搜尋法的基本流程是:
- 資料必須先依關鍵值排序。
- 取搜尋範圍的中間資料進行比較。
- 根據比較結果,保留左半部或右半部。
- 重複上述步驟,直到找到目標或確認不存在。
其搜尋複雜度為 ,對單一排序資料集合相當有效率。
搜尋引擎則是在搜尋之前,先將大量文件分析並建立索引。例如對關鍵字「電腦」建立如下對應:
使用者搜尋「電腦」時,系統可直接取得相關文件清單,再依相關性進行排序,不需要從第一份文件開始逐一比對。因此,搜尋引擎通常比未使用適當索引的搜尋方式更有效率。
所以,符合題意的是「搜尋引擎使用預先建立的多層次索引及排序資料結構」,選擇 (B)。
選項分析
(A) 搜尋引擎將所有資料暫存在記憶體,每次搜尋時從頭比對
第 23 題2 分
下列 C 語言程式片段,其執行的結果應顯示為何?
int a = 1, b = 2;
a = (b != 2);
printf("a=%d, b=%d\n", a, b);
核心觀念
本題考查 C 語言的「不等於比較運算子」!= 及其布林結果:
- 若條件成立,結果為整數
1。 - 若條件不成立,結果為整數
0。 b != 2只會比較b與2,不會改變b的值。
解題方法
初始值為:
int a = 1, b = 2;
因此:
執行:
a = (b != 2);
先判斷括號內的比較式:
代入 :
結果為假。在 C 語言中,假以整數 0 表示,因此:
a = 0;
比較運算不會修改 b,所以:
b = 2;
最後執行:
printf("a=%d, b=%d\n", a, b);
輸出為:
a=0, b=2
選項分析
第 24 題2 分
下列 C 語言程式的輸出,結果為何?
#include <stdio.h>
int main(void) {
int r = 7, s = 6, t = 5;
t = (++r == s--) ? r-- : ++s;
printf("%d, %d, %d", r, s, t);
return 0;
}
核心觀念
本題考查 C 語言中的:
- 前置遞增運算子
++r - 後置遞減運算子
s-- - 條件運算子
條件 ? 運算式1 : 運算式2 - 賦值運算子的執行結果
其中:
++r:先將r加 1,再使用新值。s--:先使用s的原值,再將s減 1。條件 ? A : B:條件成立時執行A,不成立時執行B,只會執行其中一個分支。
解題方法
初始值為:
原程式:
t = (++r == s--) ? r-- : ++s;
依序判斷條件式:
第一步:計算 ++r
++r 是前置遞增,因此先將 r 加 1:
此時 ++r 的值為 。
第二步:計算 s--
s-- 是後置遞減,因此先取出原值 進行比較,再將 s 減 1:
- 比較時使用的值:
- 執行後的
s:
因此條件判斷為:
結果為假。
第三步:執行條件運算子的假分支
因為條件為假,所以執行:
++s
此時:
++s 的結果為 ,因此:
t = 6;
最後各變數為:
所以 printf 輸出:
8, 6, 6
選項分析
第 25 題2 分
有關陣列(array)的特色,下列何者錯誤?
核心觀念
本題考查陣列(array)的基本資料結構特性。傳統陣列通常具有以下特徵:
- 陣列元素配置於連續的記憶體位置。
- 所有元素具有相同資料型態,稱為同質化(homogeneous)。
- 每個元素均可透過索引(index)存取,且索引值具有唯一性。
- 陣列元素的位置可透過索引指定,不是只能從陣列尾端新增。
因此,題目要求找出錯誤的敘述,應選出違反陣列基本特性的選項。
解題方法
判斷各選項是否符合「陣列的基本定義」:
- 是否使用連續記憶體儲存?
- 元素是否具有相同型態?
- 是否透過索引存取?
- 元素位置是否只能固定在陣列尾端?
前三項均符合陣列的一般特性;選項(D)將陣列的存取與新增位置限制為只能在最後,與實際情況不符。
選項分析
(A)陣列總是儲存在連續的記憶體位置。
正確。
傳統陣列的元素會依序配置在連續記憶體中。例如,若每個元素占用 Bytes,且第一個元素位址為 ,則後續元素位址通常為:
這種連續配置使得陣列能以基底位址與索引快速計算元素位址:
因此,陣列能以 時間直接存取指定索引的元素。
本選項中的「總是」是依基礎資料結構與考試慣例而言。某些高階語言的特殊容器或抽象資料型態,實作上未必完全符合連續配置,但不影響本題依傳統陣列定義作答。
(B)陣列內的所有元素都屬於同一類型,即所謂同質化(homogeneous)。
正確。
陣列中的元素必須具有相同資料型態,例如:
第 26 題2 分
執行下列 C 語言程式片段後,變數 sum 的值為何?
int a[6] = {1, 2, 3, 4, 5, 6}, i, sum = 0;
for (i = 0; i < 6; i++)
if (a[i] % 2 == 0)
sum = sum + a[i];
核心觀念
本題考查 C 語言中的:
- 陣列索引:
a[0]到a[5] for迴圈執行範圍- 餘數運算子
% - 條件判斷與累加
條件式:
a[i] % 2 == 0
表示判斷 a[i] 除以 的餘數是否為 。餘數為 代表該數為偶數。
解題方法
陣列內容為:
for 迴圈的執行條件為:
i < 6
因此 依序取 ,共檢查六個陣列元素。
只有偶數會加入 sum:
a[i] | a[i] % 2 | 是否累加 | sum | |
|---|---|---|---|---|
| 0 | 1 | 1 | 否 | 0 |
| 1 | 2 | 0 | 是 | 2 |
| 2 | 3 | 1 | 否 | 2 |
| 3 | 4 | 0 | 是 | 6 |
第 27 題2 分
在 Python 語言裡若出現下列哪個符號時,下一行程式碼要縮排?
核心觀念
Python 使用「縮排」表示程式區塊,不使用 C、Java 常見的大括號 {}。當 if、for、while、def、class、try 等複合敘述結尾出現冒號 : 時,下一行通常必須縮排,形成其所屬的程式區塊。
例如:
if score >= 60:
print("及格")
冒號表示敘述即將開始一個新的區塊,因此下一行的 print 必須縮排。
解題方法
判斷各符號是否具有「開始縮排區塊」的功能:
#:Python 註解起始符號。\:程式碼續行符號。::複合敘述與程式區塊的標示符號。{:Python 中用於字典、集合等資料結構,不是區塊標示符號。
因此,依題目官方答案及一般命題意旨,應選冒號。
選項分析
- (A)
#錯誤
# 用來表示註解,從 # 開始至該行結尾的內容不會被 Python 執行。
# 這是註解
print("Hello")
# 不會建立程式區塊,也不會要求下一行縮排。
- (B)
\錯誤
反斜線 \ 可用於表示同一個敘述延續至下一行:
total = 1 + 2 + \
3 + 4
它的作用是「續行」,不是開始新的程式區塊。下一行是否縮排,主要是為了提高可讀性,並非 Python 區塊語法的要求。
- (C)
:正確
Python 的複合敘述通常以冒號 : 結尾,下一行開始撰寫縮排區塊:
第 28 題2 分
下列 C++ 程式碼執行的結果為何?
int x = 1;
int y = 0;
for (int i = 0; i < 5; i++) {
if ((x && !y) || (y && !x)) {
cout << i << " ";
}
x = !x;
y = !y;
}
核心觀念
本題考查 C++ 中:
- 邏輯運算子
&&、||、! - 整數在條件判斷中的真值
- 迴圈執行順序
- 變數以
!x、!y反覆切換 0 與 1
在 C++ 中:
0代表假(false)- 非 0 整數代表真(true)
!x會將真值反轉,結果必為0或1x && !y表示「 為真且 為假」y && !x表示「 為真且 為假」
因此條件式
實際上是在判斷 與 是否恰有一個為真,也就是 XOR(互斥或)的效果。
解題方法
迴圈每次執行的順序是:
- 判斷
if條件。 - 條件成立時輸出
i。 - 執行
x = !x。 - 執行
y = !y。 i加 1,進入下一輪。
逐次列出變數狀態:
| 迴圈次數 | 判斷前 | 判斷前 | (x && !y) | (y && !x) | 是否輸出 |
|---|---|---|---|---|---|
| 0 | 1 | 0 | 1 | 0 | 輸出 0 |
| 1 | 0 | 1 | 0 | 1 | 輸出 1 |
| 2 | 1 | 0 | 1 | 0 | 輸出 2 |
| 3 | 0 | 1 | 0 | 1 | 輸出 3 |
| 4 | 1 | 0 | 1 | 0 | 輸出 4 |
每次迴圈結束時, 與 都同時反轉:
- 變成
- 變成
第 29 題2 分
執行下列 C 程式,將產生何種輸出?
int i, sum = 0;
for (i = 0; i < 10; i++) {
if (i % 2)
continue;
sum += i;
}
printf("%d", sum);
核心觀念
本題考查 C 語言 for 迴圈、取餘數運算子 % 與 continue 敘述。
i % 2用來判斷i是否為奇數:- 偶數除以 的餘數為
- 奇數除以 的餘數為
if (i % 2)條件成立時,表示 為奇數。continue會跳過本次迴圈剩餘敘述,直接進入for迴圈的更新部分,即執行i++。
解題方法
迴圈初始為 ,執行條件為 ,每次迴圈結束後執行 i++。
當 為奇數時,執行 continue,不會執行 sum += i;因此只有偶數會加入 sum。
| 執行結果 | sum | ||
|---|---|---|---|
| 加入 | |||
continue,不加入 | |||
| 加入 | |||
continue,不加入 | |||
| 加入 | |||
continue,不加入 | |||
| 加入 | |||
continue,不加入 |
第 30 題2 分
根據以下的 C++ 類別宣告,下列何者不能被 Child 類別中的 ChildAA 函數所使用?
class Father {
public:
void FatherAA();
private:
float FatherBB;
};
class Child : public Father {
public:
int ChildAA(int);
private:
int ChildBB;
};
核心觀念
本題考查 C++ 的「類別成員存取權限」與「繼承後的存取規則」。
存取權限主要分為:
public:類別內部、子類別及類別外部皆可使用。protected:類別內部及子類別成員可使用,類別外部通常不可直接使用。private:只有宣告該成員的類別本身之成員函數及友誼函數可直接使用。
本題採用 public 繼承:
class Child : public Father
public 繼承會保留父類別的 public 成員可在子類別中使用,但不會讓父類別的 private 成員變成可直接存取。
解題方法
判斷每個選項是否能在 ChildAA 函數中直接使用:
- 先確認成員屬於
Father或Child。 - 再確認該成員的存取權限。
- 判斷
ChildAA是否具有存取該成員的資格。
ChildAA 是 Child 的成員函數,因此可以直接使用 Child 類別本身的私有成員;但不能直接使用 Father 類別的私有成員。
選項分析
(A) FatherAA
class Father {
public:
void FatherAA;
};
FatherAA 是 Father 的 public 成員函數。由於 Child 採用 public 繼承,FatherAA 可被 Child 繼承並在 ChildAA 中使用,例如:
void Child::ChildAA(int x) {
FatherAA;
}
因此此選項可以使用,錯誤。
(B) FatherBB
class Father {
private:
float FatherBB;
};
第 31 題2 分
C++ 程式語言不支援下列何種參數傳遞(parameter passing)的方法?
核心觀念
本題考查程式語言的參數傳遞方式,以及 C++ 原生支援的參數傳遞機制。
常見參數傳遞方式包括:
- Pass by value(傳值呼叫):將實際參數的值複製給形式參數。
- Pass by reference(傳址/傳參照):形式參數直接參照實際參數,能修改原變數。
- Pass by name(傳名呼叫):將實際參數視為一段可在被呼叫函式中延後求值的運算式。
- Pass by location(傳位置):傳遞實際參數所在的記憶體位置,通常以指標概念實現。
C++ 原生支援傳值與傳參照,也能透過指標參數傳遞記憶體位置;但不支援傳名呼叫。因此依官方答案,本題選 (B)。
解題方法
判斷本題可先辨識各種參數傳遞方式的語意,再對照 C++ 的語法與功能:
- C++ 函式的普通參數採用傳值方式。
- C++ 可使用參照參數,例如
int& x,因此支援 Pass by reference。 - C++ 可將指標作為參數,例如
int* p,藉此傳遞變數的記憶體位置,因此可視為支援 Pass by location。 - Pass by name 是將實際參數的運算式帶入函式,使用時才求值,這是 Algol 60 等語言的特有機制,C++ 沒有原生的傳名呼叫機制。
所以不支援的是:
選項分析
(A) Pass by reference:錯誤選項
C++ 支援參照參數。例如:
void increase(int& x) {
x++;
}
呼叫:
int n = 3;
increase(n);
函式中的 x 是 n 的別名,修改 x 就會修改 n。因此 C++ 支援 Pass by reference。
(B) Pass by name:正確選項
Pass by name 的特徵是:實際參數不一定在呼叫函式時立即求值,而是在被呼叫函式使用形式參數時才求值;其概念近似將實際參數的運算式以文字或語意方式代入函式。
C++ 沒有原生的 Pass by name 參數傳遞機制。C++ 的參照參數雖然能讓函式直接操作原變數,但參照本身不是延後求值的運算式,因此不能等同於 Pass by name。
第 32 題2 分
物件導向的程式設計中,一個類別可以繼承(Inheritance)其他類別的屬性和方法。有關繼承的目的,下列何者正確?
核心觀念
本題考查物件導向程式設計中「繼承(Inheritance)」的主要目的。
繼承是指子類別(subclass)取得父類別(superclass)既有的屬性與方法,並可在此基礎上新增或覆寫功能。其核心價值包括:
- 程式碼重複使用(reuse)
- 建立類別間的階層關係
- 支援多型(polymorphism)
- 便於擴充與維護程式
因此,繼承最直接、最典型的目的,是讓既有程式碼能被子類別重複利用。
解題方法
判斷各選項所描述的功能,分別對應物件導向的哪一項特性:
- 繼承:重複使用既有類別的屬性與方法
- 封裝(Encapsulation):控制資料存取,降低外部直接接觸內部資料
- 資訊隱藏(Information Hiding):隱藏實作細節
- 多型(Polymorphism):同一介面可呈現不同類別的行為
題目問的是「繼承的目的」,因此應選擇直接描述程式碼重複使用的選項。
選項分析
(A) 可以更好地控制資料並提高安全性
錯誤。
控制資料存取與提高資料安全性,主要是封裝與存取修飾詞的功能,例如 private、protected 與 public。透過封裝,可以限制外部直接修改物件內部資料,並利用方法進行合理的存取控制。
繼承本身並不以提高資料安全性為主要目的;若繼承階層設計不當,甚至可能使子類別接觸到父類別的 protected 成員。
(B) 可以隱藏其他類別的所有屬性
錯誤。
第 33 題2 分
DNS(Domain Name System)的主要功能,下列何者正確?
核心觀念
DNS(Domain Name System,網域名稱系統)的主要功能,是將人類容易記憶的網域名稱轉換為電腦網路使用的 IP 位址。
例如使用者輸入:
www.example.com
DNS 會查詢對應的 IP 位址,例如:
93.184.216.34
瀏覽器取得 IP 位址後,才能與目標伺服器建立連線。因此,DNS 可視為「網域名稱與 IP 位址之間的轉譯系統」。
解題方法
判斷各選項所描述的功能是否屬於 DNS 的核心職責:
- 電子郵件傳輸:由電子郵件相關通訊協定負責。
- 網頁儲存:由網頁伺服器、主機或雲端儲存服務負責。
- 網域名稱轉換為 IP 位址:正是 DNS 的主要功能。
- 網路安全防護:屬於防火牆、防毒軟體、入侵偵測系統等安全機制的功能。
因此,正確選項為將網域名稱轉譯為 IP 位址。
選項分析
(A) 傳輸電子郵件
錯誤。電子郵件的寄送與接收主要使用 SMTP、POP3、IMAP 等通訊協定。DNS 雖然可以提供郵件伺服器的 MX 紀錄,協助找出收件網域所使用的郵件伺服器,但本身不負責傳輸電子郵件。
第 34 題2 分
在高性能的路由器與交換器中,為快速搜尋與封包轉送,通常會使用特定類型的記憶體來儲存「轉送表(Forwarding Table)」。下列何種記憶體類型,最常用於儲存高性能網路設備中的轉送表(Forwarding Table)?
核心觀念
本題考查網路設備中的記憶體應用,重點是辨認哪一種記憶體適合進行「依內容搜尋」,以快速查找封包的目的地與對應轉送介面。
轉送表通常包含:
- 目的地 IP 位址或網路前綴
- 網路遮罩
- 下一跳位址
- 轉送介面等資訊
高性能路由器與交換器必須在封包抵達時,迅速將目的地 IP 位址與轉送表中的多筆網路前綴進行比對,並找出最符合的項目,也就是最長前綴比對(Longest Prefix Match, LPM)。
TCAM(Ternary Content Addressable Memory,三態內容可定址記憶體)能以硬體平行比對方式,依輸入內容搜尋符合的表項,並支援三種狀態:
- 不在乎(don't care,通常表示為 )
其中「不在乎」狀態特別適合表示 IP 路由前綴中的萬用位元,因此常用於儲存路由器與交換器的轉送表。
解題方法
判斷本題可從「轉送表需要快速查表」切入。
一般記憶體是以位址存取資料,流程是:
TCAM 則是以資料內容作為搜尋條件:
例如路由表中可能有:
當封包目的地為 時,兩筆路由都可能符合,但應選擇較具體的 路由。TCAM 可利用遮罩與優先權機制快速完成此類比對,適合高效能封包轉送。
因此,最符合題意的記憶體類型是 TCAM。
選項分析
(A) DRAM(Dynamic Random Access Memory)錯誤
DRAM 是動態隨機存取記憶體,主要特性如下:
- 以位址存取資料
- 資料必須定期刷新
- 容量大、單位成本低
- 適合作為主記憶體或封包緩衝區
第 35 題2 分
在 IPv4 網路中,當主機要與區域網路內的其他設備通訊時,需先將對方的 IP 位址轉換為實體網路卡的 MAC 位址。下列何種通訊協定是用來將 IPv4 位址解析為對應的 MAC 位址?
核心觀念
本題考查 IPv4 網路中的「位址解析」:
- IP 位址:網路層的邏輯位址,用來識別主機。
- MAC 位址:資料鏈結層的實體位址,用來在區域網路中傳送乙太網路框架。
- ARP(Address Resolution Protocol,位址解析協定):將已知的 IPv4 位址解析為對應的 MAC 位址。
當主機要與同一區域網路內的設備通訊時,必須先知道對方的 MAC 位址,才能建立乙太網路框架。此時便使用 ARP。
解題方法
題幹的關鍵語句是:
「將 IPv4 位址解析為對應的 MAC 位址」
直接對照各協定的功能即可判斷:
這正是 ARP 的功能。
實際運作時,主機會先在區域網路廣播 ARP Request,詢問「哪一台設備使用這個 IPv4 位址?」持有該 IP 位址的設備再回覆 ARP Reply,提供自己的 MAC 位址。主機取得結果後,通常會暫存在 ARP Cache 中,以減少重複查詢。
若目的主機位於不同網路,主機通常解析的是預設閘道器的 MAC 位址,再由路由器轉送封包;但協定仍然是 ARP。
選項分析
(A) DNS(Domain Name Service)錯誤
DNS 用於將網域名稱解析為 IP 位址,例如:
第 36 題2 分
在神經網路中,有關訓練的敘述,下列何者正確?
核心觀念
本題考查神經網路(Neural Network)中「訓練」的基本意義。
神經網路由輸入層、隱藏層及輸出層等構成,透過調整各連結的權重(weights)與偏差值(biases),使模型逐漸學習輸入資料與輸出結果之間的關係。訓練完成後,神經網路便能根據新的輸入資料,產生分類、預測或決策結果。
在訓練過程中,模型通常會計算預測值與正確答案之間的損失(loss),再利用反向傳播(backpropagation)及最佳化方法調整參數,使損失逐步降低。
解題方法
判斷本題時,應掌握「神經網路訓練的目的」:
透過大量資料調整模型參數,使神經網路學會輸入與輸出之間的規律,進而對新資料作出適當判斷。
因此,訓練的核心結果是讓神經網路具備依據資料進行判斷或決策的能力,而不是單純提升電腦硬體效能、保存所有資料,或縮小電腦體積。
選項分析
(A) 讓神經網路學會如何做決定
正確。
神經網路透過訓練學習資料中的特徵與規律,並將學習結果反映在權重與偏差值中。例如,影像辨識模型可以根據訓練資料學會判斷影像屬於貓、狗或其他類別;垃圾郵件分類模型則可以學會判斷電子郵件是否為垃圾郵件。
因此,「讓神經網路學會如何做決定」雖然是較概括的說法,但符合神經網路訓練的基本目的。
(B) 讓電腦運行更快
第 37 題2 分
如果某公司的 HTTPS 憑證私鑰被洩露,應該立即執行下列何項措施?
核心觀念
本題考查 HTTPS 憑證私鑰遭洩露時的 PKI(公開金鑰基礎建設)與憑證生命週期管理。
HTTPS 憑證包含:
- 公開金鑰:可放在憑證中公開使用。
- 私鑰:伺服器用來證明自身身分、進行數位簽章或建立加密連線,必須嚴格保密。
- 憑證資訊:包含網站名稱、公開金鑰、有效期間、簽發者 CA 等,並由 CA 進行數位簽章。
私鑰一旦洩露,攻擊者可能冒用該網站身分,建立偽造的 HTTPS 服務。因此,即使原憑證尚未到期,也不能再信任該憑證。
憑證撤銷狀態通常透過:
- CRL(Certificate Revocation List,憑證撤銷清單)
- OCSP(Online Certificate Status Protocol,線上憑證狀態協定)
提供給使用者或瀏覽器查詢。
本題不涉及特定法條;若涉及法規判斷,應以命題當年(民國 115 年)法規為準。
解題方法
判斷重點是:「憑證私鑰是否仍然安全?」
私鑰已洩露代表原憑證的身分證明能力已失去安全性。正確處理流程為:
- 立即停止使用遭洩露的私鑰。
- 產生一組新的公開金鑰與私鑰。
- 向原 CA 申請撤銷舊憑證。
- 申請使用新私鑰的新憑證。
- 將新憑證部署至伺服器,並妥善保護新私鑰。
因此,正確選項為向 CA 申請撤銷舊憑證,並簽發新憑證。
選項分析
(A) 重新安裝伺服器並繼續使用相同憑證
錯誤。
重新安裝伺服器只能處理伺服器作業系統或軟體環境問題,無法使已洩露的私鑰恢復安全。攻擊者仍可能持有私鑰,繼續冒用該網站。
第 38 題2 分
在網路安全中,攻擊者可能濫用 TCP 連線建立機制來癱瘓伺服器資源。下列何種攻擊手法可以透過實施 TCP SYN Cookie 技術來有效緩解?
核心觀念
本題考查 TCP 三向交握與 TCP SYN Flooding 攻擊,以及 TCP SYN Cookie 的防禦原理。
TCP 建立連線通常分為三個步驟:
- 用戶端傳送
SYN。 - 伺服器回覆
SYN-ACK,並暫存半開放連線資訊。 - 用戶端回傳
ACK,連線正式建立。
TCP SYN Flooding 的攻擊者大量傳送 SYN 封包,卻不完成第三步的 ACK。伺服器因而累積大量半開放連線,耗盡連線佇列、記憶體或其他系統資源,使正常使用者無法建立連線。
TCP SYN Cookie 的核心作法,是伺服器收到 SYN 時,不立即為該連線配置完整狀態資料,而是將必要資訊與驗證值編碼在回覆的初始序號(Initial Sequence Number, ISN)中。只有當對方回傳正確的 ACK,伺服器確認連線請求有效後,才建立正式的連線狀態。
因此,SYN Cookie 能有效降低大量未完成三向交握所造成的資源耗盡問題。
解題方法
判斷本題可先抓住關鍵字:
- 「濫用 TCP 連線建立機制」
- 「癱瘓伺服器資源」
- 「TCP SYN Cookie」
其中,TCP SYN Cookie 是專門針對 TCP 建立連線階段的半開放連線攻擊。其防禦對象就是利用大量 SYN 封包、消耗伺服器連線佇列的 SYN Flooding。
攻擊流程可簡化表示如下:
啟用 SYN Cookie 後:
所以本題應選擇 TCP SYN Flooding。
選項分析
(A) DDoS Reflection 反射攻擊:錯誤
DDoS Reflection 是攻擊者偽造受害者的來源 IP 位址,向第三方服務器發送請求,再利用第三方服務器將大量回應流量反射至受害者。
此類攻擊的主要問題是:
- 流量經由第三方反射放大;
- 受害者遭受大量回應封包;
- 重點在頻寬、流量放大與來源驗證。
TCP SYN Cookie 主要解決的是伺服器本身因大量未完成 TCP 交握而產生的半開放連線資源消耗,並非專門處理反射流量。因此不是本題答案。
(B) TCP SYN Flooding 洪水攻擊:正確
第 39 題2 分
在資訊安全與權限管理中,系統設計者常採用「最小權限原則(Principle of Least Privilege, PoLP)」以強化系統防護。有關「最小權限原則」的核心概念敘述,下列何者最正確?
核心觀念
本題考查資訊安全中的「最小權限原則」(Principle of Least Privilege, PoLP)。
其核心是:使用者、程式或系統元件只應被授予「完成工作所必要的最低權限」,不應取得超出業務需求的存取權限。如此可降低帳號遭盜用、權限濫用、惡意程式擴散及資料外洩的風險。
解題方法
判斷各選項是否符合最小權限原則,關鍵在於確認其是否強調:
- 權限必須與工作需求相符。
- 只授予必要權限。
- 避免授予多餘或過高的權限。
符合上述概念者,即為最小權限原則的正確敘述。
選項分析
(A) 使用最簡單的密碼以便於記憶
錯誤。此選項涉及的是密碼管理,不是權限分配。使用簡單密碼會降低帳號安全性,容易遭受猜測、字典攻擊或暴力破解。安全的密碼政策通常要求密碼具有足夠長度與複雜度,並搭配多因素驗證。
(B) 僅授予用戶完成其工作所需的權限
正確。這正是最小權限原則的定義。例如,負責查詢資料的員工只需具備讀取權限,不應同時擁有刪除資料或修改系統設定的權限。
第 40 題2 分
發展人工智慧系統時,為確保系統的安全性,開發者會遵循責任性演算法(Responsible Algorithms),故會遵循一系列技術與倫理原則。下列何者不屬於責任性演算法設計所應遵循的原則?
核心觀念
本題考查「責任性演算法」(Responsible Algorithms)或責任人工智慧(Responsible AI)的基本原則。發展人工智慧系統時,除了追求功能正確與運算效能,也必須兼顧下列事項:
- 系統決策是否透明、可理解;
- 是否造成特定群體受到不公平待遇;
- 個人資料是否受到妥善保護;
- 系統是否具備安全性、可問責性與可靠性。
因此,判斷本題的關鍵在於:選項所描述的內容,究竟是「責任性與倫理要求」,還是單純的「工程效能目標」。
解題方法
逐一檢查四個選項:
- 是否涉及決策過程的透明與可解釋;
- 是否涉及避免偏見與差別待遇;
- 是否涉及個人資料與資訊安全;
- 是否僅著重運算速度與資源使用效率。
前三級屬於責任性演算法的重要倫理與安全原則;「最大化計算效率和速度」則屬於系統效能或最佳化目標,並非責任性演算法設計必然遵循的核心原則。因此答案為 D。
選項分析
(A) 透明度和可解釋性:正確原則
透明度是指系統的資料來源、運作方式、決策流程及使用限制,應具備足以理解與查核的程度。可解釋性則是指人工智慧系統產生特定結果時,能以人類可理解的方式說明其判斷依據。
例如,信用審核系統拒絕申請時,應能說明影響決策的主要因素,避免使用者只能得到無法理解的結果。透明度與可解釋性有助於:
- 發現模型偏誤;
- 追查錯誤決策;
- 增加使用者信任;
- 建立責任歸屬與監督機制。
因此,透明度和可解釋性屬於責任性演算法的重要原則。
(B) 公平性和非歧視性:正確原則
人工智慧系統可能因訓練資料偏差、模型設計不當或特徵選取不合理,而對特定性別、年齡、族群、身心狀況或其他群體產生不利影響。
公平性要求系統對具有相同或相近條件的個人,應採取合理且一致的判斷標準;非歧視性則要求系統不得因不合理因素,造成特定群體受到差別待遇。