围城
分类: C/C++
2013-08-12 17:20:14
公共部分(50分)
1:作业调度程序从处于(B)状态的队列中选择适当的作业的作业投入运行。(3分)
A 运行 B 提交 C 完成 D后备
2:SQL语言中,删除一个表的命令是(B)(3分)
A CLEAR TABLE B DROP TABLE
C DELETE TABLE D REMOVE TABLE
3:ATM采用的线路复用方式为(C)(3分)
A 频分多路复用
B 同步时分多路复用
C 异步时分多路复用
D 独占信道
4:数据库中只存放视图的(C)(3分)
A操作
B 对应的数据
C 定义
D 限制
5:什么是虚拟设备?为什么在操作系统中引入虚拟设备?(10分)
SPOOLing是Simultaneous Peripheral Operation On-Line (即外部设备联机并行操作)的缩写,它是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”。
6:TCP为何采用三次握手来建立连接,若采用二次握手可以吗,请说明原因?(16分)
三次握手是为了防止已失效的连接请求再次传送到服务器端。
二次握手不可行,因为:如果由于网络不稳定,虽然客户端以前发送的连接请求以到达服务方,但服务方的同意连接的应答未能到达客户端。则客户方要重新发送连接请求,若采用二次握手,服务方收到重传的请求连接后,会以为是新的请求,就会发送同意连接报文,并新开进程提供服务,这样会造成服务方资源的无谓浪费。
7:什么是分布式数据库?(12分)
分布式数据库系统是在集中式数据库系统成熟技术的基础上发展起来的,但不是简单地把集中式数据库分散地实现,它具有自己的性质和特征。集中式数据库系统的许多概念和技术,如数据独立性、数据共享和减少冗余度、并发控制、完整性、安全性和恢复等在分布式数据库系统中都有了不同的、更加丰富的内容。
(1)数据独立性。数据独立性是数据库方法追求的主要目标之一。在集中式数据库中,数据独立性包括两方面:数据的逻辑独立性和物理独立性。其意义在于程序和数据的逻辑结构和数据的存储结构无关。在分布式系统中,数据库独立性除了上面所说之外,还有数据分布独立性亦称分布透明性,即用户不必关心数据的逻辑分片,不必关心数据的物理位置分布的细节,也不必关心重复副本(冗余数据)的一致性问题。有了分布透明性,用户的应用程序书写起来就如同数据没有分布一样。在集中式数据库中,数据的独立性是通过系统的三级模式和它们之间的二级映象得到的。分布式数据库,分布透明性是由于引入新的模式和模式之间的映象得到的。
(2)集中与自治相结合的控制结构。数据库是供用户共享的,在集中式数据库中,为保证数据的安全性和完整性,对数据库的控制是集中的。由数据库管理员(DBA)负责监督和维护系统的正常运行。
在分布式数据库中,数据的共享有两个层次:一是局部共享,即在局部场地上存储局部用户的共享数据。二是全局共享,即在分布式数据库的各个场地也存储可供网络中其他场地的用户共享的数据,支持全局引用。因此,相应的控制结构也具有两个层次:集中和自治。各局部的DBMS可以独立地管理局部数据库,具有自治的功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用。
(3)适当增加数据冗余度。在集中式数据库中,尽量减少冗余度是系统目标之一。其原因是,冗余数据浪费存储空间,而且容易造成个副本之间的不一致性。减少冗余度的目标是用数据共享来达到的。而在分布式系统中却希望增加冗余数据,在不同的场地存储同一数据的多个副本。其原因是提高系统的可靠性和性能,当某一场地出现故障,系统可以对另一场地上的相同副本进行操作,不会造成系统的瘫痪。系统可以根据距离选择离用户最近的数据副本进行操作,减少通信代价。但是增加冗余会碰到集中式数据库同样的问题,即不利于更新,增加了系统维护代价,需要在这些方面作出权衡。
(4)全局的一致性、可串行性和可恢复性。分布式数据库中各局部数据库应满足集中式数据库的一致性、可串行性和可恢复性。除此以外,还要保证数据库的全局一致性、可串行性和可恢复性。例如,在前面提到的银行转帐事务中,包括两个节点上的更新操作,当其中一个节点出现故障,应使全局事务回滚,在一个节点撤销已经执行的操作等。
C++部分(50分)
1:设有“int w[3][4];”,pw是与数组名w等价的数组指针,则pw的初始化语句为int (*pw)[4] = w;(3分)
2:要使引用pr代表变量“char *p”,则pr的初始化语句为char * &pr = p;(3分)
3:“零值”可以是0,0.0,FALSE或者“空指针”。例如int变量n与“零值”比较的if语句为:if(n==0),则BOOL flag与“零值”比较的if语句为 if(!a) ;float x与“零值”比较的if语句为:const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON)。(6分)
4:设有如下语句:(3分)
Int x;
(C)
*px=0;
则选择以下哪条语句可将x值置为0。
A int *px; B int const *px=&x;
C int *const px=&x; D const int *px=&x;
5:设void f1(int *m,long &n);int a;long b;则以下调用合法的是(B)(3分)
A f1(a,b) B f1(&a,b)
C f1(a,&b) D f1(&a,&b)
6:请写出如下代码的运行结果(6分)6
Int main()
{int a,b,c,d;
a=0;
b=1;
c=2;
d=3;
printf(“%d”,a+++b+c+++d++);
}
7:写出下面函数的功能(12分)将数组a中的元素(如果为类类型,调用拷贝赋值算符)逆序放置到数组b中
Template
void WE(Type a[],Type b[],int n){
for(int i=0;i
给出如下结构
Struct node
{steuct *next;
};
Typedef stuct node Node;
答:
#include
struct listtype
{
int data;
struct listtype * next;
};
typedef struct listtype * list;
/* Check that whether there is loop in the singly linked list sll or not. */
int find_circle(list sll)
{
list fast = sll;
list slow = sll;
if (NULL == fast)
{
return -1;
}
while (fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
if (fast == slow)
{
return 1;
}
}
return 0;
}
JAVA部分(50分)
1:判断下列对的是哪个(B)(3分)
A short s1=1;s1=s1+1
B short s1=1;s1+=1
C short s1=1;s1=s1-1
D short s1=1;s1=s1*1
2:main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的(C)(3分)
A public static void main ()
B public static void main (String args)
C public static int main (String []arg)
D public void main (String args)
3:设float x=1,y=2,z=3,则表达式y+=z--/++x的值是(A)(3分)
A 3.5 B 3
C 4 D 5
4:Math.round(11.5)=12
Math.round(-11.5)=-11(4分)
5:假设x=10,y=20,z=30;计算下列表达式的值(6分)
A x<10||x>10_________false
B !(x<=20)___________false
C z-y==x&&Math.abs(y-z)!=x_____________false
6:方法重建Overload和方法的重写Overriding的区别。Overload的方法是否可以改变返回值的类型?(10分)
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。 Overloaded的方法是可以改变返回值的类型。
7:谈谈HashMap和Hashtable的区别(6分)
答:1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3. 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。HashMap中是否存在某个键,而应该用containsKey()方法来判断。
4.其底层的实现机制不同,hashmap的访问速度要快于hashtable,因为它不需要进行同步检验,建议在非多线程环境中使用hashmap代替hashtable .
8:构造一个类来描述屏幕上的一个点,该类的构成包括点x和y两个坐标,以及一些对点进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对其进行操作。(15分)
class Point{
private int x;
private int y;
public int getX() {
return x;
}
public int getY() {
return y;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
}
数据结构和算法
1. 假设执行语句S的时间为O(1),则执行下列程序短的时间为(B)
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
S;
A. O(n)
B. O(n2)
C. O(n*i)
D. O(n+1)
2. 二位数组A[10…20,5…10]采用行序为主序方式存储,每个数据元素占4个存储单元,且A[10][5]的存储地址是1000,则A[18][9]的地址是(A)
A. 1208
B. 1212
C. 1368
D. 1364
3. 设栈最大长度为3,入栈序列为1,2,3,4,5,6,则不可能得出栈序列是(D)
A. 1,2,3,4,5,6
B. 2,1,3,4,5,6
C. 3,4,2,1,5,6
D. 4,3,2,1,5,6
4. 设有98个已排序列元素,采用二分法查找时,最大比较次数是(D)
A. 49
B. 15
C. 20
D. 7
5. Hash表示用于数据存储的一种有效的数据结构,Hash表等查找复杂度依赖于Hash值算法的有效性,在最好的情况下,Hash表的查找复杂度为(A)
A. O(1)
B. O(logn)
C. O(n)
D. O(nlogn)
第二部分 软件工程
1. 软件能力成熟度模型CMM共分为(C)成熟度等级
A. 3
B. 4
C. 5
D. 6
2. 按照是否了解软件的内部构造,可以将测试分为黑盒测试和白盒测试。考虑以下算法的PDL语句,如果要对其进行完全路径覆盖的白盒测试,则需要()条路径。
do ehile records remain
read record;
if record field 1 = 0
then process record;
store in buffer;
increment counter;
elseif record field 2 = 0
then reset counter;
else process record;
store in file;
endif
endif
enddo
A. 4
B. 5
C. 6
D. 7
3. 按照瀑布模型的阶段划分,软件测试可以分为单元测试,集成测试,系统测试。请问以下那项测试不属于系统测试的内容()
A. 压力测试
B. 接口测试
C. 功能测试
D. 安全测试
E. 性能测试
4. 测试用例的设计是测试的重要阶段。系统测试用例设计应该从什么时候开始()
A. 需求完成
B. 详细设计完成
C. 编码完成
D. 系统集成完毕,提交系统测试
5. 在UML方法中,使用多种类型的图形来帮助进行设计,请问一下那些图形不是UML的图形类型(B)
A. 类图
B. 实体关系图
C. 序列图
D. 活动图
第三部分 Java语言及其他
1. 下面哪个是short型的取值范围:(C)
A. -27--- 27-1
B. 0 --- 216-1
C. -215--- 215-1
D. -231---231-1
2. 下面哪项是不合法的标识符:(C)
A. $persons
B. TwoUsers
C. *point
D. _endline
3. 设 float x = 1,y = 2,z = 3,则表达式 y+=z--/++x 的值是(A)
A. 3.5
B. 3
C. 4
D. 5
4. 下列哪些关键字即能够被用于局部变量的修饰,也可以用做类变量的修饰()
A. public
B. transient
C. static
D. finally
5. 以下的语句构造了几个JAVA对象?(B)
String S = new String(“aaa”);
A. 1
B. 2
C. 3
6. A. equals()方法判定引用值是否指向同一对象
B. = = 操作符判定两个不同的对象的内容和类型是否一致
C. equal() 方法只有在两个对象的内容一致时返回ture
D. 类File重写方法equals()在两个不同的对象的内容和类型一致时返回ture
7. 如果一个对象仅仅声明实现了cloneable接口,但是不声明clone方法,外部能够调用其clone方法吗?(A)
A. 能
B. 不能
C. 不确定
8. 考虑在C/S结构下,服务器接受并处理请求,那么关于服务器处理请求的模式,哪些描述是错误的()
A. 单线程模式下,服务器使用一个线程顺序的处理所有的请求,可能导致阻塞
B. 服务器可以为每一个请求创建一个线程来处理该请求,这样做比单线程模式更加稳定
C. 线程池模式下,当线程使用达到最大数量限制之后,线程池中没用可用线程的时候,服务器将阻塞或者拒绝某个请求的处理
9. 使用Swing做界面的时候,如果把一个JButton放在一个JFrame中,在JFrame改变时只影响JButton的高度而宽度不受影响,应该使用哪个布局管理器?(D)
A. FlowLayout
B. CardLayout
C. North and South of BorderLayout
D. East and West of BorderLayout
E. GridLayout
10. 以下的那个状态是SessionBean所具有,而StatelessBean不具有的(D)
A. 池态
B. 就绪态
C. 不存在态
D. 钝化态
11. 以下关于数据库范式的描述,哪些是错误的(B)
A. 如果把多个数据项用一个大的String表示为一个字段,则不满足第一范式
B. 满足数据库范式使得数据库的效率更高
C. 如果满足更高的范式,则必须首先满足低级别的范式
D. 数据库第二范式要求把表中与所有键没有直接关系的数据全部拆分到其他表中
12. 考虑一下需求:包括学生、课程和教师的信息。其中学生的信息包括学生姓名、年龄地址等;课程信息包括课程号、课程名、课程学分等;教师信息包括教师的姓名、教师的地址等。一个学生可以选修多门课,而每门课也能有多个学生选修;一位教师可以教多门课,每门课也可以由多个教师讲授。请问如果使用关系数据库,并且达到第二范式的要求,需要设计(C)张表
A. 3
B. 4
C. 5
D. 6
13. 为了加快数据库查找的速度,需要对数据表添加索引,请问以下关于索引的描述,哪些是错误的(D)
A. 聚类索引中,表中行的物理次序与索引键值的逻辑顺序相同
B. 使用索引会使得数据更新的效率降低
C. 在大多数数据库系统中,每张表只能够有一个聚类索引
D. 考虑这个SQL语句:Select S.name,S.age from Student S where S.address=”成都”,如果我们对表Student建一个复合索引(age,address),可以改善上述查询的效率。
第四部分 问答题
1. 简述一个Linux驱动程序的主要流程与功能。
2. 请列举一个软件中时间换空间或者空间换时间的例子。
数组成倍增长(空间换时间)。
3. 简述进程与线程的区别。
多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢?
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:
线程的划分尺度小于进程,使得多线程程序的并发性搞。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。
C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时,处在可执行状态中的应用程序称为进程。从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU 时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。多任务环境下应用程序进程的主要特点包括:
●进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间;
●进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型;
●从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。
在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。
4. static有什么用途?(请至少说明两种)
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准). from
(1)局部静态变量
(2)外部静态变量/函数
(3)静态数据成员/成员函数
5. 头文件中的ifndef/define/endif做什么用?条件编译
6. 请问一下程序将输出什么结果?乱码
char *RetMenory(void)
{
char p[] = “hellow world”;
return p;
}
void Test(void)
{
char *str = NULL;
str = RetMemory();
printf(str);
}
7. 引用与指针有什么区别?
8. 描述实时系统的基本特性
9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
10. 什么是平衡二叉树?
11. 堆栈溢出一般是由什么原因导致的?
递归调用深度过深(栈)
12. 什么函数不能声明为虚函数?
一个类中将所有的成员函数都尽可能地设置为虚函数总是有益的。
设置虚函数须注意:
1:只有类的成员函数才能说明为虚函数;
2:静态成员函数不能是虚函数;
3:内联函数不能为虚函数;
4:构造函数不能是虚函数;
5:析构函数可以是虚函数,而且通常声明为虚函数。
13. 冒泡排序算法的时间复杂度是什么?
n*n
14. #include
用 #include
用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
15. 写出float x 与“零值”比较的if语句。
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
16. 操作系统中进程调度策略有哪几种?
先来先服务 短作业优先 高优先权优先 时间片轮转
17. Internet采用哪种网络协议?该协议的主要层次结构?
TCP/IP
18. Internet物理地址和IP地址转换采用什么协议?
ARP RARP
19. IP地址的编码分为哪俩部分?
网络号 主机号