🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!欢迎志同道合的朋友一起加油喔🤺🤺🤺
目录
一、选择题
二、编程题
🔥年会抽奖
🔥抄送列表
一、选择题
1、在支持多线程的系统中,进程P创建的若干个线程不能共享的是( )。
A 进程 P 的代码段
B 进程 P 中打开的文件
C 进程 P 的全局变量
D 进程 P 中某线程的栈指针
正确答案: D
A、B、C线程共有,D线程私有。
2、操作系统中关于竞争和死锁的关系下面描述正确的是?
A 竞争一定会导致死锁
B 死锁一定由竞争引起
C 竞争可能引起死锁
D 预防死锁可以防止竞争
正确答案: C
死锁的四个必要条件:
(1)互斥条件:一个资源每次只能被一个进程使用。
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
3、并发是并行的不同表述,其原理相同。
A 错
B 对
正确答案: A
并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间之内,让多个进程都得以推进,称之为并发。
并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行。
4、线程的切换会引起进程的切换。
A 错
B 对
正确答案: A
一个进程也可能包含多个线程,对于同一个进程中的线程间切换,不会引起进程切换;不同进程中的线程切换会导致进程切换。
5、操作系统的所有程序是常驻内存的。
A 错
B 对
正确答案: A
对于正在等待事件的进程,可以将其换出外存(部分或全部),以空出更多地内存加载新的进程,使CPU资源充分被利用。
6、把逻辑地址转换程物理地址称为()。
A 地址分配
B 地址映射
C 地址保护
D 地址越界
正确答案: B
B.地址映射:为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址
7、在Unix系统中,处于()状态的进程最容易被执行。
A 辅存睡眠
B 内存睡眠
C 内存就绪
D 辅存就绪
正确答案: C
8、进程的控制信息和描述信息存放在()。
A JCB
B PCB
C AFT
D SFT
正确答案:C
为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。
PCB一般包括:
1.程序ID(PID、进程句柄):它是唯一的,一个进程都必须对应一个PID。PID一般是整形数字。
2.特征信息:一般分系统进程、用户进程、或者内核进程等。
3.进程状态:运行,就绪,阳塞,表示进程现的运行情况。
4.优先级:表示获得CPU控制权的优先级大小。
5.通信信息:讲程之间的通信关系的反映,中干操作系统会提供通信信道。
6,现场保护区:保护阳塞的进程用。
7.资源需求、分配控制信息。
8.进程实体信息,指明程序路径和名称,进程数据在物理内存还是在交换分区(分页)中。
9.其他信息:工作单位,工作区,文件信息等。
9、在()情况下,系统出现死锁。
A 若干进程因竞争资源而无休止地相互等待对方释放已占有的资源
B 有多个封锁的进程同时存在
C 计算机系统发生重大故障
D 资源数大大小于进程数或进程同时申请的资源数大大超过资源总数
正确答案: A
死锁是两个进程或者线程都在相互等待对方释放资源,互不相让,就造成了死锁。
10、当系统发生抖动(thrashing)时,可以采取的有效措施是( )。
Ⅰ.撤销部分进程 Ⅱ.增加磁盘交换区的容量 Ⅲ.提高用户进程的优先级
A 仅Ⅰ
B 仅Ⅱ
C 仅Ⅲ
D 仅Ⅰ, Ⅱ
正确答案: A
在具有对换功能的操作系统中,通常把外存分为文件区和对换区。前者用于存放文件,后者用于存放从内存换出的进程。
抖动现象是指刚刚被换出的页很快又要被访问。为此,又要换出其他页,而该页又快被访问,如此频繁地置换页面,以致大部分时间都花在页面置换上。
I,撤销部分进程可以减少所要用到的页面数,防止抖动。
Ⅱ和Ⅲ,对换区大小和进程优先级都与抖动无关。
二、编程题
🔥年会抽奖
年会抽奖__牛客网
【题目解析】:
错排问题举例:
用A、B、C……表示写着n位友人名字的信封,a、b、c……表示n份相应的写好的信纸。把错装的总数为记作D(n)。假设把a错装进B里了,包含着这个错误的一切错装法分两类:
b装入A里,这时每种错装的其余部分都与A、B、a、b无关,应有D(n-2)种错装法。
b装入A、B之外的一个信封,这时的装信工作实际是把(除a之外的)n-1份信纸b、c……装入(除B以外的)n-1个信封A、C……,显然这时装错的方法有D(n-1)种。
总之在a装入B的错误之下,共有错装法D(n-2)+D(n-1)种。
a装入C,装入D……的n-2种错误之下,同样都有D(n-1)+D(n-2)种错装法,因此D(n)=(n-1)[D(n-1)+D(n-2)]
D(n) = (n-1) [D(n-2) + D(n-1)]
特殊地,D(1) = 0, D(2) = 1.
【解题思路】:
错排的递推公式是:D(n) = (n - 1) [D(n - 2) + D(n - 1)],也就是第n项为n - 1倍的前两项和。通过这个递推公式可以得到在总数为n的时候,错排的可能性一共有多少种。那么要求错排的概率,我们还需要另一个数值,就是当总数为n的时候,所有的排列组合一共有多少种,那么根据排列组合,肯定是使用的公式来求,也就是n的阶乘。所以结果很简单,就是用公式求出第n项的错排种类,和n的阶乘,然后两者一除,就是概率了。
import java.util.*;
public class Main{
public static void main(String[] args){
long d[]=new long[21];// 错排数据
d[0]=d[1]=0;
d[2]=1;
long f[]=new long[21];// 阶乘
f[0]=f[1]=1;
f[2]=2;
// 算N错排数据和阶乘
for(int i = 3; i <= 20; ++i){
d[i] = (i-1) * (d[i-1] + d[i-2]);
f[i] = i * f[i-1];
}
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
System.out.printf("%.2f%%\n", 100.0*d[n]/f[n]);
}
}
}
🔥抄送列表
抄送列表__牛客网
【解题思路】:
- 通过Scanner的nextLine()方法获取第一行中的名字
- 解析出第一行中的所有名字保存在HashSet中
- 获取第二行中的名字,检测该名字是否存在,并按照题目的要求进行输出
import java.util.*; public class Main{ public static void main(String[] args){ // 循环处理每组测试用例 Scanner sc = new Scanner(System.in); while(sc.hasNext()){ // 接收第一行的所有名字,并对名字进行分割,将分割好的名字放在Set String name = sc.nextLine(); int i = 0; int end = 0; Set<String> s = new HashSet<>(); while(i < name.length()){ if('\"' == name.charAt(i)){ // 名字包含在""中 end = name.indexOf('\"', i + 1); s.add(name.substring(i+1, end)); // 参数1:起始位置 参数2:表示末尾位置---注 //意:该位置的字符不会被截取到,截取到该位置之前的字符 i = end + 2; }else{ // 名字没有包含在""中 end = name.indexOf(',', i+1); if(-1 == end){ // 现在要分割的名字是最后一个名字 s.add(name.substring(i, name.length())); break; } name.substring(i, end); i = end + 1; } } // 获取第二行的名字并检测该名字是否在Set中存在 name = sc.nextLine(); if(s.contains(name)){ System.out.println("Ignore"); }else{ System.out.println("Important!"); } } } }