112 港務人員升資考試員級晉高員級 技術類(選試港埠工程)-臺灣港務公司 電子計算機概論 考古題詳解

112 年・港務人員升資考試・員級晉高員級・技術類(選試港埠工程)-臺灣港務公司
試題代碼 電子計算機概論

第 一、 題20 分

在物件導向程式設計中,何謂多重繼承(Multiple Inheritance)?請舉出一種程式語言可使用多重繼承。使用多重繼承時,若設計不當可能衍生何種問題?請舉例說明。

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

這一題的完整詳解

核心觀念

多重繼承(Multiple Inheritance)是指一個子類別同時繼承兩個以上父類別的屬性與方法。子類別因此能重用多個父類別所提供的功能,並可依程式語言的規則覆寫或擴充繼承來的行為。

例如,程式語言 C++ 支援類別的多重繼承:

class Printer {
public:
 void print {}
};

class Scanner {
public:
 void scan {}
};

class AllInOne : public Printer, public Scanner {
};

AllInOne 同時繼承 Printer 與 Scanner,因此可使用 print 和 scan。

解題方法

題目分成三個部分作答:

  1. 說明多重繼承的定義:一個子類別繼承多個父類別。
  2. 舉出支援多重繼承的語言:例如 C++。
  3. 說明設計不當時的問題,並用具體例子呈現。

常見問題是菱形繼承(Diamond Problem)。假設 Person 是基底類別,Student 和 Employee 都繼承 Person,而 TeachingAssistant 同時繼承 Student 與 Employee:

🔒

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

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

免費註冊

第 二、 題20 分

何謂虛擬私人網路(Virtual Private Network, VPN)?其用途為何?試述實現虛擬私人網路所需的技術,並說明使用虛擬私人網路時,可能產生的缺點。

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

這一題的完整詳解

核心觀念

虛擬私人網路(Virtual Private Network, VPN)是利用公用網路(例如網際網路)建立邏輯上的私人通訊網路,讓不同地點的使用者或網路能安全地交換資料。它不必實際租用專線,而是以隧道技術在公用網路上傳送資料,因此兼具私人網路的連線方式與公用網路的傳輸基礎。

VPN 主要考驗三個面向:安全傳輸、遠端或跨地連線,以及其代價與限制。VPN 的安全性仰賴加密、身分驗證及資料完整性保護;「建立隧道」本身不等於資料必然安全。

解題方法

依題目依序回答「定義與用途」、「實現技術」、「使用缺點」,即可完整作答。

一、VPN 的用途

  • 遠端存取:員工在外地透過網際網路連回公司內部網路,存取授權的檔案、系統或服務。
  • 站點互連:利用 VPN 連接不同辦公室或分公司,使各地網路能透過公用網路安全通訊。
  • 保護傳輸中的資料:在不可信任的網路上加密資料,降低遭竊聽或竄改的風險。
  • 隱藏對外連線來源:流量經 VPN 閘道轉送後,外部服務通常會看到閘道的 IP 位址;但這不代表使用者因此完全匿名。

二、實現 VPN 所需技術

  1. 隧道技術:將原始封包封裝在另一種協定封包中,經公用網路傳送,抵達另一端後再解封裝。常見技術或協定包括 IPsec、TLS/SSL VPN、WireGuard,以及歷史上使用的 PPTP、L2TP。
  2. 加密技術:將資料轉為未持有金鑰者難以理解的形式,保護傳輸機密性。實際採用的演算法與設定會影響安全強度。
🔒

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

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

免費註冊

第 三、 題20 分

有一整數陣列 num[7]num[7],儲存資料為 {19,37,28,99,72,6,55}\{19, 37, 28, 99, 72, 6, 55\}。使用堆積排序法(Heap Sort)將此陣列由小到大排序,請詳細列出排序步驟。

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

這一題的完整詳解

核心觀念

堆積排序(Heap Sort)先將資料建立成最大堆積,再反覆把堆頂最大值移到未排序區間的末端,縮小堆積範圍並重新調整最大堆積。完成後,陣列即由小到大排列。

最大堆積是一棵完全二元樹,且每個父節點都大於或等於其子節點。因此,堆頂是目前未排序資料中的最大值。本題以陣列索引從 11 起算;索引為 ii 的節點,其左、右子節點索引分別為 2i2i、2i+12i+1。

解題方法與步驟

原始陣列為:

{19,37,28,99,72,6,55}\{19, 37, 28, 99, 72, 6, 55\}

一、建立最大堆積

由最後一個非葉節點開始,自底向上調整。n=7n=7,最後一個非葉節點的索引為 ⌊n/2⌋=3\lfloor n/2 \rfloor=3。

  • 調整索引 33:節點 2828 的子節點為 66、5555,最大者為 5555,交換:

{19,37,55,99,72,6,28}\{19, 37, 55, 99, 72, 6, 28\}

  • 調整索引 22:節點 3737 的子節點為 9999、7272,最大者為 9999,交換:

{19,99,55,37,72,6,28}\{19, 99, 55, 37, 72, 6, 28\}

  • 調整索引 11:節點 1919 的子節點為 9999、5555,先與較大的 9999 交換:

{99,19,55,37,72,6,28}\{99, 19, 55, 37, 72, 6, 28\}

繼續調整索引 22:節點 1919 的子節點為 3737、7272,與較大的 7272 交換:

{99,72,55,37,19,6,28}\{99, 72, 55, 37, 19, 6, 28\}

建立完成的最大堆積為:

{99,72,55,37,19,6,28}\{99, 72, 55, 37, 19, 6, 28\}

二、反覆取出堆頂並重新調整

🔒

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

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

免費註冊

第 四、 題20 分

當電腦系統發生死結(Deadlock)時,有何方法可以讓系統回復到正常狀態?詳細說明解決方案,並說明執行的困難點與可能衍生的問題。

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

這一題的完整詳解

核心觀念

死結(Deadlock)是指一組行程或執行緒彼此等待對方持有的資源,因而全部停滯,無法繼續執行。系統發生死結後,若要回復正常,須採取**死結復原(deadlock recovery)**措施,解除造成循環等待的行程與資源關係。

本題重點在作業系統的死結處理方式,特別是死結發生後如何復原,以及復原時的執行困難與副作用。死結的四個必要條件為互斥、占有並等待、不可搶先、循環等待;復原的目的,是破壞其中至少一項條件,使等待循環解除。

解題方法:死結發生後的復原方案

死結發生後,常見的處理方式有終止行程與資源搶奪兩類。系統可依死結範圍、資源種類及復原成本選擇方案。

一、終止行程(Process Termination)

直接終止死結中的行程,釋放其持有的資源,使其他行程得以繼續執行。常用作法如下:

  1. 一次終止所有死結行程 將死結中的所有行程全部終止,快速釋放資源,通常能立即解除死結。缺點是許多已完成的工作也會一併損失,重做成本高。

  2. 逐一終止行程,直到死結解除 每終止一個行程,就重新檢查系統是否仍有死結;若仍存在,再挑選下一個行程終止。此法減少不必要的行程損失,但需多次偵測與判斷,處理時間較長。

逐一選擇行程時,可考量行程優先權、已執行時間與剩餘時間、已持有及尚需資源數量、終止後重啟成本,以及該行程是否為互動或批次工作等因素。

二、資源搶奪(Resource Preemption)

從部分行程手中搶回資源,再將資源分配給其他行程,以打破等待循環。實作時要處理下列問題:

  1. 選擇犧牲者:選擇被搶回資源後總成本較低的行程,並兼顧其重要性與復原成本。
🔒

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

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

免費註冊

第 五、 題20 分

詳細說明下列 Java 語言程式的執行過程,並寫出程式的輸出。

public class Test { static int x = 0;

public static int foo (int n)
{
    x++;

    if (x == 26) System.out.println(n);

    if ((n == 0) || (n == 1)) return 1;

    if (n < 0) return foo(n + 2);
    else return (foo(n - 2) + foo(n - 3));
}

public static void main (String args[])
{
    System.out.println(foo(10));

    System.out.println(x);
}

}

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

這一題的完整詳解

核心觀念

本題考查 Java 的遞迴呼叫、短路運算、靜態變數,以及運算式中的呼叫次序。

  • static int x = 0; 是類別變數,所有 foo 呼叫共用同一個 x。每次進入 foo,第一個動作都是執行 x++。
  • || 是短路 OR:左側條件成立時,不會再判斷右側;但本題的兩側條件都沒有副作用。
  • foo(n - 2) + foo(n - 3) 會先求左運算元,再求右運算元。因此兩個遞迴分支依序執行,且 x 會累計所有呼叫次數。
  • 遇到 n == 0 或 n == 1 時回傳 1;若 n < 0,則以 n + 2 繼續遞迴,直到進入基本情況。

解題方法

先計算 foo(10) 的完整遞迴呼叫次數。以 C(n)C(n) 表示執行 foo(n) 會呼叫 foo 的總次數,包含該次本身:

C(n)={1,n=0 或 n=11+C(n+2),n<01+C(n−2)+C(n−3),n>1C(n)= \begin{cases} 1, & n=0\text{ 或 }n=1\\ 1+C(n+2), & n<0\\ 1+C(n-2)+C(n-3), & n>1 \end{cases}

此遞迴會走到的參數及其呼叫次數如下:

nn呼叫次數 C(n)C(n)回傳值
−3-32211
−2-22211
−1-13311
001111
111111
225522
334422
448833
559944
66141455
77171777
88242499
9932321212
101047471616
🔒

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

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

免費註冊

其他考古題