昨晚筆試,今天來作筆試總結html
選擇題:剛開始是非技術的選擇題java
技術性選擇題c++
編程題git
首先記編程題:github
題目好像是:一同窗跑繞n*n的格子外圍跑步,每次跑n+1步,而後在第n+1步的地方作一標記,問其作第幾個標記的時候遇到重複標記的狀況(包括重複格子那一次)。編程
輸入:兩行,第一行表示有m種格子操場函數
第二行表示格子的規模,即各類格子操場的nspa
輸出:m行,每一行對應一種格子操場的標記次數.net
如輸入:code
2
4 8
輸出:
17
33
思路:首先,這是一個循環遍歷格子的過程,並且統計第一次重複遍歷同一格時已經標記過的格子數。
故採用取餘和map接口的方法進行程序編寫,代碼以下:
1 import java.util.ArrayList; 2 import java.util.Arrays; 3 import java.util.List; 4 import java.util.Map; 5 import java.util.Scanner; 6 import java.util.TreeMap; 7 8 public class Main { 9 public static void main(String[] args) { 10 Scanner sc = new Scanner(System.in); 11 Main aa = new Main(); 12 int n = sc.nextInt(); 13 if (n == 0) 14 System.out.println(0); 15 int[] a = new int[n]; 16 while (sc.hasNextInt()) {//注意while處理多個case 17 int b = aa.dianshu(sc.nextInt()); 18 System.out.println(b); 19 } 20 } 21 public int dianshu(int n){ 22 if (n == 0){ 23 return 0; 24 } 25 Map<Integer, Integer> map = new TreeMap<Integer, Integer>();//利用map鍵值對的不可重複性來進行判斷 26 while(true){ 27 for(int i=0;i%(n*4)<=n*n+1;i=i+n+1){ 28 int s = i%(n*4);//取餘操做 29 if(map.containsKey(s)){ 30 return map.size()+1; 31 } 32 else{ 33 map.put(s, 1); 34 } 35 } 36 } 37 } 38 }
若有紕漏,望提出。
而後是選擇題中本身不熟悉的一些知識點:
1.無向圖的深度遍歷
使用深度優先搜索來遍歷這個圖的過程具體是:首先以一個未被訪問過的頂點爲起始頂點,沿當前頂點的邊走到未訪問過的頂點:當沒有未訪問的頂點時,則回到上一個頂點,繼續試探訪問別的頂點,直到全部的頂點都被訪問過。顯然,深度優先遍歷是沿着圖的某一條分支遍歷直到末端,而後回溯,在沿着另外一條進行一樣的遍歷,直到全部的頂點都被訪問過爲止。
原文:https://blog.csdn.net/weixin_42678507/article/details/83114549
補充:java遍歷樹(深度優先+廣度優先)http://www.cnblogs.com/toSeeMyDream/p/5816682.html
2.for循環的實際執行過程
java中for循環i++和++i的區別
首先是for循環的執行過程
for(A;B;C) { D; }
即
爲此,在for循環中i++和++i的執行結果是相同的,可是在Java中i++語句是須要一個臨時變量取存儲返回自增前的值,而++i不須要。這樣就致使使用i++時系統須要先申請一段內存空間,而後將值賽如進去,最後不用了纔去釋放。多了這麼一系列操做時間固然多了啊,最後建議你們之後在寫for循環且不影響邏輯的狀況下多使用++i,少使用i++。
參考:http://www.javashuo.com/article/p-mbelvjnb-kn.html
3.異常拋出時的過程
4.重載、覆蓋
重載和覆蓋是java多態性的不一樣的表現方式。其中,重載是在一個類中多態性的一種表現,是指在一個類中定義了多個同名的方法,他們或有不一樣的參數個數,或有不一樣的參數類型,或參數順序不一樣。與訪問修飾符和返回值類型無關。在使用重載時,須要注意如下幾點:
1) 重載是經過不一樣的方法參數來區分的,例如不一樣的參數個數,不一樣的參數類型或者不一樣的參數順序。
2) 重載和方法的訪問修飾符、返回值類型、拋出的異常類型無關。
3) 對於繼承來講,若是父類方法的訪問修飾符爲private,那麼就不能在子類對其重載;若是子類也定義了一個同名的函數,這只是一個新的方法,不會達到重載的效果。
覆蓋是指子類函數覆蓋父類函數。覆蓋一個方法並對其進行重寫,以達到不一樣的做用。在使用覆蓋時要注意如下幾點:
1) 子類中的覆蓋方法必需要和父類中被覆蓋的方法有着相同的函數名和參數。
2) 子類中覆蓋方法的返回值必須和父類中被覆蓋方法的返回值相同。
3) 子類中覆蓋方法所拋出的異常必需要和父類中被覆蓋方法所拋出的異常一致。
4) 父類中被覆蓋的方法不能爲private,不然其子類只是定義了一個方法,並無對其覆蓋。
覆蓋和重載的區別以下:
1) 覆蓋是子類和父類之間的關係,是垂直關係;重載是同一個類中方法之間的關係,是水平關係。
2) 覆蓋只能由一對方法產生關係,重載是多個方法之間的關係。
3) 覆蓋要求參數列表相同,重載要求參數列表不一樣。
4) 覆蓋關係中,調用方法是根據對象的類型來決定;而重載關係是根據調用時的實參表與形參表來選擇方法體的。
覆蓋和重載的區別:https://blog.csdn.net/qiuchaoxi/article/details/79790736
5.多態中子類和父類的關係
java多態性,父類引用指向子類對象
使用父類類型的引用指向子類的對象;
該引用只能調用父類中定義的方法和變量;
若是子類中重寫了父類中的一個方法,那麼在調用這個方法的時候,將會調用子類中的這個方法;(動態鏈接、動態調用)
變量不能被重寫(覆蓋),」重寫「的概念只針對方法,若是在子類中」重寫「了父類中的變量,那麼在編譯時會報錯。
http://www.javashuo.com/article/p-vbfyihsa-ey.html
6.protected和private的訪問權限
private修飾詞,表示成員是私有的,只有自身能夠訪問;
protected,表示受保護權限,體如今繼承,即子類能夠訪問父類受保護成員,同時相同包內的其餘類也能夠訪問protected成員。
無修飾詞(默認),表示包訪問權限(friendly, java語言中是沒有friendly這個修飾符的,這樣稱呼應該是來源於c++ ),同一個包內能夠訪問,訪問權限是包級訪問權限;
public修飾詞,表示成員是公開的,全部其餘類均可以訪問;
7.相除和取餘
a = 13 / 5,a = 2,其實就是數學上的13 / 5 ,結果爲2。
b = 13 % 5,b = 3,這也是數學上的運算,得出餘數爲3。
c = 5 / 13,c = 0,由於被除數小於除數,結果能夠當作0.x,可是int類型是整數類型,因此結果只爲0。
d = 5 % 13,d = 5,數學上規定:若是被除數比除數小,商是0,餘數就是被除數自己。
取餘運算的符號是根據第一個運算數決定的,-13 % 5結果是-3,而13 % -5結果則是3。
原文:https://blog.csdn.net/sinat_41152339/article/details/81054379