2019年11月11日 Java2
考点1
哪个关键字可以对对象加互斥锁?()
- A synchronized
- B volatile
- C serialize
- D static
解析
显示答案/隐藏答案
正确答案: Asynchronized关键字
用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。
volatile
用来确保将变量的跟新操作通知到其他线程,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。然而,在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比 synchronized关键字更轻量级的同步机制。
考点2
下面代码的执行结果是 :
1 | class Chinese{ |
- A true
- B false
- C TRUE
- D FALSE
解析
显示答案/隐藏答案
正确答案: A这是饿汉式单例模式,在类创建时,就已经实例化完成
考点3
假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?
1 | public class Base{ |
- A ABDC
- B AB
- C ABCD
- D ABC
解析
显示答案/隐藏答案
正确答案: A这是一道类多态的向上转型题。
Base b = new Derived();
向上转型:父类只能调用父类方法或者子类覆写后的方法,而子类中的单独方法则是无法调用的。
因此:
调用的顺序是:(1)、(2)、(3)、(4)、(5)、(6)、(7) ; 得到的结果是:ABDC
1 | class Base{ |
考点4
java程序内存泄露的最直接表现是( )
- A 频繁FullGc
- B jvm崩溃
- C 程序抛内存控制的Exception
- D java进程异常消失
解析
显示答案/隐藏答案
正确答案: Cjava是自动管理内存的,通常情况下程序运行到稳定状态,内存大小也达到一个 基本稳定的值
但是内存泄露导致Gc不能回收泄露的垃圾,内存不断变大.
最终超出内存界限,抛出OutOfMemoryExpection
考点5
在Java中,对于不再使用的内存资源,如调用完成的方法,”垃圾回收器”会自动将其释放。( )
- A 正确
- B 错误
解析
显示答案/隐藏答案
正确答案: B调用方法是在栈内存中完成的,调用完成会自动释放,
而gc释放的是堆区的内容
考点6
下面哪些情况下需要使用抽象类?
- A 当一个类的一个或多个方法是抽象方法时
- B 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时
- C 当一个类实现多个接口时
- D 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时
解析
显示答案/隐藏答案
正确答案: ABDD:当你不想实现接口中的所有方法,只想实现接口中的个别方法时,你可以先写一个抽象类来实现该接口,并实现除了你想要的方法之外的所有方法(可以简单的将方法体设为空)
接着再用你的类继承这个抽象类,这个类中就只用实现你需要的方法了,这样就可以达到你的需要了。
如果你直接实现接口的话,你就需要实现接口的所有方法。
考点7
下列容器中,哪些容器按 key 查找的复杂度为 O(log(n)) ()
- A std::unordered_set
- B std::multimap
- C std::map
- D std::deque
解析
显示答案/隐藏答案
正确答案: BCSTL库中,map和multimap底层都是红黑树实现的,两者的不同在于multimap允许重复,而map中不行。
红黑树的查找复杂度为O(log(n))
unodered_map/_set底层是哈希表实现的,哈希表查找复杂度为O(1)
考点8
Java.Thread的方法resume()负责重新开始被以下哪个方法中断的线程的执行()。
- A stop
- B sleep
- C wait
- D suspend
解析
显示答案/隐藏答案
正确答案: Dsuspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态