JAVA阿里校招技术类笔试试题及答案分析

技术类笔试试题

1.       下列运算中优先级别最高的是(C

A:&

B:&&

C:!=

D:?:

算符优先级表

优先级

运算符

结合性

1

() [] .

从左到右

2

! +()  -() ~ ++ --

从右向左

3

* / %

从左向右

4

+() -()

从左向右

5

<< >> >>>

从左向右

6

< <= > >= instanceof

从左向右

7

==   !=

从左向右

8

&(按位与)

从左向右

9

^

从左向右

10

|

从左向右

11

&&

从左向右

12

||

从左向右

13

?:

从右向左

14

= += -= *= /= %= &= |= ^=  ~=  <<= >>=   >>>=

从右向左

 

2.       若用数组S[1..n]作为两个栈S1S2的共同存储结构,对任何一个栈,只有当S全满时才不能做入栈操作,为这两个栈分配空间的最佳方案是(C

 

AS1的栈底位置为0s2的栈底位置是n+1                      

BS1的栈底位置为0s2的栈底位置是n/2                       

CS1的栈底位置为1s2的栈底位置知是n

DS1的栈底位置为1s2的栈底位置是n/2

 

3.       经过强制类型转换后,变量a,b的值分别是(Bshort a=128;byte b=(byte)a;

A:  128               127

B:  128               -128

C:  128               128

D:  编译错误

 

4.       JAVADaemon线程,setDaemon()设置必须要(A

A:在start之前

B:在start之后

C:前后都可以

用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。
    
守护线程:这个线程具有最低的优先级,守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。
     setDaemon(boolean on)
方法可以方便的设置线程的Daemon模式,trueDaemon模式,falseUser模式。

      setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon方法将测试该线程是否为守护线程。值得一提的是,当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。

main线程结束,守护线程自动结束

 

5.       下列不属于JAVA语言鲁棒性(健壮性)特点的是(B

Ajava能检查程序运行在编译和运行时的错误

Bjava能运行虚拟机实现跨平台

Cjava自己操纵内存减少了内存出错的可能性

Djava还实现了真数组,避免了覆盖数据的可能

鲁棒性 1.Java在编译和运行程序时 ,都要对可能出现的问题进行检查 ,以消除错误的产生。2.它提供自动垃圾收集来进行内存管理 ,防止程序员在管理内存时容易产生的错误。3.通过集成的面向对象的例外处理机制 ,在编译时,Java提示出可能出现但未被处理的例外 ,帮助程序员正确地进行选择以防止系统的崩溃。4.另外, Java在编译时还可捕获类型声明中的许多常见错误 ,防止动态运行时不匹配问题的出现

 

6.       有以下一个对象:

import java.io.Serializable;

public class DataObject implements Serializable{

    private static int i = 0;

    private String word="";

    public static void setI(int i) {

       DataObject.i = i;

    }

    public void setWord(String word) {

       this.word = word;

    }

}

创建一个如下方式的DataObject: DataObject object = new DataObject();

object.setWord(“123”);object.setI(2);将此对象序列化文件,并在另一个JVM中读取文件,进行反序列化,请问此时读出的DataObject对象中的wordi的值分别是(D

A” ”,0

B” ”,2

C”123 ”,2

D”123 ”,0

程序测试值为D

这道题里面没有正确答案。原因在于:

1.同一个jvmDataObject 对象会共享i值,所以如果在同一个里面read,那么就是read时的i值(也可能不是2呢)

2.序列化不适用于statictransient变量,所以没有传到另一个jvmi值。

3.当你读取的时候,如果之前已经有别的对象赋值给i,那读到的就是那个i值,而不是0。如果没有,那读到的就是0。所以确切的讲,是另一个jvm中读取时的i值。

 

7.       基于Servlet API如何实现转向时不在地址栏中显示转向后的地址(C

Aredirect()

BsendRedirect()

Cforward()

Dtransform()

 

8.       假设有如下代码:String s="hello"; String t="hello"; char c[]={'h','e','l','l','o'};下列返回false语句的是(B

As.equals(t)

Bt.equals(c)

Cs==t

Dt.equals(new String(“hello”))

==比较的是两个引用是不是指向同一个内存地址,equals比较的是两个引用的字面值是不是相同

 

9.       下面代码的运行结果是:B

class B extends Object{

    static {System.out.println("Load B");}

    public B(){

       System.out.println("Create B");

    }

}

 

class A extends B{

    static {System.out.println("Load A");}

    public A(){

       System.out.println("Create A");

    }

}

public class Test{

       public static void  main(String[] args){

           new A();

       }

}

ALoad B->Create B->Load A->Create A

BLoad B-> Load A-> Create B ->Create A

CLoad B-> Create B -> Create A-> Load A

DCreate B -> Create A -> Load B-> Load A

<span

你可能感兴趣的:(java,jvm,C++,c,C#)