1.在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是模式,内模式还是外模式?
外模式是用户能够看见和使用的局部数据的逻辑结构和特征的描述。外模式是用户的数据视图。
模式是全体数据的逻辑结构和特征的描述。模式又称为逻辑模式。
内模式是数据物理结构和存储方式的描述。内模式又称为存储模式。
所以这题是模式
2.having子句后面应该跟什么表达式?
组条件表达式
3.字符串赋值 char str[80]; str=”abcdefg”是否正确?
错误,数组名是常量,不能够对他赋值
4.链表可以随机访问任意元素吗
不可以,链表都是一个个遍历的
5.在数据库设计中,将 E-R 图转换成关系数据模型的过程属于?
数据库设计通常分为六个阶段,①需求分析②概念结构设计③逻辑结构设计④数据库物理设计⑤数据库的实施⑥数据库运行与维护
①需求分析:分析用户的需求,包括数据、功能、性能
②概念结构设计:画ER图,设计ER模型
③逻辑结构设计:将ER图转换成表,即ER模型转变为关系模型
④数据库物理设计:为数据库选择合适的存储结构和存取路径
⑤数据库的实施:编程,测试和试运行
⑥数据库运行与维护:日常维护数据和运行
6.堆和栈的区别和生长方向和空间大小?
栈的使用很方便快捷,由编译器自动执行。堆需要自己控制,但是自由度更好
栈的生长是向下的,即向着内存地址减小的方向。堆的生长是向上的,即向着内存地址增加的方向。
栈有一定的空间大小限定,而堆可达到4G的空间
7.在32位小端的机器上,如下代码输出是什么:
char array[12] = {0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08};
short *pshort = (short *)array;
int *pint = (int *)array;
int64 *pint64 = (int64 *)array;
printf("0x%x , 0x%x , 0x%llx , 0x%llx", *pshort , *(pshort+2) , *pint64 , *(pint+2));
小端机器的数据高位字节放在高地址,低位字节放在低地址。
char array[12] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
1,char一字节,直观呈现的结果为:0x08-07-06-05-04-03-02-01(从后到前下标为0-7);
2,short两字节,直观呈现 的结果 为: 0x0807-0605-0403-0201 (从后到前 下标 为0-3) :
*pshort从0开始,所以0x201;
*(pshort+2)从2开始,所以0x605;
3,int64八字节,直观呈现 的结果 为 0x0807060504030201 (从后到前 下标 为0) :
*pint64从0开始,所以0x807060504030201;
4,int四字节,直观呈现为0x08070605-04030201(从后到前 下标 为0-1) :
*(pint+2))从2开始,但是最多只到下标1,后面位置默认为0。
%x是十六进制数
8.在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是?
p –parent 可以一次建立多个目录,并且如果所指定的路径中有些父目录不存在,自动新建它们
9.一个优化的程序可以生成一n个元素集合的所有子集,那么该程序的时间复杂度是?
每个元素分出现和不出现的两种情况,就是2的n次方。求一个集合的子集,有确定公式2^n个,所以复杂度为O(2^n)
10.若系统中只有用户级线程,则处理机调度单位是?
是进程。
如果系统只有用户态线程,则线程对操作系统是不可见的,操作系统只能调度进程;
如果系统中有内核态线程,则操作系统可以按线程进行调度;
11.在/etc/fstab文件中指定的文件系统加载参数中,什么参数一般用于CD-ROM等移动设备
参数 default表示和使用默认设置
sw 表示自动挂载的可读写分区
ro 表示挂载只读权限的
rw 表示挂载读写权限的
noauto 设备(分区)只能手动挂载
所以应该是noauto
12.在动态分区分配方案中,某一作业完成后,系统收回其主存空间,并与相邻空闲区合并,为此需要修改空闲区表,造成空闲区数减1的情况是?
①有上邻空闲区,但无下邻空闲区.只修改上邻空闲区长度(为收回的空闲区长度与原上邻区长度之和),空闲区数不变
②无下邻空闲区,但有下邻空闲区.改记录这个下邻空闲区记录的地址为收回空闲区的地址,长度为下邻空闲区的长度和收回空闲区的长度,空闲区数不变
③有上邻空闲区,也有下邻空闲区.改记录上邻区记录的长度(为上邻区长度、下邻区长度和收回区长度之和),再把下邻区记录的标志位改为空,即空闲区数-1
④无上邻空闲区,也无下邻空闲区.那么找一个标志位为空的记录,记下该回收区的起始地址和长度,且改写相应的标志位为未分配,表明该登记栏中指示了一个空闲区。 空闲区数+1
13.以下涉及到内存管理的代码段中,有错误的是
①int *a=new int(12);
//.....
free(a);
②int *ip=static_cast<int*>(malloc(sizeof(int)));
*ip=10;
//.....
delete ip;
③double *a=new double[1];
//....
delete a;
④int *ip=new int(12);
for(int i=0;i<12;++i){
ip[i]=i; }
delete []ip;
答:①②④是错误的。因为new和delete搭配,malloc和free搭配。
其中④是int(12),相当于申请了一个值为12的整形数据,不是一个有12个数据的数组,所以在循环的时候越界了。而delete []ip因为是基本类型数组,所以有无[]都是对的,同理③是对的
14.用户要求()系统对用户的请求在一定的时间内给予及时响应。①多道批处理②单道批处理③分时系统④实时系统
答:选③④,因为实时系统显然要响应。分时系统,由于分时系统会对每个程序都分一段时间片,所以在当前等待进程的前一个进程的时间片结束后,就会执行当前进程了,也算是在一定时间内得到响应,不会出现无限等待的情况。批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。
15.下面有关volatile说法正确的有?
①当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后再取变量值时,就直接从寄存器中取值
②优化器在用到volatile变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份
③volatile适用于多线程应用中被几个任务共享的变量
④一个参数不可以既是const又是volatile
答:正确的有①②③
④:一个参数既可以是const还可以是volatile. 一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。volatile 作用是避免编译器优化,说明它是随时会变的,它不是 non-const,和const不矛盾。被const修饰的变量只是在当前作用范围无法修改,但是可能被其它程序修改。所以const volatile int i = 0; 表示:任何对i的直接修改都是错误的,但是i可能被意外情况修改掉,不要做无意义的优化。(简单点就是该程序代码不能试图去修改它,但不排除硬件方面修改了它,我们每次都得重新读取它的值。)
①②:一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
对于一般变量:为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中。以后再取变量值时,就直接从寄存器中取值。
几个应用例子:
a. 并行设备的硬件寄存器(如:状态寄存器)。
b. 一个中断服务子程序中会访问到的非自动变量。(个人理解:中断服务子程序不能用缓存在寄存器中的值来判断事件,因为那个值可能被修改了,需要重新读取。所以一般需要把这种变量声明为volatile。)
c. 多线程应用中被几个任务共享的变量。
虽然①和volatile关联不大,但是题目选了,我也不知道