自练题20170801

1.以下关于DBA职责的叙述中,不正确的是
DBA是数据库系统的超级用户,负责控制和管理各个用户的访问权限
DBA要负责监控数据库的运行
DBA要配合前端应用程序的开发
DBA要负责当数据库系统发生故障时进行恢复
答:选第一个

2.在关系数据库设计中,设计关系模式(二维表)是数据库设计中哪个阶段的任务( )?
逻辑设计阶段
概念设计阶段
物理设计阶段
需求分析阶段
答:选第一个

3.MS-DOS 系统中的磁盘文件物理结构属于( )。
连续文件
链接文件
索引文件
散列文件
答:选第二个

4.终止一个前台进程可能用到的命令和操作是?
kill
CTRL+C
shut down
halt
答:选第二个,kill杀死前台和后台的进程,而ctrl+c只能杀死正在运行的进程也就是前台进程

5.下面这段程序的输出是什么?

class A{
    public:
        A(){p();}
        virtual void p(){print("A")}
        virtual ~A(){p();}
};
class B:public A{
    public:
        B(){p();}
        void p(){print("B")}
        ~B(){p();}
};
int main(int, char**){
        A* a=new B();
        delete a;
}

答:ABBA
题目想构造一个B类的对象,B继承自A,所示首先构造A,A中构造函数调用P,虽然P是虚函数,按理来说应该动态绑定,但是此时B并没有被构造,所以只能调用自己的P函数(输出A),接下来构造B,调用B的P函数(输出B),接着析构从派生类到基类,首先析构B,调用B的P函数(输出B),接着调用A的析构函数,按理来说应该动态绑定,但是此时B已经被析构,所以只能调用自己的P函数(输出A)。

解释就是上面的,但是C++不推荐在构造/析构函数中调用虚函数进行动态绑定,详情请看Effective C++。
父类构造 -> 子类构造 -> 子类析构 -> 父类析构
B构造时,首先基类构造函数工作,构造基类的成员变量,然后在构造继承类即B的成员变量。在析构的时候切好相反。首先析构继承类即子类,然后在析构基类。即B的析构函数先工作,A的析构函数后工作。

6.已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是()
head(tail(LS))
tail(head(LS))
head(tail(head(tail(LS)))
head(tail(tail(head(LS))))
答:选第三个
若广义表Ls非空(n≥1),则a l 是LS的表头,其余元素组成的表( a 2 ,a3,…,a n )称为Ls的表尾。
任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,而其表尾必定是子表。
tail(LS)=((d,e,f))
head(tail(LS))=(d,e,f)
tail(head(tail(LS) )) = (e,f)
head(tail( head(tail(LS) ) )) = e
tail返回一个广义表

7.有变量int i = 0; int a = i++; int b=++a; int c = a+b; 请问表达式 a?b:c 的值是
答:1,首先a=1,b=1,c=2,条件表达式,表示如果a为真,则表达式值为b 如果a
为假,则表达式值为c

8.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别0和3。当从队列中删除一个元素,再加入两 个元素后,rear和front的值分别为
答:2和4,删除一个元素后,队首指针要加1,front=(front+1)%6,结果为4,每加入一个元素队尾指针加一,即real=(real+1)%6,加入两个元素后变为2

9.这里写图片描述
没有重载下面哪个运算符

==
++
*
>>

答:选第四个,迭代器可以看成一个指针,指针有==,判断是否相等,指针有取值*,指针有自加++,指针没有左移,右移

10.以下程序是用辗转相除法来计算两个非负数之间的最大公约数:

long long gcd(long long x, long long y) {
    if (y == 0)
        return x;
    else
        return gcd(y, x % y);
}

我们假设x,y中最大的那个数的长度为n,x>y,基本运算时间复杂度为O(1),那么该程序的时间复杂度为( )
O(1)
O(logy)
O(n)
O(x)
答:选第二个,x长度大于y,计算时肯定要考虑y的计算次数,这样答案就很明显了

11.下面程序的输出结果是

char *p1= “123”, *p2 = “ABC”, str50]= "xyz";
strcpy(str+2,strcat(p1,p2));
cout << str;
xyz123ABC
z123ABC
xy123ABC
出错

答:选第四个,strcat(p1,p2)出错,因为p1只被分配了4个字节的地址空间,将p2拼接在p1后面会引起内存溢出。

12.下列哪个git命令不是合并代码用的:

git pull --rebase
git merge
git cherry-pick
git blame

答:选最后一个
使用git merge命令;
使用git pull命令;
使用git cherry-pick命令
都可以合并
执行git blame;命令时,会逐行显示文件,并在每一行的行首显示commit号,提交者,最早的提交日期等

13.下面关于二叉搜索树正确的说法包括__
待删除节点有左子树和右子树时,只能使用左子树的最大值节点替换待删除节点。
给定一棵二叉搜索树的前序和后序遍率历结果,无法确定这棵二叉搜索树。
给定一棵二叉搜索树,根据节点值大小排序所需时间复杂度是线性的。
给定一棵二叉搜索树,可以在线性时间复杂度内转化为平衡二叉搜索树。
答:选第三个
A可以用右子树最小结点来替代 错误
B 对于搜索树来说,只要知道前序遍历就能还原了,第一个是根结点,之后的连续K个小于根节点的为左子树,后面的都是右子树,然后递归; 错误
C 正确, 中序遍历就可以了
D 如果允许额外的存储空间,可以先按照C生成一个排好序的数组,然后不断的找mid节点作为根来构造平衡树就是线性的,如果不允许额外空间只能靠旋转的话无法用线性时间。因为题目是单选,只能理解为不允许额外的存储空间了,
所以只能选C

14.下面列出的选项中,属于可剥夺性资源的有()。
CPU
内存
磁盘
磁带机
答:选AB,系统中的资源可以分为两类,一类是可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺。例如,优先权高的进程可以剥夺优先权低的进程的 处理机 。又如,内存区可由 存储器管理 程序,把一个进程从一个存储区移到另一个存储区,此即剥夺了该进程原来占有的存储区,甚至可将一进程从内存调到外存上,可见, CPU 和 主存 均属于可剥夺性资源。另一类资源是不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如 磁带机 、打印机等

15.() 不是实现分时系统必须采用的技术
时钟中断
人机交互
多道程序设计
虚拟内存管理
答:选最后一个,虚拟内存管理用来将物理内存扩充到外存上,但不是分时所必需的技术。而时钟中断是程序切换的基本技术,因而是分时的基础;多道程序设计是分时的前提技术;人机交互是分时系统的实现技术/手段。

16.候选关键字中的属性称为()
关键属性
主属性
候选属性
复合属性
答:选第二个

17.栈和队列的存储方式既可是顺序方式,也可是链接方式,正确吗
答:正确

18.在一棵二叉树中有30个叶子结点,仅有一个孩子的结点有20个,则该二叉树共有() 个结点
答:79,n0为叶子结点,n1为度为1的结点,n2为度为2的结点,n为总结点;则:n=n0+n1+n2.
已知n0=30,n1=20.二叉树中度为2的结点数目=叶子结点数目-1,所以n2=n0-1=29.
n=30+20+29=79.
所以总节点数为79

19.对并发操作若不加以控制,可能会带来( )问题。
不安全
死锁
死机
不一致
答:选最后一个,并发的话就是多个程序或者语句同时操作一个数据,这样就会产生不一致的问题,比如我对数据i进行两次加一操作,到时这两次操作都同时拿到i的值i被加两次但结果只被加了一次

20.如果资源分配图中存在回路,则系统一定存在死锁,这种说法正确吗
答:错误,应该是简化以后存在回路→发生了死锁。
根据死锁定理:S为死锁状态的条件是——S状态的资源分配图不可完全简化。

21.设某棵二叉树中有2000个结点,则该二叉树的最小高度为
答:11,二叉树中有2000个结点,如果要想高度最小,那么就需要是满二叉树了。
满二叉树高度与节点个数的关系是num = 2^n-1
2000>2^10
2000<2^11
最小高度为11层

22.设串长为n,模式串长为m,则KMP算法所需的附加空间__
O(m)
O(n)
O(m*n)
O(nlog2m)
答:选第一个,BF算法(普通匹配算法):时间复杂度O(m*n);空间复杂度O(1)
KMP算法:时间复杂度O(m+n);空间复杂度O(m)

23.如果系统的umask设置为244,创建一个新文件后,它的权限:()
–w-r–r–
-r-xr–r–
-r—w–w-
-r-x-wx-wx
答:选第三个,Linux中的权限有r(读) w(写) x(执行),分别用数字4,2,1代表。
Umask是设置系统创建文件时的默认权限,是创建文件权限补码,对文件来说最大值是6
Umask设为为244,则创建的文件默认权限是422,文件的第一位是‘-’也就是-r—w–w-

24.关于“深拷贝”,下列说法正确的是:
会拷贝动态分配的成员对象
会拷贝成员数据的值
会拷贝静态分配的成员对象
B和C都对
答:选第一个,B和C都算错在了一个地方,没有考虑静态成员。类的静态成员是所有类的实例共有的,存储在全局(静态)区,只此一份,不管继承、实例化还是拷贝都是一份。
B中,静态成员属于成员数据,而C中,静态成员和局部成员都是静态分配的(与动态分配对应),因此B和C中都包含了静态成员,所以不正确。
因此,D也不正确

25.若系统中有五台打印机,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则在不发生死锁的情况下至多允许__个进程参与竞争
答:四个,哲学家就餐问题:当5个进程的时候如果都同时申请到了1台,就发生死锁了。如果是4个进程,那必然有一个能申请到2台

26.32位机器上定义如下结构体:

struct xx
{
    long long _x1;
    char _x2;
    int _x3;
    char _x4[2];
    static int _x5;
};
int xx::_x5;

请问sizeof(xx)的大小是()

答:24,1-8的地址分给了_x1 ,
9分给了_x2,
13-16分给了_x3, int要按4对齐所以10-13的空间其实是浪费了
17-18分给了_x4,
_x5不占用空类间,
最后本身是需要按照8对其
所以19-24也被占用了

27.关于ACID下面说法正确的是?
A是可用性。整个操作中的所有动作是保证高可用性,系统必须提供要求的稳定性,以保证事务的提交。
C一致性。在事务开始之前和结束后,数据库的约束保持不变。
I隔离性。两个同时运行的事务的执行是互不影响,中间结果不可交叉访问。
D持久性。在事务提交以后,该事务所作的更改持久保存在存储介质之中,不会被回滚。
答:选BD,(1) 事务的四个基本特征:
① Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成 功,要么全部失败。
② Consistency(一致性):事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏,事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没 有执行过一样。
③ Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性 和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
4.Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。

你可能感兴趣的:(c语言,c++,数据库,c-c++)