---
# System prepended metadata

title: 法務局高級技術員資訊（應用軟件開發）範疇 6缺
tags: [考試, 政府工]

---

# 法務局高級技術員資訊（應用軟件開發）範疇 6缺
###### tags: `政府工`, `考試`
- 筆試
- 報考人數 : 129人 - 6缺
- 範圍
```
16.1 第13/2019號法律《網絡安全法》、《網絡安全——管理基準規範》及《網絡安全——事故預警、應對及通報規範》；

16.2 第2/2020號法律《電子政務》及第24/2020號行政法規《電子政務施行細則》；

16.3 前端React.JS/Vue.JS框架及網頁系統設計、規劃及開發的專業知識，包括HTML 5、CSS 3、JavaScript ES6；

16.4 程式設計及開發，包括Java（包括運用Spring Framework開發框架）、Node.js、Python、PHP；

16.5 用戶端（C/S）程式設計及開發，包括C#、Java；

16.6 運維開發（DevOps）、持續集成（Continuous Integration）（CI）和持續交付（Continuous Delivery）（CD）的專業知識；

16.7 Oracle、Microsoft SQL Server數據庫的設計及開發、結構化查詢語言（SQL）專業知識；

16.8 雲計算和大數據技術、分析及應用；

16.9 虛擬化及容器（Container）技術專業知識；

16.10 資訊系統開發項目的需求分析、設計及管理的專業知識。
```
- 心得
:::success
第一次考，題目難度還可以，沒有早前前輩分享的難度，但陰濕位好多，要做得比較細心，覆盤時先發現到。

考試內容跨度大，要掌握的知識很多，但最後集中考左Java、Spring Boot、SQL、PHP+Javascript。

認為Java和SQL的熟識程度要很高，後期題目全需要手寫Code，對於平日多用IDE自動補全，會有很大的影響。

知識點多為業務相關且較為深入，用到的框架較多，語言較多，要多注意各種寫法。
另外本次沒有出採購和建議書相關內容，但建議未來都要補一補以免下次出。
:::

:::warning
如有朋友想補充歡迎隨時留言。

鼓舞分享，當你肯分享出來，就會有人分享返比你。
:::


## 題型
- 選擇題  
| - 20題 - 30分  
- 簡答題(手寫Coding)  
| - 6 題 - 38分  
- 詳答題(手寫Coding)  
| - 4 題 - 32分  

## 語言 
- MSSQL
- JAVA
- Spring Boot
- C#
- PHP
- Javascript
> 今次重點考左JAVA、SQL、PHP。

# 選擇題

2題法律，很簡單查自備資料即可

- 下列哪項可以防止CSRF - Cross Site Request Forgery( 跨站請求偽造)攻擊(?)  
A. `增加HTTP Header...(?)`  
B. ....  
C. `加入驗證token`[*]  
D. ...  

- CSRF和XSS的分別  
A. ...  
B. ...  
C. XSS對瀏覽器對用戶(?)、CSRF是Server對用戶(?)  
D. CSRF是瀏覽器對用戶(?)、XSS是Server對用戶(?)  

> Ref. https://medium.com/%E7%A2%BC%E8%BE%B2%E8%83%8C%E5%8C%85%E5%AE%A2/cors-csrf-xss-%E4%BB%8B%E7%B4%B9%E8%88%87%E9%98%B2%E7%A6%A6%E6%96%B9%E6%B3%95-a1f5c55d96a1

- Spring Boot 註記不包含  
A. @Required  
B. @Component  
C. @Controller  
D. `答案`  

- 哪一個雲安全性最高  
A. `私有雲`  
B. 公有雲  
C. .  
D. .  

- 雲端服務不包含  
A. IasS  
B. PasS  
C. SaaS  
D. `答案`  

其他不太記得，但選擇題都不難。  

# 簡答 (Keep Updating)
全為手寫Coding題型，集中問了Javascript、PHP、JAVA、SQL

---
### 1. 提供`url_1`、`url_2`，請使用`Javascript`向`url_1`發出`Post`請求、若不成功則向`url_2`發出、再不成功`echo Fail`
```Javascript
// Javascrtip 發送 GET / POST 請求方法
// 使用 XMLHttpRequest
// 1. 創建對像
// 2. 發送
// 3. 接收回應

url_1 = http://abc.com
url_2 = http://efg.com

// 1. 創建對像
var httpRequest = new XMLHttpRequest();

// 2. 連接和發送
httpRequest.open('POST', url_1, true);
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//post方式必須設置請求頭（在建立連接後設置請求頭）
httpRequest.send('name=teswe&ee=ef');//發送請求頭體寫在send中

// 3. 檢查State Code 接收回應 - 4 + 200 = 正常
httpRequest.onreadystatechange = function(){
    if(httpRequest.readyState == 4 && httpRequest.readyState == 200){return 1;}
    else{
        //若失敗向 url_2 發送
        httpRequest.open('POST', url_1, true);
        httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        httpRequest.send('name=teswe&ee=ef');
        if(httpRequest.readyState == 4 && httpRequest.readyState == 200){return 1;} 
        
        //再失敗 echo Fail
        else{console.log("Fail");}
        }
}
```
---

### 2. 提供一個Java ArrayList，刪除`值為10`的元素
```JAVA
import java.util.ArrayList;
import java.util.ListIterator;

public class TestArrayList {
    public static void main(String[] args) {

        ArrayList<Integer> list = new ArrayList<>();

        int[] add_data = {1, 2, 3, 4, 10, 13, 16, 10, 25, 13, 2, 3, 10, 4, 10, 24, 11};
        for(int j=0; j<add_data.length; j++){
            list.add(add_data[j]);
        }

        System.out.println(list);

        // ---------  作答部分  ---------//

        for(int i=0; i<list.size(); i++){
            int list_data = list.get(i);
            if(list_data == 10){
                list.remove(i);
            }
        }
        // -----------------------------//

        System.out.println(list);
        
        // ------------ 題目2:以Iterator實作 ------------ //

        ArrayList<Integer> list_2 = new ArrayList<>();
        for(int j=0; j<add_data.length; j++){
            list_2.add(add_data[j]);
        }

        ListIterator<Integer> iter = list_2.listIterator();
        for(Integer it : list_2){System.out.print(it + " ");}
        System.out.println();

        // ---------  作答部分  ---------//

        Integer target = 10;
        while(iter.hasNext()){
            if(target.equals(iter.next())){
                iter.remove();
            }
        }
        // -----------------------------//
        
        for(Integer it : list_2){System.out.print(it + " ");}
    }
}
```
---
### 3. Java 問輸出 Try Catch Finally
Ans : 
> 31  
> 3  
> 1  
```JAVA
public class trycatchCase {
    public static void main(String[] args) {
        System.out.println(test1());
        System.out.println(test2());
        System.out.println(test3());
    }

    public static int test1(){
        try{
            return 1;
        }catch (Exception e){
            return 2;
        }finally {
            System.out.print("3");;
        }
    }

    public static int test2(){
        try{
            return 1;
        }catch (Exception e){
            return 2;
        }finally {
            return 3;
        }
    }

    public static int test3(){
        try{
            int i = 1;
            return i;
        }catch (Exception e){
            return 3;
        }finally {
            int i = 2;
        }
    }
}
```
---
### 4. Java 線程問題，問輸出
- 中間包含synchronized鎖
- thread.sleep()


---
### 5. SQL連表查詢、有三張表。
- PRIMARY KEY為身份證(ID)
- 需要跨表查詢
- 查找今年是18歲的人、並且身份證有效、且住在某個地方中
- 日期用varchar記、YYYYMMDD <- 吾知呢度點做判斷是18歲
- 最後要統計共有幾個符合條件的人

---
### 6. PHP事務問題，提供了觀察者模式和修飾者模式的框架，共2頁Code，問輸出。
PHP太耐無用，而且未學到框架Orz..


# 詳答題
### 1. C# 讀取文件，吾識
---
### 2. Java 有2個員工會出去開會，回來後會填寫外出記錄，請找出只有只有1個人在辦公室的時間，格式如下  
*[外出時間, 回來時間]*
```
員工A : [09:13, 09:35], [11:25, 12:00], ...
員工B : [11:15, 11:55], [09:30, 10:00], ...

//他們填的時間不一定按順序
//思路，先排序，但考慮可能會有A出門的次數比B多，也不知如何處理
員工A : [09:13, 09:35], [11:25, 12:00], [14:45, 15:15]...
員工B : [09:30, 10:00], [11:15, 11:55], 

輸出(有D吾記得)  : [09:13, ]
```

---
### 3. PHP題目，吾識

---
### 4. Java 判斷 LinkedList 是否成環
思路：用 1快 1慢 指針，如果成環，那麼指針必定會在某時刻相遇
>Ref. https://www.bilibili.com/video/BV1NA411Y7AX
```JAVA
public class LinkedListCycle {
    //題目先給定 Node 結構
    class ListNode {
        int val;
        ListNode next;
        //Constructor
        ListNode(int x){
            this.val = x;
            next = null;
        }
    }

    // ---------  作答部分  ---------//
    
	public boolean hasCycle(ListNode head){
	    // LinkedList中沒有節點，永不成環
	    if(head == null){
                return false;
	    }

		ListNode slow = head.next;      //慢指針每次走1步
		ListNode fast = head.next.next; //快指針每次走2步

		while(fast.next != null && fast.next.next != null){
		    slow = slow.next;
		    fast = fast.next.next;
		    //判斷快慢指針有否重合
		    if(slow == fast){
			    return true; //有、則有環
		    }
		}
        
	    return false; //跑完整個迴圈、快慢指針沒有重合
        }


    // -----------------------------//
}
```
![Img](https://raw.githubusercontent.com/mhk00123/my-img/main/2022/202201222337905.png)
