48天笔试训练错题——day34

目录

选择题

1.

2.

3.

4.

5. 

6.

7.

8.

9.

10.

编程题

1. 养兔子

2. 收件人列表


选择题

1.

程序计数器、栈、寄存器是线程私有的。

2.

换页错误:也就是缺页异常/缺页中断。

占用 CPU 能更快得到执行,占用 I/O 能更快加载页相关的数据,这跟性能有关,并不能减少缺页中断。至于使用基于最短剩余时间的调度机制,则和减少缺页中断无关。

3.

主存不足时,可以去辅存加载数据。

4.

在采用虚拟存储技术的存储系统中,一个多任务的操作系统经常将多个不同的程序同时调入主存执行:

1. 首先需要保证这些程序间不会相互覆盖

2. 一个程序不能访问其他程序的数据以及不是分配给它的主存区域

3. 一个程序出错不会破坏其他用户程序和系统程序

为了满足以上条件,采取一种限制方式保护主存中程序的技术被称为存储保护,存储区域保护主要是为了防止地址越界。

5. 

强占式静态优先权法,可能会导致进程饥饿,因为优先级高的进程一直抢占优先级低的进程,优先级高的进程一直被执行,但是优先级低的进程长期得不到执行,这种现象就被称为进程饥饿。

非抢占式静态优先权法:优先权不会变,假设有一个最低优先权的线程在等待,那么等优先级高的执行完就轮到 该进程执行了。

时间片轮转调度法:一个时间片内没有完成运行的进程,会返回到绪队列末尾重新排队,等待下一次调度。

非抢占式动态优先权法:因为是动态的,所以等待到的越久,优先级就越高,被执行的可能就越大,所以不会出现饥饿现象。

6.

如果信号量 < 0 ,| 信号量 |  = 等待中的进程的个数

7.

8.

如果系统中只有用户态线程,则线程对操作系统是不可见的,操作系统只能调度进程。

如果系统中有内核态线程,则操作系统可以按线程进行调度。

作业:一个作业通常包含几个进程,几个进程会一同完成一个任务(作业)。

9.

如果每条数据是独立的,说明数据之间没有关联性,就只能按照自己的条件进行查询,但是每条数据被访问的概率又相等,所以必须把所有的数据都放入缓存中才能用,但是缓存是非常小的,它存在于内存中,所以把所有的数据都放入内存中就不合适。

增加了多线程,则有更高的吞吐量来读取数据,所以需要加缓存来提高速度。

尺寸太小说明数据就比较小,则可以添加缓存来省下 I/O 读取数据的时间。

有大量访问(高并发),就需要加缓存来提高性能,之后去缓存中读数据。

10.

如题,取指定序号,可以看作是根据下标来找数据,所以用顺序表速度最快。

编程题

1. 养兔子

兔子生娃就是斐波那契问题,画天数图兔子的生存情况就行,如下图:

我们可以先把范围内的斐波那契数给算出来,然后输出的时候再从数组中取即可。

代码实现:

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        long[] fib = new long[91];
        fib[0] = 1;
        fib[1] = 1;
        for (int i = 2; i < fib.length; i++) {
            fib[i] = fib[i - 1] + fib[i - 2];
        }
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            System.out.println(fib[n]);
        }
    }
}

2. 收件人列表

如图,这个很简单,看例子 1,先给你一个数字 n,接下来会出现 n 个名字,如果名字里有空格或者逗号,这个名字就需要用双引号括起来输出,如果没有的话就正常正常输出名字,让你返回一串处理好的名字。

思路就是直接遍历你的名字数组,用 String 自带的 contains 方法看看字符串里有没有空格或者逗号,如果有,那就输出用双引号把名字括起来后输出,如果没有就正常输出名字,然后判断下标是不是 n - 1,如果不是,那就输出逗号和空格即可。

代码实现:

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            in.nextLine();// 处理回车和空格
            String[] arr = new String[n];
            for (int i = 0; i < n; i++) {
                arr[i] = in.nextLine();
            }
            // System.out.println(Arrays.toString(arr));
            print(n, arr);
        }
    }


    public static void print(int n, String[] arr) {
        for (int i = 0; i < arr.length; i++) {
            String str = arr[i];
            if (str.contains(" ") || str.contains(",")) {
                System.out.print("\"" + str + "\"");
            } else {
                System.out.print(str);
            }
            if (i != n - 1) {
                System.out.print(", ");
            }
        }

        System.out.println();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值