# 法務局高級技術員資訊(應用軟件開發)範疇 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)