106 銀行招考不分職等 合作金庫-資安防護系統管理人員 專業科目:程式設計、系統分析、資料結構及資料庫應用 考古題詳解

106 年・銀行招考・不分職等・合作金庫-資安防護系統管理人員
試題代碼 資安防護系統管理人員-專業科目:程式設計、系統分析、資料結構及資料庫應用

第 第一題 題20 分

請設計一個 APP,於程式啟動時,彈出對話框(Android 使用 AlertDialog、iOS 使用 UIAlertController),對話框標題顯示「行動銀行」,對話框訊息內容顯示「提醒您可安裝防毒軟體,以提升行動交易安全!」,並於對話框內由左至右加入三顆按鈕,說明如下表:

按鈕顯示文字點選按鈕後的動作
下次提醒我關閉對話框,下次程式啟動時,會再顯示本對話框。
了解更多使用系統內建瀏覽器開啟以下網址「https://www.tabf.org.tw」。
不再提醒關閉對話框,下次程式啟動時,不會再顯示本對話框。

(請擇一選擇以 Android 或 iOS 作答,Android 使用 JAVA 語言,iOS 使用 Objective-C 語言。如有非程式碼之相關屬性設定,請詳細敘述。)

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

這一題的完整詳解

核心觀念

本題考查 Android AlertDialog、按鈕事件處理,以及使用 SharedPreferences 保存「是否不再提醒」的狀態。

功能規則如下:

  • 「下次提醒我」:只關閉對話框,不儲存禁止提醒狀態,因此下次啟動仍顯示。
  • 「了解更多」:透過 Intent.ACTION_VIEW 呼叫系統瀏覽器開啟指定頁面。
  • 「不再提醒」:將設定值保存為 true,下次啟動時不再顯示。

本題選擇以 Android Java 作答。

解題方法

程式啟動時,在 Activity 的 onCreate 中讀取 SharedPreferences:

  • 設定值不存在或為 false:顯示對話框。
  • 設定值為 true:不顯示對話框。

Android AlertDialog 的三種按鈕通常可透過下列方法建立:

  • setNegativeButton
  • setNeutralButton
  • setPositiveButton

若依 Android 傳統按鈕排列由左至右配置為:

  1. Negative:「下次提醒我」
  2. Neutral:「了解更多」
  3. Positive:「不再提醒」

Java 程式碼

package com.example.mobilebank;

import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

 private static final String PREF_NAME = "mobile_bank_settings";
 private static final String KEY_NO_MORE_REMINDER = "no_more_reminder";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 SharedPreferences preferences =
 getSharedPreferences(PREF_NAME, MODE_PRIVATE);

 boolean noMoreReminder =
 preferences.getBoolean(KEY_NO_MORE_REMINDER, false);

 if (!noMoreReminder) {
 showSecurityReminder;
 }
 }

 private void showSecurityReminder {
 AlertDialog dialog = new AlertDialog.Builder(this)
 .setTitle("行動銀行")
 .setMessage("提醒您可安裝防毒軟體,以提升行動交易安全!")

 // 由左至右:下次提醒我、了解更多、不再提醒
 .setNegativeButton("下次提醒我",
 (dialogInterface, which) -> {
 // 不儲存任何設定,下次啟動時仍會顯示
 dialogInterface.dismiss;
 })

 .setNeutralButton("了解更多",
 (dialogInterface, which) -> {
 Intent intent = new Intent(
 Intent.ACTION_VIEW,
 Uri.parse(")
 );
 startActivity(intent);
 })

 .setPositiveButton("不再提醒",
 (dialogInterface, which) -> {
 SharedPreferences preferences =
 getSharedPreferences(
 PREF_NAME,
 MODE_PRIVATE
 );

 preferences.edit
 .putBoolean(KEY_NO_MORE_REMINDER, true)
 .apply;

 dialogInterface.dismiss;
 })
 .setCancelable(false)
 .create;

 dialog.show;
 }
}

非程式碼屬性設定

1. AndroidManifest.xml

主畫面 Activity 必須設定為程式啟動入口:

🔒

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

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊

第 第二題 題20 分

請設計一個如下列三個圖所示,同時符合桌上型電腦、平板電腦和手機的 RWD 網頁。

假設手機的螢幕寬度是 500px、平板電腦的螢幕寬度是 768px。

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

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

這一題的完整詳解

核心觀念

本題考查 RWD(Responsive Web Design,響應式網頁設計),重點如下:

  1. 使用 HTML 建立頁面結構。
  2. 使用 CSS Media Query,依螢幕寬度套用不同版面。
  3. 使用 CSS Grid 或 Flexbox 進行欄位配置。
  4. 使用相對單位、max-width、width: 100%,避免內容超出螢幕。
  5. 依題目指定的螢幕寬度,區分:
手機:寬度≤500px\text{手機:寬度} \leq 500px 平板:500px<寬度≤768px\text{平板:} 500px < \text{寬度} \leq 768px 桌上型電腦:寬度>768px\text{桌上型電腦:寬度} > 768px

依附圖可將頁面分成:

  • 頁首:紫色標題區。
  • 導覽列:左側的交通、城市、景點、餐廳等選單。
  • 主要內容:城市介紹。
  • 資訊區:提供「有什麼、在哪裡、如何去」等資訊。
  • 頁尾:版權資訊。

解題方法

以 CSS Grid 建立三種版面:

裝置版面配置
桌上型電腦頁首橫跨全版,下面分成導覽列、主要內容、資訊區三欄
平板電腦頁首橫跨全版,導覽列在左側,主要內容在右側,資訊區移至下一列
手機所有區塊改為由上而下排列

HTML 結構如下:

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>城市介紹</title>
 <link rel="stylesheet" href="style.css">
</head>
<body>

<div class="page">

 <header class="header">
 澎湖
 </header>

 <nav class="menu">
 <a href="#">交通</a>
 <a href="#">城市</a>
 <a href="#">景點</a>
 <a href="#">餐廳</a>
 </nav>

 <main class="content">
 <h1>城市</h1>
 <p>
 澎湖位於臺灣海峽,是由多座島嶼所組成的縣市,
 具有豐富的自然景觀與人文特色。
 </p>
 </main>

 <aside class="information">
 <section>
 <h2>有什麼?</h2>
 <p>介紹當地景點、特色活動與相關資訊。</p>
 </section>

 <section>
 <h2>在哪裡?</h2>
 <p>提供景點所在地及地理位置說明。</p>
 </section>

 <section>
 <h2>如何去?</h2>
 <p>提供交通方式及行程建議。</p>
 </section>
 </aside>

 <footer class="footer">
 © 2017 城市介紹網站
 </footer>

</div>

</body>
</html>

CSS 可依三種裝置設定如下:

🔒

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

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊

第 第三題 題20 分

在開發資訊系統的過程中,我們常常會需要用到 Publish-Subscribe 這樣的技術(例如 Java 訊息服務[Java Message Service],即包含此技術的實作)。

(一) 請說明此技術的運作過程。【10分】 (二) 請以 UML 的循序圖(sequence diagram)描述此技術的運作過程。【10分】

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

這一題的完整詳解

核心觀念

本題考查 Publish-Subscribe(發布—訂閱)訊息傳遞模式,以及其在 Java Message Service(JMS)中的運作方式。

Publish-Subscribe 的核心精神是:

  • 發布者(Publisher)只負責將訊息送至特定主題(Topic)。
  • 訂閱者(Subscriber)事先訂閱該主題。
  • 訊息服務提供者(Message Service Provider/Broker)負責接收、保存、篩選及轉送訊息。
  • 發布者不需要知道有哪些訂閱者,訂閱者也不需要知道發布者是誰。
  • 同一則訊息可分別傳送給同一主題的多個訂閱者,形成一對多(one-to-many)的訊息傳遞。

JMS 中常見的訊息模型有兩種:

  1. Point-to-Point:透過 Queue 傳遞,一則訊息通常由一個消費者接收。
  2. Publish-Subscribe:透過 Topic 傳遞,同一則訊息可由多個訂閱者各自接收。

因此,本題的關鍵字是「Topic」、「Publisher」、「Subscriber」與「Message Broker」。


(一)Publish-Subscribe 技術的運作過程

1. 建立訊息服務連線

發布者與訂閱者先透過 JMS API 連接至 JMS Provider。JMS Provider 是實際負責訊息管理與傳輸的服務元件。

基本元件包括:

  • Connection:與訊息服務的連線。
  • Session:處理訊息建立與接收的工作階段。
  • Topic:訊息發布的主題。
  • MessageProducer:發布訊息的物件。
  • MessageConsumer:接收訊息的物件。

2. 訂閱者訂閱 Topic

訂閱者向 JMS Provider 註冊自己對某一 Topic 的訂閱關係,例如:

  • SecurityAlert
  • SystemEvent
  • TransactionNotice

訂閱完成後,JMS Provider 會記錄該訂閱者與 Topic 之間的關係。

訂閱可分為:

  • 非持久訂閱(Non-durable Subscription):只有在訂閱者處於連線狀態時接收訊息;離線期間發布的訊息通常不會補送。
  • 持久訂閱(Durable Subscription):即使訂閱者暫時離線,JMS Provider 仍可保存訊息,待訂閱者重新連線後傳送。

3. 發布者建立並發布訊息

發布者建立一則訊息,並將訊息送至指定的 Topic。例如發布一則資安事件通知:

  • 事件類型:登入異常
  • 發生時間:10:00
  • 來源位址:192.168.1.10

發布者只需要指定 Topic,不需要指定個別訂閱者。

也就是說,發布者的概念是:

Publisher→TopicPublisher \rightarrow Topic

而不是:

Publisher→SubscriberPublisher \rightarrow Subscriber

4. JMS Provider 接收並處理訊息

JMS Provider 接收到訊息後,依據 Topic 的訂閱資料,找出所有符合條件的訂閱者。

若有 nn 個有效訂閱者,則服務提供者會將該訊息分別交付給這 nn 個訂閱者:

Message→Subscriber1,Subscriber2,…,SubscribernMessage \rightarrow Subscriber_1, Subscriber_2, \ldots, Subscriber_n

每個訂閱者皆可取得該訊息的副本,因此一位訂閱者處理訊息,不會使其他訂閱者無法取得該訊息。


5. 訂閱者接收並處理訊息

訂閱者可以透過兩種方式接收訊息:

  • 同步接收:呼叫 receive 等待訊息。
  • 非同步接收:設定 MessageListener,由 JMS Provider 在訊息抵達時呼叫回呼方法。

在實務上,非同步接收常用於事件通知系統,例如:

  • 資安告警
  • 系統監控
  • 交易異常通知
  • 日誌分析
  • 分散式系統事件同步

6. 確認訊息處理結果

訂閱者完成訊息處理後,可依 JMS 的工作階段設定進行確認(Acknowledgement)。

常見處理方式包括:

  • Auto Acknowledge:系統自動確認。
  • Client Acknowledge:由程式明確確認。
  • Transaction:將訊息接收與處理納入交易。

若採用持久訂閱,服務提供者通常會依據訊息確認狀態,判斷訊息是否可以從保存區移除。


Publish-Subscribe 的主要特性

1. 解耦合

發布者不需要知道訂閱者的數量、位置或實作方式,訂閱者也不需要直接呼叫發布者。

因此可以降低:

  • 模組之間的依賴性
  • 系統整合的複雜度
  • 新增功能對既有程式的影響

2. 一對多傳遞

同一則訊息可由多個訂閱者接收。例如同一筆資安告警,可同時送至:

  • 資安監控系統
  • 簡訊通知系統
  • Email 通知系統
  • 稽核紀錄系統

3. 非同步處理

發布者發布訊息後,不必等待所有訂閱者處理完成,即可繼續執行其他工作,提升系統反應速度與可擴充性。


4. 動態擴充

新增訂閱者只需訂閱既有 Topic,通常不必修改發布者程式,因此適合大型分散式系統。


5. 訊息可靠性

JMS Provider 可提供訊息保存、重送、持久訂閱及交易確認等機制,以提高訊息傳遞的可靠性。


(二)UML 循序圖

以下循序圖以 JMS Topic 為例,描述訂閱、發布、轉送與接收的流程。

🔒

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

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊

第 第四題 題20 分

如果每個數字用來代表一筆資料的鍵值,而鍵值將以節點(node)之方式來呈現。現在有 13 筆鍵值資料 20、52、14、65、79、19、30、75、23、31、66、15 與 71 需要處理,請回答下述兩個問題:

(一) 依據上述給予的 13 筆鍵值資料建立一棵二元搜尋樹(只須畫出二元搜尋樹之樹狀圖)。【10分】 (二) 根據小題 (一) 之結果,畫出刪除鍵值為 52 之節點並經過重新調整後的二元搜尋樹;此外,須簡單陳述重新調整節點之原則。【10分】

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

這一題的完整詳解

核心觀念

本題考查二元搜尋樹(Binary Search Tree, BST)的建立與刪除。

二元搜尋樹須符合以下性質:

  • 每一節點左子樹所有鍵值均小於該節點鍵值。
  • 每一節點右子樹所有鍵值均大於該節點鍵值。
  • 建立二元搜尋樹時,依題目給定的鍵值順序逐筆插入。
  • 刪除節點時:
  1. 葉節點:直接刪除。
  2. 僅有一個子節點:由該子節點接替。
  3. 同時具有左右子樹:以其中序後繼或中序前驅接替,再刪除原接替節點。

本題為資料結構題,無涉及法條;以下依二元搜尋樹之標準定義作答。

解題方法

題目給定的插入順序為:

20, 52, 14, 65, 79, 19, 30, 75, 23, 31, 66, 15, 7120,\ 52,\ 14,\ 65,\ 79,\ 19,\ 30,\ 75,\ 23,\ 31,\ 66,\ 15,\ 71

插入時依序與目前節點比較:

  • 小於目前節點,向左走。
  • 大於目前節點,向右走。
  • 抵達空位置時,將該鍵值放入該處。

例如:

  • 52>2052>20,放在 2020 的右側。
  • 14<2014<20,放在 2020 的左側。
  • 75>20, 75>52, 75>65, 75<7975>20,\ 75>52,\ 75>65,\ 75<79,因此放在 7979 的左側。
  • 66>20, 66>52, 66>65, 66<79, 66<7566>20,\ 66>52,\ 66>65,\ 66<79,\ 66<75,因此放在 7575 的左側。

(一)建立二元搜尋樹

依序插入所有鍵值後,二元搜尋樹如下:

 20
 / \
 14 52
 \ / \
 19 30 65
 / / \
 15 23 79
 \ /
 31 75
 /
 66
 \
 71

驗證各節點的順序關係:

  • 2020 左側為 14,19,1514,19,15,均小於 2020。
  • 2020 右側為 52,30,23,31,65,79,75,66,7152,30,23,31,65,79,75,66,71,均大於 2020。
  • 5252 左側的 30,23,3130,23,31 均小於 5252。
  • 5252 右側的 65,79,75,66,7165,79,75,66,71 均大於 5252。
  • 7979 左側為 75,66,7175,66,71,均小於 7979。

因此符合二元搜尋樹的定義。

(二)刪除鍵值 52 並調整

節點 5252 同時具有左子樹與右子樹,不能直接刪除後只接一側子樹,必須選擇替代節點。

本解採用「中序後繼」:

  • 5252 的中序後繼,是其右子樹中鍵值最小的節點。
  • 5252 的右子樹根為 6565,而 6565 沒有左子樹,因此中序後繼為 6565。
  • 以 6565 取代原本的 5252。
  • 再刪除原右子樹中的 6565。原本的 6565 只有右子樹,因此由其右子節點 7979 接替。

刪除後的二元搜尋樹如下:

 20
 / \
 14 65
 \ \
 19 79
 / /
 15 75
 /
 66
 \
 71

刪除後仍符合:

左子樹鍵值<根節點鍵值<右子樹鍵值\text{左子樹鍵值}<\text{根節點鍵值}<\text{右子樹鍵值}

例如新根節點 6565:

  • 左子樹為 30,23,31,5230,23,31,52 等原本屬於 5252 左側的節點,均小於 6565。
  • 右子樹為 79,75,66,7179,75,66,71,均大於 6565。
🔒

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

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊

第 第五題 題20 分

ER(Entity-Relationship)圖如上所示,寫出 SQL 指令產生以下結果: 哪一公司(COMPANY)所承接之個案(CASE)其女性(mang_sex='F')個案管理者(MANAGER)最多?多少人?

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

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

這一題的完整詳解

核心觀念

本題考查:

  1. 多個資料表的 JOIN。
  2. 使用 WHERE 篩選女性管理者:mang_sex = 'F'。
  3. 依公司分組:GROUP BY。
  4. 計算每家公司女性個案管理者人數:COUNT(DISTINCT mang_id)。
  5. 找出人數最大值,並處理最高人數相同的公司。

資料表關聯如下:

  • COMPANY.com_id = CASE.com_id
  • CASE.case_id = CASEMANAGER.case_id
  • CASEMANAGER.mang_id = MANAGER.mang_id

由於題目問的是「多少人」,同一位女性管理者即使負責同一家公司的多個個案,也只能計算一次,因此使用:

COUNT(DISTINCT mang_id)COUNT(DISTINCT\ mang\_id)

解題方法

先將四個資料表連接,再篩選女性管理者,依公司分組計算人數:

公司女性管理者人數=COUNT(DISTINCT MANAGER.mang_id)\text{公司女性管理者人數} = COUNT(DISTINCT\ MANAGER.mang\_id)

接著,再從各公司的統計結果中找出最大值。

以下以 SQL Server 語法表示;因為 CASE 可能是保留字,使用 [CASE] 表示資料表名稱:

WITH FemaleCount AS
(
 SELECT
 C.com_id,
 C.com_name,
 COUNT(DISTINCT M.mang_id) AS female_manager_count
 FROM COMPANY AS C
 JOIN [CASE] AS CA
 ON C.com_id = CA.com_id
 JOIN CASEMANAGER AS CM
 ON CA.case_id = CM.case_id
 JOIN MANAGER AS M
 ON CM.mang_id = M.mang_id
 WHERE M.mang_sex = 'F'
 GROUP BY C.com_id, C.com_name
)
SELECT
 com_name,
 female_manager_count
FROM FemaleCount
WHERE female_manager_count =
(
 SELECT MAX(female_manager_count)
 FROM FemaleCount
);

SQL 執行邏輯

  1. COMPANY 與 [CASE] 連接,取得每個公司的個案。
  2. [CASE] 與 CASEMANAGER 連接,取得每個個案的管理者。
  3. CASEMANAGER 與 MANAGER 連接,取得管理者性別。
  4. WHERE M.mang_sex = 'F' 只保留女性管理者。
  5. GROUP BY C.com_id, C.com_name 依公司統計。
  6. COUNT(DISTINCT M.mang_id) 計算每家公司不重複的女性管理者人數。
  7. MAX(female_manager_count) 找出最大人數。
  8. 外層查詢回傳達到最大值的公司;若有同分公司,會全部列出。

解題技巧與常見陷阱

🔒

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

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊