Java选择题

1.JDK提供的用于并发编程的同步器有哪些?
正确答案: A B C 你的答案: B D (错误)
Semaphore
CyclicBarrier
CountDownLatch
Counter
解析: 同步器是一些使线程能够等待另一个线程的对象,允许它们协调动作。最常用的同步器是CountDownLatch和Semaphore,不常用的是Barrier 和Exchanger
2.在各自最优条件下,对N个数进行排序,哪个算法复杂度最低的是? ()

正确答案: A 你的答案: B (错误)
插入排序
快速排序
堆排序
归并排序
解析:插入排序:最佳O(N)
快速排序:最佳O(NlogN)
堆 排序:最佳O(NlogN)
归并排序:最佳O(NlogN)
3.下列不属于Java语言性特点的是
正确答案: D 你的答案: A (错误)
Java致力于检查程序在编译和运行时的错误
Java能运行虚拟机实现跨平台
Java自己操纵内存减少了内存出错的可能性
Java还实现了真数组,避免了覆盖数据类型的可能
解析:程序设计语言中,数组元素在内存中是一个接着一个线性存放的,通过第一个元素就能访问随后的元素,这样的数组称之为“真数组”。
实现了真数组为Java语言健壮性的特点之一。
4.下列关于计算机系统和Java编程语言的说法,正确的是()

正确答案: C 你的答案: A (错误)
计算机是由硬件、操作系统和软件组成,操作系统是缺一不可的组成部分。
Java语言编写的程序源代码可以不需要编译直接在硬件上运行。
在程序中书写注释不会影响程序的执行,可以在必要的地方多写一些注释。
Java的集成开发环境(IDE),如Eclipse,是开发Java语言必需的软件工具。
解析:计算机是由硬件和软件组成,操作系统是软件部分。

5.instanceof运算符能够用来判断一个对象是否为:
正确答案: C 你的答案: A (错误)
一个类的实例
一个实现指定接口的类的实例
全部正确
一个子类的实例
解析:instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例

6.爪哇语中哪些关键字?
拉索: D E 埃斯特拉: B D E (埃斯特)
null
true
sizeof
implements
instanceof
7.下面哪些Java中的流对象是字节流?

正确答案: A B C D 你的答案: B D (错误)
FileInputStream
BufferedInputStream
PushbackInputStream
ByteArrayInputStream
解析:stream结尾都是字节流,reader和writer结尾都是字符流 两者的区别就是读写的时候一个是按字节读写,一个是按字符。 实际使用通常差不多。 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。 只是读写文件,和文件内容无关的,一般选择字节流。

8.You have the following code.Which numbers will cause “Test2” to be printed?

switch (x)
{
case 1: System.out.println(“Test1”);
case 2:
case 3:
System.out.println(“Test2”);
break;
default:
System.out.println(“Test3”);
break;
}
正确答案: B C D 你的答案: A D E (错误)
0
1
2
3
4

9.存根(Stub)与以下哪种技术有关
正确答案: B 你的答案: A (错误)
交换
动态链接
动态加载
磁盘调度
解析:理解为适配器模式,继承该类则不需要实现一个接口全部方法。

10.以下程序的运行结果是()
public class Increment
{
public static void main(String args[])
{
int a;
a = 6;
System.out.print(a);
System.out.print(a++);
System.out.print(a);
}
}

正确答案: B 你的答案: C (错误)
666
667
677
676

解析:可以理解为a=a+1; 只不过执行时不加1 ,执行过了a++后面是a=a+1;

11.下列关于构造方法的叙述中,错误的是()

正确答案: C D 你的答案: B D (错误)
java语言规定构造方法名与类名必须相同
java语言规定构造方法没有返回值,但不同void声明
java语言规定构造方法不可以重载
java语言规定构造方法只能通过new自动调用

解析: D通过this也可以调用

12.某程序要求每次输入只能是正整数,并且每次输入的数值要求必须是100的倍数且小于等于500,则下列哪个是正确的无效等价类( )
正确答案: D 你的答案: A (错误)
(0,100)、(100,200)、(200,300)、(300,400)、(400,500)、(500,+∞);
(500,+∞)
(500,+∞)、任意大于0小于500的非100倍数的整数;
(-∞,100)、(100,200)、(200,300)、(300,400)、(400,500)、(500,+∞);

解析:无效等价类和有效等价类相反,即不满足程序输入要求或者无效的输入数据构成的集合。

13.下面有关java threadlocal说法正确的有?
正确答案: A B C D 你的答案: A C (错误)
ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
在Thread类中有一个Map,用于存储每一个线程的变量的副本。
对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式
解析:对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。

14.如果Child extends Parent,那么正确的有()?
正确答案: B C D 你的答案: A B D (错误)
如果Child是class,且只有一个有参数的构造函数,那么必然会调用Parent中相同参数的构造函数
如果Child是interface,那么Parent必然是interface
如果Child是interface,那么Child可以同时extends Parent1,Parent2等多个interface
如果Child是class,并且没有显示声明任何构造函数,那么此时仍然会调用Parent的构造函数

解析:
A 可以调用父类无参的构造函数,子类的有参构造函数和是否调用父类的有参数的构造函数无必然联系。
B 接口继承的时候只能继承接口不能继承类,因为如果类可以存在非抽象的成员,如果接口继承了该类,那么接口必定从类中也继承了这些非抽象成员,这就和接口的定义相互矛盾,所以接口继承时只能继承接口。
C 接口可以多继承可以被多实现,因为接口中的方法都是抽象的,这些方法都被实现的类所实现,即使多个父接口中有同名的方法,在调用这些方法时调用的时子类的中被实现的方法,不存在歧义;同时,接口的中只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。 对于一个接口继承多个父接口的情况也一样不存在这些缺点。所以接口可以多继承。
D 子类即使没有显示构造函数,也会有个无参数的默认构造函数,仍然会调用父类的构造函数。

15.jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?
正确答案: B D 你的答案: C D (错误)
抽象类可以有构造方法,接口中不能有构造方法
抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
一个类可以实现多个接口,但只能继承一个抽象类
接口中可以有普通成员变量,抽象类中没有普通成员变量

解析:1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

16.Java网络程序设计中,下列正确的描述是()
正确答案: A D 你的答案: A B (错误)
Java网络编程API建立在Socket基础之上
Java网络接口只支持tcP以及其上层协议
Java网络接口只支持UDP以及其上层协议
Java网络接口支持IP以上的所有高层协议

解析:socket就对tcp协议的一个套接字 套接字也可以简单的理解成接口, 不过相对接口而言, 是针对于网络主机的

17.下列不正确的 Java 语言标识符是( )

正确答案: C 你的答案: B (错误)
Sky
$Computer
for
NULL

解析:Java标识符命名规范是:
1)只能包含字母a-zA-Z,数字0-9,下划线_和美元符号$;
2)首字母不能为数字;
3)关键字和保留字不能作为标识符。
null是关键字,NULL不是关键字,java区分大小写。这题答案D是对的,但C是错的,for是关键字。

18.在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的()?
正确答案: A 你的答案: D (错误)
管道
消息队列
高速缓存数据库
套接字

解析:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

19.下面有关java的引用类型,说法正确的有?
正确答案: A B C D 你的答案: C (错误)
对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中
如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间

解析:1、强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。

20.给出下面的代码段:

public class Base{
int w, x, y ,z;
public Base(int a,int b)
{
x=a; y=b;
}
public Base(int a, int b, int c, int d)
{
// assignment x=a, y=b
w=d;z=c;
}}
在代码说明// assignment x=a, y=b处写入如下哪几个代码是正确的?()

正确答案: C D 你的答案: A (错误)
Base(a,b);
x=a, y=b;
x=a; y=b;
this(a,b);
解析:A错,调用Base这个构造方法应该这样 new Base(a,b)
B错,和C相比应该是分号不是逗号,帅的一塌糊涂
C正常赋值操作
D调用本类的构造方法

21.ublic class ThreadTest extends Thread {
public void run() {
System.out.println(“In run”);
yield();
System.out.println(“Leaving run”);
}
public static void main(String []argv) {
(new ThreadTest()).start();
}
}

正确答案: C 你的答案: D F (错误)
程序运行输出只有In run
程序运行输出只有Leaving run
程序运行输出先有In run后有Leaving run
程序运行输出先有Leaving run后有In run
程序没有任何输出就退出了
程序将被挂起,只能强制退出

解析:Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。

22.下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:()
正确答案: A E 你的答案: A E (正确)
java.util.ConcurrentHashMap
java.util.Map
java.util.TreeMap
java.util.SortMap
java.util.Hashtable
java.util.HashMap

解析: 先说HashMap和HashTable的区别
最开始的时候 只有HashMap和HashTable,他们最重要的区别就是HashMap不是线程安全的,而HashTable是线程安全的;他们的具体区别如下:
①:他们的继承是不同的,HashMap继承的是 AbstractMap,而HashTable继承的是Dictionary 类;
②:他们存储的键值对有些区别;HashMap的键能有一个为null,而他的值只能有任意多个是null;
由于它的键可以是为空的,所以,所以我们不能用get(key)判断是否有这个键,而应该用containsKey()这个方法来判断是否有这个键;而HashTable中键值对都不能为空;
③:他们的扩容方式是不一样的;HashMap默认的初始大小是16,装载因子是0.75,并且扩容的大小一定是2的指数;而HashTable的默认初始大小是11,扩容的方式是 2*old+1;
④:哈希值的使用是不同的,HashTable的hash值是直接使用对象中的hashCode方法,而HashMap则是重新计算对象的HashCode;并且用与代替求模;
⑤:两个遍历方式的内部实现上不同。
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

2.再看CurrentHashMap和HashMap

上面已经知道HashMap是线程不安全的了,后来在jdk1.5的时候就出来了CurrentHashMap来弥补HashMap的线程不安全的特性;CurrentHashMap,是将HashMap分成了很多个片(一般默认是16片),引入了分段锁的概念,然后对每一片加锁,具体可以理解成一把大的Map分解成N个小的HashTable,根据key.hashCode()来决定放到哪一个片上;

3.三者效率的比较:
    由于安全机制的原因,HashMap的效率比HashTable,CurrentHashMap的效率高;但是由于CurrentHashMap加锁的高效性,HashTable是整个加锁,他的效率比HashTable高; 总的来说 HashMap>CurrentHashMap>HashTable;

23.java语言的下面几种数组复制方法中,哪个效率最高?
正确答案: B 你的答案: D (错误)
for 循环逐一复制
System.arraycopy
Array.copyOf
使用clone方法

解析:
System.arraycopy():native方法+JVM手写函数,在JVM里预写好速度最快
clone():native方法,但并未手写,需要JNI转换,速度其次
Arrays.copyof():本质是调用1的方法
for():全是深复制,并且不是封装方法,最慢情有可原
24.面向对象方法的多态性是指()
正确答案: C 你的答案: C (正确)
一个类可以派生出多个特殊类
一个对象在不同的运行环境中可以有不同的变体
针对一消息,不同的对象可以以适合自身的方式加以响应
一个对象可以是由多个其他对象组合而成的

25.下面哪个Set类是排序的?
正确答案: B 你的答案: A (错误)
LinkedHashSet
TreeSet
HashSet
AbstractSet

解析:TreeSet自然排序,LinkedHashSet按添加顺序排序

26.在 main() 方法中给出的整型数组,如果将其写到一个文件中,需要( )。

正确答案: B 你的答案: C (错误)
System.out.print (buffer[i]);
DataOutputStream dout = new DataOutputStream(new FileOutputStream(this.filename));
DataInputStream din = new DataInputStream(new FileInputStream(this.filename));。
System.in.read(buffer)。

解析:input和output指的是对于程序而言。input是从文件读取进来,output是输出到文件。

27.关于类的叙述正确的是()。
正确答案: B 你的答案: D (错误)
在类中定义的变量称为类的成员变量,在别的类中可以直接使用
局部变量的作用范围仅仅在定义它的方法内,或者是在定义它的控制流块中
使用别的类的方法仅仅需要引用方法的名字即可
只要没有定义不带参数的构造函数,JVM都会为类生成一个默认构造函数

解析:A,类是一个封装,类的成员只能在类内部使用,外部需要 “对象名.变量名” 来引用。
B,正确,局部变量只在定义它的代码块或者函数内部可见
C,跟类的成员变量一样,需要指定对象才能引用
D,如果类没有构造方法,JVM会生成一个默认构造方法,如果定义了任意类型的构造方法,编译器都不会自动生成构造方法。

28.一个类的构造器不能调用这个类中的其他构造器。( )

正确答案: B 你的答案: B (正确)
正确
错误

29.关于Java中的ClassLoader下面的哪些描述是错误的:( )
正确答案: B D F 你的答案: A D F (错误)
默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System
一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的
类装载器需要保证类装载过程的线程安全
ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null
ClassLoader的父子结构中,默认装载采用了父优先
所有ClassLoader装载的类都来自CLASSPATH环境指定的路径

30.JDK1.8版本之前,抽象类和接口的区别,以下说法错误的是
正确答案: D 你的答案: B (错误)
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。
abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"has-a"关系,interface表示的是"is-a"关系。

解析:is-a:继承关系 has-a:从属关系 like-a:组合关系

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值