牛客网第一天练习题

1.欲定义类字段或类方法(静态方法),应该使用下列哪一个修饰符修饰()
A.public
B.static
C.protected
D.synchronized
正确答案: B 你的答案: B (正确)
解析:A、 public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员 ,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。
B、 static用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
C、 private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部 类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在 其他类中不能调用。
D、 synchronized可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。
2.下列哪种说法是正确的( )
A.实例方法可直接调用超类的实例方法
B.实例方法可直接调用超类的类方法
C.实例方法可直接调用其他类的实例方法
D.实例方法可直接调用本类的类方法
正确答案: D 你的答案: B (错误)
解析:若超类的实例方法未被重写,则子类的实例方法可以可以直接调用超类的非private实例方法;若被重写了,则需使用super关键字调用;
子类的实例方法可以直接调用超类的非private类方法(类方法不存在继承和重写问题);
实例方法不可以直接调用其他类的实例方法;
实例方法可以直接调用本类的类方法。
3. 在基本 JAVA 类型中,如果不明确指定,整数型的默认是 __ 类型,带小数的默认是 __ 类型? ( )
A.int float
B.int double
C.long float
D.long double
正确答案: B 你的答案: B (正确)
解析:整型默认为int,如果需要long,须加l或L。小数默认double,d或D可省略,但如果需要float,须加f或F,例如float = 0.1f。
4.在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序的运行时性能会变得更好。
A.对
B.错
正确答案: B 你的答案: A (错误)
解析:泛型仅仅是java的一颗语法糖,它不会影响java虚拟机生成的汇编代码,在编译阶段,虚拟机就会把泛型的类型擦除,还原成没有泛型的代码,顶多编译速度稍微慢一些,执行速度是完全没有什么区别的。
5.下列有关Thread的描述,哪个是正确的?
A.启动一个线程的方法是:thread. run()
B.结束一个线程的通常做法是:thread. stop()
C.将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自动结束。
D.让一个线程等待另一个线程的通知的方法是:thread. sleep()
正确答案: C 你的答案: C (正确)
解析: 1.启动一个线程的方法是 start()
2.结束线程用的是interrupt()方法,而stop()是强制结束线程,并不推荐使用,同时stop()方法已被弃用
3.daemon线程是守护线程,当主线程结束时,守护线程会自动结束
4.一个线程等待另外一个线程的方法是wait()方法
6. 有一个源代码,只包含import java.util.
; 这一个import语句,下面叙述正确的是? ( )
A.只能写在源代码的第一句
B.可以访问java/util目录下及其子目录下的所有类
C.能访问java/util目录下的所有类,不能访问java/util子目录下的所有类
D.编译错误
正确答案: C 你的答案: C (正确)
解析:导入java.util.不能读取其子目录的类,因为如果java.util里面有个a类,java.util.regex里面也有个a类,我们若是要调用a类的方法或属性时,应该使用哪个a类呢。所以也应该选C*
7.变量a是一个64位有符号的整数,初始值用16进制表示为:0Xf000000000000000; 变量b是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF。 则a-b的结果用10进制表示为多少?()
A.1
B.-(262+261+2^60+1)
C.262+261+2^60+1
D.259+(255+254+…+22+21+20)
正确答案: C 你的答案: C (正确)
解析:
0x7FFFFFFFFFFFFFFF+1=0X8000000000000000,那么
a-b=0Xf000000000000000-0X8000000000000000+1
=0X7000000000000001
=1615*7+160
1
=2^60*7+1
=260*(22+21+20)+1
=262+261+2^60+1
8.关于Java和C/C++的比较,下列哪个描述是错误的?
A.Java不支持指针,C/C++支持
B.Java程序不需要显式地关心内存释放,而C/C++需要
C.Java和C++一样,是纯编译型语言,因此它们的class都是在编译时静态联编(static binding)的
D.Java数组、字符串不可能溢出,C/C++数组、字符串则有可能溢出边界
正确答案: C D 你的答案: B (错误)
Java和C++的区别:

  1. Java是解释型语言,所谓的解释型语言,就是源码会先经过一次编译,成为中间码,中间码再被解释器解释成机器码。对于Java而言,中间码就是字节码(.class),而解释器在JVM中内置了。
  2. C++是编译型语言,所谓编译型语言,就是源码一次编译,直接在编译的过程中链接了,形成了机器码。
  3. C++比Java执行速度快,但是Java可以利用JVM跨平台。
  4. Java是纯面向对象的语言,所有代码(包括函数、变量)都必须在类中定义。而C++中还有面向过程的东西,比如是全局变量和全局函数。
  5. C++中有指针,Java中没有,但是有引用。
  6. C++支持多继承,Java中类都是单继承的。但是继承都有传递性,同时Java中的接口是多继承,类对接口的实现也是多实现。
  7. C++中,开发需要自己去管理内存,但是Java中JVM有自己的GC机制,虽然有自己的GC机制,但是也会出现OOM和内存泄漏的问题。C++中有析构函数,Java中Object的finalize方法
  8. C++运算符可以重载,但是Java中不可以。同时C++中支持强制自动转型,Java中不行,会出现ClassCastException(类型不匹配)。
    9.下面哪些Java中的流对象是字节流?
    A.FileInputStream
    B.BufferedInputStream
    C.PushbackInputStream
    D.ByteArrayInputStream
    正确答案: A B C D 你的答案: D (错误)
    解析:A FileInputSteam属于字节流,而BufferedInputStream属于缓冲流 PushbackInputStream属于回退流 BytearrayInputStream属于字节数组输入流
    10.截止JDK1.8版本,java并发框架支持锁包括?
    A.读写锁
    B.自旋锁
    C.X锁
    D.乐观锁
    E排他锁
    正确答案: A B D 你的答案: C (错误)
    解析:
    1、自旋锁 ,自旋,jvm默认是10次吧,有jvm自己控制。for去争取锁

2、阻塞锁 被阻塞的线程,不会争夺锁。

3、可重入锁 多次进入改锁的域

4、读写锁

5、互斥锁 锁本身就是互斥的

6、悲观锁 不相信,这里会是安全的,必须全部上锁

7、乐观锁 相信,这里是安全的。

8、公平锁 有优先级的锁

9、非公平锁 无优先级的锁

10、偏向锁 无竞争不锁,有竞争挂起,转为轻量锁

11、对象锁 锁住对象

12、线程锁

13、锁粗化 多锁变成一个,自己处理

14、轻量级锁 CAS 实现

15、锁消除 偏向锁就是锁消除的一种

16、锁膨胀 jvm实现,锁粗化

17、信号量 使用阻塞锁 实现的一种策略

18、排它锁:X锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

猜你喜欢

转载自blog.csdn.net/pingbu_qingyun/article/details/83032373