國立中山大學 113 年 《計算機概論與程式設計》
第 1 題3 分
Which one of the following is NOT a wireless technology?
登入後即可作答並保存紀錄。
核心觀念
本題考查「無線技術(wireless technology)」與「有線網路技術(wired networking technology)」的區別。
無線技術是指資料透過無線電波、微波或近距離感應等方式傳輸,不需要以實體網路線作為主要傳輸媒介。常見無線技術包括:
- Bluetooth:短距離無線個人區域網路
- 5G:第五代行動通訊技術
- Wi-Fi:無線區域網路技術
- NFC:近距離無線通信
- Ethernet:乙太網路,傳統上以網路線進行有線傳輸
解題方法
逐一判斷各技術的主要傳輸媒介:
- 若主要透過無線電波或近場感應傳輸,屬於無線技術。
- 若主要透過雙絞線、同軸電纜或光纖等實體媒介傳輸,屬於有線技術。
- 找出唯一不符合無線技術定義的選項。
因此,主要使用實體網路線傳輸的 Ethernet 即為答案。
選項分析
(A) Bluetooth
Bluetooth 是短距離無線通信技術,常用於耳機、鍵盤、滑鼠、手機與穿戴式裝置之間的連線。
它利用約 頻段的無線電波傳輸資料,不需要連接網路線,因此屬於無線技術。本選項錯誤。
(B) 5G
5G 是第五代行動通訊技術,提供手機、基地台與其他行動裝置之間的高速無線通信。
資料主要透過基地台與裝置間的無線電波傳送,因此屬於無線技術。本選項錯誤。
(C) WiFi
第 2 題3 分
Which one of the following models is NOT considered as a deep learning method?
登入後即可作答並保存紀錄。
核心觀念
本題考查「深度學習(Deep Learning)」與傳統機器學習模型的分類。
深度學習是機器學習的一種,主要以具有多層非線性轉換的人工神經網路,自動從資料中學習特徵與表示。其典型特徵包括:
- 具有多層神經網路結構。
- 透過反向傳播(Backpropagation)與梯度下降法訓練參數。
- 能從原始資料中自動學習多層次特徵。
- 常搭配大量資料與高運算量訓練。
本題中,CNN、LSTM、RNN、GNN 都屬於神經網路架構,通常歸類為深度學習方法;SVM 則是傳統機器學習中的分類與迴歸模型,並非深度神經網路。
解題方法
判斷各選項是否為深度學習方法時,可先確認其是否屬於神經網路架構:
- 若模型由多層神經元、權重與啟動函數組成,通常屬於深度學習。
- 若模型主要透過最佳化找出分類超平面,且沒有多層神經網路結構,通常屬於傳統機器學習。
- 依此標準逐一判斷,SVM 不屬於深度學習方法,因此選 B。
選項分析
(A) CNN:Convolutional Neural Network
CNN,即卷積神經網路,主要用於影像辨識、電腦視覺,也可應用於聲音與文字資料。
其核心結構包括:
- 卷積層(Convolutional Layer):擷取局部特徵。
- 池化層(Pooling Layer):降低資料維度並保留重要特徵。
- 全連接層(Fully Connected Layer):進行分類或預測。
CNN 可透過多個卷積層逐層學習邊緣、紋理、形狀與物體等不同層次的特徵,因此是典型的深度學習方法。
判定:錯誤選項。CNN 屬於深度學習方法。
(B) SVM:Support Vector Machine
SVM,即支援向量機,是一種傳統的監督式機器學習方法,常用於分類問題,也可延伸至迴歸問題。
以二元分類為例,SVM 會尋找一個分類超平面:
使不同類別的資料盡量分開,並最大化兩類資料到分類邊界的間隔(margin)。決定分類邊界的關鍵資料點稱為支援向量(Support Vectors)。
SVM 的基本精神是尋找最佳分類邊界,不是建立多層神經網路,也不會像深度神經網路一樣自動學習多層次特徵表示。因此在一般考試分類中,SVM 被歸為傳統機器學習,而非深度學習。
判定:正確選項。SVM 不被視為深度學習方法。
(C) LSTM:Long Short-Term Memory
LSTM,即長短期記憶網路,是 RNN 的改良架構,主要用於處理具有順序性的資料,例如:
- 文字與語言
- 語音
- 時間序列
- 感測器資料
LSTM 使用記憶細胞與閘門機制控制資訊流動,常見閘門包括:
- 遺忘閘門(Forget Gate)
- 輸入閘門(Input Gate)
- 輸出閘門(Output Gate)
其目的在於保留重要的長期資訊,減少傳統 RNN 在長序列訓練時的梯度消失問題。LSTM 本質上是神經網路架構,屬於深度學習方法。
判定:錯誤選項。LSTM 屬於深度學習方法。
第 3 題3 分
Which of the following structures is the most commonly-used directory structure?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統中的「目錄結構」(directory structure),也就是檔案系統如何組織檔案與資料夾。
常見目錄結構包括:
- 單層目錄
- 雙層目錄
- 樹狀目錄
- 圖形目錄
其中,樹狀目錄以根目錄(root directory)為起點,向下分成多層子目錄,形成階層式結構。現代作業系統通常採用此種架構,例如:
此結構能清楚分類檔案、避免不同使用者或不同資料夾之間發生名稱衝突,也便於檔案管理與搜尋。
解題方法
判斷「最常使用的目錄結構」時,應從現代作業系統的實際檔案管理方式切入。
Windows、Linux、macOS 等系統,都以根目錄或磁碟區為起點,底下再建立多層資料夾。例如:
- Linux:
/home/student/Documents - Windows:
C:\Users\Student\Documents - macOS:
/Users/student/Documents
這些路徑都呈現由上而下的階層關係,符合樹狀目錄結構。因此本題答案為樹狀目錄。
選項分析
(A) Single level directory structure:單層目錄結構
單層目錄中,所有檔案都放在同一個目錄內,結構如下:
優點是結構簡單、實作容易。
缺點包括:
- 檔案數量增加後難以管理
- 所有檔案必須使用唯一檔名
- 不同使用者可能想使用相同檔名,容易產生衝突
- 不適合大型、多使用者的作業系統
因此,單層目錄不是現代作業系統最常用的結構。
(B) Two level directory structure:雙層目錄結構
雙層目錄通常包含:
- 主檔案目錄(Master File Directory, MFD)
- 每位使用者自己的使用者檔案目錄(User File Directory, UFD)
結構可表示為:
此結構改善了單層目錄的檔名衝突問題,因為不同使用者可以各自擁有同名檔案。
第 4 題3 分
Which of the following statements is the most likely SQL statement used to perform the following task: a bank gives 2% interest to all customers whose balance is less than 100,000?
登入後即可作答並保存紀錄。
核心觀念
本題考查 SQL 的 UPDATE 語法,以及如何依據條件批次修改資料。
銀行要對「帳戶餘額低於 100,000」的所有客戶加發 2% 利息,應完成兩件事:
- 修改帳戶資料表中的
balance欄位。 - 將符合條件的餘額乘以 。
計算公式為:
因此:
標準形式可寫成:
UPDATE account
SET balance = balance * 1.02
WHERE balance < 100000;
其中:
UPDATE account:指定要修改的資料表為account。SET balance = balance * 1.02:將餘額增加 2%。WHERE balance < 100000:只修改餘額低於 100,000 的帳戶。
解題方法
先判斷正確 SQL 必須具備的三個條件:
- 使用
UPDATE修改資料。 - 使用
SET指定欄位的新值。 - 使用
WHERE篩選餘額低於 100,000 的資料。
由於題意中的客戶資料應儲存在 account 資料表,因此表名應為 account。利息計算則應使用:
a.balance = a.balance * 1.02
選項中同時符合資料表名稱、計算公式與條件判斷的是選項 C。
選項分析
(A) UPDATE balance a SET a.balance = a.balance * 1.02 WHERE a.balance < 100000
錯誤。
雖然此選項的乘法公式與 WHERE 條件正確,但它將 balance 當成資料表名稱:
UPDATE balance
題意是修改帳戶的餘額,通常應更新 account 資料表,而 balance 是其中的欄位名稱。因此依本題官方設定,資料表名稱錯誤。
(B) UPDATE balance a SET a.balance += a.balance * 1.02 IF a.balance < 100000
錯誤,包含多個問題:
balance被當成資料表名稱,與題意中的帳戶資料表不符。- SQL 使用
WHERE進行條件篩選,不使用IF。 +=並非通用 SQL 的標準UPDATE寫法。- 即使某些程式語言支援
+=,其數學意義為:
結果會變成:
第 5 題3 分
Which one of the following binary representation is the two’s complement of ?
登入後即可作答並保存紀錄。
核心觀念
本題考查 位元二補數(two’s complement)表示法,重點包括:
- 先將正整數 轉換成二進位。
- 負數的二補數表示法:
- 將正數的二進位逐位元反相;
- 再加上 。
- 題目選項皆為 位元,因此採用 位元二補數表示法。
位元二補數可表示的整數範圍為:
也就是 至 ,因此 可以用 位元表示。
解題方法
先將 轉換成二進位:
因此:
將 的 位元表示逐位元反相:
再加上 :
所以, 的 位元二補數表示為:
故正確選項為 (C)。
選項分析
(A)
此位元組直接表示正數 :
它是 ,不是 ,因此錯誤。
(B)
此結果是將 逐位元反相後得到的值,但尚未加上 。
它是 的一補數(one’s complement),不是二補數。若將其視為二補數,負值計算如下:
- 逐位元反相:
- 加上 :
因此它代表 ,不是 ,錯誤。
(C)
第 6 題3 分
For a three-dimensional array stored in the row-major order with dimensions , if the address of is 2048 and the address of is 2084, then what is the address of ?
登入後即可作答並保存紀錄。
核心觀念
本題考查三維陣列在 row-major order(列優先、以最右側索引變化最快)下的記憶體位址計算。
陣列尺寸為 ,索引範圍為:
- 第一維:
- 第二维:
- 第三維:
對於 ,其一維化後的元素位移量為:
其中每個元素所占的記憶體大小,需由題目給定的兩個位址反推出來。
解題方法
第一個已知位置:
其元素位移量為:
第二個已知位置:
其元素位移量為:
兩者相差:
題目給定兩個位址相差:
因此,每個元素占用:
接著計算目標位置 的元素位移量:
相較於 的位移量 ,目標位置多出:
每個元素為 bytes,因此位址增加:
所以目標位址為:
選項分析
第 7 題3 分
You create a car with . Which is a line of code to change the color of to “red”?
class Car(object):
def __init__(self, w, d):
self.wheels = w
self.doors = d
self.color = ""
def paint(self, c):
self.color = c
登入後即可作答並保存紀錄。
核心觀念
本題考查 Python 的:
- 類別(class)與物件(object)
- 建構子
__init__ - 實例方法(instance method)
self自動綁定- 字串的正確表示方式
建立物件:
mycar = Car(4, 2)
等同於呼叫:
Car.__init__(mycar, 4, 2)
因此,mycar 具有以下屬性:
mycar.wheels = 4
mycar.doors = 2
mycar.color = ""
類別中的方法:
def paint(self, c):
self.color = c
其功能是將傳入的參數 c 指定給該物件的 color 屬性。
解題方法
要將 mycar 的顏色改成紅色,必須:
- 以
mycar呼叫paint方法。 - 傳入字串
"red"作為顏色參數。
正確的呼叫方式為:
mycar.paint("red")
Python 會自動將 mycar 傳給方法中的 self,因此實際效果相當於:
Car.paint(mycar, "red")
方法執行後:
self.color = c
可視為:
mycar.color = "red"
因此 mycar 的顏色成功改為 "red"。
逐步追蹤(Trace)
初始建立物件:
mycar = Car(4, 2)
物件狀態為:
mycar.wheels = 4
mycar.doors = 2
mycar.color = ""
執行:
mycar.paint("red")
參數綁定如下:
| 方法參數 | 實際值 |
|---|---|
self | mycar |
c | "red" |
執行方法內容:
self.color = c
結果:
mycar.color = "red"
選項分析
(A) Car.paint("red")
錯誤。
這是透過類別名稱直接呼叫實例方法,沒有提供物件實例作為 self。
方法需要兩個參數:
第 8 題3 分
What is the status of a process right after the process has been stopped because its time slot is over?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統的「行程狀態」與「CPU 排程」。
行程常見狀態包括:
- Running(執行中):行程目前正在 CPU 上執行。
- Ready(就緒):行程已具備執行條件,只等待 CPU 分配。
- Waiting(等待):行程因等待輸入/輸出或某個事件而暫停,暫時不能執行。
- Terminated(終止):行程已完成或被結束。
- Sleeping(睡眠):常表示行程主動暫停一段時間,屬於等待計時器或其他事件的狀態。
題目中的 time slot 指的是 CPU 排程分配給行程的時間片,亦稱 time quantum。當行程使用完時間片,但工作尚未完成時,作業系統會進行搶先式排程,暫停目前行程並將 CPU 分配給其他就緒行程。
解題方法
判斷行程狀態變化:
原因如下:
- 該行程原本正在 CPU 上執行,因此處於 Running 狀態。
- 分配給它的時間片已經用完,必須暫時讓出 CPU。
- 題目沒有表示它正在等待 I/O、等待事件,也沒有表示它已經完成。
- 因此,該行程仍然可以繼續執行,只是排隊等待下一次取得 CPU。
- 此狀態即為 Ready。
所以官方答案 A. Ready 正確。
選項分析
(A) Ready
正確。行程因時間片用完而被 CPU 暫停,但仍具備執行條件,會回到 Ready queue,等待排程器再次分配 CPU。
典型狀態轉移為:
第 9 題3 分
Assume there are seven characters, C1, C2, C3, C4, C5, C6, and C7, and the frequency of each one is given as follows:
, , , , , ,
What is the correct encoded length of a given character as the following if the Huffman coding is adopted?
登入後即可作答並保存紀錄。
核心觀念
本題考查 Huffman coding(霍夫曼編碼)。其核心定義如下:
- 字元出現頻率越高,通常配置越短的編碼。
- 字元在 Huffman tree 中的編碼長度,等於該字元從根節點到葉節點的路徑長度,也就是葉節點的深度。
- 建構方法是反覆選取目前頻率最小的兩個節點合併,合併後的頻率為兩者相加,直到形成完整的二元樹。
- 左、右分支分別標記為 、;左右標記互換只會改變編碼內容,不會改變編碼長度。
解題方法:建立 Huffman Tree
將各字元依頻率由小到大排列:
依序合併最小的兩個頻率:
| 步驟 | 合併節點 | 新頻率 |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 | ||
| 6 |
因此 Huffman Tree 的結構可表示為:
若令每次合併時較小頻率的節點走 ,較大頻率的節點走 ,可得到一組合法編碼:
| 字元 | 一組 Huffman code | 編碼長度 |
|---|---|---|
| bit | ||
| bits | ||
| bits | ||
| bits | ||
| bits | ||
| bits | ||
| bits |
所以:
其中 表示字元 的編碼長度。
選項分析
(A) for 2 bits:錯誤
的頻率為 。在 Huffman Tree 中, 位於深度 ,因此編碼長度為:
第 10 題3 分
What is the output of the following Python code?
arr = ['1', '2', '3', '4', '5', '6']
print(arr[1:2])
登入後即可作答並保存紀錄。
核心觀念
本題考查 Python 的串列切片(list slicing)語法:
arr[start:stop]
其規則為:
start:起始索引,包含在結果中。stop:結束索引,不包含在結果中。- Python 索引從 開始。
題目中的串列及索引如下:
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 元素 | '1' | '2' | '3' | '4' | '5' | '6' |
解題方法
程式碼為:
arr = ['1', '2', '3', '4', '5', '6']
print(arr[1:2])
arr[1:2] 表示:
- 從索引 開始,包含索引
- 取到索引 之前停止,不包含索引
因此只會取出索引 的元素:
arr[1:2] = ['2']
print 輸出:
['2']
逐步追蹤(trace)
- 建立串列:
arr = ['1', '2', '3', '4', '5', '6']
- 執行切片:
arr[1:2]
- 索引 對應元素
'2',索引 對應元素'3'。 - 結束索引 不包含在切片中,因此結果為:
['2']
print印出:
['2']
選項分析
第 11 題3 分
Symmetric encryption is commonly used to protect messages exchanged between two users without being exposed, where it is required to share a common secret key between the sender and receiver. If there are 20 users in a system, how many keys in total are required to be shared among those users for the end-to-end security by symmetric encryption?
登入後即可作答並保存紀錄。
核心觀念
對稱式加密(symmetric encryption)要求通訊雙方共同持有同一把秘密金鑰。若系統中有 位使用者,且任意兩位使用者都需要直接進行安全通訊,則每一組使用者需要一把專屬共同金鑰。
由於甲與乙共用的金鑰,同時可供甲傳給乙及乙傳給甲使用,因此「甲—乙」只算一把,不需分成兩把。
解題方法
本題是計算 位使用者中,任選兩位使用者組成一組的總數,也就是組合數:
因此,全部使用者之間共需要:
也可用逐一累加的方式理解:
- 第 1 位使用者需與其餘 19 位共用金鑰: 把
- 第 2 位使用者尚未計算的對象有 18 位: 把
- 第 3 位使用者新增 把
- 持續計算至最後一位
因此:
選項分析
- (A) 10:錯誤。
不是 位使用者兩兩配對的總數。它常見於誤將使用者數量除以 ,但本題不是將人員分成固定的 組,而是每一位使用者都要能與其他使用者建立安全通訊。
第 12 題3 分
For the given array , using the following code for bubble sort:
for(int i = 0; i < 5; i++){
for(int j = i+1; j < 5; j++){
if(a[j] < a[i]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
How many swaps are needed during the sorting process?
登入後即可作答並保存紀錄。
核心觀念
本題考查排序演算法的逐步追蹤,以及「交換次數」的計算。
雖然題目稱為 bubble sort,但這段程式的實際運作方式是:
- 固定位置 。
- 依序檢查右側位置 。
- 若 ,立即交換 與 。
- 每一輪外層迴圈結束後,位置 會放入目前未排序部分的最小值。
因此,本題應依照程式的實際執行順序計算交換次數,不可直接套用標準 bubble sort 的比較方式。
解題方法與逐步追蹤
初始陣列為:
其中每次符合 時,才算一次 swap。
| 外層 | 比較與交換過程 | 該輪交換次數 | 陣列結果 |
|---|---|---|---|
| 否; 是,交換 | 1 | ||
| 否; 否 | |||
| 是,交換 | 1 | ||
| 否; 否 | |||
| 是,交換 | 1 | ||
| 否 | |||
| 是,交換 | 1 | ||
| 沒有右側元素可比較 | 0 |
所以總交換次數為:
排序完成後的陣列為:
選項分析
第 13 題3 分
Consider the arithmetic right shift operation (SRA) in computer architecture. If we perform an SRA on the binary number (assuming it represents a signed 8-bit two’s complement integer), shifting it to the right by 2 positions, what is the decimal equivalent of the result?
登入後即可作答並保存紀錄。
核心觀念
本題考查 算術右移(Arithmetic Right Shift, SRA) 與 8 位元二補數(two’s complement)。
算術右移的規則是:
- 每向右移動 1 位,所有位元向右移一格。
- 最左側補入原本的符號位元。
- 符號位元為 表示負數,因此負數右移時左側補 。
- 與邏輯右移(Logical Right Shift)不同,邏輯右移的左側固定補 。
題目中的二進位數為:
最高位為 ,因此它代表一個負的 8 位元二補數整數。
解題方法
對 做算術右移 2 位。
第一次右移:
左側補入原本的符號位元 。
第二次右移:
因此右移 2 位後的結果為:
接著將 轉換為十進位。
方法一:以無號數值扣除
先將 視為無號數:
因為最高位為 ,表示負數,所以二補數的有號值為:
因此:
方法二:由二補數反推絕對值
對 取二補數:
- 位元反相:
- 加 :
的十進位值為 ,原數為負數,因此:
第 14 題3 分
Which of the following is the correct evaluation result of the postfix expression ?
登入後即可作答並保存紀錄。
核心觀念
本題考查後序表示法(postfix expression,又稱逆波蘭表示法)的堆疊(stack)運算。
後序表示法的規則是:
- 遇到運算元,直接推入堆疊。
- 遇到二元運算子,從堆疊頂端取出兩個運算元:
- 先取出的為右運算元。
- 後取出的為左運算元。
- 計算結果後,再推回堆疊。
- 最後堆疊中唯一的數值就是答案。
本題將每一個數字視為一個獨立運算元,運算子依序為 、、、、。
解題方法與逐步追蹤
題目表達式為:
依序拆解為:
使用堆疊逐步計算如下:
| 讀取符號 | 動作 | 堆疊內容(底部 頂端) |
|---|---|---|
| 推入 | ||
| 推入 | ||
| 推入 | ||
| 推入 | ||
| 推入 | ||
| 推入 | ||
因此:
選項分析
第 15 題3 分
An algorithm that runs in , where is the size of the problem. For , the time the algorithm runs is 1 minute. How long does the algorithm take for ?
登入後即可作答並保存紀錄。
核心觀念
本題考查演算法的時間複雜度,以及輸入規模改變時,執行時間如何依照複雜度成長。
已知演算法的執行時間為:
在考試題目的通常假設下,可將執行時間視為與 成正比:
因此,輸入規模從 增加到 時,執行時間的倍率為:
原本 時需要 分鐘,因此:
約為 分鐘,故選擇 (B)。
解題方法
可直接使用複雜度倍率公式:
代入 、:
所以:
題目選項以「About」表示近似值, 分鐘可近似為 分鐘,因此答案為 (B) About 3 minutes。
需注意,嚴格而言, 只表示漸近上界,並不保證實際執行時間恰好等於某個常數乘上 。本題依照選擇題慣例,採用「執行時間與 成正比」的合理假設,並以官方答案 B 為準。
選項分析
- (A) Same time
錯誤。輸入規模由 增加至 ,增加為原本的 倍。
第 16 題3 分
Mathematical arithmetic in program is presented in an infix notation. If it is changed to a postfix notation, the result should be which of the following?
登入後即可作答並保存紀錄。
核心觀念
本題考查中序表示法(infix notation)轉換為後序表示法(postfix notation),並辨認:
- 次方運算子 ^
- 括號所表示的運算優先順序
- 括號內的負號 為一元運算子(unary minus)
- 加法運算子 的位置
原式為:
括號明確表示次方的指數是 ,因此運算結構為:
其運算順序是:
- 先對 取負值,得到
- 以 的 次方,得到
- 再與 相加
解題方法
後序表示法的規則是:
運算元先輸出,運算子在其所有運算元輸出後再輸出。
先處理括號內的 :
- 運算元 先輸出
- 一元負號 接著輸出
因此:
接著處理次方 :
- 先輸出
- 再輸出指數
- 最後輸出次方運算子 ^
因此:
A^{(-B)} \longrightarrow AB-^最後處理加法 :
- 接續輸出
- 最後輸出加法運算子
所以完整的後序表示法為:
因此選項為 (A)。
運算樹表示
原式的運算樹如下:
- 根節點是
- 左子樹是次方運算 ^
- 次方的左運算元是
- 次方的右子樹是一元負號 ,其運算元是
- 加法的右運算元是
以後序走訪運算樹時,順序為:
因此得到:
選項分析
(A) :正確
第 17 題3 分
Which is NOT the primary features of the blockchain technology?
登入後即可作答並保存紀錄。
核心觀念
本題考查區塊鏈(blockchain)的基本特徵。區塊鏈是一種以密碼學、分散式網路與共識機制為基礎的資料記錄技術,其核心概念包括:
- Distributed ledger:資料帳本由多個網路節點共同保存。
- Immutability:資料寫入區塊鏈後,若要竄改,必須同時改變後續區塊及多數節點的紀錄,因此具有高度抗竄改性。
- Decentralization:資料驗證與保存不由單一中央機構完全控制。
- Cryptographic security:利用雜湊函數、數位簽章及共識機制,提高資料完整性與交易安全性。
- Consensus mechanism:節點透過工作量證明(Proof of Work, PoW)、權益證明(Proof of Stake, PoS)等機制,對資料狀態達成共識。
區塊鏈的安全性與不可竄改性,通常是透過增加計算成本、節點驗證與密碼學機制所換取,並非以低計算複雜度為主要特徵。
解題方法
題目問的是「哪一項不是區塊鏈技術的主要特徵」,因此應逐一判斷各選項是否符合區塊鏈的典型設計。
判斷重點是:
- 是否描述區塊鏈的資料儲存方式?
- 是否描述區塊鏈的網路架構或控制模式?
- 是否描述區塊鏈透過密碼學與共識機制達成的安全效果?
- 是否與區塊鏈常見的計算成本相符?
區塊鏈為了完成雜湊運算、交易驗證及共識,通常需要相當的計算資源與網路通訊成本。因此「Low computational complexity」不屬於其主要特徵。
選項分析
(A) Distributed ledger:分散式帳本
正確。區塊鏈的帳本不是只儲存在單一伺服器,而是由多個節點共同保存與同步。每個節點通常持有完整或部分帳本副本,交易需經過網路節點驗證後寫入區塊。
因此,Distributed ledger 是區塊鏈的核心特徵之一。
(B) Immutability:不可變更性
正確。區塊鏈中的每個區塊通常包含前一個區塊的雜湊值。若竄改某一區塊的內容,其雜湊值會改變,後續區塊所保存的鏈結也會失效。
在具備多節點備份與共識機制的情況下,攻擊者必須同時修改大量節點資料,才能使竄改內容被網路接受,因此區塊鏈具有高度不可竄改性。
嚴格來說,immutability 並非「絕對無法修改」,而是指資料一旦經共識確認後,修改成本極高、難以被追溯性地竄改。在基本資訊考試的分類中,仍將其視為區塊鏈的主要特徵。
第 18 題3 分
In the context of networking protocols, what differentiates TCP (Transmission Control Protocol) from UDP (User Datagram Protocol), and how does this difference impact data transmission?
登入後即可作答並保存紀錄。
核心觀念
本題考查傳輸層的兩種主要通訊協定:TCP 與 UDP,重點在於:
- 是否需要建立連線
- 是否提供可靠傳輸
- 是否保證資料順序
- 傳輸效率與適用情境
TCP(Transmission Control Protocol)與 UDP(User Datagram Protocol)都屬於傳輸層協定,但設計目標不同。
TCP 是「連線導向」(connection-oriented)協定。傳送資料前,雙方必須先建立連線;傳輸過程中會透過序號、確認回覆、逾時重傳、流量控制等機制,確保資料可靠且依序抵達。
UDP 是「無連線」(connectionless)協定。傳送端不需先與接收端建立連線,也不負責確認、重傳或排序,因此通訊負擔較低、速度較快,但資料可能遺失、重複或亂序。
| 比較項目 | TCP | UDP |
|---|---|---|
| 連線方式 | 連線導向 | 無連線 |
| 可靠性 | 提供可靠傳輸 | 不保證可靠傳輸 |
| 資料順序 | 保證依序交付 | 不保證順序 |
| 控制機制 | 確認、重傳、流量控制 | 機制較少 |
| 傳輸負擔 | 較高 | 較低 |
| 常見用途 | 網頁、檔案傳輸、電子郵件 | 即時影音、線上遊戲、DNS |
解題方法
判斷本題可抓住兩組關鍵詞:
- TCP:connection-oriented、reliable、ordered
- UDP:connectionless、faster、potentially unreliable
TCP 為了確保可靠性,需要額外進行連線建立、資料確認、遺失重傳與順序整理,因此速度與效率通常不如 UDP。UDP 則直接以資料報(datagram)傳送,省略上述控制機制,降低延遲,但無法保證資料一定抵達。
因此,完整符合 TCP 與 UDP 差異的選項為 (A)。
選項分析
(A) 正確
TCP 是連線導向協定,能透過確認、重傳與序號機制,確保資料可靠且依序送達。UDP 則是無連線協定,不保證資料抵達或順序,但因控制負擔較少,通常具有較低延遲與較快的傳輸特性。
第 19 題3 分
A confusion matrix is commonly used to estimate the performance of a trained machine learning model for classification. Through the prediction on a set of test data not being used for model training, one can calculate the evaluation metrics, such as accuracy, precision, recall and F1 score. There are four kinds of results for the prediction by a model on a test dataset of 1000 tuples. That is, TP (true positive) = 500, FN (false negative) = 100, FP (false positive) = 50, and TN (true negative) = 350 (true negative). What is the value of recall for the model?
登入後即可作答並保存紀錄。
核心觀念
本題考查分類模型的混淆矩陣(confusion matrix)與 recall(召回率)的定義。
四種結果如下:
- TP(True Positive):實際為正,預測也為正
- FN(False Negative):實際為正,但預測為負
- FP(False Positive):實際為負,但預測為正
- TN(True Negative):實際為負,預測也為負
Recall 衡量的是:
在所有實際為正的資料中,模型成功預測為正的比例。
其公式為:
其中 代表所有實際為正的樣本數。
解題方法
題目給定:
因此,實際為正的樣本總數為:
代入 recall 公式:
所以正確選項為:
選項分析
- (A) :正確
這正是 recall 的公式:
- (B) :錯誤
分母 ,這是 precision 的分母,因此:
此選項計算的是 precision,不是 recall。
第 20 題3 分
The MMU’s main service to the computer is
登入後即可作答並保存紀錄。
核心觀念
MMU(Memory Management Unit,記憶體管理單元)是位於 CPU 與主記憶體之間的硬體元件,主要負責將 CPU 產生的「虛擬位址(virtual address)」轉換成實際記憶體使用的「實體位址(physical address)」。
在具備虛擬記憶體的系統中,程式所使用的位址通常不是 RAM 中的實際位置,而是由作業系統配置的虛擬位址。MMU 依據頁表(page table)、區段表(segment table)或其他位址轉換資料結構完成轉換:
以分頁(paging)為例,虛擬位址可分為:
- 頁號(page number)
- 頁內位移(page offset)
MMU 使用頁號查詢頁表,找出對應的實體頁框,再保留原本的頁內位移,組合出實體位址。
因此,MMU 的主要服務就是「記憶體位址轉換(memory translation)」。
解題方法
判斷本題的關鍵,是辨認各選項是否描述 MMU 的核心硬體功能。
題幹問:
The MMU’s main service to the computer is
其中 MMU 的完整名稱是 Memory Management Unit,但不能只因為名稱中有「Management」就判定它負責所有記憶體管理工作。其最基本、最核心的工作是將程式使用的虛擬位址轉換為 RAM 使用的實體位址。
所以正確選項為:
選項分析
(A) memory translation
正確。
MMU 主要負責虛擬位址與實體位址之間的轉換。常見機制包括:
- 分頁位址轉換
- 區段位址轉換
- 頁表查詢
- TLB(Translation Lookaside Buffer)快取位址轉換結果
- 記憶體存取權限檢查
其中最直接、最核心的服務就是 memory translation,因此選擇 A。
(B) memory allocation
錯誤。
第 21 題3 分
Consider the execution of the following set of processes on a single-core processor.
| Process | Creation Time | Required Execution Time |
|---|---|---|
| P1 | 0 | 30 |
| P2 | 5 | 12 |
| P3 | 12 | 18 |
| P4 | 70 | 20 |
| P5 | 80 | 10 |
Assume we use first-in-first-out (FIFO) scheduling to execute the above 5 processes. What is the average waiting time?
登入後即可作答並保存紀錄。
核心觀念
本題考的是單核心處理器的 First-In-First-Out(FIFO)/First-Come, First-Served(FCFS)排程。
FIFO 的規則是:
- 依照程序建立(到達)時間先後排入佇列。
- 先到達的程序先執行。
- 一旦程序開始執行,通常必須執行完畢後,下一個程序才能開始。
- 等待時間定義為:
本題採非搶先式 FIFO 排程。
解題方法
依建立時間排序:
各程序的執行情形如下:
| 程序 | 建立時間 | 執行時間 | 開始執行 | 完成時間 | 等待時間 |
|---|---|---|---|---|---|
| 0 | 30 | 0 | 30 | ||
| 5 | 12 | 30 | 42 | ||
| 12 | 18 | 42 | 60 | ||
| 70 | 20 | 70 | 90 | ||
| 80 | 10 | 90 | 100 |
完成於時間 60,而 在時間 70 才建立,因此處理器在時間 60 至 70 間閒置。這段閒置時間不算任何程序的等待時間。
總等待時間為:
第 22 題3 分
Assuming that is an array and is a pointer pointing to the first element of that array and no errors are encountered during the compilation. What expression refers to the address of the element?
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言的陣列索引、指標運算與取址運算子:
- 陣列第 個元素若採一般人類使用的「第 1 個、第 2 個……」編號,對應的 C 語言索引為 。
t[k-1]表示第 個元素的值。&t[k-1]表示第 個元素的記憶體位址。*是「取出指標所指向的值」。&是「取得變數或陣列元素的位址」。
C 語言陣列索引從 開始,因此:
其位址為:
解題方法
將「第 個元素」轉換成 C 語言的索引:
題目問的是「address」,也就是位址,因此必須對該元素使用取址運算子 &:
所以正確選項為:
若以指標表示,陣列名稱 t 在運算式中通常會退化為指向第一個元素的指標,因此也有:
這表示從陣列首元素位址向後位移 個元素,所得即為第 個元素的位址。
選項分析
(A) *(t+k)
t+k 表示從陣列第一個元素的位址向後移動 個元素,指向索引為 的元素。
再使用 *:
這個運算式取得的是元素的「值」,不是元素的位址。而且若題目採第 個元素的一般編號,正確位移應為 ,因此錯誤。
(B) &tPtr[k]
由於 tPtr 指向陣列第一個元素,C 語言中:
因此:
第 23 題3 分
What is the role of an operating system’s “scheduler” and how does it contribute to the efficient execution of processes?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統(Operating System, OS)中「排程器」(scheduler)的功能。
排程器的主要工作,是在多個可執行程序(process)或執行緒(thread)之間,決定哪一個程序取得 CPU,以及取得 CPU 的先後順序與時間長度。其目的包括:
- 提高 CPU 使用率
- 增加系統吞吐量
- 降低程序的等待時間與周轉時間
- 維持使用者感受到的快速回應
- 確保不同程序能公平或依優先權取得處理資源
常見的 CPU 排程演算法包括:
- First-Come, First-Served(FCFS)
- Shortest Job First(SJF)
- Round Robin(RR)
- Priority Scheduling
- Multilevel Feedback Queue
嚴格而言,排程器最直接管理的是 CPU 時間;記憶體與周邊裝置則分別由記憶體管理、I/O 管理等作業系統機制負責。不過在考試的廣義敘述中,排程器屬於作業系統資源管理機制的一部分,因此官方答案將「CPU time、memory、peripherals」統合為系統資源配置,選定 B。
解題方法
判斷本題的關鍵,是辨識 scheduler 的核心動詞:
決定程序如何取得與使用系統資源,尤其是 CPU。
當多個程序同時處於可執行狀態時,CPU 一次只能執行有限數量的指令。排程器會根據排程策略選擇下一個執行的程序。例如 Round Robin 會讓每個程序輪流使用固定時間片:
這種安排可以避免單一程序長時間占用 CPU,提升多工環境下的整體效率與回應能力。
選項 B 提到「控制系統資源的配置」,且明確包含 CPU time,符合排程器在作業系統中的資源分配角色,因此選 B。
選項分析
(A) 錯誤
The scheduler is responsible for managing input/output operations within the operating system...
此敘述主要描述 I/O 管理(input/output management)的工作,例如:
- 磁碟讀寫
- 鍵盤與滑鼠輸入
- 印表機輸出
- 裝置驅動程式與周邊設備溝通
- I/O buffer 與 interrupt 的處理
排程器可能會因為程序等待 I/O 而重新安排 CPU,但這不代表排程器的主要職責是直接管理所有 I/O 操作。因此 A 將 scheduler 與 I/O 管理混淆。
(B) 正確
It controls the allocation of system resources, such as CPU time, memory, and peripherals, to different processes...
第 24 題3 分
Consider the following Python code. What is the content of the stack after the program execution?
stack = [5, 8, 1, 2, 9]
x = stack.pop()
stack.append('5')
stack.append(x)
登入後即可作答並保存紀錄。
核心觀念
本題考查 Python list 模擬堆疊(stack)時的基本操作:
pop:移除並回傳串列最後一個元素。append(value):將元素加入串列尾端。- Python 中整數
5與字串'5'是不同資料:
原始串列為:
其中最後一個元素 是 pop 會處理的對象。
解題方法與逐步追蹤
依照程式碼逐行執行:
第 1 行
stack = [5, 8, 1, 2, 9]
此時:
stack = [5, 8, 1, 2, 9]
第 2 行
x = stack.pop
pop 移除串列最後一個元素 ,並將該元素指定給變數 x。
因此:
x = 9
stack = [5, 8, 1, 2]
第 3 行
stack.append('5')
將字串 '5' 加到串列尾端:
stack = [5, 8, 1, 2, '5']
此處加入的是字串 '5',不是整數 。
第 4 行
stack.append(x)
由於前面已知:
x = 9
因此將整數 加到串列尾端:
stack = [5, 8, 1, 2, '5', 9]
所以程式執行完畢後,stack 的內容為:
選項分析
(A)
錯誤。
此選項同時出現兩個問題:
pop移除的是最後一個元素 ,不是第一個元素 。append(x)加入的是被取出的 ,不是 。
這是把串列誤當成從前端取出元素,並誤判變數 x 的值。
第 25 題3 分
Which one of the following statements about TCP/IP networks is NOT correct?
登入後即可作答並保存紀錄。
核心觀念
本題考查 IPv4 位址的結構、Classful Networking(有級別網路)以及 subnet broadcast address 的判定方式。
IPv4 位址共有 32 bits,通常分成:
在傳統 Class C 網路中:
- 網路部分:24 bits
- 主機部分:8 bits
- 每個網路的總位址數:
但主機部分全為 0 與全為 1 的位址具有特殊用途:
- Host bits 全為 0:Network address
- Host bits 全為 1:Broadcast address
因此可實際分配給主機的位址數為:
解題方法
判斷各選項是否正確時,掌握三個關鍵:
- IPv4 位址長度是否為 32 bits。
- IP 位址是否可分為 network portion 與 host portion。
- Class C 的 8 個 host bits 是否能全部分配給主機。
Class C 網路範例:
其位址範圍為:
其中:
- :Network address
- :Broadcast address
- 至 :可分配給主機
所以可用主機位址數為:
而不是 256。
選項分析
(A) Each host is assigned a unique IP address.
此敘述在基本 TCP/IP 網路模型下正確。
每一台主機在同一個網路範圍內,必須具有唯一的 IP address,才能正確識別來源與目的地,避免封包無法判斷應送往哪一台主機。
補充而言,實際網際網路中可能透過 NAT 讓多台內部主機共用同一個公有 IP,但這不影響本題採用的基本網路觀念。
(B) IPv4 addresses consist of 32 bits.
此敘述正確。
IPv4 位址長度固定為 32 bits,通常分成 4 個 octets,每個 octet 為 8 bits,以十進位表示,例如:
其二進位形式由四組 8 bits 組成:
因此:
(C) A class C network has 256 useable addresses which can be assigned to host machines.
此敘述錯誤,為本題答案。
Class C 網路的 host portion 有 8 bits,因此總位址數為:
但其中兩個位址不能分配給一般主機:
第 26 題3 分
Given the following program in C++. Which statement is correct?
#include <iostream>
using namespace std;
int count = 0;
int binarySearch(int a[], int l, int r, int x){
while (l <= r){
count++;
int mid = l + (r - l) / 2;
if (a[mid] == x) return mid;
if (a[mid] < x) l = mid + 1;
else r = mid - 1;
}
return -1;
}
int main(){
int a[10] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
int target = 23;
int result = binarySearch(a, 0, 9, target);
cout << count;
return 0;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- Binary Search(二分搜尋法)的搜尋流程
- 陣列索引與中間位置
mid的計算 - 搜尋區間如何依比較結果縮小
- 迴圈執行次數的追蹤
- 二分搜尋法的時間與空間複雜度
二分搜尋法要求資料必須按照遞增或遞減順序排列。本題陣列為遞增排序:
mid 的計算方式為:
在 C++ 的整數運算中,小數部分會被捨去。
解題方法與逐步追蹤
初始呼叫:
binarySearch(a, 0, 9, 23);
因此初始搜尋範圍為索引 到 。
| 次數 | a[mid] | 比較結果 | 下一步 | |||
|---|---|---|---|---|---|---|
| 1 | 0 | 9 | 16 | 往右側搜尋, | ||
| 2 | 5 | 9 | 56 | 往左側搜尋, | ||
| 3 | 5 | 6 | 23 | 找到目標 | 回傳索引 5 |
每進入一次 while 迴圈,就會執行:
count++;
因此迴圈共執行 次,最後:
程式輸出:
3
選項分析
(A) The value of variable count is 2 at the end of the program’s execution.
錯誤。
搜尋過程需要檢查索引 、、,共執行三次迴圈,因此:
不是 。
(B) During the first execution of binarySearch, the variable mid is 5.
錯誤。
第一次迴圈執行時:
第 27 題3 分
Which one of the following statements is correct?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統中的三個基本觀念:
- Device driver(裝置驅動程式):負責讓作業系統以統一方式控制不同的周邊裝置。
- System call(系統呼叫):使用者程式向作業系統請求硬體或核心服務的介面。
- Privileged instruction(特權指令):只能由核心模式執行、一般使用者程式不可直接執行的指令,例如直接控制 I/O 硬體的指令。
本題依一般作業系統教科書與考試慣例判定,(A)、(B)、(C) 皆正確,因此選擇 (E)。
解題方法
逐一判斷 (A)、(B)、(C) 三個敘述:
- 若 (A)、(B)、(C) 全部正確,則 (D)「(A) and (C)」也正確。
- 選項 (E) 為「All of the above」,表示前述 (A)~(D) 全部正確。
- 因此關鍵在於確認 (A)、(B)、(C) 是否成立。
選項分析
(A) All peripheral devices need a device driver to communicate with the operating system.
正確。
不同周邊裝置的硬體介面與控制方式不同,例如鍵盤、磁碟、網路卡、印表機各有不同的暫存器、通訊協定與操作流程。作業系統通常透過裝置驅動程式,將這些硬體細節封裝起來,使上層程式能以統一介面使用裝置。
其基本關係可表示為:
因此,在本題採用的標準定義下,周邊裝置需要透過 device driver 與作業系統溝通。
補充而言,實務上有些裝置會共用 generic driver(通用驅動程式),或由作業系統內建驅動程式;這並不代表不需要驅動程式,只是使用者不一定會看到獨立的驅動程式檔案。
(B) The I/O functions, such as scanf and printf in C, eventually invoke system calls to perform I/O.
正確。
scanf 與 printf 是 C standard library 提供的函式,屬於使用者空間的函式。它們本身不能直接操作硬體,而是經過函式庫與作業系統的 I/O 介面,最後透過 system call 請求核心執行輸入或輸出。
概念流程如下:
例如,printf 可能先將資料放入標準輸出緩衝區,之後由函式庫呼叫類似 write 的系統呼叫;核心再交由相應的裝置驅動程式處理。
輸入時,scanf 也會透過標準輸入取得資料,必要時呼叫類似 read 的系統呼叫。
第 28 題3 分
Cloud computing has been adopted in businesses, and service providers provide different types of cloud services. Which one of the following statements is NOT correct?
登入後即可作答並保存紀錄。
核心觀念
本題考查雲端運算中的虛擬化技術、Hypervisor、SaaS 與 Container 的基本定義。
雲端服務通常建立在虛擬化與資源共享技術上,透過軟體將實體硬體資源抽象化,再依需求提供給使用者。常見概念如下:
- Virtual Machine, VM(虛擬機器):由軟體模擬出一台具有虛擬 CPU、記憶體、儲存設備與網路介面的電腦。
- Hypervisor(虛擬機器監視器):負責建立、執行與管理虛擬機器,並分配實體 CPU、記憶體、儲存與網路資源。
- SaaS(Software as a Service):雲端服務的一種類型,使用者直接透過網路使用軟體,不必自行安裝與維護底層系統。
- Container(容器):將應用程式及其執行所需的相依套件封裝在一起,但通常共享主機作業系統核心。
本題要求找出 NOT correct 的敘述,因此要辨認哪一個選項違反上述定義。
解題方法
判斷每個選項是否符合雲端運算與虛擬化的標準定義:
- 虛擬機器是否為雲端運算的重要技術?
- Hypervisor 是否負責虛擬資源管理?
- SaaS 是否屬於雲端服務模型?
- Container 是否為包含可執行程式及相依套件的軟體封裝?
- 虛擬機器究竟是對什麼對象進行抽象化?
前四項均符合標準概念;第五項將虛擬機器描述成「純軟體系統的抽象化」,未正確表達虛擬機器的本質,因此依官方答案選 E。
選項分析
(A) Virtual machine is an enabling technology of cloud computing.
正確。
虛擬機器是雲端運算的重要基礎技術之一。雲端服務提供者可在同一台實體伺服器上建立多台虛擬機器,讓不同使用者共享硬體資源,同時維持彼此的隔離。
例如,一台實體伺服器可以透過 Hypervisor 分割出多個 VM,每個 VM 都能執行自己的作業系統與應用程式。這種方式能提高硬體使用率,並支援雲端常見的彈性配置、快速建立與資源調整。
因此,VM 確實是促成雲端運算的重要技術。
(B) Hypervisors offer resource management for users to monitor the usage of computing resources.
正確。
Hypervisor 的核心功能包括:
- 建立與刪除虛擬機器
- 分配與回收 CPU、記憶體、儲存空間及網路資源
- 控制不同虛擬機器之間的資源使用
- 維持虛擬機器與實體主機之間的隔離
Hypervisor 會追蹤虛擬機器的資源使用情形,雲端管理平台再將這些資訊呈現給管理者或使用者,用於監控 CPU 使用率、記憶體使用量、磁碟容量與網路流量。
嚴格而言,「讓使用者監控資源」通常由雲端管理介面或監控系統負責,Hypervisor 的直接職責是資源管理與隔離;但就整體雲端架構而言,Hypervisor 提供資源管理與使用量資訊的基礎,因此本選項可視為正確。
(C) SaaS is one type of cloud computing.
正確。
SaaS 是雲端服務模型之一。常見的雲端服務模型包括:
第 29 題3 分
Consider the following code in C. If the input sequence is , what is the output of the final position and its value?
int main()
{
int board[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
int control, x = 1, y = 1;
while(1) {
scanf("%d", &control);
if(control < 0 || control > 3) break;
switch(control){
case 0: y--; break;
case 1: y++; break;
case 2: x--; break;
case 3: x++; break;
}
}
printf("position=[%d][%d], ", y, x);
printf("value=%d", board[y][x]);
return 0;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- C 語言陣列採用 從 0 開始的索引。
- 二維陣列
board[y][x]中,第一個索引代表列,第二個索引代表欄。 switch-case依據輸入值改變座標。while(1)是無限迴圈,遇到control < 0 || control > 3時執行break結束迴圈。scanf("%d", &control)會依序讀取輸入序列。
初始陣列與座標如下:
初始位置為:
因此一開始位於 board[1][1],數值為 。
解題方法與逐步追蹤
程式中各控制值的作用為:
control | 執行動作 |
|---|---|
0 | y--,列座標減少 1 |
1 | y++,列座標增加 1 |
2 | x--,欄座標減少 1 |
3 | x++,欄座標增加 1 |
| 小於 0 或大於 3 | 執行 break,結束迴圈 |
輸入序列為 :
輸入 control | 動作 | 執行後座標 |
|---|---|---|
y-- | ||
x++ | ||
y++ | ||
小於 0,執行 break |
最後程式輸出:
printf("position=[%d][%d], ", y, x);
printf("value=%d", board[y][x]);
注意輸出位置的順序是先印 y,再印 x,因此:
而:
所以完整輸出為:
position=[1][2], value=6
第 30 題3 分
Suppose that floating-point instructions are improved with a speedup of tenfold, i.e., speedup . Only 20% of actual instructions are floating-point instructions. What is the overall speedup?
登入後即可作答並保存紀錄。
核心觀念
本題考查 Amdahl’s Law(阿姆達爾定律),用來計算只有部分工作獲得加速時,整體系統的速度提升倍數。
公式為:
其中:
- :可被改進部分所占比例
- :該部分的 speedup
- :未被改進部分所占比例
題目給定浮點指令占 ,因此 ;浮點指令 speedup ,因此 。
解題方法
未改善的非浮點指令占:
浮點指令改善後,原本占總執行時間比例的 變為:
改善後的總執行時間比例為:
因此整體 speedup 為:
所以正確答案為:
選項分析
- (A) 1.22:正確
依 Amdahl’s Law:
- (B) 5:錯誤
這是將浮點指令 speedup 與占比 進行不當平均所產生的結果。整體 speedup 不能直接用 或類似方式計算,因為未改善的 工作仍限制整體效能。
第 31 題3 分
Which one of the following is correct memory hierarchy?
登入後即可作答並保存紀錄。
核心觀念
本題考查電腦的 記憶體階層(memory hierarchy),主要依據各層儲存裝置的:
- 存取速度
- 容量大小
- 單位儲存成本
- 與處理器的距離
一般而言,越靠近 CPU 的儲存單元,存取速度越快、容量越小、成本越高;越遠離 CPU,速度越慢、容量越大、成本越低。
由快到慢的典型記憶體階層為:
其中:
-
Register(暫存器)
位於 CPU 內部,供處理器直接使用,速度最快,容量最小。 -
Cache(快取記憶體)
通常由 SRAM 組成,位於 CPU 與主記憶體之間,用來暫存近期或常用資料,速度僅次於暫存器。 -
DRAM(Dynamic Random-Access Memory)
即通常所稱的主記憶體,容量較大,但速度慢於 Cache,且屬於揮發性記憶體。 -
Hard Drive(硬碟)
屬於次級儲存裝置,容量大、成本低,但存取速度遠慢於主記憶體,且為非揮發性儲存。
解題方法
判斷記憶體階層時,依「距離 CPU 由近到遠」或「存取速度由快到慢」排列即可:
因此正確順序為:
選項分析
(A) Register cache DRAM hard drive
正確。
此選項符合標準記憶體階層,由存取速度最快的 Register 開始,依序經過 Cache、DRAM,最後是速度最慢但容量最大的硬碟。
(B) Cache register DRAM hard drive
錯誤。
第 32 題3 分
Which one of the following statements about DDoS (distributed denial of service) attacks is NOT correct?
登入後即可作答並保存紀錄。
核心觀念
DDoS(Distributed Denial of Service,分散式阻斷服務攻擊)的主要目標是破壞資訊系統的「可用性(availability)」:攻擊者利用大量來源同時傳送請求或封包,使伺服器、網路頻寬、連線表、CPU、記憶體等資源被耗盡,正常使用者因此無法取得服務。
資訊安全常以 CIA triad 表示三項核心目標:
- Confidentiality:機密性,防止資料遭未授權取得。
- Integrity:完整性,防止資料遭未授權竄改。
- Availability:可用性,確保合法使用者能正常使用服務。
DDoS 的典型重點在於「服務中斷」與「資源耗盡」,不是直接竊取使用者資料。
解題方法
本題問的是 NOT correct,應先確認 DDoS 的攻擊目的,再逐項判斷:
- 是否與破壞服務可用性有關?
- 是否透過大量流量、連線或請求耗盡系統資源?
- 是否屬於常見的 DDoS 攻擊技術?
- 是否把「阻斷服務」誤認為「竊取資料」?
符合 DDoS 定義與常見技術者為正確敘述;把 DDoS 的主要目的說成資料竊取者,為錯誤敘述。
選項分析
(A) DDoS is a type of attacks that compromise availability.
正確。DDoS 的主要效果是讓合法使用者無法正常連線或使用服務,因此直接影響系統的可用性。
例如網站伺服器遭大量惡意請求淹沒,即使伺服器上的資料沒有被修改或洩漏,使用者仍可能無法開啟網頁。這正是可用性遭破壞的情形。
(B) SYN flooding is a DDoS attack.
正確。SYN flooding 利用 TCP 三向交握的特性,向伺服器大量送出 SYN 封包,卻不完成後續的連線程序,使伺服器保留大量半開連線,消耗連線佇列與系統資源。
基本流程如下:
- 攻擊者送出 SYN。
- 伺服器回覆 SYN-ACK,等待最後的 ACK。
- 攻擊者不回覆 ACK,或使用大量來源持續發送 SYN。
- 伺服器的半開連線資源逐漸耗盡,正常連線受到影響。
嚴格分類時,SYN flooding 是一種攻擊機制;當攻擊流量由多台受控主機同時發出,即屬於 DDoS。本題依一般教材的廣義用法,將 SYN flooding 視為 DDoS 類型,故此項正確。
第 33 題3 分
Which one of the following statements about cryptographic hash functions is correct?
登入後即可作答並保存紀錄。
核心觀念
Cryptographic hash function(密碼雜湊函數)將任意長度的輸入訊息,經過固定演算法轉換為固定長度的摘要值:
其中:
- :原始訊息
- :雜湊函數
- :message digest(訊息摘要)
密碼雜湊函數通常具有以下特性:
- 單向性:由 計算 很容易,但由 反推出 很困難。
- 固定輸出長度:不論輸入多長,輸出摘要長度固定。
- 多對一性:不同輸入可能產生相同摘要,因此碰撞(collision)在數學上必然存在。
- 碰撞抗性:實務上難以刻意找出兩個不同訊息,使其雜湊值相同。
- 完整性驗證:訊息或軟體內容稍有修改,摘要值通常會大幅改變。
解題方法
本題可依序判斷各敘述是否符合雜湊函數的功能:
- 是否能隱藏訊息內容?涉及機密性。
- 是否因輸入與輸出空間不同而產生碰撞?涉及多對一函數。
- 是否能結合秘密金鑰進行訊息認證?涉及 HMAC。
- 是否能透過比對摘要驗證軟體是否被竄改?涉及完整性。
只有符合雜湊函數定義與應用的敘述才能選入。
選項分析
(A) Hash provides message confidentiality.
錯誤。
Hash 的主要功能是產生訊息摘要,不是加密。雜湊函數通常具有單向性,但「難以還原」不等於「提供機密性」。
例如,密碼經過雜湊後,系統可用雜湊值驗證輸入是否正確,但雜湊本身不是用來讓訊息內容能夠被合法接收者解密還原。
提供訊息機密性應使用 encryption,例如:
- 對稱式加密:AES
- 非對稱式加密:RSA、ECC
因此,Hash 不直接提供 message confidentiality。
(B) Hash is many-to-one function, so collision may happen.
正確。
雜湊函數的輸入可以是任意長度,但輸出長度固定。假設輸入集合無限大,而輸出只有有限種:
輸出總數只有:
因此,必然存在不同的訊息 與 ,使得:
但:
這種情形稱為 collision(碰撞)。
密碼雜湊函數的要求不是「碰撞絕對不會發生」,而是讓攻擊者難以有效率地找出碰撞。因此本選項正確。
(C) Hash can be used as a message authentication code.
正確,但須理解其完整意義。
單獨使用公開的雜湊函數,例如:
第 34 題3 分
What is the output of the following C code?
#include <stdio.h>
int main()
{
int a[8] = {6, 7, 7, 9, 8, 1, 3, 2};
int b[8] = {1, 1, 1, 1, 1, 1, 1, 1};
for (int i = 0; i < 8; i++) {
b[a[i]-1] = b[a[i]-1] + 1;
}
printf("%d", b[6]);
return 0;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言的:
- 陣列索引從 開始。
a[i]-1將數值 轉換為陣列b的索引。- 透過計數陣列統計各數字出現的次數。
- 陣列元素的累加更新。
程式中的更新式為:
b[a[i]-1] = b[a[i]-1] + 1;
若 a[i] = 7,則存取:
b[7-1] = b[6];
因此,b[6] 用來計算數值 在陣列 a 中出現的次數;但 b[6] 初始值為 ,所以最後值為「出現次數加 」。
解題方法與逐步追蹤
初始陣列為:
逐一處理 a[i]:
a[i] | 更新的元素 | 更新後的 b | |
|---|---|---|---|
| 0 | 6 | b[5]++ | [1,1,1,1,1,2,1,1] |
| 1 | 7 | b[6]++ | [1,1,1,1,1,2,2,1] |
| 2 | 7 | b[6]++ | [1,1,1,1,1,2,3,1] |
| 3 | 9 | b[8]++ | 超出陣列範圍 |
| 4 | 8 | b[7]++ | 依標準 C 語言而言,前一行已產生未定義行為 |
| 5 | 1 | b[0]++ | — |
| 6 | 3 | b[2]++ | — |
| 7 | 2 | b[1]++ | — |
依題目官方答案的命題意圖,重點是計算 b[6]:
a[1] = 7,使b[6]增加 。a[2] = 7,使b[6]再增加 。b[6]初始值為 。
因此:
程式輸出:
3
C 語言標準上的爭議點
陣列 b 只有索引 至 :
第 35 題3 分
Which of the following arithmetic is NOT allowed on pointers?
登入後即可作答並保存紀錄。
核心觀念
本題考查 C/C++ 的「指標算術」(pointer arithmetic)。指標的加減不是單純以位元組為單位,而是以所指向資料型別的大小為單位:
常見且合法的指標算術包括:
- 指標加上整數
- 指標減去整數
- 指標遞增或遞減
- 兩個指向同一陣列的同型別指標相減
其中,指標相減的結果代表兩個元素之間相隔幾個元素,型別通常為 ptrdiff_t。
解題方法
判斷每個選項是否屬於合法的指標算術形式:
p++、p--p + np - np1 - p2
若四種形式皆可使用,則「以上皆非」才是正確答案。
必須注意,指標算術具有使用條件:指標通常必須指向同一陣列中的元素,或指向陣列尾端的 one-past-the-end 位置。若超出此範圍,程式行為可能未定義;但這不代表該種算術形式本身不被允許。
選項分析
(A) Increment/Decrement of a pointer
正確。指標可以遞增或遞減:
int a[3] = {10, 20, 30};
int *p = a;
p++; // 從 a[0] 移到 a[1]
p--; // 從 a[1] 移回 a[0]
若 p 指向 a[0],執行 p++ 後會指向 a[1]。移動的位元組數為:
因此,指標遞增與遞減都是合法操作。
(B) Addition of integer to a pointer
正確。指標可以加上整數:
int a[5] = {0, 1, 2, 3, 4};
int *p = a;
int *q = p + 3; // q 指向 a[3]
若 p 指向 a[0],則:
這不是增加 3 個位元組,而是向後移動 3 個 int 元素。
(C) Subtraction of integer to a pointer
正確。指標可以減去整數:
第 36 題3 分
Let the height of a tree be the number of nodes, including root node, along the longest path from the root node to the leaf nodes. Consider the integers in a specified order to construct a binary search tree. Which of the following statement is TRUE?
登入後即可作答並保存紀錄。
核心觀念
本題考查二元搜尋樹(Binary Search Tree, BST)的建立規則與樹高、葉節點、內部節點、父子關係的判定。
建立 BST 時,依指定順序逐一插入:
- 小於目前節點:往左子樹走。
- 大於目前節點:往右子樹走。
- 沿路找到空位置後插入。
- 題目將樹高定義為根節點到最深葉節點路徑上的「節點數」。
相關定義:
- 葉節點(leaf node):沒有子節點。
- 內部節點(internal node):至少有一個子節點。
- 子節點(child node):直接連接在某節點下方的節點。
解題方法
依序插入
逐步判斷如下:
- 插入 :成為根節點。
- 插入 :,放在 的左側。
- 插入 :,往左至 ;,放在 的左側。
- 插入 :,放在 的右側。
- 插入 :,往左至 ;,往左至 ;,放在 的右側。
- 插入 :,往右至 ;,放在 的右側。
- 插入 :依序判斷 、、,放在 的右側。
- 插入 :依序判斷 、、、,放在 的右側。
- 插入 :、,但 ,放在 的左側。
- 插入 :、、,放在 的左側。
因此 BST 為:
42
/ \
37 58
/ \
12 74
/ \ / \
11 31 66 86
\
98
最長根葉路徑為
共有 個節點,所以樹高為 。
選項分析
(A) The height of the tree is 4.
錯誤。
最長路徑是
第 37 題3 分
What kind of method is NOT for the authentication of a user ID?
登入後即可作答並保存紀錄。
核心觀念
本題考查「使用者身分驗證(authentication)」與「人機辨識(CAPTCHA)」的差異。
Authentication 是確認「登入者是否為其所聲稱的使用者」,常見驗證因素包括:
- 所知之事(Something you know):Password
- 所持之物(Something you have):手機、驗證器、SMS OTP
- 本人特徵(Something you are):Biometrics
CAPTCHA 的全名是 Completely Automated Public Turing test to tell Computers and Humans Apart,主要功能是辨識操作者是人類還是自動化程式,目的在防止機器人濫用,不是確認使用者的真實身分。
解題方法
逐一判斷各選項是否能用來確認「這個人是不是該 User ID 的合法持有人」:
- 若能驗證使用者的身分,屬於 authentication method。
- 若只是在判斷使用者是人類還是機器,並未確認其身分,便不屬於 user ID authentication。
- 找出唯一不符合身分驗證目的的選項。
因此,CAPTCHA 是本題所問的「不是用於使用者身分驗證的方法」。
選項分析
(A) CAPTCHA:正確
CAPTCHA 透過辨識圖片、輸入文字、勾選「我不是機器人」等挑戰,判斷操作者是否為人類。
它只能回答:
操作者比較像人類,還是自動化程式?
它無法回答:
操作者是不是 User ID
A123456的合法使用者?
因此,CAPTCHA 的主要用途是防止機器人註冊、暴力嘗試登入、垃圾留言與大量請求,並非驗證 User ID 所屬者的身分。
(B) SMS OTP:錯誤
SMS OTP 是透過簡訊傳送一次性密碼(One-Time Password)。使用者登入時,除了輸入帳號與密碼,還要輸入傳送至已綁定手機的驗證碼。
這屬於「所持之物」的驗證因素,因為系統假設合法使用者持有已註冊的手機。因此,SMS OTP 是一種身分驗證方法。
第 38 題3 分
A hospital wants to establish a data center for storing all electronic medical records (EMRs). It is required to guarantee the confidentiality of the EMRs to prevent from unauthorized access. Which one of the following algorithms is more suitable to be used to guarantee the confidentiality of EMRs?
登入後即可作答並保存紀錄。
核心觀念
本題考查「資訊安全中的加密技術」,尤其是:
- 機密性(confidentiality):只有授權者能讀取資料。
- 對稱式加密(symmetric-key encryption):加密與解密使用同一把金鑰。
- 非對稱式加密(asymmetric-key encryption):使用公鑰與私鑰。
- 數位簽章(digital signature):主要用於驗證身分、完整性與不可否認性。
- 安全通訊協定(secure communication protocol):結合多種密碼技術,保護傳輸過程。
電子病歷通常具有資料量大、需要長期儲存及頻繁存取等特性,因此適合使用速度快、適合大量資料加密的對稱式加密演算法。
解題方法
判斷各選項是否為「適合直接加密大量電子病歷資料的加密演算法」。
電子病歷儲存在資料中心時,常見做法是:
- 產生一把 AES 金鑰。
- 使用 AES 對電子病歷內容進行加密。
- 使用適當的金鑰管理機制保護 AES 金鑰。
- 授權使用者取得金鑰後,才能解密資料。
AES 屬於對稱式區塊加密法,具有運算速度快、適合大量資料及硬體支援良好等優點,因此最適合作為電子病歷儲存資料的加密演算法。
選項分析
(A) AES:正確
AES(Advanced Encryption Standard)是對稱式區塊加密演算法。
其特色包括:
- 使用同一把金鑰進行加密與解密。
- 區塊大小固定為 bits。
- 金鑰長度可為 、 或 bits。
- 適合加密大量資料,例如電子病歷、資料庫、檔案及磁碟內容。
- 執行速度快,實務上常搭配 GCM 等模式,以同時提供機密性與完整性。
AES 的基本流程可概念化為:
解密時:
因此,若題目要求選出最適合用來保護大量電子病歷機密性的演算法,答案為 AES。
就資料量 而言,AES 需逐一處理資料區塊,其時間複雜度可視為:
其內部工作狀態及單一區塊處理所需的額外空間為固定大小,可視為:
(B) RSA:錯誤
RSA 是非對稱式加密演算法,使用公鑰與私鑰:
- 公鑰:可公開,用於加密。
- 私鑰:必須保密,用於解密。
RSA 確實具備加密功能,在特定情況下可用來保護機密性,例如加密 AES 金鑰。然而,RSA 不適合直接加密大量電子病歷,原因包括:
- RSA 的運算速度比 AES 慢。
- RSA 可處理的單次資料長度受到金鑰大小及填充格式限制。
- 大量資料直接使用 RSA 加密,效率與成本較差。
實務上常採用「混合式加密」:
- 使用 AES 加密大量電子病歷。
- 使用 RSA 公鑰加密 AES 金鑰。
- 授權者使用 RSA 私鑰解開 AES 金鑰。
- 再使用 AES 金鑰解密電子病歷。
第 39 題3 分
The following code in C program
char str[] = "NSYSU";
is equivalent to which of the following option?
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言的「字串常值」與「字元陣列初始化」。
程式碼:
char str[] = "NSYSU";
其中 "NSYSU" 是字串常值,包含 5 個可見字元:
'N' 'S' 'Y' 'S' 'U'
C 語言會在字串結尾自動加入空字元 '\0',因此實際初始化內容為:
'N', 'S', 'Y', 'S', 'U', '\0'
所以陣列需要 6 個 char 元素。
等價寫法為:
char str[] = {'N', 'S', 'Y', 'S', 'U', '\0'};
因此正確答案是 (E)。
解題方法
判斷字串陣列是否等價,可依照以下步驟:
第一步:計算可見字元數
"NSYSU" 包含:
第二步:補上字串結尾符號
C 語言字串必須以 '\0' 結尾,因此陣列內容為:
第三步:比對選項
正確的等價表示法必須同時具備:
- 型別為
char陣列; - 包含
N、S、Y、S、U; - 最後包含
'\0'; - 陣列大小能容納全部 6 個元素。
只有選項 (E) 完全符合。
記憶體配置與逐步追蹤
原始程式碼:
char str[] = "NSYSU";
編譯器會推導陣列大小:
char str[6] = {'N', 'S', 'Y', 'S', 'U', '\0'};
陣列內容可表示如下:
| 索引 | 儲存內容 |
|---|---|
str[0] | 'N' |
str[1] | 'S' |
str[2] | 'Y' |
str[3] | 'S' |
str[4] | 'U' |
str[5] | '\0' |
因此:
printf("%s", str);
會從 str[0] 開始輸出,直到遇到 '\0' 為止,結果為:
NSYSU
若缺少 '\0',該陣列就不具備完整 C 字串的結尾標記,使用 %s 輸出時可能持續讀取陣列外的記憶體,造成未定義行為。
選項分析
(A) char str[] = {'N', 'S', 'Y', 'S', 'U'};
錯誤。
此寫法建立的陣列只有 5 個元素:
第 40 題3 分
In Python statement, which of the following is error?
登入後即可作答並保存紀錄。
核心觀念
本題考查 Python 中的:
- 資料型別:
int整數與str字串。 - 運算子
+的型別規則。 - 型別轉換函式
int與str。 print對運算結果的輸出。
在 Python 中,+ 必須依據運算元的資料型別執行相容的運算:
- 整數
+整數:數值相加。 - 字串
+字串:字串串接。 - 整數
+字串:無法直接運算,會產生TypeError。
解題方法
逐一判斷每個選項中,+ 左右兩側的資料型別。
若兩側型別相同且符合運算規則,程式可正常執行;若一側是整數、另一側是字串,則會發生型別錯誤。
選項分析
(A) print(23 + "67")
23的型別是int。"67"的型別是str。- 運算式變成:
Python 不會自動將 "67" 轉換成整數,因此無法執行整數加字串。
實際執行時會產生類似下列錯誤:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
因此本選項是錯誤的 Python 敘述,也是本題答案。
(B) print(23 + int("67"))
先執行型別轉換:
int("67")
字串 "67" 被轉換為整數 67,因此原式等同於:
print(23 + 67)
計算結果為:
最後輸出:
90
此敘述可正常執行。
(C) print(str(23) + "67")
先執行:
str(23)
整數 23 被轉換為字串 "23",因此原式等同於:
print("23" + "67")
兩側都是字串,+ 會進行字串串接:
第 41 題3 分
Which of the following represents a disadvantage of using a Star topology in networking?
登入後即可作答並保存紀錄。
核心觀念
本題考查網路拓撲(network topology),尤其是 Star topology(星狀拓撲)的結構特性與缺點。
星狀拓撲的所有終端裝置,例如電腦、印表機或伺服器,都以獨立連線連接至中央設備:
- 傳統網路常使用 hub。
- 現代乙太網路多使用 switch。
- 任兩台終端裝置之間的資料,通常必須經過中央設備轉送。
其主要優點包括:
- 新增或移除節點容易。
- 單一終端裝置或單一連線故障,不會影響其他節點。
- 故障範圍容易定位。
- 網路管理較集中。
其最重要的缺點是中央設備具有關鍵性。中央設備一旦故障,整個星狀網路的通訊都會受到影響。
解題方法
判斷網路拓撲的缺點時,先找出該拓撲的「核心依賴點」。
星狀拓撲的核心依賴點是中央 hub 或 switch:
因此:
- 單一周邊節點故障:通常只影響該節點。
- 中央設備故障:可能使整個網路無法正常通訊。
「中央設備故障會造成整體網路中斷」正是 single point of failure(單一故障點)的定義,因此選擇 (B)。
選項分析
(A) Limited scalability
錯誤。星狀拓撲通常具有良好的擴充性,新增節點時只需將新裝置連接至中央 switch 或 hub,不必重新配置整條網路。
其擴充確實受到中央設備連接埠數量限制,但可以透過增加 switch、使用多層交換器或進行分層架構來擴充。因此「擴充性有限」不是本題最具代表性的缺點。
(B) Single point of failure
正確。中央設備是星狀拓撲的單一關鍵點。若中央 hub 或 switch 故障,連接於其上的各節點便無法正常互相通訊,整體網路可能中斷。
這符合 single point of failure 的意義:
因此本選項為官方答案。
第 42 題3 分
Which of the following technique can NOT avoid overfitting problem?
登入後即可作答並保存紀錄。
核心觀念
本題考查機器學習中的「過度擬合」(overfitting)與模型正則化方法。
過度擬合是指模型過度學習訓練資料中的細節、雜訊或偶然特徵,導致:
- 訓練資料上的誤差很低;
- 未見過的驗證資料或測試資料上的表現變差;
- 模型的泛化能力(generalization ability)不足。
避免過度擬合的基本方向包括:
- 降低模型複雜度;
- 限制模型參數;
- 提早停止訓練;
- 隨機停用部分神經元;
- 使用交叉驗證選擇合適模型。
解題方法
判斷各選項是否能避免 overfitting,核心在於觀察該方法對「模型複雜度」或「有效訓練程度」的影響。
- 若方法能限制模型學習能力、降低參數自由度,通常有助於避免 overfitting。
- 若方法增加神經網路層數或神經元數量,通常會提高模型容量,使模型更容易記住訓練資料,因此不能視為避免 overfitting 的方法。
因此,逐一檢視後,答案為增加神經網路層數或每層單元數量的選項。
選項分析
(A) Increasing layers / number of units per layer of the neural networks
正確答案。
增加神經網路的層數,或增加每層的神經元數量,會提高模型的參數數量與表達能力,使模型容量(model capacity)變大。
模型容量越大,能表示的函數種類越多,也越容易將訓練資料中的雜訊與特殊模式一併記住。其典型結果是:
- 訓練誤差下降;
- 訓練準確率提高;
- 測試誤差可能上升;
- 泛化能力下降;
- overfitting 風險增加。
因此,單純增加層數或神經元數量不是避免 overfitting 的方法,反而通常會加劇過度擬合。
以偏差—變異權衡(bias–variance trade-off)表示:
- 模型過於簡單:偏差高,容易 underfitting;
- 模型過於複雜:變異高,容易 overfitting。
增加網路容量通常會降低偏差,但提高變異,因此不能作為本題所要求的防止 overfitting 技術。
(B) Using Lasso / Ridge regularization
錯誤選項。
Lasso 與 Ridge 都是正則化(regularization)方法,會在原本的損失函數中加入懲罰項,限制模型參數過度變大。
Ridge regularization 使用 懲罰:
其中 控制正則化強度。參數越大,模型越傾向使用較小的權重,使模型較平滑,降低對訓練資料細節的過度依賴。
Lasso regularization 使用 懲罰:
Lasso 會促使部分權重變為 ,具有特徵選擇與稀疏化效果,也能降低模型有效複雜度。
因此,Lasso 與 Ridge 都是常見的避免 overfitting 方法。
第 43 題3 分
Which of the following items is NOT features of Dynamic Loading?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統中的 Dynamic Loading(動態載入)。
動態載入的基本機制是:
- 程式一開始不必將所有程式模組載入主記憶體。
- 某個副程式(routine)真正被呼叫時,才將它從外部儲存裝置載入記憶體。
- 未被使用的程式模組可繼續留在磁碟中,以節省主記憶體空間。
- 程式通常仍須先經過編譯;是否在執行期間進行連結,屬於 Dynamic Linking 的議題,不能與 Dynamic Loading 完全混為一談。
因此,動態載入的核心是「需要時才載入」,而不是「執行前完整載入」。
解題方法
判斷各選項是否為 Dynamic Loading 的特徵,關鍵在於檢查其是否符合:
若敘述主張「整個程式在執行前就全部載入主記憶體」,便與動態載入的概念相反,應判定為不是 Dynamic Loading 的特徵。
選項分析
(A) The program is loaded in the memory when it’s needed during the execution.
此敘述正確。
動態載入是在程式執行期間,等到某個程式模組被需要時,才將該模組載入主記憶體。這正是 Dynamic Loading 的核心定義。
(B) It reduces memory usage and improves performance.
依本題命題意旨,此敘述正確。
由於不必一開始將完整程式全部放入主記憶體,動態載入可以降低記憶體使用量,讓多個程式共享有限的主記憶體資源。
在適當情況下,較少的記憶體需求也能降低記憶體壓力,提升整體系統效能。不過,動態載入本身並不保證每次都提升單一程式的執行速度;若載入模組時需要進行磁碟存取,反而可能產生額外延遲。考試中通常將「節省記憶體、改善整體效能」視為動態載入的優點。
(C) Program is not linked and compiled before being loaded in memory.
此敘述的文字表達不夠嚴謹,具有爭議。
動態載入的重點是「模組何時被載入」,並不表示程式在被載入前完全沒有經過編譯。一般程式仍須先經過編譯,產生可執行檔或目的模組。
此外:
第 44 題3 分
Which of the following information are normally NOT included in a process control block (PCB)?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統中的「行程控制區塊」(Process Control Block, PCB)。
PCB 是作業系統為每個行程建立的核心資料結構,用來保存行程的狀態與管理資訊,使作業系統能夠:
- 管理行程;
- 進行行程切換(context switch);
- 進行 CPU 排程;
- 管理行程所使用的記憶體與 I/O 資源;
- 透過行程識別碼辨識不同的行程。
一般 PCB 會包含下列類型的資訊:
- Process state:行程狀態,如 new、ready、running、waiting、terminated。
- Process identifier:行程識別碼,如 PID。
- Program counter:下一個要執行的指令位址。
- CPU registers:暫存器內容。
- CPU-scheduling information:優先權、排程佇列指標等。
- Memory-management information:頁表、區段表、基底暫存器、界限暫存器等。
- Accounting information:CPU 使用時間、程序擁有者、工作編號等。
- I/O status information:行程所使用的 I/O 裝置、開啟的檔案及相關 I/O 管理資訊。
解題方法
題幹問:
Which of the following information are normally NOT included in a process control block (PCB)?
也就是要找「通常不會放在 PCB 中」的資訊。
解題時逐項對照 PCB 的標準內容:
- CPU 排程資訊:屬於 PCB;
- I/O 裝置佇列相關資訊:歸入 I/O 狀態與資源管理資訊;
- 記憶體管理資訊:屬於 PCB;
- 行程識別碼:屬於 PCB。
四個項目都屬於 PCB 所保存或指向的行程管理資訊,因此沒有任何一個單獨選項符合「NOT included」。
所以應選:
選項分析
(A) CPU-scheduling information
正確屬於 PCB 內容。
作業系統需要根據行程的優先權、排程佇列位置、時間配額等資訊進行 CPU 排程,因此 PCB 通常會保存相關資料,例如:
- 行程優先權;
- 排程佇列指標;
- 行程使用的時間片資訊;
- 其他排程所需的狀態。
因此 (A) 不是「不包含」的資訊,選擇 (A) 錯誤。
(B) I/O device queues
第 45 題3 分
Given the following piece of code, which one of the following statements is correct?
#include <stdio.h>
#include <string.h>
int Func(char* s1, char* s2)
{
int M = strlen(s1);
int N = strlen(s2);
int i, j;
for (i = 0; i <= N - M; i++) {
for (j = 0; j < M; j++)
if (s2[i + j] != s1[j])
break;
if (j == M)
return i;
}
return -1;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- 字串長度與索引:
strlen計算字串長度,索引從 開始。 - 子字串搜尋:判斷
s1是否完整出現在s2中。 - 暴力比對法(Brute-force string matching):逐一把
s1對齊到s2的不同位置進行比較。 - 時間複雜度分析:外層逐一選擇起始位置,內層逐字元比對。
解題方法
程式先取得兩個字串的長度:
int M = strlen(s1);
int N = strlen(s2);
其中:
- :字串
s1的長度 - :字串
s2的長度
外層迴圈:
for (i = 0; i <= N - M; i++)
代表將 s1 的開頭依序對齊到 s2[0]、s2[1]、……、s2[N-M]。
內層迴圈:
for (j = 0; j < M; j++)
if (s2[i + j] != s1[j])
break;
逐一比較:
若全部 個字元都相同,則 j == M,程式執行:
return i;
也就是回傳 s1 在 s2 中第一次出現的起始索引。
若所有起始位置都比對失敗,則執行:
return -1;
程式追蹤(Trace)
以:
s1 = "ana"
s2 = "banana"
為例:
- 的範圍為 到
| 比對內容 | 結果 | |
|---|---|---|
"ban" 與 "ana" | 第 1 個字元即不同 | |
"ana" 與 "ana" | 全部相同,回傳 |
因此函式回傳 ,表示 s1 從 s2[1] 開始出現。
選項分析
(A) This code is to check if string s1 is a substring of s2.
正確。
第 46 題3 分
In the following statements which is NOT true regarding Bob wants to send Alice an encrypted email?
登入後即可作答並保存紀錄。
核心觀念
本題考查非對稱式密碼學(asymmetric cryptography,也稱公開金鑰密碼學)的金鑰用途。
每位使用者通常擁有一組金鑰:
- 公開金鑰(public key):可以公開給他人。
- 私密金鑰(private key):只能由本人保管。
公開金鑰與私密金鑰具有配對關係:
- 使用某人的公開金鑰加密,通常必須使用該人的私密金鑰解密。
- 使用某人的私密金鑰產生數位簽章,通常使用該人的公開金鑰驗證。
若 Bob 要寄送只有 Alice 能閱讀的機密郵件,標準作法是:
Alice 收到後,使用自己的私密金鑰解密:
其中 是原始訊息, 是密文。
解題方法
判斷每個選項時,先問一個核心問題:
Bob 使用哪一把金鑰後,能讓 Alice 解密或驗證?
若目的是讓 Alice 讀取機密內容,必須使用 Alice 的公開金鑰。因為只有 Alice 擁有與之配對的私密金鑰。
因此,Bob 使用自己的公開金鑰加密,接收者 Alice 並沒有 Bob 的私密金鑰,無法解密。這正是選項 (C) 的錯誤所在。
選項分析
(A) Bob and Alice each can have his/her own pair of public and private keys.
正確。
Bob 可以擁有:
Alice 也可以擁有:
非對稱式密碼系統的基本特徵,就是每位使用者各自擁有公開金鑰與私密金鑰的金鑰對。
(B) Bob can take Alice’s public key and encrypt his message to her.
正確。
Bob 使用 Alice 的公開金鑰加密:
只有 Alice 的私密金鑰能解密:
這是機密性(confidentiality)的標準作法,因此 Bob 可以使用 Alice 的公開金鑰加密要寄給她的訊息。
(C) Bob can take his public key and encrypt his message to her.
錯誤,這是官方答案。
若 Bob 使用自己的公開金鑰加密:
第 47 題3 分
Which of the following statements about arrays and linked lists is correct?
登入後即可作答並保存紀錄。
核心觀念
本題比較陣列(array)與鏈結串列(linked list)的基本特性,重點包括:
- 記憶體配置方式
- 資料結構大小是否固定
- 插入與刪除的效率
- 兩者在資料結構實作上的用途
一般教材中的基本比較如下:
| 特性 | 陣列 | 鏈結串列 |
|---|---|---|
| 記憶體配置 | 通常使用連續記憶體 | 節點可分散配置於記憶體 |
| 大小 | 傳統陣列大小固定 | 可動態增加或減少 |
| 隨機存取 | 快速,時間複雜度為 | 須逐節點尋找,時間複雜度為 |
| 插入與刪除 | 中間位置通常需搬移元素,為 | 已知節點位置時可為 |
| 常見用途 | 實作堆疊、佇列、表格等 | 實作堆疊、佇列、圖形結構等 |
解題方法
本題各選項都是對陣列或鏈結串列特性的敘述。逐一判斷後,若選項 A 至 D 均正確,則應選擇表示「以上皆是」的選項 E。
選項分析
(A) Linked lists have dynamic memory allocation.
正確。
鏈結串列由一個個節點組成,每個節點通常包含:
- 資料欄位(data)
- 指向下一個節點的指標(pointer)
新增節點時,可在執行期間動態配置記憶體;刪除節點時,也可釋放其記憶體。因此鏈結串列的大小可依需求改變,不必在編譯時預先決定完整容量。
例如,C 語言可使用 malloc 配置節點:
struct Node *newNode;
newNode = (struct Node *)malloc(sizeof(struct Node));
(B) Arrays have a fixed size determined at compile time.
依本題基本教材的定義,正確。
傳統陣列通常在宣告時決定大小,例如:
int a[10];
此陣列可儲存 10 個 int,其大小在編譯時期即已確定,執行期間不能直接擴充為 20 個元素。
陣列通常需要一段連續記憶體,因此大小固定有助於配置記憶體與計算元素位置。若要支援動態大小,通常會使用動態陣列、向量(如 C++ 的 vector)或其他容器;嚴格來說,這些不等同於傳統固定大小陣列。
第 48 題3 分
Which one of the following security features is required to prevent medical internet-of-things (MIoT) devices from being out-of-service?
登入後即可作答並保存紀錄。
核心觀念
本題考查資訊安全的 CIA Triad(三要素):
- Confidentiality(機密性):防止未授權者讀取資料。
- Integrity(完整性):防止資料遭未授權竄改或破壞。
- Availability(可用性):確保系統、設備與服務在需要時能正常提供使用。
- Authentication(身分驗證):確認使用者或設備的身分。
- Multi-factor authentication(多因素驗證):使用兩種以上不同類型的驗證因素確認身分。
題目中的 out-of-service 意為「停止服務、無法使用、不可運作」。因此,防止 MIoT(Medical Internet of Things,醫療物聯網)設備停止服務,核心要求是維持設備與服務的可用性。
解題方法
判斷關鍵在於題幹的結果描述:
prevent MIoT devices from being out-of-service
也就是「防止醫療物聯網設備無法提供服務」。
將題幹中的問題對應至資訊安全目標:
- 資料不被偷看 → 機密性
- 資料不被竄改 → 完整性
- 確認使用者身分 → 身分驗證
- 設備與服務不中斷 → 可用性
醫療物聯網設備若遭受阻斷服務攻擊、網路癱瘓、電力中斷、系統故障或資源耗盡,便會無法提供監測、警報、診斷輔助等功能。防止這類「無法使用」的狀態,所需的安全性質就是 Availability。
因此選擇:
選項分析
(A) Confidentiality(機密性)
機密性是防止未授權者取得敏感資料,例如:
- 病患病歷
- 生理數據
- 身分資料
- 醫療影像
它主要處理「資料是否被不當讀取」的問題。即使資料完全保密,設備仍可能因阻斷服務攻擊而無法運作,因此機密性不是本題防止設備 out-of-service 的直接答案。
(B) Integrity(完整性)
完整性是確保資料與系統內容未遭未授權竄改,例如:
- 防止病患血壓數值被修改
- 防止醫療設備設定遭篡改
- 防止傳輸中的資料被竄改
第 49 題3 分
Given the following piece of code, which one of the following statements is NOT correct?
#include <stdio.h>
int main() {
int n1, n2, max;
scanf("%d %d", &n1, &n2);
max = (n1 > n2) ? n1 : n2;
while (1) {
if ((max % n1 == 0) && (max % n2 == 0)) {
printf("The result is %d\n", max);
break;
}
++max;
}
return 0;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- 條件運算子
?:的使用。 while (1)無限迴圈與break的終止機制。- 最小公倍數(Least Common Multiple, LCM)的定義。
- 以逐一增加候選值尋找 LCM 的演算法時間複雜度。
兩個正整數 、 的最小公倍數,是同時可被 與 整除的最小正整數:
程式先令 max 為兩數中的較大值,再由此開始逐一檢查:
max = (n1 > n2) ? n1 : n2;
條件運算子等價於:
if (n1 > n2)
max = n1;
else
max = n2;
接著檢查:
if ((max % n1 == 0) && (max % n2 == 0))
只有當 max 同時可被兩數整除時,才代表找到 LCM。
解題方法與程式流程
程式的主要流程如下:
- 輸入兩個整數
n1、n2。 - 將
max設為兩者較大值。 - 檢查
max是否同時為兩數的倍數。 - 若是,輸出並結束迴圈。
- 若不是,執行
++max,檢查下一個整數。
在標準題意下,假設輸入為兩個正整數,程式確實能找出最小公倍數。
逐步追蹤:、
初始值:
逐次檢查如下:
| 迴圈次數 | max | max % 4 | max % 3 | 是否同時為倍數 |
|---|---|---|---|---|
| 1 | 4 | 0 | 1 | 否 |
| 2 | 5 | 1 | 2 | 否 |
| 3 | 6 | 2 | 0 | 否 |
| 4 | 7 | 3 | 1 | 否 |
| 5 | 8 | 0 | 2 | 否 |
| 6 | 9 | 1 | 0 | 否 |
| 7 | 10 | 2 | 1 | 否 |
| 8 | 11 | 3 | 2 | 否 |
| 9 | 12 | 0 | 0 | 是 |
因此第 9 次迴圈找到:
時間與空間複雜度
設:
程式從 開始逐一增加,直到 。迴圈次數約為:
若兩數互質,則:
因此最壞情況的迴圈次數可達:
由於 ,也可寫成:
不是 。
每次迴圈只進行固定次數的取餘數、比較與遞增操作,因此總時間複雜度取決於迴圈次數。程式只使用少量整數變數,空間複雜度為:
選項分析
(A) This program takes two integers as input and calculates the least common multiplier (LCM) of the two integers.
此選項在題意上正確。
程式透過 scanf 讀入兩個整數,並找出同時能被兩數整除的最小候選值,因此是在計算 LCM。
第 50 題3 分
What is the output of the following C program code?
#include <iostream>
int &max(int &i, int &j) {
if (i < j) return j;
return i;
}
int main()
{
int a = 78, b = 43;
max(a,b) = 10;
max(a,b)++;
std::cout << a << ", " << b;
return 0;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查 C++ 的下列觀念:
- 參考(reference)回傳
int &max(int &i, int &j)
函式回傳的是 int&,也就是某個整數變數本身的參考,不是數值副本。因此可以直接對 max(a,b) 的結果進行指定與遞增。
- 參考參數
int &i, int &j
i、j 分別參考呼叫函式時傳入的 a、b,函式內對它們的操作會直接影響原變數。
- 每次呼叫都重新判斷較大值
if (i < j) return j;
return i;
函式回傳 i 與 j 中較大的那一個變數之參考。
解題方法與逐步追蹤
初始狀態為:
函式的功能可表示為:
- 若 ,回傳
j的參考; - 否則回傳
i的參考。
因此,max(a,b) 會回傳目前較大變數的參考。
第一行操作
max(a,b) = 10;
此時:
因為 ,所以 max(a,b) 回傳 a 的參考。指定運算等同於:
a = 10;
狀態變為:
第二行操作
max(a,b)++;
此時重新判斷:
因為 ,所以 max(a,b) 回傳 b 的參考。後置遞增等同於:
b = b + 1;
因此:
最終狀態為:
輸出結果
std::cout << a << ", " << b;
輸出:
10, 44
選項分析