114 年 國立中央大學網路學習科技研究所《計算機概論》
第 1 題
- 下列關於唯讀記憶體(ROM)的敘述,何者正確?
(A) ROM 的內容可由使用者任意修改。
(B) ROM 適合存放作業系統核心程式碼。
(C) ROM 的內容在斷電後仍可保存。
(D) ROM 的讀取速度比隨機存取記憶體(RAM)快。
登入後即可作答並保存紀錄。
這題主要考查對唯讀記憶體(ROM)基本特性的理解。
ROM (Read-Only Memory) 的名稱即表明其主要特性是「唯讀」。雖然現代的 ROM 技術(如 Flash Memory)允許有限次的寫入,但其設計初衷和主要用途是儲存不需要頻繁更改的資料,且其寫入方式與 RAM 不同,通常需要特殊的操作或設備。
讓我們逐一分析選項:
(A) ROM 的內容可由使用者任意修改:這是錯誤的。ROM 的內容通常在製造時就已寫入,或透過特殊的燒錄程序寫入,並非像 RAM 那樣可以隨時隨意地由使用者修改。
第 2 題
- 某計算機系統使用 32 位元定址,則其最大的記憶體定址空間為多少?
(A) 32GB
(B) 2GB
(C) 16GB
(D) 4GB
登入後即可作答並保存紀錄。
這題考查定址空間與位元數的關係。
在計算機系統中,定址空間的大小由 CPU 的位址匯流排寬度決定。如果 CPU 使用 位元的位址匯流排,那麼它可以定址的記憶體單元數量為 個。在這裡,題目提到系統使用 32 位元定址,表示位址匯流排寬度為 32 位元。
因此,最大的記憶體定址空間為 個位址。
每個位址通常指向一個位元組 (byte)。
所以,最大的記憶體定址空間為 個位元組。
第 3 題
- 假設某 CPU 的時脈頻率為 4GHz,則其每秒可執行多少個指令週期?
(A) 4百萬
(B) 40億
(C) 2兆
(D) 4兆
登入後即可作答並保存紀錄。
這題考查時脈頻率與指令週期的關係。
時脈頻率 (Clock Frequency) 是 CPU 每秒鐘能執行的時脈週期 (Clock Cycle) 數量。其單位是赫茲 (Hz),表示每秒的週期數。
1 GHz = Hz。
題目中 CPU 的時脈頻率為 4 GHz,即 Hz。
這表示 CPU 每秒可以執行 個時脈週期。
一個指令週期 (Instruction Cycle) 通常包含一個或多個時脈週期,用於執行一條指令。題目問的是「每秒可執行多少個指令週期」,這通常與時脈頻率直接相關,尤其是在簡化模型中。如果題目假設一個指令週期等於一個時脈週期(雖然這在實際中很少見,但在此類選擇題中是常見的簡化假設),那麼每秒執行的指令週期數就等於時脈頻率。
第 4 題
- 某電腦系統的記憶體階層架構如下: 暫存器 > 快取記憶體 > 主記憶體 > 輔助記憶體。請問下列關於記憶體階層架構的敘述,何者正確?
(A) 暫存器的速度最慢,但容量最大。
(B) 輔助記憶體的容量最大,但速度最慢。
(C) 快取記憶體的容量比主記憶體大。
(D) 主記憶體的速度比輔助記憶體慢。
登入後即可作答並保存紀錄。
這題考查對記憶體階層架構 (Memory Hierarchy) 的理解,特別是各層級的特性。記憶體階層架構的設計目標是結合高速、小容量的記憶體與低速、大容量的記憶體,以在效能和成本之間取得平衡。一般來說,記憶體階層越往上,速度越快、容量越小、成本越高;越往下,速度越慢、容量越大、成本越低。
記憶體階層結構通常如下:
CPU 暫存器 (Registers) -> 快取記憶體 (Cache Memory) -> 主記憶體 (Main Memory / RAM) -> 輔助記憶體 (Secondary Storage / Disk)
第 5 題
- 假設某 CPU 採用 5 階段指令管線化(Instruction pipelining),且每個階段的執行時間皆為 2 個時脈週期。請問執行 10 條指令最少需要多少個時脈週期?
(A) 28
(B) 14
(C) 10
(D) 20
登入後即可作答並保存紀錄。
核心觀念
本題考查指令管線化的總執行時間。
若管線共有 個階段,每個階段耗時 個時脈週期,執行 條指令且管線能充分重疊時:
原因是:
- 第 1 條指令必須依序通過全部 個階段。
- 管線填滿後,每隔一個階段時間即可完成一條後續指令。
- 最後一條指令還需通過剩餘階段,因此總階段數為 。
解題方法
題目給定:
代入公式:
也可用時間線理解:
- 第 1 條指令完成需要 個時脈週期。
- 之後每條指令在管線充分運作後,間隔 個時脈週期完成。
- 剩下 條指令需額外:
因此:
第 6 題
- 假設某快取記憶體(Cache Memory)的存取時間為 20ns,主記憶體的存取時間為 100ns,快取記憶體的命中率(Hit Rate)為 80%。請問平均記憶體存取時間為多少?
(A) 36ns
(B) 18ns
(C) 40ns
(D) 20ns
登入後即可作答並保存紀錄。
核心觀念
本題考查計算機組織與結構中**階層式記憶體架構(Memory Hierarchy)**的核心概念:有效/平均記憶體存取時間(Effective/Average Memory Access Time, EMAT / AMAT)。
在現代計算機架構中,CPU 存取記憶體時會先查詢快取(Cache):
- 命中(Hit):所需資料已在快取中,耗時即為快取存取時間 。
- 未命中(Miss):所需資料不在快取中,必須至主記憶體(Main Memory)讀取,總耗時為快取存取時間加上未命中懲罰(Miss Penalty,即主記憶體存取時間 )。
通用計算公式如下:
其中:
- :快取命中率(Hit Rate)
- :未命中率(Miss Rate)
- :快取存取時間(Cache Access Time)
- :主記憶體存取時間(Main Memory Access Time / Miss Penalty)
亦可理解為加權期望值型式(先查快取,未命中時累計主記憶體時間):
兩者展開後完全等價。
解題方法
由題意可知各項參數:
- 快取存取時間
- 主記憶體存取時間
- 命中率
- 未命中率
代入 AMAT 公式進行推導計算:
第 7 題
- 下列何者不是提升硬碟效能的技術?
(A) 增加硬碟的轉速
(B) 使用快取記憶體
(C) 使用固態硬碟(SSD)
(D) 使用 RAID1 技術
登入後即可作答並保存紀錄。
這題考查提升硬碟(儲存裝置)效能的常見技術。我們需要找出哪個選項不是用來提升硬碟效能的。
(A) 增加硬碟的轉速 (Increase disk rotation speed):對於傳統的機械硬碟 (HDD),轉速是影響其隨機讀取效能的重要因素。更高的轉速意味著磁頭尋道和資料讀取的時間更短。因此,這是一個提升硬碟效能的技術。
(B) 使用快取記憶體 (Use cache memory):許多儲存裝置(包括 HDD 和 SSD)內部都設有快取記憶體。CPU 讀取資料時,如果資料在快取中,就可以快速存取,無需等待較慢的磁碟存取。這能顯著提升資料存取的平均速度。因此,這是一個提升硬碟效能的技術。
(C) 使用固態硬碟(SSD) (Use Solid State Drive):SSD 使用快閃記憶體而非傳統的機械結構,其讀寫速度遠高於 HDD,且沒有機械延遲。因此,用 SSD 取代 HDD 是提升儲存效能最直接有效的方法之一。
第 8 題
- 下列關於程序(Process)和執行緒(Thread)的敘述,何者正確?
(A) 一個程序只能擁有一個執行緒。
(B) 執行緒是程序的執行單位,可以共享程序的資源。
(C) 程序切換(Context Switch)的成本比執行緒切換低。
(D) 執行緒擁有自己的記憶體空間,彼此獨立。
登入後即可作答並保存紀錄。
這題考查程序 (Process) 與執行緒 (Thread) 的基本概念與區別。
程序 (Process) 是指一個正在執行的程式實例,它擁有獨立的記憶體空間、系統資源(如檔案控制代碼、網路連線等)。程序之間是相互隔離的。
執行緒 (Thread) 是程序內部的一條執行路徑,也被稱為輕量級程序 (Lightweight Process)。一個程序可以包含多個執行緒,這些執行緒共享該程序的記憶體空間和系統資源。
讓我們逐一分析選項:
(A) 一個程序只能擁有一個執行緒。
這是錯誤的。一個程序可以有多個執行緒,實現並行或並發執行。例如,一個網頁瀏覽器程序可以有多個執行緒,分別負責下載、渲染網頁、處理用戶輸入等。
(B) 執行緒是程序的執行單位,可以共享程序的資源。
這是正確的。執行緒是調度 (scheduling) 的基本單位。
第 9 題
- 下列哪種程序排程演算法(Process Scheduling Algorithm) 最適合用於即時作業系統(Real-Time Operating System)?
(A) 先到先服務(First-Come, First-Served, FCFS)
(B) 最短工作優先(Shortest Job First, SJF)
(C) 輪詢(Round-Robin)
(D) 優先權排程(Priority Scheduling)
登入後即可作答並保存紀錄。
核心觀念
即時作業系統(Real-Time Operating System, RTOS)的重點,不只是提高平均處理速度,而是讓工作能在規定的時間限制內完成。此時間限制稱為「截止期限」(deadline)。
程序排程演算法的選擇,主要考量:
- 是否能讓重要程序優先執行。
- 是否能快速回應緊急事件。
- 是否能滿足程序的截止期限。
- 是否能提供可預測的執行順序。
RTOS 通常依據程序的重要性、緊急程度或截止期限設定優先權,讓高優先權程序搶先取得 CPU。因此,優先權排程(Priority Scheduling)最符合即時系統的需求。
解題方法
判斷此題的切入點是「即時作業系統最重視什麼」。
一般作業系統常重視 CPU 利用率、平均等待時間、公平性;即時作業系統則優先重視「回應是否及時」與「重要工作是否能準時完成」。
若程序 的優先權高於程序 ,優先權排程會安排 優先執行:
在可搶先式(preemptive)優先權排程中,當高優先權程序抵達時,還能中斷目前執行中的低優先權程序,使系統快速處理緊急工作。這種特性正是 RTOS 所需要的。
選項分析
(A) 先到先服務(FCFS)
FCFS 按照程序抵達的先後順序執行,先抵達者先取得 CPU。
此方法的優點是實作簡單,也具有基本的公平性;但它不考慮程序的重要性與截止期限。若長工作先執行,後方的緊急工作必須等待,造成「護航效應」(convoy effect),使即時程序無法及時回應。
因此,FCFS 不適合做為 RTOS 的主要排程演算法。
(B) 最短工作優先(SJF)
SJF 優先執行預估 CPU 執行時間最短的程序,通常可降低平均等待時間。
第 10 題
- 下列關於死結(Deadlock)與其預防、偵測方法的敘述,何者正確?
(A) 在死結偵測算法中,資源配置圖(Resource Allocation Graph)只能用於描述一個單一資源類型的情況。
(B) 使用銀行家演算法(Banker's Algorithm)預防死結時,系統需要預測每個進程的最大資源需求。
(C) 如果一個系統發生了死結,則一定無法通過強制終止進程來解決。
(D) 死結預防算法無法避免死結的發生,但可以減少其影響。
登入後即可作答並保存紀錄。
這題考查死結 (Deadlock) 的相關概念、預防、偵測及解決方法。死結是指兩個或多個程序因互相等待對方釋放資源而導致的僵局。
死結發生的四個必要條件是:互斥 (Mutual Exclusion)、佔有並等待 (Hold and Wait)、非搶佔 (No Preemption)、循環等待 (Circular Wait)。
讓我們逐一分析選項:
(A) 在死結偵測算法中,資源配置圖(Resource Allocation Graph)只能用於描述一個單一資源類型的情況。
這是錯誤的。資源配置圖可以描述多個實例的資源類型(如有多個印表機),此時圖中會有多個資源節點表示同一個資源類型。當圖中存在環路時,如果環路中的資源類型只有一個實例,則環路是死結的充分必要條件;如果有環路,則可能存在死結。
(B) 使用銀行家演算法(Banker's Algorithm)預防死結時,系統需要預測每個進程的最大資源需求。
這是正確的。銀行家演算法是一種死結預防演算法。它要求系統在進程開始執行前,就預測該進程可能申請的最大資源量。
第 11 題
- 下列關於分頁式記憶體管理(Paging)的敘述,何者錯誤?
(A) 分頁式記憶體管理允許程序的邏輯地址空間(Logical Address Space)比實體記憶體空間(Physical
Address Space)小。
(B) 分頁式記憶體管理可以將程序的邏輯地址空間分割成多個大小相等的頁面(Page)。
(C) 分頁式記憶體管理需要使用分頁表(Page Table)來進行地址轉換。
(D) 分頁式記憶體管理可以實現虛擬記憶體(Virtual Memory)。
登入後即可作答並保存紀錄。
這題考查分頁式記憶體管理 (Paging) 的概念,並要求找出錯誤的敘述。
分頁式記憶體管理是一種虛擬記憶體管理技術,它將程序的邏輯地址空間劃分為固定大小的塊,稱為頁 (Page),並將物理記憶體劃分為相同大小的塊,稱為頁框 (Page Frame)。
讓我們逐一分析選項:
(A) 分頁式記憶體管理允許程序的邏輯地址空間(Logical Address Space)比實體記憶體空間(Physical Address Space)小。
這是錯誤的。分頁式記憶體管理(特別是結合了虛擬記憶體)的主要優勢之一就是允許邏輯地址空間大於物理記憶體空間。這是通過將不常用的頁儲存在輔助儲存(如硬碟)中,並在需要時將其載入到物理記憶體中來實現的。
第 12 題
- 下列關於 RAID 技術的敘述,何者正確?
(A) RAID 技術可以透過資料冗餘(Data Redundancy)來提高資料的可靠性。
(B) RAID 0 技術提供最高的資料可靠性。
(C) RAID 1 技術提供最高的資料讀寫效能。
(D) RAID 5 技術需要至少 4 顆硬碟才能使用。
登入後即可作答並保存紀錄。
這題考查 RAID (Redundant Array of Independent Disks) 技術的相關知識。RAID 是一種將多個硬碟組合成一個邏輯單元的技術,旨在提升效能、可靠性或兩者兼備。
讓我們逐一分析選項:
(A) RAID 技術可以透過資料冗餘(Data Redundancy)來提高資料的可靠性。
這是正確的。許多 RAID 層級(如 RAID 1, RAID 5, RAID 6, RAID 10)都採用資料冗餘的方式,例如鏡像或奇偶校驗,來確保即使部分硬碟故障,資料也不會丟失,從而提高資料的可靠性。
(B) RAID 0 技術提供最高的資料可靠性。
這是錯誤的。RAID 0 採用「條帶化」(striping) 技術,將資料分散寫入多個硬碟。它能顯著提升讀寫效能,但不提供任何資料冗餘。
第 13 題
- 下列哪種作業系統安全機制可以限制程序的存取權限?
(A) 防火牆(Firewall)
(B) 入侵偵測系統(Intrusion Detection System, IDS)
(C) 存取控制列表(Access Control List, ACL)
(D) 沙盒(Sandbox)
登入後即可作答並保存紀錄。
核心觀念
本題測驗「作業系統安全機制(Operating System Security Mechanisms)」中針對執行中程序(Process)權限限縮與隔離技術的理解。
- 最小權限原則(Principle of Least Privilege, PoLP):任何主體(如使用者、程式、程序)在執行時,僅被賦予完成其工作所必需的最低權限。
- 存取控制(Access Control)vs. 程序隔離/沙盒(Process Isolation / Sandboxing):
- 存取控制列表(ACL):以受保護的「資源/物件(Object)」為中心,定義各個主體(Subject,如 User / Group)對該物件的存取權限(如讀取、寫入、執行)。
- 沙盒(Sandbox):以「執行環境/程序(Process)」為中心,將程序侷限在一個受嚴密限制的獨立環境中,限制程序可呼叫的系統呼叫(System Calls)、存取的檔案系統、網路連線以及硬體資源,防止潛在的惡意代碼擴散危害整個作業系統。
解題方法
從題幹關鍵字切入:
- 關鍵字:「作業系統安全機制」、「限制程序的存取權限」。
- 目標對象是正在運行的「程序(Process)」,其核心目的是在作業系統層級提供一個受限的執行空間,防止未知或不可信任的應用程式越權存取主機資源。
- 檢視四個選項中,各機制的作用範疇(網路層、主體身分層、程序執行隔離層),找出專門用於約束與限制「程序行為及存取權限」的安全防禦技術。
選項分析
- (A) 錯誤。防火牆(Firewall):
防火牆主要是「網路安全機制」,依據預設的安全規則監控並過濾進出網路的封包(如 IP 位址、通訊埠 Port、傳輸協定 Protocol),並非作業系統層級用於直接限制特定內部程序系統權限的機制。
第 14 題
- 下列關於分散式系統(Distributed System)的敘述,何者錯誤?
(A) 分散式系統的所有節點都必須使用相同的作業系統。
(B) 分散式系統可以提高系統的可靠性和可用性。
(C) 分散式系統需要處理節點之間的通訊和協調。
(D) 分散式系統可以透過平行處理來提升效能。
登入後即可作答並保存紀錄。
這題考查分散式系統 (Distributed System) 的基本概念,要求找出錯誤的敘述。
分散式系統是由多個獨立的計算節點組成的系統,這些節點通過網路互相連接,協同工作,對用戶來說,它們看起來像一個單一的系統。
讓我們逐一分析選項:
(A) 分散式系統的所有節點都必須使用相同的作業系統。
這是錯誤的。分散式系統的節點可以是異質的 (heterogeneous),它們可以使用不同的作業系統(如 Windows, Linux, macOS)和硬體架構。分散式系統的重點在於節點之間的協同工作,而不是統一的底層平台。事實上,異質性是分散式系統的一個常見特徵。
第 15 題
- 假設一個系統採用優先權排程(Priority Scheduling),且允許動態調整優先權。當一個高優先權程序持
續等待一個低優先權程序持有的資源時,可能會發生下列哪種情況?
(A) 優先權反轉(Priority Inversion)
(B) 死結(Deadlock)
(C) 飢餓(Starvation)
(D) 分頁錯誤(Page Fault)
登入後即可作答並保存紀錄。
這題考查優先權排程 (Priority Scheduling) 中可能出現的問題,特別是當高優先權任務依賴於低優先權任務所持有的資源時。
優先權反轉 (Priority Inversion) 是一種在優先權排程系統中發生的現象,當一個低優先權任務持有某個資源,而一個高優先權任務需要該資源時,這個高優先權任務就必須等待低優先權任務。如果在此期間,還有一個中優先權的任務運行,並且它搶佔了低優先權任務的 CPU 時間,那麼這個低優先權任務可能長時間無法運行,也就無法釋放它所持有的資源。結果是,高優先權任務被一個中優先權任務間接地阻塞了,這就導致了優先權的「反轉」——一個低優先權任務實際上控制了一個高優先權任務的執行。
讓我們逐一分析選項:
(A) 優先權反轉 (Priority Inversion):如上所述,這是高優先權任務等待低優先權任務持有的資源,並且低優先權任務的執行被中優先權任務阻礙,導致高優先權任務的執行被延遲。這種情況正是題目所描述的。
第 16 題
- 在一個分散式檔案系統中,下列哪種技術可以讓多個客戶端(Client)同時存取和修改同一個檔案?
(A) 分散式鎖定(Distributed Locking)
(B) 版本控制(Version Control)
(C) 資料複製(Data Replication)
(D) 以上皆是
登入後即可作答並保存紀錄。
核心觀念
本題考查分散式檔案系統中「多個客戶端如何安全地同時操作共享檔案」。
當多個客戶端同時修改同一檔案時,系統必須處理:
- 競爭條件(Race Condition)
- 寫入衝突
- 資料一致性(Consistency)
- 更新順序與權限控制
其中,直接負責協調多個客戶端存取權限、避免同時寫入造成衝突的技術,是分散式鎖定(Distributed Locking)。
解題方法
判斷各選項是否能直接解決「多個客戶端同時存取並修改同一檔案」的問題。
若技術本身只是保存多份資料、保留歷史版本,或提升可用性,卻沒有負責協調同一時間的寫入權限,就不能視為本題所問的直接機制。
選項分析
(A) 分散式鎖定(Distributed Locking)
正確。
分散式鎖定可在多個客戶端之間建立協調機制,例如:
- 客戶端提出檔案寫入要求。
- 分散式鎖定服務授予其中一個客戶端寫入鎖。
- 其他客戶端必須等待、讀取共享狀態,或依系統規則取得相容的鎖。
- 寫入完成後釋放鎖,讓其他客戶端繼續操作。
如此可避免兩個客戶端同時寫入同一檔案,造成「最後寫入者覆蓋前一筆資料」或檔案內容損毀。
因此,分散式鎖定是支援多客戶端安全修改共享檔案的核心技術。
(B) 版本控制(Version Control)
不完全符合題意,故錯誤。
版本控制可以保存檔案的多個版本,並記錄不同客戶端的修改歷史。例如:
- 客戶端甲修改後產生版本 ;
- 客戶端乙修改後產生版本 ;
- 系統再透過合併(Merge)處理兩個版本的差異。
第 17 題
- 考慮一個包含 n 個節點的二元搜尋樹(Binary Search Tree),若使用中序遍歷(Inorder Traversal)來印
出所有節點的值,則下列敘述何者正確?
(A) 印出的節點值會依遞增順序排列。
(B) 印出的節點值會依遞減順序排列。
(C) 印出的節點值會依前序遍歷的順序排列。
(D) 印出的節點值會依後序遍歷的順序排列。
登入後即可作答並保存紀錄。
這題考查二元搜尋樹 (Binary Search Tree, BST) 的中序遍歷 (Inorder Traversal) 的特性。
二元搜尋樹的定義是:
對於樹中的任意節點,其左子樹中所有節點的值都小於該節點的值,其右子樹中所有節點的值都大於該節點的值。
中序遍歷的順序是:
- 遍歷左子樹 (Left subtree)
- 訪問根節點 (Visit root node)
- 遍歷右子樹 (Right subtree)
當我們對一個二元搜尋樹進行中序遍歷時,由於 BST 的特性,它會按照節點值的遞增順序訪問所有節點。
讓我們用一個簡單的例子來說明:
假設 BST 如下:
4
/
2 5
/
1 3
中序遍歷過程:
- 遍歷左子樹 (節點 2):
a. 遍歷左子樹 (節點 1):
i. 遍歷左子樹 (null)
ii. 訪問根節點 1
第 18 題
- 下列哪種排序演算法在平均情況下具有 O(nlogn)的時間複雜度,但在最壞情況下時間複雜度會退化
為O(n²)?
(A) 合併排序(Merge Sort)
(B) 堆積排序(Heap Sort)
(C) 快速排序(Quick Sort)
(D) 插入排序(Insertion Sort)
登入後即可作答並保存紀錄。
這題考查常見排序演算法的時間複雜度,特別是它們在平均情況和最壞情況下的表現。
時間複雜度衡量的是演算法執行時間隨輸入規模 變化的增長率。
讓我們逐一分析選項:
(A) 合併排序 (Merge Sort):
- 平均情況時間複雜度:
- 最壞情況時間複雜度:
合併排序的時間複雜度在所有情況下都是 ,它不會退化到 。
(B) 堆積排序 (Heap Sort):
- 平均情況時間複雜度:
- 最壞情況時間複雜度:
堆積排序的時間複雜度在所有情況下都是 ,它也不會退化到 。
(C) 快速排序 (Quick Sort):
- 平均情況時間複雜度:
- 最壞情況時間複雜度:
第 19 題
- 使用鏈結串列法(Chaining)解決碰撞問題的雜湊表中,已知所有鍵值的分布情況如下:
雜湊函數 h(k)=k mod 5,鍵值集合為{2025,21,8,84,9,29}。哪個位置的鏈結串列長度最長?
(A) h(k)=4
(B) h(k)=1
(C) h(k)=2
(D) h(k)=3
登入後即可作答並保存紀錄。
核心觀念
使用鏈結串列法(Chaining)處理雜湊碰撞時,每個雜湊位置都對應一條鏈結串列。若多個鍵值經由雜湊函數映射到同一位置,便將它們串接在該位置的鏈結串列中。
本題使用:
因此雜湊表的位置為 。某位置的鏈結串列長度,就是映射到該位置的鍵值數量。
解題方法
逐一計算每個鍵值除以 的餘數:
| 鍵值 | 對應位置 | |
|---|---|---|
各位置的鏈結串列如下:
- 位置 :,長度為
- 位置 :,長度為
- 位置 :沒有鍵值,長度為
- 位置 :,長度為
- 位置 :,長度為
第 20 題
- 給定以下程式碼,請問最裡層條件語句 if 會執行多少次?
for i from 1 to n:
for j from 1 to i:
if j % 2 == 0:Some operation
(A) O(n)
(B) O(n²)
(C) O(n³)
(D) O(n²/2)
登入後即可作答並保存紀錄。
核心觀念
本題測驗「巢狀迴圈的執行次數分析」與「漸近時間複雜度(Big-O Notation)」的標準定義。
- 雙重巢狀迴圈總次數:外層迴圈指標由 遞增至 ,內層迴圈指標由 遞增至外層當前的值 。內層語句執行的總次數為典型的等差級數求和:
- Big-O 記號的數學定義:漸近符號 描述的是函數增長率的漸近上界(asymptotic upper bound)。若 (最高次項係數為 ),在漸近分析中會省略常數係數與低階項,標準寫法一律表示為 ,不得保留如係數 的常數乘數。
解題方法
題目詢問「最裡層條件語句 if j % 2 == 0: 會執行多少次」。
-
精確執行次數推導:
- 當 時, 走訪 到 ,共執行 次。
- 當 時, 走訪 到 ,共執行 次。
- 當 時, 走訪 到 ,共執行 次。
- 當 時, 走訪 到 ,共執行 次。
將所有迴圈的內層次數加總,可得
if判斷式的總執行次數為: -
漸近複雜度轉換:
根據漸近記號規則:- 最高次項為 。
- 忽略常數倍數()與低次項()。
- 得漸近複雜度為 。
選項分析
第 21 題
- 以下程式碼實現了哪種排序算法?
for i = 1 to length(arr)
for j = 1 to length(arr)-i
if arr[j] > arr[j+1]
swap(arr[j], arr[j+1])
end if
end for
end for
(A) 合併排序(Merge Sort)
(B) 快速排序(Quick Sort)
(C) 冒泡排序(Bubble Sort)
(D) 插入排序(Insertion Sort)
登入後即可作答並保存紀錄。
核心觀念
本題考察「冒泡排序(Bubble Sort)」的特徵:
- 反覆比較相鄰元素 與 。
- 若前者大於後者,便交換兩者位置。
- 每完成一輪,未排序部分中最大的元素會被推到最右端。
- 第 輪只需處理到 ,因為右側已有 個元素完成排序。
此程式使用的關鍵判斷式為:
if arr[j] > arr[j+1]
swap(arr[j], arr[j+1])
這正是由左至右比較相鄰元素並交換的冒泡排序流程。
解題方法
設陣列長度為 。
第一輪時,程式依序比較:
較大的元素會在交換過程中逐步向右移動,因此第一輪結束時,最大值會位於 。
第二輪不必再處理最後一個位置,只比較到 ,使剩餘未排序部分中的最大值移至 。
以陣列 為例:
第一輪:
- 比較 與 ,交換:
- 比較 與 ,交換:
- 比較 與 ,交換:
第一輪結束,最大值 已到最右端。
後續各輪繼續處理左側尚未排序的部分,最後得到遞增排列。
複雜度分析
外層迴圈執行 輪,內層比較次數為:
第 22 題
- 下面的程式碼是用來實現哪種資料結構的操作?
for i = 1 to N
insert(i)
end for
for i = N to 1
remove()
end for
(A) 堆疊(Stack)
(B) 隊列(Queue)
(C) 雜湊表(Hash Table)
(D) 堆積(Heap)
登入後即可作答並保存紀錄。
核心觀念
本題評量對基礎**抽象資料型態(Abstract Data Type, ADT)**存取特性的理解:
- 堆疊(Stack):遵循「後進先出」(Last-In, First-Out, LIFO)原則。最後插入(Push)的元素會最先被移除(Pop)。
- 隊列(Queue):遵循「先進先出」(First-In, First-Out, FIFO)原則。最先插入(Enqueue)的元素最先被移除(Dequeue)。
解題方法
觀察題目的虛擬碼(Pseudocode)操作流程:
-
插入階段(Insertion Phase):
for i = 1 to N insert(i) end for- 元素依照 的順序依次被寫入資料結構中。
-
刪除階段(Removal Phase):
for i = N to 1 remove() end for- 迴圈控制變數從 遞減至 ,執行了 次
remove()操作。 - 此迴圈的計數變數 順序()在此處暗示了移除過程的對應目標為「最後存入的元素()最先被移除,最先存入的元素()最後被移除」。
- 這種「先存入者後取出、後存入者先取出」的存取順序,完全符合 LIFO(Last-In, First-Out) 的行為特徵。
- 迴圈控制變數從 遞減至 ,執行了 次
第 23 題
- 假設我們有一個長度為 n 的陣列,並且已知陣列是按升序排列,若使用以下程式碼來查找目標元素
target,其時間複雜度為何?
function search(arr, target):
for i = 0 to length(arr) - 1:
if arr[i] == target:
return i
return -1
(A) O(1)
(B) O(n log n)
(C) O(log n)
(D) O(n)
登入後即可作答並保存紀錄。
核心觀念
本題考查陣列搜尋的時間複雜度,以及大 記號的判定方式。
程式從索引 開始,依序檢查:
每次檢查只需常數時間,因此總執行時間取決於實際檢查的元素數量。
雖然陣列已按升序排列,但程式並未利用排序特性進行中間切割,而是單純由頭到尾逐一比較,因此屬於線性搜尋。
解題方法
最壞情況發生在:
target位於陣列最後一個位置;target不存在於陣列中。
此時必須檢查全部 個元素,因此比較次數為:
每次比較與索引移動皆為 ,所以總時間複雜度為:
若目標元素恰好是第一個元素,最佳情況為 ;但選擇題通常以整體演算法的最壞情況時間複雜度作答,因此應選 。
此外,此程式只使用少量額外變數,空間複雜度為 。
選項分析
第 24 題
- 以下程式碼是否正確實現了二分搜尋演算法?
function binarySearch(arr, target):
low = 0
high = length(arr) - 1
while low <= high:
mid = (low + high) / 2
if arr[mid] == target:
return mid
else if arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
(A) 正確
(B) 錯誤, mid 計算方式錯誤
(C) 錯誤, low 和 high 應該交換
(D) 錯誤, low 和 high 應該使用浮點數
登入後即可作答並保存紀錄。
核心觀念
二分搜尋適用於「已排序」的陣列。其核心是每次取搜尋範圍的中間位置:
再依比較結果縮小範圍:
- 若 ,搜尋成功。
- 若 ,目標只可能在右半部,令 。
- 若 ,目標只可能在左半部,令 。
其中 low、high、mid 必須是合法的整數陣列索引。
解題方法
題目中的程式碼設定:
low = 0
high = length(arr) - 1
這表示搜尋範圍正確涵蓋陣列的所有索引。low <= high 也正確表示目前仍有候選元素。
比較並更新範圍的部分也符合二分搜尋:
else if arr[mid] < target:
low = mid + 1
else:
high = mid - 1
問題出在:
mid = (low + high) / 2
若 / 表示一般除法,結果可能是小數。例如:
則:
陣列索引不能使用 ,因此必須採用整數除法或向下取整:
mid = floor((low + high) / 2)
更安全的寫法是:
mid = low + floor((high - low) / 2)
此寫法除了確保 mid 為整數,也能避免 low + high 過大造成整數溢位。
修正後的核心程式碼如下:
第 25 題
- 以下程式碼實現的是哪一種排序演算法?
function XXXSort(arr):
for i = 1 to length(arr):
key = arr[i]
j = i-1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j = j-1
arr[j + 1] = key
(A) 合併排序
(B) 冒泡排序
(C) 插入排序
(D) 快速排序
登入後即可作答並保存紀錄。
核心觀念
本題考查經典排序演算法(Sorting Algorithms)中的**插入排序法(Insertion Sort)**之虛擬碼結構與演算法邏輯。
插入排序的核心精神是:將數列分為「已排序」與「未排序」兩部分,每次從未排序部分取出一個元素(即虛擬碼中的 key),由後往前與已排序部分的元素逐一比對,若已排序元素比 key 大,則將該元素往後挪移一位,騰出空位;直到找到適當位置後,將 key 插入其中。
解題方法
我們逐行剖析題目的虛擬碼(Pseudocode)運作流程:
-
外層迴圈:
for i = 1 to length(arr):代表逐步擴大已排序區間。當迴圈變數為 時,索引 到 的子數列已經處於排序狀態。
-
暫存基準值:
key = arr[i] j = i - 1將當前欲插入的元素存入暫存變數
key,並以指標 指向已排序區間的最末端(即 )。 -
內層挪移迴圈:
while j >= 0 and arr[j] > key: arr[j + 1] = arr[j] j = j - 1此條件式判斷若前面已排序的元素
arr[j]大於key,則將arr[j]往右覆蓋至arr[j + 1](元素右移),並將指標 往前移一位()。 -
插入正確位置:
arr[j + 1] = key當
while迴圈終止時,代表找到了小於或等於key的位置(或已抵達陣列開頭 ),此時 即為騰出的空位,將key寫入arr[j + 1],完成該元素的插入。
綜合以上流程,此演算法完全符合**插入排序(Insertion Sort)**的標準實作。
複雜度與特性總結
- 時間複雜度:
- 最差情況(倒序輸入):
- 平均情況:
- 最佳情況(已排序輸入):(每次外層迴圈的
while條件皆不成立,僅執行 次比較)
第 26 題
- 以下程式碼是否會無限迴圈?
for i from 1 to n:
for j from 1 to n:
if i == j:
break
(A) 是,因為內層迴圈的 break 不會停止外層迴圈。
(B) 否,內層迴圈會在每次 i==j時停止。
(C) 是,因為外層迴圈會因為i==j而無限停止。
(D) 否,這段程式碼會停止,但時間複雜度是O(n²)。
登入後即可作答並保存紀錄。
核心觀念
本題考查兩個觀念:
break的作用範圍:break只會終止「所在的最近一層迴圈」,不會直接終止外層迴圈。- 巢狀迴圈的執行次數與時間複雜度分析。
對固定的外層變數 而言,內層變數 會由 逐一增加。當 時,執行 break,因此內層迴圈在 時停止。
解題方法
外層迴圈依序執行:
固定某個 :
- 時,條件 不成立,繼續執行。
- 時,條件成立,執行
break,只跳出內層迴圈。 - 外層迴圈繼續執行下一個 。
例如:
i = 1:j = 1 時 break
i = 2:j = 1、2,j = 2 時 break
i = 3:j = 1、2、3,j = 3 時 break
因此,當 為有限的正整數時,外層迴圈會執行完 到 ,程式一定停止,不會無限迴圈。
總執行次數為:
所以時間複雜度為:
程式只使用 、 等固定數量的變數,額外空間複雜度為:
選項分析
第 27 題
- 以下程式碼會在什麼情況下停止執行?
for i from 1 to n:
for j from 1 to n:
for k from 1 to n:
if i == j AND j == k:
return "Found!"
(A) 當 i==j 且 j==k 時,返回 "Found!" 並停止。
(B) 程式碼會執行完所有迴圈後返回 "Found!"。
(C) 只有當 i 和 j 都為 1 時,程式才會返回 "Found!"。
(D) 程式碼無法停止,會進入無窮迴圈。
登入後即可作答並保存紀錄。
核心觀念
本題測驗程式控制流程中的**多重巢狀迴圈(Nested Loops)與跳離敘述(return statement)**的執行行為:
- 巢狀迴圈之執行順序:外層迴圈每推進一次迭代,內層迴圈皆會完整執行一次遍歷(除非遇到中斷敘述)。
return敘述之作用:在函式中,一旦執行到return,程式會立即將傳回值輸出並終止整個函式的執行,無論後續尚有幾層未完成的迴圈,都會強制立即跳出。- 邏輯條件判斷:
i == j AND j == k代表變數 、、 三者必須完全相等。
解題方法
- 追蹤變數初始值與執行起點:
- 最外層迴圈起始:
- 第二層迴圈起始:
- 最內層迴圈起始:
- 進入條件判斷:
在第一次進入最內層迴圈時,各變數狀態為:
此時計算條件式:
條件成立,程式立即執行:return "Found!" - 終止流程:
return會直接使函式結束並返回字串"Found!",程式立即停止執行。也就是說,此條件會在滿足 的當下即刻觸發返回並終止。
第 28 題
- 下列程式碼的執行結果會是什麼?
function NCU(x, y):
if x > y:
for i from 1 to x:
if i % 2 == 0:
print("Even:", i)
else: // x <= y
for i from 1 to y:
if i % 2 != 0:
print("Odd:", i)
(A) 當 x>y 時,會輸出 x 次 "Even"
(B) 當 x>y 時,會輸出 x/2 次 "Even"
(C) 當 x<=y 時,會輸出 y/2 次 "Odd"
(D) 當 x<=y 時,會輸出 y 次 "Odd"
登入後即可作答並保存紀錄。
核心觀念
本題考查:
if...else條件分支的執行方式。- 取餘數運算
%:- : 是偶數。
- : 是奇數。
- 整數區間 到 中,偶數與奇數的數量。
其中:
解題方法
情況一:
程式執行第一個分支:
for i from 1 to x:
if i % 2 == 0:
print("Even:", i)
迴圈會檢查 ,只有偶數才會輸出。
因此輸出數量為:
例如:
- 時,輸出 ,共 次。
- 時,輸出 ,共 次。
所以不能在所有情況下直接寫成 ,除非題目另外限定 為偶數。
情況二:
程式執行 else 分支:
for i from 1 to y:
if i % 2 != 0:
print("Odd:", i)
迴圈會檢查 ,只有奇數才會輸出。
因此輸出數量為:
例如:
- 時,輸出 ,共 次。
- 時,輸出 ,共 次。
第 29 題
- 以下程式最壞情況下的時間複雜度是多少?
function NCUSort(arr):
if length(arr) <= 1:
return arr
pivot = arr[0]
left = []
right = []
for i = 1 to length(arr):
if arr[i] < pivot:
append arr[i] to left
else:
append arr[i] to right
return NCUSort(left) + [pivot] + NCUSort(right)
(A) O(n log n)
(B) O(n²)
(C) O(n)
(D) O(log n)
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- Quick Sort(快速排序)的分割方式
- 遞迴時間複雜度
- 最壞情況下的遞迴式
- Big-O 複雜度分析
程式每次選取 arr[0] 作為 pivot,掃描其餘元素,將資料分成:
left:小於 pivot 的元素right:大於等於 pivot 的元素
完成分割後,再遞迴排序 left 與 right。
分割本身必須掃描陣列中的元素,因此單次分割需要 時間。
解題方法
設目前陣列長度為 。
1. 分割的成本
程式執行以下迴圈,逐一比較每個元素與 pivot:
for i = 1 to length(arr):
if arr[i] < pivot:
append arr[i] to left
else:
append arr[i] to right
需要處理約 個元素,因此分割與建立 left、right 的成本為:
2. 最壞情況的分割結果
最壞情況發生在每次選到的 pivot 都是目前陣列中的最小值或最大值。
例如陣列已經遞增排序:
[1, 2, 3, 4, 5]
每次取第一個元素作為 pivot 時:
left為空right包含其餘 個元素
因此遞迴式為:
由於 是常數,可簡化為:
展開後:
所以最壞情況下的時間複雜度為:
題目中的迴圈索引依一般偽程式表示法,意義是掃描 pivot 以外的所有元素;若採用陣列索引從 開始的實作,迴圈應寫成掃描索引 到 ,不影響複雜度結論。
關鍵程式碼與複雜度
第 30 題
- 物件導向程式設計中,允許子類別重新定義繼承自父類別的函式,此概念稱為?
(A) 封裝
(B) 繼承
(C) 多載(Overloading)
(D) 覆寫(Overriding)
登入後即可作答並保存紀錄。
核心觀念
本題考查**物件導向程式設計(Object-Oriented Programming, OOP)的核心特徵與多型(Polymorphism)實現機制中的方法覆寫(Method Overriding)與方法多載(Method Overloading)**之差異。
- 覆寫(Overriding):發生在具有繼承關係的父子類別之間。當子類別繼承了父類別的方法,但其行為不符合子類別需求時,子類別可以重新定義同名、同參數列(Signature)、同回傳型態的方法,以取代或擴充父類別的行為。這是達成「執行時期多型(Runtime / Dynamic Polymorphism)」的關鍵機制。
- 多載(Overloading):通常發生在同一個類別內部。允許存在多個同名的方法,但它們的參數列必須不同(參數個數不同、參數型態不同或順序不同),屬於「編譯時期多型(Compile-time / Static Polymorphism)」。
解題方法
本題的解題切入點為題幹中的關鍵敘述:
- 「子類別」與「父類別」:明確指出存在繼承架構(跨類別)。
- 「重新定義繼承自父類別的函式」:符合子類別取代父類別既有方法實作的定義。
根據物件導向之標準定義,子類別重新實作父類別函式的行為即為 Method Overriding(覆寫)。
選項分析
- (A) 封裝(Encapsulation):錯誤。
封裝是將資料(屬性)與操作該資料的方法(函式)包裹在同一個類別(Class)中,並透過存取修飾子(如private、protected、public)隱藏物件內部的實作細節、限制外部直接存取,藉此提高程式的安全性與可維護性。並非指重新定義函式。
第 31 題
- 依賴反轉原則(Dependency Inversion Principle)指的是?
(A) 高層模組不應該依賴於低層模組,兩者都應該依賴於抽象
(B) 抽象不應該依賴於細節,細節應該依賴於抽象
(C) 面向介面程式設計,而非面向實現程式設計
(D) 以上皆是
登入後即可作答並保存紀錄。
核心觀念
依賴反轉原則(Dependency Inversion Principle,DIP)是 SOLID 物件導向設計原則之一,核心在於降低高層模組與低層模組之間的直接耦合。
DIP 包含兩項正式定義:
- 高層模組不應依賴低層模組;兩者都應依賴抽象。
- 抽象不應依賴細節;細節應依賴抽象。
其中:
- 高層模組:負責主要業務邏輯或政策決策的模組。
- 低層模組:負責資料庫存取、檔案操作、網路傳輸等具體實作的模組。
- 抽象:介面或抽象類別。
- 細節:具體的類別與實作方式。
「反轉」指的是傳統上高層模組直接依賴低層模組,改為由抽象介面作為中介,使具體實作反過來依賴抽象介面。
解題方法
判斷各選項是否符合 DIP 的正式定義與常見實務表述即可。
例如,訂單服務不應直接依賴 MySQLDatabase,而應依賴 Database 介面:
具體的 MySQLDatabase 再實作該介面:
如此一來,高層模組 OrderService 與低層模組 MySQLDatabase 都依賴抽象 Database,符合依賴反轉原則。
選項分析
(A) 高層模組不應該依賴於低層模組,兩者都應該依賴於抽象
第 32 題
- 在多線程環境下,下列哪種設計模式最適合用於確保只有一個線程可以存取共享資源?
(A) 單例模式(Singleton)
(B) 觀察者模式(Observer)
(C) 互斥鎖模式(Mutex)
(D) 讀寫鎖模式(Reader-Writer Lock)
登入後即可作答並保存紀錄。
核心觀念
本題測驗「多執行緒(Multithreading)並行控制」與「並行設計模式(Concurrency Design Patterns)」的應用情境:
- 臨界區間(Critical Section)與互斥(Mutual Exclusion):當多個執行緒同時存取可變動的共享資源時,為避免競爭條件(Race Condition)導致資料不一致,必須保證任何時刻最多只有一個執行緒能進入臨界區間存取該資源。
- 互斥鎖模式(Mutex Pattern):屬於並行架構中的同步機制/設計模式。透過鎖定(Lock/Acquire)與解鎖(Unlock/Release)的協定,提供排他性(Exclusive Access),嚴格確保同一時間僅有單一執行緒持有資源的存取權。
解題方法
由題幹的關鍵字**「多線程環境」與「確保只有一個線程可以存取共享資源」**進行切入:
- 此需求即為作業系統與多執行緒程式設計中所定義的互斥(Mutual Exclusion)。
- 檢視各選項之模式所規範的存取語意:
- 若需要保證「完全排他、嚴格僅限單一執行緒存取」,最直接且合適的設計模式即為互斥鎖模式(Mutex)。
選項分析
-
(A) 單例模式 (Singleton) —— 錯誤:
- 單例模式屬於 GoF 物件導向創建型模式(Creational Pattern),其目的在於「確保一個類別在整個系統中只有一個實例(Instance),並提供全域存取點」。
- 雖然在多執行緒下實作單例模式時,常需要加鎖(如 Double-Checked Locking)以避免重複建立物件,但單例模式本身無法限制存取該實例的執行緒數量;多個執行緒依然可以同時呼叫單例物件的方法,無法直接提供互斥存取共享資源的功能。
-
(B) 觀察者模式 (Observer) —— 錯誤:
- 觀察者模式屬於 GoF 行為型模式(Behavioral Pattern),定義了一對多的依賴關
第 33 題
- 在一個擁塞的網路環境中,下列哪一種 TCP 擁塞控制機制能够更快地恢復傳輸速率?
(A) 慢啟動(Slow Start)
(B) 擁塞避免(Congestion Avoidance)
(C) 快速重傳(Fast Retransmit)
(D) 快速恢復(Fast Recovery)
登入後即可作答並保存紀錄。
核心觀念
本題考查 TCP 擁塞控制中的四個機制,以及封包遺失後如何恢復傳輸速率。
TCP 主要透過壅塞視窗(Congestion Window, )控制傳輸量:
- 慢啟動:初始階段快速增加 ,通常近似指數成長。
- 擁塞避免:網路接近壅塞時,讓 緩慢增加,通常近似線性成長。
- 快速重傳:收到三個重複 ACK 時,不等待逾時便重傳遺失封包。
- 快速恢復:快速重傳後不將傳輸速率降回最初,而是保留部分傳輸能力,使 較快恢復。
本題關鍵在於「恢復傳輸速率」,因此重點不是偵測遺失封包,而是封包遺失後如何維持並恢復傳輸速度。
解題方法
當 TCP 偵測到封包遺失時,通常有兩種情況:
-
逾時(Timeout)
- 表示網路壅塞情況較嚴重。
- TCP 通常將 大幅降低,重新進入慢啟動。
-
收到三個重複 ACK
- 表示後續封包仍能抵達接收端,網路並未完全中斷。
- TCP 觸發快速重傳,並搭配快速恢復維持部分傳輸速率。
在 TCP Reno 中,收到三個重複 ACK 時,典型處理方式為:
快速重傳遺失封包後,將壅塞視窗調整為:
之後每收到一個重複 ACK,暫時增加 ,以填補網路中仍存在的封包空間。收到新的 ACK 後,再將:
接著進入擁塞避免階段。
因此,快速恢復能避免 TCP 將 歸零或降至極小值,傳輸速率可以比重新執行慢啟動更快恢復。
選項分析
(A) 慢啟動(Slow Start)
錯誤。
慢啟動主要用於 TCP 連線開始時,或發生逾時後重新探索可用頻寬。其特徵是 從較小值開始,依 ACK 快速增加:
第 34 題
- 下列哪一種路由協定屬於鏈路狀態路由協定?
(A) RIP (Routing Information Protocol)
(B) OSPF (Open Shortest Path First)
(C) BGP (Border Gateway Protocol)
(D) 以上皆是
登入後即可作答並保存紀錄。
核心觀念
本題測驗電腦網路中「網路層(Network Layer)」動態路由協定(Dynamic Routing Protocols)的分類與運作原理。
根據演算法的設計哲學與資訊交換機制,內部閘道協定(IGP, Interior Gateway Protocol)主要分為兩大類:
- 距離向量路由協定(Distance-Vector Routing Protocol):
- 採用 Bellman-Ford 演算法。
- 特色為「Routing by rumor」(道聽途說),各路由器僅定期將自身的路由表副本傳送給相鄰鄰居(Neighbor)。路由器缺乏全網的拓撲結構圖,只知道到達特定網段的「距離(Metric)」與「方向(Next Hop)」。
- 鏈路狀態路由協定(Link-State Routing Protocol):
- 採用 Dijkstra 最短路徑優先演算法(SPF, Shortest Path First Algorithm)。
- 特色為每台路由器都會泛洪(Flooding)自身的鏈路狀態通告(LSA, Link-State Advertisement),使區域內所有路由器皆擁有完全相同的全網拓撲資料庫(LSDB, Link-State Database),接著各自以自身為根節點,計算出到達各節點的最短路徑樹。
解題方法
分類判斷動態路由協定的類型:
- 分析各常見路由協定所屬的演算法機制:
- RIP:以跳數(Hop Count)為度量,採用 Bellman-Ford 演算法 屬於距離向量(Distance-Vector)。
- OSPF:建立拓撲資料庫後執行 Dijkstra SPF 演算法 屬於鏈路狀態(Link-State)。
- BGP:跨自治系統(AS)的外部路由協定,記錄完整的 AS-Path 屬於路徑向量(Path-Vector)。
- 比對題目要求「鏈路狀態路由協定(Link-State Routing Protocol)」,僅有 OSPF 符合定義。
選項分析
- (A) RIP (Routing Information Protocol)——錯誤:
- RIP 屬於傳統的**距離向量(Distance-Vector)**路由協定。
第 35 題
- 在一個使用 IPv6 的網路中,下列哪一種技術可以為多個設備分配一個公有 IPv6 位址?
(A) NAT (Network Address Translation)
(B) DHCPv6 (Dynamic Host Configuration Protocol for IPv6)
(C) SLAAC (Stateless Address Autoconfiguration)
(D) 以上皆非
登入後即可作答並保存紀錄。
核心觀念
本題考查 IPv6 的位址配置方式,以及「一個公有 IPv6 位址由多個設備共用」是否符合其設計概念。
IPv6 的主要特色之一,是利用龐大的位址空間,讓網路中的設備通常直接取得全球單播位址(Global Unicast Address),不必像 IPv4 一樣大量依賴 NAT 共用公有位址。
要注意:
- 公有 IPv6 位址(Global Unicast Address):可在 Internet 上路由的 IPv6 位址。
- IPv6 前綴(prefix):路由器可以取得一段網路前綴,例如
/64,再由各設備根據此前綴產生自己的 IPv6 位址。 - 共用一個位址:表示多個設備對外使用完全相同的 IP 位址,這不是 SLAAC 或 DHCPv6 的一般用途。
解題方法
逐一檢查各技術是否能讓多個設備共用同一個公有 IPv6 位址:
- NAT 的用途是位址轉換,但 IPv6 原本就擁有充足位址,設計上不以 NAT 作為多設備共用公有位址的主要機制。
- DHCPv6 是位址或網路參數的配置協定,通常會為不同設備配置不同 IPv6 位址。
- SLAAC 是讓設備根據路由器公告的 IPv6 前綴,自動形成自己的 IPv6 位址;每個設備仍有自己的位址。
- 因此,題目所說的「多個設備共用一個公有 IPv6 位址」不符合上述三者的標準功能。
所以答案為 (D) 以上皆非。
選項分析
(A) NAT(Network Address Translation)
NAT 會在不同位址之間進行轉換。IPv4 常見的 NAPT/PAT 可讓多台使用私有 IPv4 位址的設備,透過同一個公有 IPv4 位址連上 Internet,並利用不同連接埠區分連線。
但在標準 IPv6 網路中:
- IPv6 通常不使用 IPv4 式的 NAT 共用位址模式。
- 每台設備通常可取得自己的全球單播 IPv6 位址。
- IPv6 強調端點之間的直接連通性,NAT 並非一般位址配置技術。
雖然實務上存在 NAT66 等 IPv6 位址轉換技術,但在一般計算機概論題目的標準定義中,NAT 不是「為多個設備分配一個公有 IPv6 位址」的正確答案。
因此 (A) 錯誤。
第 36 題
- 下列哪一種技術可以將多個實體伺服器虛擬化為多個邏輯伺服器?
(A) 虛擬化(Virtualization)
(B) 雲端計算(Cloud Computing)
(C) 容器化(Containerization)
(D) 以上皆是
登入後即可作答並保存紀錄。
核心觀念
本題考查「伺服器虛擬化」的基本概念。
伺服器虛擬化是利用虛擬化軟體(Hypervisor)將實體伺服器的硬體資源,例如 CPU、記憶體、儲存空間與網路,切割並抽象化,建立多個彼此獨立的虛擬伺服器。每個虛擬伺服器都可以執行自己的作業系統與應用程式,因此在邏輯上如同多台獨立伺服器。
其核心關係可表示為:
題目描述的「將多個實體伺服器虛擬化為多個邏輯伺服器」,對應的技術就是「虛擬化(Virtualization)」。
解題方法
判斷本題可先抓住題幹中的關鍵字:
- 「實體伺服器」:指真正存在的硬體主機。
- 「邏輯伺服器」:指由軟體模擬或抽象化出的虛擬機器。
- 「虛擬化」:將實體硬體資源抽象化,建立多個虛擬執行環境。
因此,題幹直接描述的是伺服器虛擬化的功能,正確答案為 (A)。
選項分析
(A) 虛擬化(Virtualization)
正確。
虛擬化技術可以透過 Hypervisor 將實體伺服器的硬體資源分配給多個虛擬機器(Virtual Machine, VM)。每個虛擬機器都能擁有獨立的作業系統與應用程式,在邏輯上形成一台獨立伺服器。
例如,一台實體伺服器可以同時執行:
- Windows Server 虛擬機器
- Linux 虛擬機器
- 資料庫伺服器虛擬機器
這些虛擬機器彼此隔離,但共同使用底層實體硬體資源,符合題目所述情境。
(B) 雲端計算(Cloud Computing)
錯誤。
第 37 題
- 在關聯式資料庫中,下列哪一種情況會導致資料庫的更新異常(Update Anomaly)?
(A) 資料表沒有主鍵
(B) 資料表存在部分相依性
(C) 資料表存在傳遞相依性
(D) 以上皆是
登入後即可作答並保存紀錄。
核心觀念
本題考查關聯式資料庫的「更新異常」以及資料表正規化。
更新異常是指資料表因為資料重複或結構設計不良,在執行資料修改時產生不一致、遺漏或誤更新的問題,常見類型包括:
- 插入異常(Insertion Anomaly)
- 刪除異常(Deletion Anomaly)
- 更新異常(Update Anomaly)
正規化的目的,就是降低資料重複與相依性問題,避免上述異常。
部分相依性
當複合主鍵由多個屬性組成,而非主鍵屬性只依賴主鍵的一部分,稱為部分相依性。
例如主鍵為 ,但 只依賴 :
實際上:
部分相依性違反第二正規形式(2NF),會造成學生姓名在多筆選課資料中重複。修改學生姓名時,必須同步修改多筆資料,若漏改就會產生不一致。
傳遞相依性
若存在:
使得非主鍵屬性 透過另一個非主鍵屬性 間接依賴主鍵,稱為傳遞相依性。
例如:
系所名稱不應重複存放在每一筆學生資料中,否則系所名稱變更時,必須更新多筆資料。傳遞相依性違反第三正規形式(3NF)。
解題方法
判斷是否會造成更新異常,重點在於檢查資料表是否存在:
- 無法唯一識別資料列的情況;
- 同一資料被重複儲存的情況;
- 修改一項資訊時,必須同步修改多筆資料的情況。
三種情況都可能導致更新後資料不一致,因此本題各選項皆屬於更新異常的成因。
選項分析
第 38 題
- 下列哪一種資料庫設計模式可以將資料庫的操作封裝成一個物件,提供更簡潔的介面?
(A) Singleton 模式
(B) Factory 模式
(C) Repository 模式
(D) 以上皆非
登入後即可作答並保存紀錄。
核心觀念
本題測驗「軟體架構與設計模式(Design Patterns)」在**資料存取層(Data Access Layer)**的應用。
- Repository 模式(倉儲模式):由 Martin Fowler 於《Patterns of Enterprise Application Architecture》(PoEAA)提出。其核心定義為:在領域層(Domain Layer)與資料對應層(Data Mapping Layer)之間扮演調解者角色,透過類似記憶體中物件集合(In-memory collection)的介面,將資料存取與查詢操作封裝成單一物件,使上層業務邏輯無需依賴具體的資料庫操作細節(如 SQL 語法或 ORM 操作)。
解題方法
題目關鍵字在於「將資料庫的操作封裝成一個物件」以及「提供更簡潔的介面」。
- 切入點:分辨各設計模式的分類與用途。
- 軟體架構中專門用於資料庫存取抽象化的模式包含:DAO(Data Access Object)模式、Repository 模式、Active Record 模式等。
- 傳統四人幫(GoF)的創建型模式(Creational Patterns,如 Singleton、Factory)主要解決「物件如何生成」的問題,而非專門用於抽象化或封裝資料庫查詢與異動行為。
- 因此,專門封裝資料庫 CRUD 操作與查詢邏輯為物件導向介面的模式為 Repository 模式。
選項分析
- (A) Singleton 模式(單例模式):【錯誤】
- 定義:確保一個類別只有一個實例存在,並提供全域存取點(Global access point)。
- 說明:資料庫連線池(Connection Pool)或資料庫驅動實例常使用 Singleton 進行管理,但 Singleton 本身不負責將資料庫操作抽象化或封裝成類似集合的高階操作介面。
第 39 題
- 下列哪一種資料庫設計方法可以將資料模型(Data Model)轉換為關聯式資料庫綱要(Schema)?
(A) 物件導向設計(Object-Oriented Design)
(B) 關係模型映射(Relational Model Mapping)
(C) 資料流程圖(Data Flow Diagram)
(D) 統一塑模語言(Unified Modeling Language, UML)
登入後即可作答並保存紀錄。
核心觀念
本題考查「資料模型」轉換為「關聯式資料庫綱要」所使用的方法。
關聯式資料庫綱要通常由下列元素構成:
- 關聯(Relation)對應資料表(Table)
- 屬性(Attribute)對應欄位(Column)
- 主識別碼對應主鍵(Primary Key)
- 實體間的關係,透過外鍵(Foreign Key)或關聯表表示
因此,將資料模型中的實體、屬性與關係,依照關聯式模型的規則轉換成資料表、欄位、主鍵與外鍵,稱為「關係模型映射(Relational Model Mapping)」。
解題方法
判斷選項是否正確的關鍵,在於確認它是否代表「從資料模型轉換成關聯式資料庫綱要」的轉換技術。
常見映射規則如下:
- 每一個實體通常轉換成一張資料表。
- 實體的屬性轉換成資料表中的欄位。
- 實體的主識別碼轉換成資料表的主鍵。
- 一對多關係通常將「一」方的主鍵加入「多」方,作為外鍵。
- 多對多關係通常建立新的關聯表,並放入兩方的主鍵作為外鍵。
例如,若資料模型包含「學生」與「課程」,且兩者為多對多關係,可映射為:
Student(StudentID, Name)Course(CourseID, Title)Enrollment(StudentID, CourseID)
其中 Enrollment 即為處理多對多關係所建立的關聯表。這種由概念資料模型產生關聯式綱要的過程,就是關係模型映射。
選項分析
(A) 物件導向設計(Object-Oriented Design)
第 40 題
- 在關聯式資料庫中,用於表示兩個資料表之間關係的完整性約束(Integrity Constraint)是?
(A) 主鍵約束(Primary Key Constraint)
(B) 外鍵約束(Foreign Key Constraint)
(C) 檢查約束(Check Constraint)
(D) 唯一約束(Unique Constraint)
登入後即可作答並保存紀錄。
核心觀念
本題測驗關聯式資料庫(Relational Database)中之**完整性約束(Integrity Constraints)**分類與其定義。關聯式資料庫主要包含三類完整性規則:
- 實體完整性(Entity Integrity):要求基本資料表的主鍵(Primary Key)屬性值必須唯一且不能為空值(Not NULL),用以唯一識別資料表中的每一筆紀錄(Tuple)。
- 參照完整性(Referential Integrity):維護關聯式資料表之間的一致性。當資料表 的屬性組合參照至資料表 的主鍵(或候選鍵)時,該屬性組合即為 的外鍵(Foreign Key)。參照完整性規定:外鍵的值必須等於被參照資料表中某筆紀錄的鍵值,或者為空值(NULL)。
- 領域完整性 / 使用者自訂完整性(Domain / User-Defined Integrity):規範單一欄位之資料型態、範圍或邏輯條件(如
CHECK、NOT NULL、UNIQUE等)。
解題方法
題目詢問「用於表示兩個資料表之間關係的完整性約束」:
- 判斷切入點在於區分「單一資料表內部的約束」與「跨資料表關聯的約束」。
- 在關聯式模型中,資料表彼此之間建立連結與維護對應關係的機制即為外鍵(Foreign Key),其對應的規則稱為參照完整性(Referential Integrity)或外鍵約束(Foreign Key Constraint)。
- 因此,用來串接兩資料表並確保關聯正確性的完整性約束為外鍵約束。
選項分析
- (A) 主鍵約束 (Primary Key Constraint):錯誤。
主鍵約束規範的是單一資料表內部,確保每筆紀錄具備唯一識別碼,且不可為NULL(滿足實體完整性),主要作用於單一資料表,並非用來表示兩資料表之間的對應關係。
第 41 題
- 以下哪種密碼雜湊函數(Cryptographic hash function) 被認為最安全?
(A) MD5
(B) SHA1
(C) SHA256
(D) 目前沒有絕對安全的雜湊函數。
登入後即可作答並保存紀錄。
核心觀念
本題考「密碼雜湊函數」的安全性比較。
雜湊函數會將任意長度的輸入,轉換成固定長度的摘要值。安全性通常觀察:
- 碰撞抵抗性(Collision Resistance):難以找到兩個不同輸入,使其雜湊值相同。
- 前像抵抗性(Preimage Resistance):已知雜湊值,難以反推出原始輸入。
- 第二前像抵抗性(Second-Preimage Resistance):已知一個輸入,難以找到另一個不同輸入,使兩者雜湊值相同。
理想情況下,輸出長度為 位元的雜湊函數,其碰撞攻擊的理論複雜度約為:
這是由生日悖論(Birthday Paradox)所造成。因此,雜湊值長度越長,通常具有更高的碰撞抵抗能力。
解題方法
比較各選項的雜湊演算法與摘要長度:
| 演算法 | 摘要長度 | 安全性現況 |
|---|---|---|
| MD5 | 128 位元 | 已產生實用碰撞攻擊,不安全 |
| SHA-1 | 160 位元 | 已產生實際碰撞攻擊,不安全 |
| SHA-256 | 256 位元 | 目前仍被廣泛視為安全的通用雜湊函數 |
| 絕對安全 | 不適用 | 任何密碼學演算法都不能宣稱絕對安全 |
MD5 的理論碰撞攻擊成本約為:
SHA-1 的理論碰撞攻擊成本約為:
SHA-256 的理論碰撞攻擊成本約為:
除了輸出長度較長之外,MD5 與 SHA-1 已經存在實際碰撞攻擊,不能再作為安全用途。SHA-256 的安全性明顯高於前兩者,因此在本題選項中應選擇 SHA-256。
第 42 題
- 在一個多層次安全模型(Multilevel security model)中,Bell-LaPadula 模型主要關注哪一方面?
(A) 資料完整性(Data Integrity)
(B) 機密性(Confidentiality)
(C) 可用性(Availability)
(D) 不可否認性(Non-repudiation)
登入後即可作答並保存紀錄。
核心觀念
本題測驗資訊安全中的存取控制模型(Access Control Models)與多層次安全模型(Multilevel Security Model, MLS)。
在軍事與政府的高安全等級系統中,資料常依敏感度分級(例如:Unclassified、Confidential、Secret、Top Secret)。為了確保資訊安全的三大核心目標(CIA Triad:機密性 Confidentiality、完整性 Integrity、可用性 Availability),學者提出了不同的形式化數學模型:
-
Bell-LaPadula 模型(BLP Model):
- 於 1973 年由 David Bell 與 Leonard LaPadula 提出。
- 核心目標:專門防範未授權的資訊外流,主要關注機密性(Confidentiality)。
- 兩大核心存取規則:
- 簡單安全特性(Simple Security Property,又稱 No Read Up, NRU):低權限的主體(Subject)不能讀取高機密等級的客體(Object)。
- -特性(Star Property,又稱 No Write Down, NWD):高權限的主體不能將資料寫入低機密等級的客體,以防止機密資料意外或惡意洩漏至低安全層級。
-
Biba 模型(Biba Integrity Model):
- 於 1977 年由 Kenneth Biba 提出。
- 核心目標:與 BLP 相對立,專門防範資料被未授權窜改,主要關注資料完整性(Integrity)。
- 採用「No Read Down(NRD)」與「No Write Up(NWU)」原則。
解題方法
解答此類安全模型考題,切入點在於區分各個經典模型的首要設計目標(Primary Focus):
- 題目明確詢問「Bell-LaPadula 模型主要關注哪一方面」。
- 根據定義,Bell-LaPadula 模型的出發點為美國國防部的軍事機密需求,其兩大規則(No Read Up、No Write Down)皆是為了防止高機密層級的資料被低權限人員檢視或被高權限程序寫入低安全區,因此該模型的絕對核心就是機密性(Confidentiality)。
選項分析
第 43 題
- 以下哪種安全協定用於保護無線網路(Wireless network)的安全性?
(A) WEP
(B) WPA
(C) WPA2
(D) SSL/TLS
登入後即可作答並保存紀錄。
核心觀念
本題考查無線區域網路(WLAN)的安全協定。無線網路常透過下列機制提供:
- 使用者驗證
- 資料加密
- 傳輸內容完整性檢查
- 防止未授權裝置連線
WEP、WPA、WPA2 都是專門為 IEEE 802.11 無線網路設計的安全機制;SSL/TLS 則主要保護應用程式與伺服器之間的通訊。
解題方法
判斷選項是否為「無線網路安全協定」即可:
- 若協定直接針對 Wi-Fi/WLAN 的連線驗證與資料加密,屬於本題範圍。
- 若協定主要保護網站、應用程式或網路服務的端對端傳輸,則不是專門的無線網路安全協定。
依此判斷,WEP、WPA、WPA2 均符合「用於保護無線網路」的描述。
選項分析
(A) WEP:正確
WEP(Wired Equivalent Privacy)是早期 IEEE 802.11 無線網路採用的安全機制,使用 RC4 進行資料加密,並透過共享金鑰進行存取控制。
然而,WEP 的初始化向量太短、金鑰管理不佳,已存在嚴重安全漏洞,現今不建議使用。雖然安全性不足,WEP 仍確實是無線網路安全協定。
(B) WPA:正確
第 44 題
- 以下哪種軟體開發方法最強調客戶參與和迭代開發?
(A) 瀑布模型(Waterfall model)
(B) 螺旋模型(Spiral model)
(C) 原型設計(Prototyping)
(D) 敏捷開發(Agile development)
登入後即可作答並保存紀錄。
核心觀念
本題考查軟體工程(Software Engineering)中的**軟體開發生命週期模型(SDLC Models)之特性比較,特別是各模型對於客戶參與程度(Customer Collaboration)與迭代開發(Iterative and Incremental Development)**的側重程度。
敏捷宣言(Agile Manifesto)的四項核心價值之一為:「客戶協同合作高於合約協商(Customer collaboration over contract negotiation)」與「回應變化高於遵循計畫(Responding to change over following a plan)」,其開發流程即以短週期(Sprint / Iteration)持續產出可運行的軟體並頻繁取得客戶回饋為核心。
解題方法
本題的關鍵字為「最強調客戶參與」與「迭代開發」:
- 客戶參與:客戶不是只在專案初期提需求、專案末期驗收,而是全程高度參與每一次迭代的規劃、評審與回饋。
- 迭代開發:將大型專案切分為數個短週期(通常為 1 至 4 週),每個週期皆經歷規劃、設計、實作、測試並交付潛在可發布的軟體增量。
比對常見的 SDLC 模型,敏捷開發(Agile development)將這兩項要素視為最根本的核心哲學。
選項分析
- (A) 瀑布模型 (Waterfall model):錯誤。
- 瀑布模型是經典的線性循序(Linear-sequential)模型,各階段(需求分析 系統設計 實作 測試 維護)界線分明且不可逆。
- 特點是高度強調前期規格與文件完整性,客戶主要參與在初期的需求訪談與最後的驗收階段,極度缺乏開發過程中的持續參與,且本質上不是迭代開發。
- (B) 螺旋模型 (Spiral model):錯誤。
第 45 題
- 軟體設計原則 SOLID 中的「單一職責原則(Single responsibility principle)」是指什麼?
(A) 一個類別應該只有一個方法。
(B) 一個軟體模組應該只能被一個其他模組使用。
(C) 一個類別應該只有一個引起它變化的原因。
(D) 一個軟體模組應該只能有一個輸入和一個輸出。
登入後即可作答並保存紀錄。
核心觀念
SOLID 是物件導向設計的五項原則:
- S:單一職責原則(Single Responsibility Principle)
- O:開放封閉原則
- L:里氏替換原則
- I:介面隔離原則
- D:依賴反轉原則
單一職責原則的正式定義是:
一個類別應該只有一個引起它變化的原因。
這裡的「職責」不是指類別只能有一個方法,而是指類別應專注於一個功能面向。若一個類別同時負責資料處理、資料庫存取、報表輸出與通知寄送,任何一項需求變更都可能迫使該類別修改,表示它承擔了多個職責。
遵守單一職責原則,可以降低類別之間的耦合,使程式更容易維護、測試與擴充。
解題方法
判斷本題的關鍵,在於辨認單一職責原則中的核心描述:
- 觀察「職責」的定義。
- 判斷該原則限制的是類別的方法數量、使用者數量、輸入輸出數量,還是類別被修改的原因。
- 只有「一個引起它變化的原因」符合單一職責原則的正式定義。
因此正確敘述為:
一個類別應該只有一個引起它變化的原因。
選項分析
(A) 一個類別應該只有一個方法。
錯誤。
單一職責原則並未限制類別只能擁有一個方法。一個負責單一功能的類別,仍可包含多個彼此相關的方法。
例如,User 類別可以同時包含:
- 取得使用者資料
- 更新使用者資料
- 驗證使用者資料
只要這些方法都屬於同一項職責,即不違反單一職責原則。
第 46 題
- 在資料庫設計中,哪種正規化(normalization)形式可以消除部分函式依賴(partial functional
dependency) ?
(A) 第一正規化(1NF)
(B) 第二正規化(2NF)
(C) 第三正規化(3NF)
(D) BCNF
登入後即可作答並保存紀錄。
這題考查關聯式資料庫的正規化,特別是第二正規化 (2NF) 的作用。
正規化是將資料庫結構分解成多個表,以減少數據冗餘和提高數據完整性的過程。正規化的各個級別(1NF, 2NF, 3NF, BCNF 等)旨在解決不同類型的數據異常。
讓我們逐一分析:
- 第一正規化 (1NF):要求表中的所有屬性都是原子性的(不可再分),並且沒有重複的行。它解決了重複組的問題。
- 第二正規化 (2NF):要求表必須首先滿足 1NF,並且所有非鍵屬性必須完全依賴於整個主鍵。如果主鍵是複合主鍵,而某個非鍵屬性只依賴於主鍵的一部分,那麼就存在部分函式依賴 (partial functional dependency)。2NF 的目標就是消除這種部分函式依賴。
第 47 題
- 軟體度量(Software metrics)的主要用途是什麼?
(A) 評估軟體開發人員的績效。
(B) 計算軟體開發的成本。
(C) 量化軟體產品和開發過程的特性,以進行分析和改進。
(D) 預測軟體專案的完成時間。
登入後即可作答並保存紀錄。
核心觀念
本題測驗**軟體工程(Software Engineering)中軟體度量(Software Metrics)**的定義與核心目的。
軟體度量是指對軟體產品、開發過程或資源所具備的各項特徵,進行客觀、定量的量測與數值化表示(如程式碼行數 LOC、圈複雜度 Cyclomatic Complexity、缺陷密度 Defect Density 等)。其根本精神在於管理學名言:「無法度量,就無法管理與改善(You can't manage what you can't measure)」。因此,度量的最上位核心宗旨是透過對**「產品(Product)」與「過程(Process)」**的特性進行量化,以提供專案團隊客觀的數據依據,進而達成品質分析、風險評估與流程持續改善的目標。
解題方法
切入此題需區分**「根本用途(General / Primary Purpose)」與「衍生應用/次要工具(Specific Applications)」**的層次差異:
- 軟體度量本質上是一種量化評估與改善機制,其覆蓋面涵蓋整個軟體生命週期,包含產品品質、流程效能與資源消耗。
- 題目詢問的是「主要用途(Primary Purpose)」,應選取層次最高、定義最完整、最符合 IEEE / ISO 軟體工程標準定義的廣義選項,而非僅針對單一專案管理環節(如單純算成本或排時程)的特化應用。
選項分析
- (A) 錯誤:
軟體度量關注的是工程品質與流程改善,軟體工程界(特別是敏捷與高成熟度流程如 CMMI)通常極力避免直接將軟體度量指標(例如每人寫的 LOC 數量、回報 Bug 數)作為評估個別開發者績效的工具,否則容易引發「古德哈特定律(Goo
第 48 題
- 在一個處理大量敏感個資的系統設計中,為了防止資料在傳輸過程中的被竊聽或篡改,應該使用下列
哪一種技術來保護資料的傳輸安全?
(A) HTTPS (超文本傳輸安全協定)
(B) SSL/TLS (安全套接層/傳輸層安全協定)
(C) IPsec (網際協定安全)
(D) VPN (虛擬私人網路)
登入後即可作答並保存紀錄。
核心觀念
本題考查「傳輸中資料的機密性與完整性」以及不同網路安全技術的適用層級。
大量敏感個資在網路上傳輸時,必須防止:
- 竊聽:攻擊者擷取封包後讀取內容。
- 篡改:攻擊者修改傳輸中的資料。
- 冒充:攻擊者偽裝成合法伺服器。
SSL/TLS 是位於應用層與傳輸層之間的安全協定,主要功能包括:
- 使用加密機制保護資料機密性。
- 使用訊息驗證機制確認資料未被篡改。
- 透過數位憑證驗證伺服器身分。
- 透過交握程序協商加密演算法與工作階段金鑰。
現代網路實務以 TLS 為主,早期的 SSL 已因安全性不足而淘汰。
解題方法
題目描述的是「資料在傳輸過程中被竊聽或篡改」,因此切入點是判斷哪一項技術直接提供傳輸加密、完整性驗證與身分驗證。
其中,SSL/TLS 可直接建立安全的加密傳輸通道。其基本流程可概括為:
- 用戶端與伺服器進行 TLS 交握。
- 伺服器提供數位憑證,供用戶端驗證身分。
- 雙方協商加密演算法與工作階段金鑰。
- 後續應用資料以工作階段金鑰加密傳輸。
- 接收端驗證資料完整性,確認內容未遭竄改。
因此,最直接符合題目要求的技術是 SSL/TLS。
選項分析
(A) HTTPS
HTTPS 是「以 HTTP 搭配 SSL/TLS」所形成的安全網頁傳輸協定,確實能防止瀏覽器與網站伺服器之間的資料遭竊聽或篡改。
但 HTTPS 是特定應用情境下的協定,主要用於保護 HTTP 網頁通訊;SSL/TLS 才是提供加密、完整性與身分驗證的底層安全技術。
第 49 題
- 以下哪一種機器學習方法可以有效處理高維度資料中的維度災難問題?
(A) 主成分分析(PCA)
(B) 支持向量機(SVM)
(C) 隨機森林 (Random Forest)
(D) K-最近鄰(K-NN)
登入後即可作答並保存紀錄。
核心觀念
-
維度災難(Curse of Dimensionality):
當特徵空間的維度(特徵數量 )急劇增加時,空間體積呈指數級膨脹,使得可用的樣本資料在高維空間中變得極度稀疏(Sparsity)。此現象會導致:- 距離度量(如歐氏距離 Euclidean Distance)失效:所有點之間的距離趨於均勻相等,使基於距離的演算法難以有效區分鄰近與遠離的點。
- 計算複雜度與記憶體需求大幅提高。
- 模型極易發生過擬合(Overfitting)。
-
降維技術(Dimensionality Reduction):
解決維度災難最直接且根本的手段是「降維」,即在保留資料主要變異量或重要結構的前提下,將資料從高維空間投影至低維空間。主要分為特徵選取(Feature Selection)與特徵萃取(Feature Extraction)。
解題方法
本題切入點在於判斷哪一項技術的「核心功能」本身即是用來消除/降低維度以解決維度災難:
- 主成分分析(Principal Component Analysis, PCA) 是一種非監督式的線性降維演算法(特徵萃取法)。
- PCA 透過計算共變異數矩陣(Covariance Matrix)的特徵值(Eigenvalues)與特徵向量(Eigenvectors),將原始互相相關的變數投影到一組互相正交的主成分軸上,並選取特徵值較大的前 個主成分(),藉此大幅壓縮維度並保留大部分變異量,從根本上解除維度災難。
選項分析
- (A) 主成分分析 (PCA) —— 正確
PCA 是標準的降維技術,能直接將高維資料投射至低維子空間,有效過濾雜訊、消除特徵間的多元共線性,直接解決維度災難帶來的稀疏
第 50 題
- 下列哪種演算法不屬於基於概率的機器學習方法?
(A) 隱馬可夫模型(Hidden Markov Model)
(B) 貝葉斯(Naive Bayes)
(C) K-最近鄰(K-NN)
(D) 隨機森林 (Random Forest)
登入後即可作答並保存紀錄。
核心觀念
本題考查各種機器學習演算法的基本分類:
- 機率式模型(probabilistic model):直接以機率分布、條件機率或貝葉斯定理描述資料與類別之間的關係。
- 距離式方法(distance-based method):依據資料點之間的距離判斷類別。
- 樹模型與集成方法(tree-based ensemble method):透過多棵決策樹進行分類或迴歸。
其中,貝葉斯分類器的核心公式為貝葉斯定理:
隱馬可夫模型則以狀態轉移機率與觀察機率描述序列資料。相較之下,K-NN 主要依據距離尋找鄰近樣本,不需要建立機率分布模型。
解題方法
判斷各選項的主要決策依據:
- 若演算法明確使用條件機率、先驗機率或機率分布,屬於機率式方法。
- 若演算法主要利用距離、投票或幾何關係判斷,則不是典型的機率式方法。
- 若演算法透過多棵決策樹集成,雖然建構過程含有隨機抽樣,但其核心仍是樹狀分割與投票。
K-NN 對測試資料 找出距離最近的 個訓練樣本,再以多數決分類:
其中 表示距離 最近的 個樣本集合。這個判斷過程的核心是距離與投票,而非機率模型,因此本題選擇 K-NN。
選項分析
(A) 隱馬可夫模型(Hidden Markov Model)
正確。HMM 是典型的機率式模型,利用:
- 初始狀態機率
- 狀態轉移機率
- 觀察機率
來描述隱藏狀態與觀察序列之間的關係。因此屬於基於機率的機器學習方法。
(B) 貝葉斯(Naive Bayes)
正確。Naive Bayes 直接使用貝葉斯定理計算類別的後驗機率: