360集团2016JAVA研发工程师内推笔试题

 360集团2016JAVA研发工程师内推笔试题

题目来源:牛客网  https://www.nowcoder.com/test/question/analytic?tid=21122281

1.执行以下程序后的输出结果是()

public class Test {
public static void main(String[] args) {
    StringBuffer a = new StringBuffer("A"); 
    StringBuffer b = new StringBuffer("B"); 
    operator(a, b); 
    System.out.println(a + "," + b); 
} 
public static void operator(StringBuffer x, StringBuffer y) { 
    x.append(y); y = x; 
}
}

答案:

解析:

题目主要考察了JAVA方法的值传递,方法operator并没有改变a,b变量的引用值,改变的只是方法参数的引用,看下面的图解

如下图,简易画了一下,没有画出内存中的具体存储,只给出逻辑关系,可以看出operator方法改变的是a所指向的内存中的数据和方法中x,y参数的指向,并没有修改a,b的引用的值,所以选择D

 

2.结构型模式中最体现扩展性的模式是()

答案:

解析:

设计模式分为三大类:
创建型设计模式:单例模式,工厂方法模式,简单工厂模式,建造者模式、原型模式
结构型设计模式:适配器模式,代理模式,AOP、装饰器模式、
行为型设计模式:观察者模、板方法模式
装饰模式的作用就是为了:
1.扩展功能
2.不用继承
 
3.在Linux中,对file.sh文件执行#chmod 645 file.sh中,该文件的权限是()
答案:

解析:

Linux下权限对应的数字为:
r =4, w =2, x =1
所以,6就是rw-
4就是r--
5就是r-x
 
4.TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为1000,确认序列号为2000,请问第二次握手报文的发送序列号和确认序列号分别为?
答案:

解析:

再TCP中,ack确认号代表希望得到的序号,而在本题中第三次握手发送的序列号为1000,由此可以说明第二次握手的确认号为1000,同时由于第三次握手的确认号为2000,由此可以说明希望收到的序号为2000,那么证明第二次发送的序号为1999,所以选择B

 

5.下列TCP连接建立过程描述正确的是:

答案:

解析:

A.TCP客户端向服务端发送SYN保文端,客户进入SYN_SENT状态,不是服务端进入该状态

B.服务端在收到客户端发来的ACK确认后,同时向客户端发回ACK确认后服务端才会进入SYN_RCVD状态

D.服务端未收到客户端确认将会超时重传

 

6.属于网络112.10.200.0/21的地址是()

答案:

解析:

该网络使用了无分类编址CIDR,/21表示前21位为网络号,下面给出图解,如图主机号为110时IP地址为A项

 

7.以下java程序代码,执行后的结果是()

java.util.HashMap map=new java.util.HashMap(); 
map.put("name",null);      
map.put("name","Jack");
System.out.println(map.size());

答案:

解析:

在JAVA中map的一个键只能够出现一次,也就是说当有一个相同的键时会进行替换,所以这个name键所对应的值为Jack,所以map大小为1

 

8.以下java程序代码,执行后的结果是()

public class Test {
    public static void main(String[] args) {   
        Object o = new Object() {  
             public boolean equals(Object obj) {  
                 return true; 
         }
     };   
     System.out.println(o.equals("Fred"));
     }
}

答案:

解析:

上述代码中重写了equals方法,方法接收参数直接返回true,不进行判断,所以选择B

 

9.代码片段: 

byte b1=1,b2=2,b3,b6; 
final byte b4=4,b5=6; 
b6=b4+b5; 
b3=(b1+b2); 
System.out.println(b3+b6);

答案:

解析:

在java中没有使用final修饰的变量会被自动转型,byte-->int,而使用了final修饰就不会被转型,所以b6=b4+b5;是正确的,而b3=(b1+b2); 由于b1,b2没有使用final修饰在运算过程中会被自动转型为int,结果为int类型,赋值给byte,大范围赋值给小范围变量会出现编译错误。

 

10.下面代码运行结果是()

public class Test{ 
    public int add(int a,int b){   
         try {
             return a+b;      
         } 
        catch (Exception e) {  
            System.out.println("catch语句块");
         }
         finally{ 
             System.out.println("finally语句块");
         }
         return 0;
    } 
     public static void main(String argv[]){ 
         Test test =new Test(); 
         System.out.println("和是:"+test.add(9, 34)); 
     }
}

答案:

解析:

在try...catch...finally语句中,finally无论是否发生异常都会被执行,并且发生在return之前。

1.finally{}代码块比return先执行。
2.多个return是按顺序执行的的,多个return执行了一个后,后面的return就不会执行了。
3. 记住一点,不管有不有异常抛出, finally都会在return返回前执行。
 
11.以下情况下不一定出现TCP分节RST的情况是:
答案:

解析:

对于这个题目,没有仔细了解过TCP的RST重置的出现条件,下面是看他人给的解释,需要记一下(以下四种情况会发送RST包)

四种情况会发送RST包:
1、端口未打开
2、请求超时
3、提前关闭
4、在一个已关闭的socket上收到数据
 
12.一个数据库中现有A,B,C,D,E,F六个语句但目前这个数据库是不协调的,必须删除某些语句才能恢复数据库的协调性。已知:(1)如果保留语句A,那么必须保留语句B和C。(2)如果保留语句E,则必须同时删除语句D和语句C。(3)只有保留语句E,才能保留语句F。(4)语句A是重要的信息,不能删除。以上各项如果为真,则以下哪项一定为真?
答案:

解析:

这个题目是一个简单的逻辑题目,可以使用离散数学的知识,也可以直接推断一下即可

 

13.下列关于静态工厂和工厂方法表述错误的是:()

答案:

解析:

开闭原则:对扩展开放,对修改封闭。静态工厂增加需要是修改源代码,对修改不封闭,不符合开闭原则。

 

14.设有一个用数组Q[1..m]表示的环形队列,约定f为当前队头元素在数组中的位置,r为队尾元素的后一位置(按顺时针方向),若队列非空,则计算队列中元素个数的公式应为()

答案:

解析:

这个题目是由于不认真导致的,用尾减去头,加m的原因是防止尾大于头,(rear - front + m)% m

 

15.以下程序是用辗转相除法来计算两个非负数之间的最大公约数:

long long gcd(long long x,long long y){ 
     if(y==0) 
        return x; 
     else return gcd(y,x%y);
}

答案:

解析:

辗转相除法时间复杂度为logn

 

16.计算斐波那契数列第n项的函数定义如下:

int fib(int n){ 
     if(n==0) 
        return 1; 
     else if(n==1) 
        return 2; 
     else 
        return fib(n-1)+fib(n-2);
}

若执行函数调用表达式fib(10),函数fib被调用的次数是:

答案:

解析:

C(0) = 1

C(1) = 1

C(2) = 1+1+1 = 3

c(3) =  3+1+1 = 5

c(4) =  5+3+1 = 9

...

c(9) =  67+41+1 =  109

c(10) = 109+67+1 = 177

 

17.设图G的相邻矩阵如下图:则G的顶点数和边数分别为:

0 1 1 1 1
1 0 1 0 0
1 1 0 1 1
1 0 1 0 1
1 0 1 1 0

答案:

解析:

图的邻接矩阵是一个长宽相等的矩阵,边长代表顶点的个数,矩阵中的1代表两点之间有边相连,矩阵中一共有16个1,所以只有8条边,因为1--2相连,那么2--1也一定相连,可以看一下数据结构就可以理解了。

 

小白创作,大佬勿喷,谢谢合作

 

 

 

 

 

posted @ 2019-02-15 17:33  Bug研发工程师  阅读(537)  评论(0编辑  收藏  举报