1 不算main这个进程自身,到底创建了多少个进程啊?
int main(int argc, char* argv[])
{
fork();
fork() && fork() || fork();
fork();
}
18
19
20
21
先执行第一个fork产生两个进程,包括主进程。
fork() && fork() || fork(); 这一句先执行第一个fork,产生4个,在这4个中有两个是主进程返回非零值,两个子进程返回0值,因而会影响接下来的运行。先判断fork() && fork(),如果第一个fork产生了0值,则第二个fork不会执行,直接执行||后面 的fork,入产生非零值,则fork() && fork()该表达式还需要继续判断&&后面的fork的真假。
【答案】http://blog.csdn.net/hs794502825/article/details/10242091
http://blog.csdn.net/jason314/article/details/5640969
2 在一个童话世界里,任意两个人之间要么是朋友关系,要么是敌人关系,不存在其他关系及没有关系的情况。并且,如果A和B是朋友关系,B和C是朋友关系,那么A和C必然是朋友关系。那么关于这个童话世界中的人群的说法错误的是:__?
可能只有1个人群,这个人群内部是朋友关系。
可能有2个人群,人群内部是朋友关系,人群之间是敌人关系。
可能有3个及以上个人群,人群内部是朋友关系,人群之间是敌人关系。
如果存在多个人群,并且人群内部是朋友关系,人群之间是敌人关系,那么这些人群必然是差不多大小的。
选项D中的情况可以是其中一个人群只有一个人,另外一个人群可以由很多人。
这样一个世界里朋友关系是比较不容易发生变化的。
3 一条很长的河,河水的流速是1m/s,一个皮划艇逆流滑行的速度是2m/s。某一刻皮划艇运动员发现丢失了一只漂流瓶,然后调头顺流以相同的节奏划船,经过半小时后发现了漂流瓶。请问船调头时距离漂流瓶多远()?
5400m
3600m
7200m
1800m
9000m
无法判断
【关键点】A 5400m,人逆流速度2m/s,河流流速1m/s,所以人在静水速度3m/s,人在顺水速度4m/s。
4 下列不属于hash碰撞解决方法的是()。
线性探测 1 2 3 …m-1
单旋转法
二次探测 1² -1² 2² -2² …
拉链法 链地址法
双重散列
多重散列
旋转法是将数据的键值中进行旋转。如5062101旋转之后得到1506210,这是产生随机散列值(hash)的一种方法,不是解决hash碰撞的方法
散列:产生散列值得过程,用哈希函数来产生 直接定址、数字分析、平方取中、折叠法、除留余数法等
解决冲突的方法:
拉链法:http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/chazhao/chazhao9.4.3.3.htm
5 有两个32bit的数A、B,使用下面方式得到32bit的数C、D。哪一种可以使用C、D得到A、B的值?
C=(int32)(A+B),D=(int32)(A-B)
C=(int32)(A+B),D=(int32)((A-B)>>1)
C=(int32)(A+B),D=B
C=(int32)(A+B),D=(int32)(A+2*B)
C=(int32)(A*B),D=(int32)(A/B)
都不可以,可能溢出
C
第一项:A=(C+D)/2,B=C-A
第二项:D右移一位,不知道移出的是1还是0,不能恢复
第三项:A=C-D,B=D
第四项:B=D-C,A=C-B
第五项:虽然可以C*D再开方,但是不能确定A和B的正负
但是对于无符号数,A不行,这里简单起见,以3bit数为例。例如A=111,B=110。C=A+B=001(溢出),D=A-B=001,所以A不能正确恢复了。C仍然可以,A=C-D=001-110=111。D答案,同样因为溢出不能恢复。
6 关于引用以下说法错误的是()。
引用必须初始化,指针不必
引用初始化以后不能被改变,指针可以改变所指的对象
不存在指向空值的引用,但是存在指向空值的指针
一个引用可以看作是某个变量的一个“别名”
引用传值,指针传地址
函数参数可以声明为引用或指针类型
首先,E明显是不对的。引用也是传递的地址,否则你在函数内部操作的就不可能是实参,而只能是形参。实参的内容是不会改变的。其次B项说法不明确,“引用初始化以后不能被改变 ”有歧义。如果已有&a = b; 则不能再有&a = c; 若b = 2; &a = b; a = 5;则是可以的,b的值也将被赋为5。考虑到B项后面又说:“指针可以改变所指的对象 ”,该题考察的应该是前一种意思。综上所诉,选E
7 下列关于线程调度的叙述中,错误的是()。
调用线程的sleep()方法,可以使比当前线程优先级低的线程获得运行机会
调用线程的yeild()方法,只会使与当前线程相同优先级的线程获得运行机会 yeild()会给优先级相同的或者比自己高的线程运行的机会。✘
当有比当前线程的优先级高的线程出现时,高优先级线程将抢占CPU并运行
一个线程由于某些原因进入阻塞状态,会放弃CPU
具有相同优先级的多个线程的调度一定是分时的 在批处理操作系统中并不存在分时调度。✘
分时调度模型是让所有线程轮流获得CPU使用权
8、 一台刚刚接入互联网的WEB服务器第一次被访问到时,不同协议的发生顺序是下面中的__。
ARP -> DNS -> HTTP
ARP -> HTTP -> DNS
DNS -> HTTP -> ARP
DNS -> ARP -> HTTP
HTTP -> ARP -> DNS
HTTP -> DNS -> ARP
信息发送出去都是由低层逐层向上传递的,arp是数据链路层的协议,dns是网络层的协议、http是应用层的协议。 选A
9、以下程序输出是__。
#include <iostream>
using namespace std;
int main(void)
{
const int a = 10;
int * p = (int *)(&a);
*p = 20;
cout<<"a = "<<a<<", *p = "<<*p<<endl;
return 0;
}
编译阶段报错运行阶段报错
a = 10, *p = 10
a = 20, *p = 20
a = 10, *p = 20
a = 20, *p = 10
选D。
因为a 和p都指向相同的内存地址,所以输出的前两个结果是相同的,但为啥相同的内存里的结果不相同么?--这就是常量折叠.
这个”常量折叠”是 就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。
因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!
简单的说就是,当编译器处理const的时候,编译器会将其变成一个立即数。
10、将整数序列(7-2-4-6-3-1-5)按所示顺序构建一棵二叉排序树a(亦称二叉搜索树),之后将整数8按照二叉排序树规则插入树a中,请问插入之后的树a中序遍历结果是__。
答案:1-2-3-4-5-6-7-8
11、如下SQL语句中,__可能返回null值。
(1) select count(*) from t1;
(2) select max(col1) from t1;
(3) select concat(‘max=’,max(col1)) from t1;
(1)不可能,(2)和(3)可能
(1)返回的是表的行数,如果没有记录,应该返回0,不会出现NULL,
(2) 和(3) 正常情况下不会出现NULL,但是如果表里面没有记录,则会出现NULL
12 以下使用了贪心算法的是__。
KMP算法
希尔排序算法
冒泡排序算法
Dijkstra算法
快速排序算法
Floyd算法
正确答案: D Dijkstra算法
13 进程阻塞的原因不包括__。
时间片切换
等待I/O
进程sleep Sleep之后进程处于中断挂起状态。当系统恢复后进程会从中断点继续进程运行。
等待解锁
正确答案: A
14
Dijkstra算法用于求解图中两点间最短路径,其时间复杂度O(n^2)
Floyd-Warshall算法用于求解图中所有点对之间最短路径,其时间复杂度为O(n^3)
找出n个数字的中位数至少需要O(n*logn)的时间 快排时从中间比,一比即中就是O(1)
基于比较的排序问题的时间复杂度下界是O(n*logn)
15 如果在一个排序算法的执行过程中,没有一对元素被比较过两次或以上,则称该排序算法为节俭排序算法,以下算法中是节俭排序算法的有__。
插入排序 每个未排序的元素只会与 已经有序的元素进行至多一次比较
选择排序
堆排序 是选择排序的一种
归并排序 每个有序列表内的元素不进行比较;列表之间的元素比较一次之后就进入了同一个列表
选择排序 :
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区*R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换*,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
16 设 m 和 n 都是 int 类型,那么以下 for 循环语句,__
for(m=0,n=-1;n=0;m++,n++)
n++;
A.循环体一次也不执行
B.循环体执行一次
C.是无限循环
D.有限次循环
E.循环结束判断条件不合法
F.运行出错
选A,因为n=0是赋值运算,先将0给n然后再判断n是否为真,其为假故永不执行。