2019春招美团笔试
昨晚筆試,今天來(lái)做筆試總結(jié)
選擇題:剛開始是非技術(shù)的選擇題
技術(shù)性選擇題
編程題
首先記編程題:
題目好像是:一同學(xué)跑繞n*n的格子外圍跑步,每次跑n+1步,然后在第n+1步的地方做一標(biāo)記,問(wèn)其做第幾個(gè)標(biāo)記的時(shí)候遇到重復(fù)標(biāo)記的情況(包括重復(fù)格子那一次)。
輸入:兩行,第一行表示有m種格子操場(chǎng)
? ??? ??第二行表示格子的規(guī)模,即各種格子操場(chǎng)的n
輸出:m行,每一行對(duì)應(yīng)一種格子操場(chǎng)的標(biāo)記次數(shù)
如輸入:
? ??? ??2
? ??? ??4 8
輸出:
? ??? ??17
? ??? ??33
思路:首先,這是一個(gè)循環(huán)遍歷格子的過(guò)程,而且統(tǒng)計(jì)第一次重復(fù)遍歷同一格時(shí)已經(jīng)標(biāo)記過(guò)的格子數(shù)。
故采用取余和map接口的方法進(jìn)行程序編寫,代碼如下:
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處理多個(gè)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鍵值對(duì)的不可重復(fù)性來(lái)進(jìn)行判斷 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 }如有紕漏,望提出。
然后是選擇題中自己不熟悉的一些知識(shí)點(diǎn):
1.無(wú)向圖的深度遍歷
? ??? ??使用深度優(yōu)先搜索來(lái)遍歷這個(gè)圖的過(guò)程具體是:首先以一個(gè)未被訪問(wèn)過(guò)的頂點(diǎn)為起始頂點(diǎn),沿當(dāng)前頂點(diǎn)的邊走到未訪問(wèn)過(guò)的頂點(diǎn):當(dāng)沒(méi)有未訪問(wèn)的頂點(diǎn)時(shí),則回到上一個(gè)頂點(diǎn),繼續(xù)試探訪問(wèn)別的頂點(diǎn),直到所有的頂點(diǎn)都被訪問(wèn)過(guò)。顯然,深度優(yōu)先遍歷是沿著圖的某一條分支遍歷直到末端,然后回溯,在沿著另一條進(jìn)行同樣的遍歷,直到所有的頂點(diǎn)都被訪問(wèn)過(guò)為止。
? ??? ??原文:https://blog.csdn.net/weixin_42678507/article/details/83114549
? ??? ??補(bǔ)充:java遍歷樹(深度優(yōu)先+廣度優(yōu)先)http://www.cnblogs.com/toSeeMyDream/p/5816682.html
2.for循環(huán)的實(shí)際執(zhí)行過(guò)程
? ??? ??java中for循環(huán)i++和++i的區(qū)別
? ??? ??首先是for循環(huán)的執(zhí)行過(guò)程
for(A;B;C) {D; }即
為此,在for循環(huán)中i++和++i的執(zhí)行結(jié)果是相同的,但是在Java中i++語(yǔ)句是需要一個(gè)臨時(shí)變量取存儲(chǔ)返回自增前的值,而++i不需要。這樣就導(dǎo)致使用i++時(shí)系統(tǒng)需要先申請(qǐng)一段內(nèi)存空間,然后將值賽如進(jìn)去,最后不用了才去釋放。多了這么一系列操作時(shí)間當(dāng)然多了啊,最后建議大家以后在寫for循環(huán)且不影響邏輯的情況下多使用++i,少使用i++。
參考:https://blog.csdn.net/github_37847975/article/details/77369851
3.異常拋出時(shí)的過(guò)程
4.重載、覆蓋
? ??? ??重載和覆蓋是java多態(tài)性的不同的表現(xiàn)方式。其中,重載是在一個(gè)類中多態(tài)性的一種表現(xiàn),是指在一個(gè)類中定義了多個(gè)同名的方法,他們或有不同的參數(shù)個(gè)數(shù),或有不同的參數(shù)類型,或參數(shù)順序不同。與訪問(wèn)修飾符和返回值類型無(wú)關(guān)。在使用重載時(shí),需要注意以下幾點(diǎn):
? ??? ??1)??重載是通過(guò)不同的方法參數(shù)來(lái)區(qū)分的,例如不同的參數(shù)個(gè)數(shù),不同的參數(shù)類型或者不同的參數(shù)順序。
? ??? ??2)??重載和方法的訪問(wèn)修飾符、返回值類型、拋出的異常類型無(wú)關(guān)。
? ??? ??3)??對(duì)于繼承來(lái)說(shuō),如果父類方法的訪問(wèn)修飾符為private,那么就不能在子類對(duì)其重載;如果子類也定義了一個(gè)同名的函數(shù),這只是一個(gè)新的方法,不會(huì)達(dá)到重載的效果。
覆蓋是指子類函數(shù)覆蓋父類函數(shù)。覆蓋一個(gè)方法并對(duì)其進(jìn)行重寫,以達(dá)到不同的作用。在使用覆蓋時(shí)要注意以下幾點(diǎn):
? ??? ??1)??子類中的覆蓋方法必須要和父類中被覆蓋的方法有著相同的函數(shù)名和參數(shù)。
? ??? ??2)??子類中覆蓋方法的返回值必須和父類中被覆蓋方法的返回值相同。
? ??? ??3)??子類中覆蓋方法所拋出的異常必須要和父類中被覆蓋方法所拋出的異常一致。
? ??? ??4)??父類中被覆蓋的方法不能為private,否則其子類只是定義了一個(gè)方法,并沒(méi)有對(duì)其覆蓋。
覆蓋和重載的區(qū)別如下:
? ??? ??1)??覆蓋是子類和父類之間的關(guān)系,是垂直關(guān)系;重載是同一個(gè)類中方法之間的關(guān)系,是水平關(guān)系。
? ??? ??2)??覆蓋只能由一對(duì)方法產(chǎn)生關(guān)系,重載是多個(gè)方法之間的關(guān)系。
? ??? ??3)??覆蓋要求參數(shù)列表相同,重載要求參數(shù)列表不同。
? ??? ??4)??覆蓋關(guān)系中,調(diào)用方法是根據(jù)對(duì)象的類型來(lái)決定;而重載關(guān)系是根據(jù)調(diào)用時(shí)的實(shí)參表與形參表來(lái)選擇方法體的。
覆蓋和重載的區(qū)別:https://blog.csdn.net/qiuchaoxi/article/details/79790736
?5.多態(tài)中子類和父類的關(guān)系
? ? ??? ??java多態(tài)性,父類引用指向子類對(duì)象
? ? ??? ??使用父類類型的引用指向子類的對(duì)象;?
?? ??? ?? 該引用只能調(diào)用父類中定義的方法和變量;?
? ? ??? ??如果子類中重寫了父類中的一個(gè)方法,那么在調(diào)用這個(gè)方法的時(shí)候,將會(huì)調(diào)用子類中的這個(gè)方法;(動(dòng)態(tài)連接、動(dòng)態(tài)調(diào)用)?
? ? ??? ??變量不能被重寫(覆蓋),”重寫“的概念只針對(duì)方法,如果在子類中”重寫“了父類中的變量,那么在編譯時(shí)會(huì)報(bào)錯(cuò)。
https://www.cnblogs.com/shilin/p/4784862.html
6.protected和private的訪問(wèn)權(quán)限
? ??? ??private修飾詞,表示成員是私有的,只有自身可以訪問(wèn);
? ??? ??protected,表示受保護(hù)權(quán)限,體現(xiàn)在繼承,即子類可以訪問(wèn)父類受保護(hù)成員,同時(shí)相同包內(nèi)的其他類也可以訪問(wèn)protected成員。
? ??? ??無(wú)修飾詞(默認(rèn)),表示包訪問(wèn)權(quán)限(friendly,?java語(yǔ)言中是沒(méi)有friendly這個(gè)修飾符的,這樣稱呼應(yīng)該是來(lái)源于c++ ),同一個(gè)包內(nèi)可以訪問(wèn),訪問(wèn)權(quán)限是包級(jí)訪問(wèn)權(quán)限;
? ??? ??public修飾詞,表示成員是公開的,所有其他類都可以訪問(wèn);
7.相除和取余
? ??? ??a = 13 / 5,a = 2,其實(shí)就是數(shù)學(xué)上的13 / 5 ,結(jié)果為2。
? ??? ??b = 13 % 5,b = 3,這也是數(shù)學(xué)上的運(yùn)算,得出余數(shù)為3。
? ??? ??c = 5 / 13,c = 0,因?yàn)楸怀龜?shù)小于除數(shù),結(jié)果可以看成0.x,但是int類型是整數(shù)類型,所以結(jié)果只為0。
? ??? ??d = 5 % 13,d = 5,數(shù)學(xué)上規(guī)定:如果被除數(shù)比除數(shù)小,商是0,余數(shù)就是被除數(shù)本身。
? ??? ??取余運(yùn)算的符號(hào)是根據(jù)第一個(gè)運(yùn)算數(shù)決定的,-13 % 5結(jié)果是-3,而13 % -5結(jié)果則是3。
? ??? ??原文:https://blog.csdn.net/sinat_41152339/article/details/81054379
?
轉(zhuǎn)載于:https://www.cnblogs.com/10081-AA/p/10764725.html
總結(jié)
以上是生活随笔為你收集整理的2019春招美团笔试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Magics 23.0测量工具使用方法
- 下一篇: 湖北省小学生计算机大赛,市教育局关于组织