- HashSet子类依靠()方法区分重复元素。
A toString(),equals()
B clone(),equals()
C hashCode(),equals()
D getClass(),clone()
答案:C
解析: 先调用对象的hashcode方法将对象映射为数组下标,再通过equals来判断元素内容是否相同
- 以下程序执行的结果是:
class X{
Y y=new Y();
public X(){
System.out.print(“X”);
}
}
class Y{
public Y(){
System.out.print(“Y”);
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print(“Z”);
}
public static void main(String[] args) {
new Z();
}
}
A ZYXX
B ZYXY
C YXYZ
D XYZX
答案: C
解析: 执行子类构造方法时,先调用父类的构造方法,成员变量的初始化在构造方法中执行
- 有这么一段程序:
public class Test{
public String name=“abc”;
public static void main(String[] args){
Test test=new Test();
Test testB=new Test();
System.out.println(test.equals(testB)+“,”+test.name.equals(testB.name));
}
}
请问以上程序执行的结果是()
A true,true
B true,false
C false,true
D false,false
答案: C
解析: Test这个类没有重写equals方法,因此在调用的时候默认执行的是object提供的equals方法,比较的是两个对象的地址,而字符串类型重写了equals方法,比较的是对象的内容是否相同
-
考虑下面这个简单的例子,让我们看看reflection是如何工作的。
import java.lang.reflect.*;
public class DumpMethods{
public static void main(String[] args) {
try {
Class c=Class.forName(args[0]);
Method m[]=c.getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
System.out.println(m[i].toString());
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
其中"c.getDeclaredMethods"的作用是:
A 取得类的公有方法对象
B 取得类的所有公有方法名称
C 取得类的所有方法对象
D 以上选项都不正确
答案 : D
解析: 通过反射获取类的方法有两个大方法,getmethods和getDeclaredMethods
getmethods: 获取对象实现或继承的所有的public修饰的方法,即包括继承的方法
getDeclaredMethods: 获取对象所有的方法,不包括继承的 -
有如下4条语句:()
Integer i01=59;
int i02=59;
Integer i03=Integer.valueOf(59);
Integer i04=new Integer(59);
以下输出结果为false的是:
A System.out.println(i01==i02);
B System.out.println(i01 ==i03);
C System.out.println(i03 ==i04);
D System.out.println(i02 ==i04);
答案: C
解析:
- int与integer进行比较时,编译器会进行优化,将integer进行拆箱,变为int类型
- i03执行valueof方法为装箱操作,具体细节如下
- i01为自动装箱,因此i01与i03相等
- i04通过new关键字在堆中创建了一个新的对象,因此C选项中i03就与i04地址是不一样的
- 在单处理器系统中,如果同时存在有12个进程,则处于就绪队列中的进程数量最多为()
A 1
B 9
C 10
D 11
答案: D
解析: 总共12个进程,cpu目前必然会会从存储进程的队列中拿出一个进行执行,那么在队列中处于就绪状态的进程就只剩下11个了
- 以下关于多线程的叙述中错误的是()
A 线程同步的方法包括使用临界区,互斥量,信号量等
B 两个线程同时对简单类型全局变量进行写操作也需要互斥
C 实现可重入函数时,对自动变量也要用互斥量加以保护
D 可重入函数不可以调用不可重入函数
答案: C
解析: 线程同步的方法包括使用临界区,互斥量,事务,信号量
可重入函数: 函数被中断后返回来继续执行时,不会有影响
不可重入函数: 函数被中断后,因为可能会使用到全局变量以及中断向量表等,对代码会产生影响
自动变量: 局部变量
C选项中,因为局部变量是线程私有的,不存在多线程下的安全问题,也就不需要互斥量进行保护
- 整数0x12345678,在采用bigendian中内存的排序序列是( )
A 12 34 56 78
B 78 56 34 12
C 87 65 43 21
D 21 43 65 87
答案: A
解析: bigendian为大端模式,是指将数据的高字节保存在低地址中,而低字保存在高地址中
低地址–>高地址
- 使用C语言将一个1G字节的字符数组从头到尾全部设置为字’A’,在一台典型的当代PC上,需要花费的CPU时间的数量级最接近()
A 0.001秒
B 1秒
C 100秒
D 2小时
答案: B
解析: 执行1bit会消耗1ns,级10^-9s
- 对于普通的计算机,对以下事件的平均耗时从小到大排序为____:
A.读取1KB内存数据 B.从硬盘连续读取1KB数据 C.读取一次L2缓存 D.一次磁盘寻道
A C,A,D,B
B C,D,A,B
C D,C,A,B
D D,A,C,B
答案: A
解析: L2指的是level 2,也就是二级缓存,通过缓存直接与cpu进行交互,是最快的
读取硬盘的时间主要是三部分,磁盘寻道时间,数据传输时间,旋转时间
- 分页式虚拟存储管理系统中,页面的大小与可能产生的缺页中断次数( )
A 成正比
B 成反比
C 无关
D 成固定值
答案: C
- 进程调度时,下列进程状态的变化过程哪一项是不可能发生的()
A 阻塞挂起->阻塞
B 就绪挂起->就绪
C 就绪挂起->阻塞挂起
D 阻塞挂起->就绪挂起
答案: C
解析:
- 处于运行状态的操作系统程序应放在()
A 寄存器中
B 主存中
C 辅存中
答案:
解析: 寄存器: 容量有限,只是加载cpu执行代码行所需要的数据(从主存中加载到寄存器)
辅存: 当线程处于挂起状态时,会存储在辅存中
- 在系统内存中设置磁盘缓冲区的主要目的是()
A 减少磁盘 I/O 次数
B 减少平均寻道时间
C 提高磁盘数据可靠性
D 实现设备无关性
答案: A
解析: cpu的执行速度比磁盘io的速度要快很多,对于常用的数据,就会存储在磁盘缓冲区中,可以减少io次数
- 下列选项中,会导致进程从执行态变为就绪态的事件是()
A 执行 P(wait)操作
B 申请内存失败
C 启动 I/O 设备
D 被高优先级进程抢占
答案: D
解析:abc条件满足时,会进入阻塞态,不是就绪态
在进行io操作时,当前线程会处于阻塞状态
- 下面哪一种表述不属于操作系统的主要功能?()
A 处理机管理
B 存储器管理
C 设备管理和文件管理
D 可移植
答案: D
解析:A属于进程管理
- 在现代操作系统中采用缓冲技术的主要目的是()。
A 改善用户编程环境
B 提高CPU的处理速度
C 提高CPU和设备之间的并行程度
D 实现与设备无关性
答案: C
解析:
- 进程和程序的一个本质区别是()。
A 前者为动态的,后者为静态的
B 前者存储在内存,后者存储在外存
C 前者在一个文件中,后者在多个文件中
D 前者分时使用CPU,后者独占CPU
答案:A
解析:进程处于挂起状态时,存于辅存,也即是外存
程序是一个可执行文件,还并没有执行,因此不会占用cpu资源
- 选择在最近的过去很久未访问的页面予以淘汰的算法称为()。
A Opt.
B LRU
C MFU
D LFU
答案:B
解析:
- 一次I/O操作的结束,有可能导致()。
A 一个进程由睡眠变就绪
B 几个进程由睡眠变就绪
C 一个进程由睡眠变运行
D 几个进程由睡眠变运行
答案:A
解析:一次io操作只能执行一个进程
- 并发进程之间()。
A 彼此无关
B 必须同步
C 必须互斥
D 可能需要同步或互斥
答案:D
解析: