2019春招美团笔试

昨晚笔试,今天来作笔试总结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;
}

  1. 进入循环执行A;//只是进入的时候执行.
  2. 执行B;//条件为真才执行D,否则就跳出for了.
  3. 执行D;
  4. 执行C;
  5. 再回到第2步开始执行

为此,在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

相关文章
相关标签/搜索