java基础10题

1.关于容器下面说法正确的是? ( )
A.列表(List)和集合(Set)存放的元素都是可重复的。
B.列表(List)和集合(Set)存放的元素都是不可重复的。
C.映射(Map)中key是可以重复的。
D.映射(Map)中value是可以重复的。
2.下面这三条语句

System.out.println(“is ”+ 100 + 5)System.out.println(100 + 5 +“ is”)System.out.println(“is ”+ (100 + 5))

的输出结果分别是? ( )
3.下列说法正确的是()
A.WebLogic中开发消息Bean的non-persistent 方式可以保证消息的可靠
B.EJB容器发生错误,non-persistent方式下JMS容器仍然会将消息发送
C.EJB容器发生错误,persistent方式下JMS容器仍然会将消息发送
D.EJB容器发生错误,两种方式下JMS容器仍会在MDB可用的时候将消息发送
4.下面代码的运行结果是( )

public class Arraytest{
    int a[] = new int[6];
    public static void main ( String arg[] ) {
        System.out.println ( a[0] );
    }
}

5.下面哪些情况下该类一定为抽象类?
A.当一个类的一个或多个方法是抽象方法时
B.当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时
C.当一个类实现多个接口时
D.当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时
6.java有8种基本类型,请问byte、int、long、char、float、double、boolean各占多少个字节?
7.下面代码输出为

public class Person{
    static int arr[] = new int[5];
    public static void main(String a[]){
        System.out.println(arr[0]);
    }

}

8.java8中,下面哪个类用到了解决哈希冲突的开放定址法
A.LinkedHashSet
B.HashMap
C.ThreadLocal
D.TreeMap
9.jdk1.8版本之前的前提下,接口和抽象类描述正确的有( )
A.抽象类没有构造函数
B.接口没有构造函数
C.抽象类不允许多继承
D.接口中的方法可以有方法体
10.在JAVA中,下列哪些是Object类的方法()
A.synchronized()
B.wait()
C.notify()
D.notifyAll()
E.sleep()

(1)D
List底层是数组存储数据的,所以有序,可重复的
Set底层是HashMap,添加元素其实就是调用map的put()方法,添加的元素作为map的key,value是一个Object对象
而Hashmap底层是哈希表,数组+链表的形式,根据key的hashcode()方法获取到的值与它的高16位进行一个异或运算,得到哈希值,再通过计算定位出它在数组中存放的位置,所以说是无序的,如果定位的位置有元素了,那就采用链地址法,就是比较hash值,如果有相同的新的值覆盖掉旧的值,如果没有,jdk1.7是新元素放在头节点,jdk1.8是放在尾节点,当然jdk1.8新增了红黑树,这里就不说了
总之,map的key不可重复,value是可以重复的
(2)is 1005, 105 is, is 105
此题考察的是字符串的“+”号运算。第一个是因为“is”是字符串类型,所以后面的100和5都被认为是按字符串进行拼接,故为is1005;第二题是100是整型,所以100+5=105,然后与字符串“is”进行拼接为105is,第三个是先计算括号内的100+5=105,然后再与is进行拼接。
(3)选C。
weblogic中开发消息Bean时的persistent与non-persisten的差别:
persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来。
non-persistent方式的消息将被丢弃。
(4)编译出错
在static方法中是不能访问非静态变量 a 的,需要将 a 声明为static,答案才会是 0 ,否则是编译出错
(5)ABD
1、当一个类包含一个或多个抽象方法,该类必须被限定为抽象的(否则编译器会报错)
2、一个没有任何抽象方法的类也可以是抽象类(当想阻止产生这个类的对象时,可以设置为抽象类)
3、从抽象类继承的类,可能是抽象类,也可能不是。若不是,则必须为基类中的所有抽象方法提供方法定义,且可以创建该新类的对象。如果不为基类中所有抽象方法提供方法定义,那么导出类也是抽象类·
(6)1 4 8 2 4 8 1
(7)正确,输出0
(8)B
解决哈希冲突 有以下的方式可以解决哈希冲突: 开放定址法 再哈希法 链地址法 建立公共溢出区 开放定址法 这种方法的意思是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。ThreadLocal就是用这种方法解决hash冲突的 线性探测再散列 当发生冲突的时候,顺序的查看下一个单元 二次(平方)探测再散列 当发生冲突的时候,在表的左右进行跳跃式探测 伪随机探测再散列 建立一个伪随机数发生器,并给一个随机数作为起点 再hash法 这种方式是同时构造多个哈希函数,当产生冲突时,计算另一个哈希函数的值。 这种方法不易产生聚集,但增加了计算时间。 链地址法 将所有哈希地址相同的都链接在同一个链表中 ,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。 hashmap就是用此方法解决冲突的。 建立一个公共溢出区 将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。
(9)BC
(10)A synchronized Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
B C D 都是Object类中的方法
notify(): 是唤醒一个正在等待该对象的线程。
notifyAll(): 唤醒所有正在等待该对象的线程。
E sleep 是Thread类中的方法

wait 和 sleep的区别:
wait指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不增加时间限制。
sleep指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。

你可能感兴趣的:(java基础10题)