笔试强训48天——day30

一. 单选

1. 下列关于线程的说法错误的是()

A 耗时的操作使用线程,提高程序响应
B 耗内存的操作使用线程,提高内存利用率
C 多CPU的系统使用线程,提高CPU利用率
D 并行操作使用线程,如c/s架构中服务端程序为每个客户端请求创建一个线程来响应

正确答案:B

当一个比较耗时的操作,可以分成多个线程,并行的运行,这样提高程序的运行效率多个线程在并行运行的时候,并不能比高内存的利用率
多线程的并行可以提高CPU的利用率
c/s服务端程序可以让一个线程为一个客户端去服务,典型的就是tcp的服务端程序。

综上:多线程的程序可以提高CPU的利用率,不能提高内存的利用率,从而选择B

2. 如果将固定块大小的文件系统中的块大小设置大一些,会造成()。

A 更好的磁盘吞吐量和更差的磁盘空间利用率
B 更好的磁盘吞吐量和更好的磁盘空间利用率
C 更差的磁盘吞吐量和更好的磁盘空间利用率
D 更差的磁盘吞吐量和更差的磁盘空间利用率

正确答案:A

1.如果磁盘的固定块大小设置大了,就会导致,存储小块文件的时候,分配一个块的大小绰绰有余,就会导致该块当中空闲的空间也不能分配给其他的程序,从而磁盘的利用率就会降低
2同时就会提高整个磁盘的吞吐量,因为每次分配的块比之前的大,在块数相同的情况下,分配的空间更大了

3. 某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台,当N的取值不超过()时系统不会发生死锁。

A 4
B 5
C 6
D 7
正确答案:B

可以用哲学家就餐问题的思想解决此类问题,每个进程要求3台,所以先给每个进程2台,再如果多出一台,分给某一个进程,等这个进程执行完了,释放自己的资源给其他进程用,这样就不会发生死锁。即2N+1=11,得N=5。N=4时,不是最大值,不符合题意,N=6时,资源不够用,可能死锁。

4. 进程调度是从()选择一个进程投入运行。

A 就绪队列
B 等待队列
C 作业后备队列
D 提交队列
正确答案:A

操作系统调度是从就绪队列当中获取一个进程进行运行。

5. 下面有关Cache的说法哪一个是不正确的()

A 设置Cache的目的,是解决CPU和主存之间的速度匹配问题
B 设置Cache的理论基础,是程序访问的局部性原理
C Cache与主存统一编址,Cache的地址空间属于主存的一部分
D Cache的功能均由硬件实现,对程序员是透明的

正确答案:C

C选项:Cache是介于中央处理器和主存储器之间的高速小容量存储器,因此它不属于主存的一部分

6. 什么是内存抖动(Thrashing)( )

A 非常频繁的换页活动
B 非常高的CPU执行活动
C 一个极长的执行进程
D 一个极大的虚拟内存

正确答案:A

内存抖动:内存页面的频繁更换,导致整个系统效率急剧下降,这个现象称为内存抖动。
抖动一般是内存分配算法不好,内存太小引或者程序的算法不佳引起的页面频繁从内存调入调出

7. 在所有非抢占CPU调度算法中,系统平均响应时间最优的是( )

A 实时调度算法
B 短任务优先算法
C 时间片轮转算法
D 先来先服务算法

正确答案:B

1.短任务优先系统平均响应时间最短,但是往往不能确定所有任务的运行时间
2.时间片轮转,适用于分时系统,但是增加了抢占以切换进程,算法性能依赖于时间片大小
分时操作系统:是使一台计算机采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统
3.先来先服务平均响应时间最长。不适用于分时操作系统

8. 下面关于inode描述错误的是?

A inode和文件是一一对应的
B inode能描述文件占用的块数
C inode描述了文件大小和指向数据块的指针
D 通过inode实现文件的逻辑结构和物理结构的转换

正确答案:A

A:硬链接的情况下,多个文件指向同一个inode节点
1.inode包含了文件的相关(元)信息,其中有文件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。
2.在 inode 节点表中最重要的内容是磁盘地址表。在磁盘地址表中有13个块号,文件将以块号在磁盘地址表中出现的顺序依次读取相应的块。文件数据都储存在"块"中,一个块通常是8个扇区,4KB.
3.Linux文件系统通过把 inode节点和文件名进行连接,当需要读取该文件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的 inode节点号,通过该inode节点的磁盘地址表把分散存放的文件物理块连接成文件的逻辑结构。

9. 文件操作的唯一依据是?

A 文件名
B 文件句柄
C 物理地址
正确答案:B

文件描述符:open函数的返回值,返回当前操作文件的句柄
后续通过文件描述符(文件句柄)来读文件或者写文件

int open(const char *pathname,int flags,mode_t mode);
ssize_t read(int fd,void *buf,size_t count);
ssize_t write(int fd ,const void *buf,size_t count);

10. 十进制数-10的3进制4位补码是多少?

A 0010
B 1010
C 2122
D 2121
正确答案:C

补码=反码+1,计算机中,用补码来表示负数。(1)用0,1,2表示;
(2)遇3进位;
于是3进制的数的补码同二进制的转换过程一样。(1)先求的10的3进制表示为0101;
B(2)对10的3进制表示形式取反为2121;
(3)对取反后的三进制表示形式加1位等于2122;

 
 

二. 编程

1. 最难的问题

链接

NowCoder生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是
军团中的一名军官,需要把发送来的消息破译出来、并提
供给你的将军。
消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每
个字母A 都分别替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。密码中的字母与原
文中的字母对应关系如下。
密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

输入描述:
输入包括多组数据,每组数据一行,为收到的密文。
密文仅有空格和大写字母组成。
输出描述:
对应每一组数据,输出解密后的明文。

示例1:
输入
HELLO WORLD
SNHJ
输出
CZGGJ RJMGY
NICE

正确答案:

#include <stdio.h>
int main() {
    
    
    char c;
    while ((c = getchar()) != EOF){
    
    
        if ('A' <= c && 'Z' >= c) {
    
    
            c = (c > 'E') ? (c - 5) : (c + 21);
        } 
        putchar(c);
    }
    return 0;
}

2.因子个数

链接

一个正整数可以分解成一个或多个数组的积。例如36=223*3,即包含2和3两个因子。NowCoder最近在
研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。

输入描述:
输入包括多组数据。
每组数据仅有一个整数n (2≤n≤100000)。
输出描述:
对应每个整数,输出其因子个数,每个结果占一行。

示例1:
输入
30
26
20
输出
3
2
2

正确答案:

#include <iostream>
#include<math.h>
using namespace std;

int main()
{
    
    
    int n, k, i;
    while (cin >> n){
    
    
        k = 0;
        for (i = 2; i <= sqrt(n); i++) {
    
    
            if ((n % i) == 0) {
    
    
                while ((n % i) == 0){
    
    
                    n = n / i;
                }
                k++;
            }
        } 
        if(n != 1)
            k++;
        cout << k << endl;
    } 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Ll_R_lL/article/details/128730538
今日推荐