一、选择题
(1)如何减少缺页中断(B)
A.进程倾向占用CPU
B.访问局部性满足进程要求
C.进程倾向于占用I/O
D.使用基于最短剩余时间的调度
B,局部性好,导致下一个要找的东西就在当前内存的前后不远处,很有可能就在同一页里,缺页中断也就少了
(2)通常所说的"存储保护"的基本含义是(B)
A.防止存储器硬件受损
B.防止程序在内存丢失
C.防止程序间相互越界访问
D.防止程序被人偷看
在采用虚拟存储技术的存储系统中,一个多任务的操作系统经常将多个不同的程序同时调入主存执行:
- 首先要保证这些程序之间不会相互覆盖
- 一个程序不能访问其他程序的数据以及不是分配给他的主存区域
- 一个程序出错不会破环其他用户程序和系统程序
为了满足上述条件,采取一种限制方式保护主存中程序的技术被称为"存储保护",只要为了防止地址越界
(3)若系统中只有用户级线程,则处理机调度单位是(B)
A.线程
B.进程
C.程序
D.作业
如果系统中只有用户态线程,则线程对操作系统是不可见的,操作系统只能调度进程
如果系统中有内核态线程,则操作系统可以按先线程进行调度
一个作业通常包括几个进程,几个进程共同完成一个任务,即作业
(4)一个在线服务器通常需要读取存储着海量数据的数据库,为了提高服务器处理速度,通常需要加cache,以下场景中不适合使用cache的是(A)
A.数据库中每条数据被访问的概率近似相等,且独立
B.使用了多线程机制的服务
C.单条线程尺寸太小的服务
D.有着大量访问的服务
因为数据库中的每条数据被访问的概率近似相等,且缓存空间一般较小不可能存入较多的数据。无法预测所需要查询的数据,增加缓存的作用不大
二、编程题
2.1 养兔子
2.1.1 题目
2.1.2 题解
思路:斐波那契数列的原型
代码:
import java.util.*;
public class Main{
public static void main(String[] args){
long[] f = new long[91];
f[0] = 1;
f[1] = 1;
for(int i = 2; i <= 90; ++i){
f[i] = f[i-1] + f[i-2];
}
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
System.out.println(f[sc.nextInt()]);
}
}
}
2.2 收件人列表
2.2.1 题目
2.2.2 题解
思路: 逐个接收每个名字,如果名字中没有’,‘或者’ '则直接输出,否则在改名字前后拼接"""再输出,每个名字之间使用逗号,隔开。
代码:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
int n=scanner.nextInt(); //接收完整数之后,需要将回车接受掉
scanner.nextLine();//将数字所在行之后的所有内容接收完
String[] str=new String[n];
List<String> list=new ArrayList<>();
for(int i=0;i<n;i++){
str[i]=scanner.nextLine();
if(str[i].contains(",") || str[i].contains(" ")){
list.add("\""+str[i]+"\"");
}else {
list.add(str[i]);
}
}
for(int i=0;i<n;i++){
if(i!=n-1){
System.out.print(list.get(i)+", ");
}else {
System.out.print(list.get(i));
}
}
System.out.println();
}
}
}