笔试强训day34

一、选择题

1、下列有关在一个处理器(processor)上跑两个线程(thread)的说法中,正确的是?
A 一个线程可以改变另一个线程的程序计数器(program counter)
B 一个线程既不能读也不能写另一个线程的栈(stack)
C 一个线程可以读写另一个线程的寄存器(register)
D 以上都不对
他的回答: A (错误)
正确答案: B
2、如何减少换页错误?
A 进程倾向于占用CPU
B 访问局部性(locality of reference)满足进程要求
C 进程倾向于占用I/O
D 使用基于最短剩余时间(shortest remaining time)的调度机制
他的回答: D (错误)
正确答案: B
换页错误:Page Fault,其实应该翻译成缺页异常或缺页中断,是引入了虚拟内存后的一个概念。
操作系统启动后,在内存中维护着一个虚拟地址表,进程需要的虚拟地址在虚拟地址表中记录。一个程序被加载运行时,只是加载了很少的一部分到内存,另外一部分在需要时再从磁盘载入。当需要执行某条指令或使用某个数据,而发现它们并不在主存时,产生一个缺页中断,系统从辅存中把该指令或数据所在的页面调入内存。
B:局部性好,导致下一个要找的东西就在当前内存的前后不远处,很有可能就在同一页里,所以就不需要频繁换页,换页错误也就少了
3、系统中内存不足程序所需大小,程序就无法执行。
A 错
B 对
他的回答: B (错误)
正确答案: A
4、通常所说的"存储保护"的基本含义是()。
A 防止存储器硬件受损
B 防止程序在内存丢失
C 防止程序间相互越界访问
D 防止程序被人偷看
他的回答: A (错误)
正确答案: C
在采用虚拟存储技术的存储系统中,一个多任务的操作系统经常将多个不同的程序同时调入主存执行:
1.首先需要保证这些程序间不会相互覆盖
2.一个程序不能访问其他程序的数据以及不是分配给他的主存区域。
3.一个程序出错不会破坏其他用户程序和系统程序。
为了满足以上条件,采取一种限制方式保护主存中程序的技术被称为存储保护。存储区域保护主要是为了防止地址越界。
5、下列进程调度算法中,()可能会出现进程长期得不到调度的情况。
A 非强占式静态优先权法
B 强占式静态优先权法
C 时间片轮转调度算法
D 非强占式动态优先权法
他的回答: D (错误)
正确答案:B
强占式/抢占式
现行进程在运行过程中,如果有重要或紧迫的进程到达(其状态必须为就绪),则现运行进程将被迫放弃处理机,系统将处理机立刻分配给新到达的进程。

静态优先权
在创建进程时确定的,优先权在进程的整个运行期间保持不变。

动态优先权
在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能,该优先权会随着等待的时间增长而增长。

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

B.强占式静态优先权法:强占式,说明高优先权的可以抢夺CPU的执行权。假如一个低优先权的执行,当一个高优先权的在就绪状态,那么CPU就会以抢占的方式执行高优先权的那个进程,低优先权的被抢占而外干就绪态。假如一直有高优先权的进程在就绪,那么低优先权的就有概念出现一直等待的情况。

C.时间片轮转调度算法;执行的时间片完毕后,被执行的进程会放到等待队列的队尾,一次循环,既然是循环的话,那就有机会轮到。

D.非强占式动态优先权法:虽然是非强占式的,但是如果一个进程一直在等待,那么他的优先权就会动态增长,就可以得到CPU的执行权
6、如果信号量的当前值为-4,则表示系统中在该信号量上有()个进程等待。
A 4
B 3
C 5
D 0
他的回答: D (错误)
正确答案: A
这是信号量的P、V操作:pv操作又称wait,signal,主要是操作进程中对进程控制的信息量的加减控制。
·wait用法:wait(num),num是目标参数
wait的作用是使信息量减一。如果信息量>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
signal用法:signal(num),num是目标参数
signal的作用是使信息量加一。如果信息量>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
信号量表示的是当前可用的资源个数,当信号量为负时,申请资源的进程就只能等待了。所以,信号量是负的多少,就表明有多少个进程申请了资源但无资源可用只能处于等待状态。
7、基址寻址方式中,操作数的有效地址是____。
A 基址寄存器内容加上形式地址(位移量)
B 程序计数器内容加上形式地址
C 变址寄存器内容加上形式地址
D 寄存器内容加上形式地址
他的回答: A (正确)
正确答案: A
在这里插入图片描述

8、若系统中只有用户级线程,则处理机调度单位是()。
A 线程
B 进程
C 程序
D 作业
他的回答: A (错误)
正确答案: B
如果系统只有用户态线程,则线程对操作系统是不可见的,操作系统只能调度进程;
如果系统中有内核态线程,则操作系统可以按线程进行调度;
D.作业:一个作业通常包括几个进程,几个进程共同完成一个任务,即作业。
9、一个在线服务器通常需要读取存储着海量数据的数据库。为了提高服务器处理速度,通常需要加cache(缓存),以下场景中不适合使用cache的是
A 数据库中每条数据被访问的概率近似相等,且独立
B 使用了多线程机制的服务
C 单条线程尺寸太小的数据
D 有着大量访问的服务
他的回答: C (错误)
正确答案: A
因为数据库中每条数据被访问的概率近似相等,且缓存空间一般较小不可能存入较多的数据。无法预测所需要查询的数据,如果将被最近访问数据放入缓存用处不大,故而增加缓存起不到很大的作用。
10、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A 顺序表
B 双链表
C 带头结点的双循环链表
D 单循环链表
他的回答: D (错误)
正确答案: A

二、编程题

【收件人列表】
NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。现在给你一组收件人姓名,请你帮他生成相应的收件人列表。
输入描述:
输入包含多组数据。
每组数据的第一行是一个整数n (1≤n≤128),表示后面有n个姓名。
紧接着n行,每一行包含一个收件人的姓名。姓名长度不超过16个字符。
输出描述:
对应每一组输入,输出一行收件人列表。

示例1:
输入
3\nJoe\nQuan, William\nLetendre,Bruce\n2\nLeon\nKewell
输出
Joe, “Quan, William”, “Letendre,Bruce”\nLeon, Kewell

【解题思路】:

  1. 先接收到一个数字,代表接下来是多少组数据
  2. 逐个接收每个名字,如果名字中没有’,‘或者’ '则直接输出,否则在改名字前后拼接"""再输出
  3. 除过最后一个名字外,每个名字之后都有一个", "
  4. 该组用例处理完成后换行

牛客网ACM模式代码

import java.util.*;
public class Main{
    public static void main(String args[]){
    // 循环输入处理每组测试用例
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
        // 接收第一行,注意:需要将改行之后的回车接收掉
            int n = sc.nextInt();
            sc.nextLine(); // 该行代码非常关键:将数字所在行之后所有的内容接收完
            for(int i = 0; i < n; ++i){
            // 当拿到一个名字的时候,该名字中包含空格或者逗号,拼接""输出
            // 否则直接输出
                String name = sc.nextLine();
                if(name.contains(",") || name.contains(" ")){
                    System.out.print("\"" + name + "\"");
                }else{
                    System.out.print(name);
                }
                // 名字和名字之间使用", "隔开
                // 最后一个名字之后没有
                if(i != n-1){
                    System.out.print(", ");
                }
            }
            // 注意不要忘记换行
        System.out.println();
        }
    }
}

【养兔子】
一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。
输入描述:
测试数据包括多组,每组一行,为整数n(1≤n≤90)。
输出描述:
对应输出第n天有几只兔子(假设没有兔子死亡现象)。
示例1:
输入
1
2
输出
1
2

【解题思路】:
本题的兔子第二天就开始下小兔了,所以这个是从第二项开始的斐波那契数列。前90组的数据恰好还在long的范围内,所以不需要高精度,直接long求解。
牛客网ACM模式代码

import java.util.*;
public class Main {
     public static void main(String[] args){
         Scanner sc=new Scanner(System.in);
         while(sc.hasNextInt()){
             int n=sc.nextInt();
             long fib0=1;
             long fib1=1;
             long f=1;
         for(int i=2;i<=n;i++){
             f=fib0+fib1;
             fib0=fib1;
             fib1=f;
         }
             System.out.println(f);
         }
     }       
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值