# 法務局高級技術員資訊(應用軟件開發)範疇 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; //跑完整個迴圈、快慢指針沒有重合
}
// -----------------------------//
}
```
