115 身心障礙特考三等 電子工程 計算機概論 考古題詳解
第 一 題20 分
在大量資料處理的系統中,常需要選擇適當的資料結構以提高效能,請回答下列問題:
(一) 說明陣列(Array)、鏈結串列(Linked List)與雜湊表(Hash Table)的基本結構與存取特性。若系統需要大量查詢但插入頻率較低,應優先考慮哪一種結構?請說明理由。
(二) 若資料已事先排序好且儲存於陣列中,若使用二元搜尋法(Binary Search)搜尋資料,所需要的時間複雜度(Time Complexity)為何?需有推導過程。
登入後即可作答並保存紀錄。
核心觀念
本題考查三種常用資料結構的儲存方式、存取特性,以及二元搜尋法的時間複雜度分析。
- 陣列(Array):元素連續儲存,可依索引直接定位,隨機存取時間為 。搜尋未排序陣列通常需逐一檢查,為 ;插入或刪除若須移動後續元素,最壞需 。
- 鏈結串列(Linked List):節點透過指標連結,記憶體不必連續。已知節點位置時,插入或刪除可在 完成;但按索引存取或搜尋須沿著節點逐一走訪,通常為 。
- 雜湊表(Hash Table):以雜湊函數將鍵值映射至表格位置,平均查詢、插入與刪除時間為 ;若發生大量碰撞,最壞時間可退化為 。
解題方法
(一)依操作需求選擇資料結構
題目要求大量查詢、插入頻率較低,因此應優先考慮雜湊表。雜湊表平均查詢時間為 ,適合頻繁依鍵值查找資料;插入雖也有效率,但本題的選擇重點是查詢需求。
若查詢是依排序後的順序或範圍進行,且資料筆數固定,排序陣列搭配二元搜尋也是合適作法;但就一般鍵值查詢而言,雜湊表的平均查詢效率較高。
(二)二元搜尋的時間複雜度推導
設陣列含有 筆已排序資料。二元搜尋每次比較中間元素,並將搜尋範圍縮小為原來的一半,因此最多比較次數 滿足:
連續執行 次後,剩餘搜尋範圍約為:
第 二 題20 分
資安攻擊事件日趨頻繁,請說明釣魚攻擊(Phishing Attack)與中間人攻擊(Man-in-the-Middle Attack)的運作方式,並比較兩者在攻擊目標與防禦方式上的差異。
登入後即可作答並保存紀錄。
核心觀念
本題考查兩種常見資安攻擊的運作方式、攻擊目標與防禦重點。釣魚攻擊主要利用社交工程誘騙使用者交出資料或執行有害操作;中間人攻擊則是在通訊雙方之間介入,竊聽或竄改傳輸內容。兩者都可能造成資料外洩,但攻擊切入點不同。
解題方法
依序說明每種攻擊的「攻擊者如何接近目標、如何取得成果」,再比較其主要防禦方式。釣魚攻擊著重辨識與防範欺騙訊息;中間人攻擊著重確保通訊端點身分可信、傳輸受到保護。
一、釣魚攻擊(Phishing Attack)的運作方式
釣魚攻擊是社交工程的一種。攻擊者偽裝成可信任的個人或機構,例如銀行、政府機關、學校或常用網路服務,透過電子郵件、簡訊、社群訊息或偽造網站,誘使受害者:
- 點選連結並在仿冒頁面輸入帳號、密碼、信用卡資料或驗證碼。
- 開啟惡意附件,讓裝置感染惡意程式。
- 依照訊息指示匯款、提供個人資料或變更帳戶設定。
其關鍵在於利用人的信任、急迫感或疏忽取得資訊或促成操作;攻擊者不一定需要介入受害者與合法網站之間的網路連線。
二、中間人攻擊(Man-in-the-Middle Attack)的運作方式
中間人攻擊是攻擊者在通訊雙方之間取得或偽造一個介入位置,使雙方誤以為彼此直接通訊。攻擊者可能竊聽傳輸內容,也可能修改訊息後再轉送,造成資料外洩、交易內容遭竄改或登入資訊被截取。
常見情境包括:攻擊者在不安全的公共 Wi-Fi 上誘導使用者連線至惡意無線基地台;利用網域名稱解析或路由遭操控,把使用者導向攻擊者控制的端點;或冒充伺服器與用戶端建立連線。若通訊未妥善驗證對方身分或未加密,攻擊者更容易讀取或竄改資料。
攻擊目標與防禦方式比較
| 比較項目 | 釣魚攻擊 | 中間人攻擊 |
|---|---|---|
| 主要切入點 | 使用者的信任與操作 | 通訊連線或傳輸路徑 |
| 主要目標 | 誘騙使用者交出憑證、個資、驗證碼,或執行指定操作 | 竊聽、攔截或竄改通訊雙方傳送的資料 |
第 三 題20 分
請比較虛擬機(VM)與容器(Container)的差異,並分析其對系統效能與資安的影響。
登入後即可作答並保存紀錄。
核心觀念
本題考查虛擬化的兩種實作方式,以及它們在資源使用、效能與隔離安全上的取捨。
- 虛擬機(Virtual Machine, VM):由 Hypervisor 將實體硬體資源分配給多部虛擬電腦。每部 VM 都有自己的客體作業系統(Guest OS)及核心。
- 容器(Container):以作業系統層級虛擬化方式隔離應用程式。容器通常共用主機作業系統的核心,但各自有隔離的程序、檔案系統、網路及資源視圖。
解題方法
可從「虛擬化層級、作業系統核心、資源開銷、隔離方式」四個角度比較,再分別說明效能與資安影響。效能與安全並非只看 VM 或容器的名稱,仍受 Hypervisor、核心、設定及工作負載影響;作答時應呈現一般特性與其原因。
VM 與容器比較
| 比較面向 | 虛擬機(VM) | 容器(Container) |
|---|---|---|
| 虛擬化層級 | 硬體層級,由 Hypervisor 管理虛擬硬體 | 作業系統層級,由容器執行環境及核心機制隔離 |
| 作業系統 | 每部 VM 通常執行完整的 Guest OS,包含自己的核心 | 容器通常共用主機核心,不各自啟動完整核心 |
| 資源開銷 | Guest OS 需要額外的記憶體、儲存空間及 CPU 資源 | 映像檔與執行環境通常較精簡,額外開銷較低 |
| 啟動速度 | 需啟動 Guest OS,通常較慢 | 建立隔離執行環境即可啟動,通常較快 |
| 作業系統相容性 | 不同 VM 可執行不同作業系統或核心 | 容器須使用相容的主機核心;例如 Linux 容器通常使用 Linux 核心 |
| 隔離方式 | 由 Hypervisor 將各 VM 隔離,通常具有較強的邊界 | 透過命名空間(namespaces)、控制群組(cgroups)等核心機制隔離程序及資源 |
對系統效能的影響
**VM:**由於每部 VM 都執行 Guest OS,會占用額外記憶體、儲存空間與處理器資源,啟動時間也較長。虛擬硬體存取及 Hypervisor 管理可能帶來額外成本。
第 四 題20 分
請說明遞迴(Recursion)與迭代(Iteration)兩種程式設計方法的概念與差異,並說明在實際系統開發中應如何選擇適當的設計方式。
登入後即可作答並保存紀錄。
核心觀念
本題考查程式流程的兩種控制方式,以及在空間使用、效能與程式可讀性上的取捨。
- 遞迴(Recursion):函式在執行過程中直接或間接呼叫自身,將問題拆成較小的同類型子問題。正確的遞迴必須有終止條件,並確保每次呼叫都逐步接近該條件;否則會無限呼叫,造成堆疊溢位(stack overflow)。
- 迭代(Iteration):利用迴圈(如
for、while)重複執行一段指令,直到條件成立或不成立而結束。
兩者都能重複處理工作,並可用來解決許多相同問題;差異在於控制流程及狀態保存方式。遞迴透過函式呼叫與呼叫堆疊保存每一層狀態,迭代則通常透過迴圈變數及明確的資料結構保存狀態。
解題方法
可依序說明兩者的定義、執行方式、優缺點,再以實務選擇原則收束。作答時須指出:兩者常可互相改寫,但適用情境不同,選擇應考量問題結構、資源限制、程式可讀性及執行需求。
以計算階乘為例,兩種方法都能得到 :
遞迴定義為:
迭代則從 開始,依序將 到 乘入累積結果。兩者計算工作量皆為 ;但一般遞迴會保留 層函式呼叫,額外堆疊空間為 ,迭代通常只需固定數量的變數,額外空間為 。
兩種方法的差異
| 比較面向 | 遞迴 | 迭代 |
|---|---|---|
| 控制方式 | 函式反覆呼叫自身 | 迴圈反覆執行指令 |
| 狀態保存 | 由呼叫堆疊保存各層參數與區域狀態 | 由迴圈變數或程式自行管理的資料結構保存 |
| 程式表達 | 對樹狀、分治等問題,常較貼近問題定義 | 對線性重複流程,通常直接明確 |
| 額外空間 | 需支付函式呼叫及堆疊空間;深度過大有堆疊溢位風險 | 通常不需逐次增加呼叫堆疊,空間較容易控制 |
第 五 題20 分
在程式設計中常使用分治法(Divide and Conquer)解決複雜問題,說明分治法的基本概念,並以排序演算法為例,說明其如何運用分治策略。
登入後即可作答並保存紀錄。
核心觀念
分治法(Divide and Conquer)是一種將大型問題拆成較小子問題的設計策略。典型流程包含三個階段:
- 分解(Divide):把原問題切分成規模較小、性質相同的子問題。
- 征服(Conquer):遞迴地解決各個子問題;子問題小到一定程度時,直接求解。
- 合併(Combine):將子問題的解整合,得到原問題的答案。
分治法適合能切分為多個較小子問題,且子問題的解可以有效合併的問題。排序中的**合併排序(Merge Sort)**是典型例子。
解題方法:以合併排序說明
假設要排序陣列 :
1. 分解
將陣列切成兩半,並繼續遞迴切分,直到每個子陣列只剩一個元素:
單一元素視為已排序。
2. 征服與合併
逐層合併已排序的子陣列。每次比較兩邊目前最小的元素,先取較小者,直到兩邊元素都放入合併結果:
最後再合併兩個已排序的結果: