下列有关在一个处理器(processor)上跑两个线程(thread)的说法中,正确的是?
A. 一个线程可以改变另一个线程的程序计数器(program counter)
B. 一个线程既不能读也不能写另一个线程的栈(stack)
C. 一个线程可以读写另一个线程的寄存器(register)
D. 以上都不对
答案:B
如何减少换页错误?
A. 进程倾向于占用CPU
B. 访问局部性(locality of reference)满足进程要求
C. 进程倾向于占用I/O
D. 使用基于最短剩余时间(shortest remaining time)的调度机制
答案:B
系统中内存不足程序所需大小,程序就无法执行。
A. 错
B. 对
答案:A
通常所说的"存储保护"的基本含义是()
A. 防止存储器硬件受损
B. 防止程序在内存丢失
C. 防止程序间相互越界访问
D. 防止程序被人偷看
答案:C
下列进程调度算法中,()可能会出现进程长期得不到调度的情况。
A. 非强占式静态优先权法
B. 强占式静态优先权法
C. 时间片轮转调度算法
D. 非强占式动态优先权法
答案:B
如果信号量的当前值为-4,则表示系统中在该信号量上有()个进程等待。
A. 4
B. 3
C. 5
D. 0
答案:A
基址寻址方式中,操作数的有效地址是()
A. 基址寄存器内容加上形式地址(位移量)
B. 程序计数器内容加上形式地址
C. 变址寄存器内容加上形式地址
D. 寄存器内容加上形式地址
答案:A
若系统中只有用户级线程,则处理机调度单位是()
A. 线程
B. 进程
C. 程序
D. 作业
答案:B
一个在线服务器通常需要读取存储着海量数据的数据库。为了提高服务器处理速度,通常需要加cache(缓存),以下场景中不适合使用cache的是()
A. 数据库中每条数据被访问的概率近似相等,且独立
B. 使用了多线程机制的服务
C. 单条线程尺寸太小的数据
D. 有着大量访问的服务
答案:A
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A. 顺序表
B. 双链表
C. 带头结点的双循环链表
D. 单循环链表
答案:A
收件人列表
题目描述:NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空 格或逗号,则姓名需要用双引号包含。
现在给你一组收件人姓名,请你帮他生成相应的收件人列表。
输入描述:输入包含多组数据。
每组数据的第一行是一个整数n (1≤n≤128),表示后面有n个姓名。
紧接着n行,每一行包含一个收件人的姓名。姓名长度不超过16个字符。
输出描述:对应每一组输入,输出一行收件人列表。 public class Main55 { // 收件人列表 public static void main(String[] args) { Scanner scanner=new Scanner(System.in); while (scanner.hasNext()){ int n=scanner.nextInt(); scanner.nextLine(); for (int i = 0; i < n; i++) { String name=scanner.nextLine(); //只需要检测该名字中是否包含' ' 或者' ,’ if (name.contains(" ") || name.contains(",")){ System.out.printf("\""+name+"\""); }else { System.out.print(name); } if (i==n-1){ System.out.println(); //最后一个名字:其之后必须跟换行 }else { System.out.print(", "); //其他名字之后跟:“," } } } } }养兔子
题目描述:一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。
输入描述:测试数据包括多组,每组一行,为整数n(1≤n≤90)。
输出描述:对应输出第n天有几只兔子(假设没有兔子死亡现象)。 public class Main56 { //养兔子 public static void main(String[] args) { //循环(递归的时间复杂度较大 Scanner scanner=new Scanner(System.in); while (scanner.hasNextInt()){ int n=scanner.nextInt(); long f0=1; long f1=1; long ret=1; for (int i = 2; i <= n; i++) { ret=f0+f1; f0=f1; f1=ret; } System.out.println(ret); } } }年会抽奖
题目描述:今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:
1. 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;
2. 待所有字条加入完毕,每人从箱中取一个字条;
3. 如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”
现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?
输入描述:输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。
输出描述:对应每一组数据,以“xx.xx%”的格式输出发生无人获奖的概率。
输入:2
输出:50%
public class Main57 { //年会抽奖 public static void main(String[] args) { long[] d=new long[100]; d[0]=0; d[1]=0; d[2]=1; long[] f=new long[100]; f[0]=1; f[1]=1; f[2]=2; for (int i = 3; i <=21 ; i++) { d[i]=(i-1)*(d[i-1] + d[i-2]); f[i]=f[i-1]*i; } Scanner scanner=new Scanner(System.in); while (scanner.hasNextInt()){ int n=scanner.nextInt(); System.out.printf("%.2f%%\n",100.0*d[n]/f[n]); } } }
抄送列表
题目描述:NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过 滤掉这些次要的邮件,优先处理重要的邮件。
现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。
输入描述:输入有多组数据,每组数据有两行。
第一行抄送列表,姓名之间用一个逗号隔开。如果姓名中包含空格或逗号,则姓名包含在双引号里。总长度不超过512个字符。
第二行只包含一个姓名,是待查找的用户的名字(姓名要完全匹配)。长度不超过16个字符。
输出描述:如果第二行的名字出现在收件人列表中,则输出“Ignore”,表示这封邮件不重要;否则,输出“Important!”,表示这封邮件需要被优先处理。
//抄送列表 public class Main58 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { String s = sc.nextLine(); String name = sc.nextLine(); char[] ch = s.toCharArray(); List<String> list = new ArrayList<>(); int flag = 0; String res = ""; for (int i = 0; i < ch.length; i ++ ) { if (flag == 0 && ch[i] == '"') { flag = 1; list.add(res); res = ""; } else if (flag == 1 && ch[i] == '"') { flag = 0; list.add(res); res = ""; } else if (flag == 1) { res += ch[i]; } else if (flag == 0 && ch[i] != ',') { res += ch[i]; } } list.add(res); boolean isFinded = false; for (String string : list) { if (name.equals(string)) { isFinded = true; break; } } if (isFinded) System.out.println("Ignore"); else System.out.println("Important!"); } } }