分布式任务调度框架和集中式数据资源的调度有何异同

中国领先的IT技术网站
51CTO旗下网站
分布式与集群的联系与区别
集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:
作者:hiyachen来源:hiyachen的博客| 10:47
先说区别:
一句话:分布式是并联工作的,集群是串联工作的。
1:分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。
举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。
2:简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行该任务需10小时。
采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型)
而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,1小时后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务!
以下是摘抄自网络文章:
1. 两大关键特性
集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:
& 可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。
& 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。
2. 两大能力
为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力:
& 负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。
& 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。
负载均衡和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。
3. 两大技术
实现集群务必要有以下两大技术:
& 集群地址--集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。具有单一集群地址(也叫单一影像)是集群的一个基 本特征。维护集群地址的设置被称为负载均衡器。负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。有的负载均 衡器实现真正的负载均衡算法,有的只支持任务的转换。只实现任务转换的负载均衡器适用于支持ACTIVE-STANDBY的集群环境,在那里,集群中只有 一个服务实体工作,当正在工作的服务实体发生故障时,负载均衡器把后来的任务转向另外一个服务实体。
& 内部通信--为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体心跳测试信息、服务实体间任务执行上下文信息的通信。
具有同一个集群地址使得客户端能访问集群提供的计算服务,一个集群地址下隐藏了各个服务实体的内部地址,使得客户要求的计算服务能在各个服务实体之间分布。内部通信是集群能正常运转的基础,它使得集群具有均衡负载和错误恢复的能力。
Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)
高可用集群( High Availability Cluster)
负载均衡集群(Load Balance Cluster)
科学计算集群(High Performance Computing Cluster)
================================================
具体包括:
Linux High Availability 高可用集群 (普通两节点双机热备,多节点HA集群,RAC, shared, share-nothing集群等)
Linux Load Balance 负载均衡集群 (LVS等....)
Linux High Performance Computing 高性能科学计算集群 (Beowulf 类集群....)
分布式存储
其他类linux集群 (如Openmosix, rendering farm 等..)
1. 高可用集群(High Availability Cluster)
常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如&双机热备&, &双机互备&, &双机&.
高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。 (请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)。
2. 负载均衡集群(Load Balance Cluster)
负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。
负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。
3. 科学计算集群(High Performance Computing Cluster)
高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。
高性能计算分类  
高吞吐计算(High-throughput Computing)
有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人(
-- Search for Extraterrestrial Intelligence at Home )就是这一类型应用。这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上 参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的 数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。所谓的Internet计算都属于这一类。按照 Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。
分布计算(Distributed Computing)
另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。
4. 分布式(集群)与集群的联系与区别
分布式是指将不同的业务分布在不同的地方。
而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。
而集群并不一定就是分布式的。
举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。
原文链接:
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条热点头条头条
24H热文一周话题本月最赞
讲师:305226人学习过
讲师:132419人学习过
讲师:145356人学习过
精选博文论坛热帖下载排行
本书深入浅出地说明了如何利用Java、Flash及XML进行Flash富媒体应用程序的开发。
本书知识丰富,内容结构合理,包括:Flash影片应用程序与...
订阅51CTO邮刊本帖子已过去太久远了,不再提供回复功能。以下试题来自:
填空题分布式数据库系统与集中式数据库系统最大的区别是分布式数据库中的数据
存储在多个场地。 分散地
为您推荐的考试题库
你可能感兴趣的试题
1.填空题 OLAP或联机分析处理2.填空题 继承3A.可更新的B.历史的(包括过去的数据)C.支持管理决策的D.面向主题的4A.分散在各节点的数据是不相关的B.用户可以对远程数据进行访问,但必须指明数据的存储节点C.每一个节点是一个独立的数据库系统,既能完成局部应用,也支持全局应用D.数据可以分散在不同节点的计算机上,但必须在同一台计算机上进行数据处理5A.Ⅰ、Ⅱ和ⅢB.Ⅰ、Ⅱ和ⅣC.Ⅱ、Ⅲ和ⅣD.都是
热门相关试卷
最新相关试卷当前位置: >>
各大IT公司面试题
中兴笔试题目 公共部分(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];, 是与数组名 w 等价的数组指针, pw 的初始化语句为 int (*pw)[4] 设有 ” pw 则 =(3 分) 2:要使引用 pr 代表变量“char *p” ,则 pr 的初始化语句为 char * &pr =(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 I (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&class Type& void WE(Type a[],Type b[],int n){ for(int i=0;i&n;i++) b[n-i-1]=a[i];} 8 写一段代码判断一个单向链表中是否有环。 (14 分) 给出如下结构 Struct node {steuct *next; }; Typedef stuct node Node; 答: #include &stddef.h& struct listtype { struct listtype * }; typedef struct listtype * /* Check that whether there is loop in the singly linked list sll or not. */ int find_circle(list sll) { list fast = list slow = if (NULL == fast) { return -1; } while (fast && fast-&next) { fast = fast-&next-& slow = slow-& 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 C4D5 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 中不能由 get()方法来判断 HashMap 中是否存在某个键, 在 而应该用 containsKey() 方法来判断。 4.其底层的实现机制不同,hashmap 的访问速度要快于 hashtable,因为它不需要进行同步检验, 建议在非多线程环境中使用 hashmap 代替 hashtable . 8:构造一个类来描述屏幕上的一个点,该类的构成包括点 x 和 y 两个坐标,以及一些对点 进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对 其进行操作。 (15 分) class Point{
public int getX() { } public int getY() { } public void setX(int x) { this.x = } public void setY(int y) { this.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. C. D.O(logn) O(n) O(nlogn)第二部分 软件工程 1. 软件能力成熟度模型 CMM 共分为(C)成熟度等级 A. 3 B. 4 C. 5 D. 6 2. 按照是否了解软件的内部构造,可以将测试分为黑盒测试和白盒测试。考虑以下算法的 PDL 语句,如果要对其进行完全路径覆盖的白盒测试,则需要()条路径。 do ehile record if record field 1 = 0 elseif record field 2 = 0 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. 下面的哪些叙述为真(C) 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) 。 static 有什么用途?(请至少说明两种) static 关键字是 C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指 在 C 语言中使用, 第三种在 C++中使用(C,C++中具体细微操作不尽相同, 本文以 C++为准). from http://topic.csdn.net/t//4686455.html (1)局部静态变量 (2)外部静态变量/函数 (3)静态数据成员/成员函数 4. 5. 头文件中的 ifndef/define/endif 做什么用?条件编译 6. 请问一下程序将输出什么结果?乱码 char *RetMenory(void) { char p[] = “hellow world”; } 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 &filename.h& 和 #include “filename.h” 有什么区别? 用 #include &filename.h& 格式来引用标准库的头文件(编译器将从标准库目录开始搜索) 。 用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开 始搜索) 。 写出 float x 与“零值”比较的 if 语句。 const float EPSINON = 0.00001; if ((x &= - EPSINON) && (x &= EPSINON) 16. 操作系统中进程调度策略有哪几种? 先来先服务 短作业优先 高优先权优先 时间片轮转 15. Internet 采用哪种网络协议?该协议的主要层次结构? TCP/IP 18. Internet 物理地址和 IP 地址转换采用什么协议? 17. ARP RARP 19. IP 地址的编码分为哪俩部分? 网络号 主机号2002 年度软件开发人员招聘笔试试题应聘者资料: 姓名 出生日期 地址 电话 毕业院校 专业 学历 英语水平(资格) 要求职位和希望 担任的角色 待遇要求 简历(如已提供可不填) 学位 计算机水平 (资格) Email 毕业时间 性别 出生地 邮政编码其他特长(如已提供可不填)评估意见(由招聘小组填写) 试题一:基础知识 1、从供选择的答案中,选出应填入下面叙述中_?_内的最确切的解答,把相应编号写在答卷的对 应栏内。 假设某计算机具有 1M 字节的内存(目前使用的计算机往往具有 64M 字节以上的内存) ,并按字 节编址,为了能存取该内存各地址的内容,其地址寄存器至少需要二进制_A_位。为使 4 字节组 成的字能从存储器中一次读出,要求存放在存储器中的字边界对齐,一个字的地址码应_B_。若 存储周期为 200NS,且每个周期可访问 4 个字节,则该存储器带宽为_C_BIT/S。假如程序员可用 的存储空间为 4M 字节,则程序员所用的地址为_D_,而真正访问内存的地址称为_E_。 供选择的答案: A: ①10 ②16 ③20 ④32 B: ①最低两位为 00 ②最低两位为 10 ③最高两位为 00 ④最高两位为 10 C: ①20M ②40M ③80M ④160M D: ①有效地址 ②程序地址 ③逻辑地址 ④物理地址 E: ①指令 ②物理地址 ③内存地址 ④数据地址 2、从供选择的答案中。选出应填入下面叙述中_?_内的最确切的解答,把相应编号写在答卷的 对应栏内。 给定结点的关键字序列(F、B、J、G、E、A、I、D、C、H) ,对它按字母的字典顺序 进行排列,采用不同方法,其最终结果相同。但中间结果是不同的。 Shell 排序的第一趟扫描(步长为5)结果应为_A_。 冒泡排序(大数下沉)的第一趟起泡的效果是_B_3. 快速排序的第一趟结果是_C_。 二路归并排序的第一趟结局是 _D_。 供选择的答案 A:①(B、F、G、J、A、D、I、E、H、C) ②(B、F、G、J、A、E、D、I、C、H) ③(A、B、D、C、E、F、I、J、G、H) ④(C、B、D、A、E、F、I、G、J、H) B:①(A、B、D、C、F、E、I、J、H、G) ②(A、B、D、C、E、F、I、H、G、J) ③(B、F、G、E、A、I、D、C、H、J) ④(B、F、G、J、A、E、D、I、C、H) C:①(C、B、D、A、F、E、I、J、G、H) ②(C、B、D、A、E、F、I、G、J、H) ③(B、A、D、E、F、G、I、J、H、C) ④(B、C、D、A、E、F、I、J、G、H) D:①(B、F、G、J、A、E、D、I、G、H) ②(B、A、D、E、F、G、I、J、H、C) ③(A、B、D、C、E、F、I、J、G、H) ④(A、B、D、C、F、E、J、I、H、C) 3、从供选择的答案中,选出应填入下面叙述中_?_内的最确切的解答.把相应编号写在答卷 的对应栏内。 进程是操作系统中的一个重要概念。 进程是一个具有一定独立功能的程序在某个数据集合上的一 次_A2_。 进程是一个_B3_的概念,而程序是一个_C3_的概念。 进程的最基本状态有_D4_。在一个单处理机中,若有 6 个用户进程,在非管态的某一时刻,处 于就绪状态的用户进程最多有_E5_个。 供选择的答案 A:①单独操作 ②关联操作 ③运行活动 ④并发活动 B:①静态 ②动态 ③逻辑 ④物理 C:①物理 ②逻辑 ③动态 ④静态 D:①就绪、运行、隐蔽 ②停止、就绪、运行 ③运行、就绪、阻塞 ④就绪、撤消、运行 E:①5 ②6 ③1 ④4 4、软件设计中划分模块的一个准则是_A2_。两个模块之间的耦合方式中,_B3_耦合的耦合 度最高,_C4_耦合的耦合度最低。一个模块内部的内聚种类中_D4_内聚的内聚度最高,_ E1_内聚的内聚度最低。 供选择的答案 A:①低内聚低耦合②低内聚高耦合③高内聚低耦合④高内聚高耦合 B:①数据 ②非直接 ③控制 ④内容 C:①数据 ②非直接 ③控制 ④内容 D:①偶然 ②逻辑 ③功能 ④过程 E:①偶然 ②逻辑 ③功能 ④过程 5、从供选择的答案中选出应填入下面叙述中_?_内的最确切的解答,把相应编号写在答卷的 对应栏内。 最常用的一种基本数据模型是关系数据模型,它用统一的_A 1_结构来表示实体及实体之间的 联系。关系数据库的数据操作语言(DML)主要包括_B2_两类操作。 关系运算以关系代数为理论基础,关系代数的最基本操作是并、差、笛卡尔积、_C4_。用R O×OS 表示关系 R和关系 S的_D1_。 设关系R和关系S图示如下: R: A B C S: B C D T: A B C D 则关系T是关系R和关系S_E _的结果。 供选择的答案 A:①树 ②网络 ③图 ④二维表 B:①插入和删除 ②检索和更新 ③查询和编辑 ④统计和修改 C:①投影、联接 ②联接、选择 ③选择、投影 ④交、选择 D:①联接 ②笛卡尔积 ③日联接 ④自然联接 E:①自然联接 ②θ 联接 ③笛卡尔积 ④并试题二:程序设计 用你所熟悉的任意一种程序语言, 编写一个完整的过程, 将一个字符串插入到另一个字符串的某 个位置后面(例如:将“abc”插入到“abcdef”的第三个字符位置后面,结果为“abcabcdef”。 ) 编写程序时,请在必要的地方加以注释(注:不能用该程序语言的内置函数或过程)。用你所熟悉的任意一种程序语言,编写一个完整的过程,完成从一个给定的完整的文件路径(如 “C:\My Documents\Software Test 1.00.doc”)中,析取文件名,扩展名和文件所处目录的功 能,编写程序时,请在必要的地方加以注释(注:不能用该程序语言的内置函数或过程)。 试题三:数据库设计 下面的表有问题吗?如果有,如何改进? 城市* 佛山 佛山 佛山 广州 广州 广州 ? *城市和街道联合做主键 分成二个表,第一个表有以下字段:城市和街道,以城市作为主键;第二个表:街道和邮政编码,以 街道为主键.通过街道与第一个表的街道相关联 2、假设有以下的两个表: Cus_A ID* ? Cus_B ID* ? Name ? Address ? Name ? Address ? 街道* 金鱼街 大福路 季华路 北京路 三元里 中山路 ? 000 000 000 ? 邮政编码*主键 表 Cus_A 和表 Cus_B 的结构完全相同,表 Cus_A 和表 Cus_B 中既存在 ID 相同的记录,也存在 ID 不同的记录。现要求将 ID 只存在于表 Cus_A 中而不存在于表 Cus_B 中的记录全部插入到 Cus_B 表中,并用表 Cus_A 中的记录更新表 Cus_B 中相同的 ID 的记录,请写出完成这一功能的存储过 程。 Create or procedure test is Declare id1 CusA.id% Begin Select id into id1 from CusA a,CusB b where a.id=b. 3、某公司正在开发一个档案管理系统,要求在关系数据库中实现和 Windows 文件系统完全一致 的树状文件目录。 为了实现这一目录结构, 至少需求哪些表?请详细描述这些表的用途和结构 (如 有必要,可用图表进行描述) 。最后,请用伪编码(或自然语言)描述按树状结构遍历所有档案 的算法。 试题四:系统设计 简述“面向对象”的概念,并设计一个学校选课系统的对象模型。 简述“软件系统的两层和多层体系结构”的概念(如有必要,可用图表进行描述) ,并指出两者 的主要区别。 3、简述一个软件工程的主要步骤,并指出每个步骤的明确目标及实施办法。最后分析哪些是关 键步骤。 试题五:综合 你认为在团队开发中, 你能发挥自己的能力吗?为什么?当个人意见与主管出现矛盾时, 你用什 么方法解决? 一.选择题 1.一株查找二叉树,其结点 A、B、C、D、E、F 依次存放在一个起始地址为 n(假定地址以字节为单 位顺序编号)的连续区域中,每个节点占 4 个字节:前两个字节存放结点值,后两个字节依次放左 指针、右指针. 若该查找二叉树的根结点为 E,则它的一种可能的前序遍历为____ ,相应的层次遍历为____. 在以上两种遍历情况下,结点 C 的左指针 LC 的存放地址为_____ ,LC 的内容为______ 结点 A 的 左指针 RA 的内容为_______. 供选择的答案 (1) A. EAFCBD B.EFACDB C.EABCFD D.EACBDF (2) A. EAFCBD B.EFACDB C.EABCFD D.EACBDF (3) A.n+4 B.n+10 C.n+12 D.n+13 (4) A.n+9 B.n+8 C.n+12 D.n+13 (5) A.n+4 B.n+8 C.n+12 D.n+16 2.虚存页面调整算法有多种,______ 调度算法不是页面调度算法. 供选择的答案 A.后进先出 B.先进先出 C.最近最少使用 D.随机选择 3.在软件开发过程中常用图作为描述工具.如 DFD 就是面向_______分析方法的描述工具.在一套 分层 DFD 中,如果某一张图中有 N 个加工(Process),则这张图允许有_____ 张子图.在一张 DFD 图中,任意两个加工之间_____ .在画分层 DFD 时,应保持_____ 之间的平衡.DFD 中从系统的输出 流到系统的输出流的一连串连续变换形成一种信息流,这种信息可分为_____两类. A.(1)数据结构 (2)数据流 (3)对象 (4)构件 B.(1)0 (2)1 (3)1-N (4)0-N C.(1)有且仅有一条数据流 (2)至少有一条数据流 (3)可以有 0 条或多条名字互不相同的数据流 (4)可以有 0 或多条数据流,但允许其中存若干条名字相同的数据流. D.(1)父图与其子图 (2)同一父图的所有子图 (3)不同父图的所有子图 直接父图. E.(1)控制流和变换流 (2)变换流和事务流 (3)事务流和事件流 (4)事件流和控制流(4)同一子图的所有4.用二进制加法器对二一十进制编码的十进制数求和,当和的本位十进制数二一十进制编码小于 等于 1001 且向高位无进位时,_____ ;当和小于等于 1001 且向高位存进位时,_____;当和大于 1001 时,_____ (1)-(3) A:不需进行修改 B:需进行加 6 修改 C:需进行减 6 修改 D:进行加 6 或减 6 修改,需进一步判别. 5.www 页面访问的大致过程如下: 用户在浏览器中输入要访问的 WWW 页面的____地址(http://hostname/directory/file);浏览器通过 ____ 查询上述输入信息所指的 WEB 服务器的 IP 地址;浏览器通过网络与该 IP 地址处的 WEB 服 务器的______服务端之间建立一条______连接;浏览器依照相关协议发送_____命令;WEB 服务器 根据命令取出文档,发送回来;浏览器释放连接,显示该文档. (1) A.URL B.EMS C.NDS D.DNS (2)A.NAT B.EMS C.NDS D.DNS (3)A.HTML B.HTTP C.SMTP D.SNMP (4)A.RTP B.IP C.TCP D.UDP (5)A.TCP B.GET C.UDP D.PUT 6.假设某计算机具有 1MB 的内存(目前使用的计算机往往具有 64MB 以上内存),并按字节编址,为 了能存取该内存各地址的内容,其地址寄存器至少需要二进制____位.为使 4 字节组成的字段从存 储器中一次读出,要求存放存储器中的字边界对齐,一个字节的地址码应_____若存储器周期为 200ns,且每个周期可访问 4 个字节,则该存储器带宽为_____bit/s 假如程序员所用的地址为______, 而真正访问内存的地址称为_______ A.(1)10 (2)16 (3) 20 (4)32 B.(1)最低两位 00 (2)最低两位为 10 (3)最高两位为 00 (4)最高两位为 10 C.(1)20M (2)40M (3)80M (4)160M D.(1)有效地址 (2)程序地址 (3)逻辑地址 (4)物理地址 E.(1)指令地址 (2)物理地址 (3)内存地址 (4)数据地址 7.英语题 Soon,more of the information we receive via the internet could come _____in digital wrappers. Wrappers are made up ______ softwore code that?s targeted to do specific things with the data _____within them such as helping to define queries for search engines They also keep _____from_____access to that code. (1) A.Package B.packaged C.packages D.packaging (2)A.of B.off C.on D.out (3)A.close B.closed C.enclose D.enclosed (4)A.insiders B.money C.outsiders D.warehouse (5)A.gain B.gained C.gains D.gaining 二.设计题 1.在 VC 中怎样获得父窗口的指针(写出代码) 2.怎样创建一个临时文件 3.怎样获得状态栏和工具栏的指针. 4.访问控件存几种方法 三.填空题: 1.ODBC 的数据类型分为_________和_________ 2.VC 访问数据库的方式____________________ 3.VC 的线路分为_________和_________,它是用什么对象表示的_________ 4.下列中 a 的值是_________ #define AAA 200 #define BBB AAA+100 int a= BBB*2java 华为面试题JAVA 方面 1 面向对象的特征有哪些方面2 String 是最基本的数据类型吗?3 int 和 Integer 有什么区别 4 String 和 StringBuffer 的区别5 运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常 表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错 误。java 编译器要求方法必须声明抛出可能发生的非运行时异 常,但是并不要求必须声明抛出未被捕获的运行时异常。6 说出一些常用的类,包,接口,请各举 5 个7 说出 ArrayList,Vector, LinkedList 的存储性能和特性 ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素 数大于实际存储的数据以便增加和插入元素,它们都允许直接 按序号索引元素,但是插入元素要涉及数组元素移动等内存操 作 , 所 以 索 引 数 据 快 而 插 入 数 据 慢 , Vector 由 于 使 用 了 synchronized 方法(线程安全) ,通常性能上较 ArrayList 差, 而 LinkedList 使用双向链表实现存储, 按序号索引数据需要进 行前向或后向遍历,但是插入数据时只需要记录本项的前后项 即可,所以插入速度较快。8 设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程 对 j 每次减少 1。写出程序。 以下程序使用内部类实现线程,对 j 增减的时候没有考虑顺序 问题。 public class ThreadTest1{ public static void main(String args[]){ ThreadTest1 tt=new ThreadTest1(); Inc inc=tt.new Inc(); Dec dec=tt.new Dec(); for(int i=0;i&2;i++){ Thread t=new Thread(inc); t.start(); t=new Thread(dec); t.start(); } } private synchronized void inc(){ j++;System.out.println(Thread.currentThread().getName()+&inc:&+j); } private synchronized void dec(){ j--;System.out.println(Thread.currentThread().getName()+&dec:&+j); }class Inc implements Runnable{ public void run(){ for(int i=0;i&100;i++){ inc(); } } } class Dec implements Runnable{ public void run(){ for(int i=0;i&100;i++){ dec(); } } } }9.JSP 的内置对象及方法。 request request 表示 HttpServletRequest 对象。它包含了有 关 浏 览 器 请 求 的 信 息 , 并 且 提 供 了 几 个 用 于 获 取 cookie, header, 和 session 数据的有用的方法。response response 表示 HttpServletResponse 对象, 并提供了 几个用于设置送回 浏览器的响应的方法(如 cookies,头信息 等)out out 对象是 javax.jsp.JspWriter 的一个实例,并提供了 几个方法使你能用于向浏览器回送输出结果。pageContextpageContext表示一个javax.servlet.jsp.PageContext 对象。 它是用于方便存取各种 范围的名字空间、servlet 相关的对象的 API,并且包装了通用 的 servlet 相关功能的方法。sessionsession表示一个请求的 javax.servlet.http.HttpSession 对象。Session 可以存贮用 户的状态信息applicationapplicaton表示一个javax.servle.ServletContext 对 象 。 这 有 助 于 查 找 有 关 servlet 引擎和 servlet 环境的信息config config 表示一个 javax.servlet.ServletConfig 对象。 该对象用于存取 servlet 实例的初始化参数。page page 表示从该页面产生的一个 servlet 实例 10.用 socket 通讯写出客户端和服务器端的通讯,要求客户发 送数据后能够回显相同的数据。 参见课程中 socket 通讯例子。11 说出 Servlet 的生命周期,并说出 Servlet 和 CGI 的区别。 Servlet 被服务器实例化后,容器运行其 init 方法,请求到达 时运行其 service 方法, service 方法自动派遣运行与请求对应 的 doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁 的时候调用其 destroy 方法。 与 cgi 的区别在于 servlet 处于服务器进程中,它通过多线程 方式运行其 service 方法,一个实例可以服务于多个请求,并 且其实例一般不会销毁,而 CGI 对每个请求都产生新的进程, 服务完成后就销毁,所以效率上低于 servlet。 12.EJB 是 基 于 哪 些 技 术 实 现 的 ? 并 说 出 SessionBean 和 EntityBean 的区别,StatefulBean 和 StatelessBean 的区别。13. 包括 EJB (SessionBean,EntityBean) 说出他们的生命周期, 及如何管理事务的?14.说出数据连接池的工作机制是什么?15.同步和异步有和异同, 在什么情况下分别使用他们?举例说 明。16.应用服务器有那些?17 你所知道的集合类都有哪些?主要方法?18 给你一个:驱动程序 A,数据源名称为 B,用户名称为 C,密码为 D,数据库表为 T,请用 JDBC 检索出表 T 的所有数据。 19.说出在 JSP 页面里是怎么分页的? 页面需要保存以下参数: 总行数:根据 sql 语句得到总行数 每页显示行数:设定值 当前页数:请求参数 页面根据当前页数和每页行数计算出当前页第一行行数,定位 结果集到此行,对结果集取出每页显示行数的行即可。 ------------------ 数据库方面:1.存储过程和函数的区别 存储过程是用户定义的一系列 sql 语句的集合,涉及特定表或 其它对象的任务,用户可以调用存储过程,而函数通常是数据 库已定义的方法,它接收参数并返回某种类型的值并且不涉及 特定用户表。 2.事务是什么? 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单 元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持 久性)属性,只有这样才能成为一个事务: 原子性 事务必须是原子工作单元;对于其数据修改,要么全都执行, 要么全都不执行。 一致性 事务在完成时,必须使所有的数据都保持一致状态。在相关数 据库中,所有规则都必须应用于事务的修改,以保持所有数据 的完整性。事务结束时,所有的内部数据结构(如 B 树索引或 双向链表)都必须是正确的。 隔离性 由并发事务所作的修改必须与任何其它并发事务所作的修改隔 离。事务查看数据时数据所处的状态,要么是另一并发事务修 改它之前的状态,要么是另一事务修改它之后的状态,事务不 会查看中间状态的数据。这称为可串行性,因为它能够重新装 载起始数据,并且重播一系列事务,以使数据结束时的状态与 原始事务执行的状态相同。 持久性 事务完成之后,它对于系统的影响是永久性的。该修改即使出 现系统故障也将一直保持。3.游标的作用?如何知道游标已经到了最后? 游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS 可以判断是否到了最后,通常此变量不等于 0 表示出错或到了 最后。 4.触发器分为事前触发和事后触发,这两种触发有和区别。语 句级触发和行级触发有何区别。 事前触发器运行于触发事件发生之前,而事后触发器运行于触 发事件发生之后。通常事前触发器可以获取事件之前和新的字 段值。 语句级触发器可以在语句执行前或后执行,而行级触发在触发 器所影响的每一行触发一次。================================= 综合面试 Q1:请你分别划划 OSI 的七层网络结构图,和 TCP/IP 的五 层结构图?Q2:请你详细的解释一下 IP 协议的定义,在哪个层上面, 主要有什么作用? TCP 与 UDP 呢? Q3:请问交换机和路由器分别的实现原理是什么?分别在 哪个层次上面实现的?Q4:请问 C++的类和 C 里面的 struct 有什么区别?Q5:请讲一讲析构函数和虚函数的用法和作用? Q6:全局变量和局部变量有什么区别?实怎么实现的?操 作系统和编译器是怎么知道的 Q7:一些寄存器的题目,主要是寻址和内存管理等一些知 识。Q8:8086 是多少尉的系统?在数据总线上是怎么实现的?----------------------------------------------------网络工程师: 1 H.323 协商。 (笔试题) 2 ipsec 为什么是三层的。l2tp 为什么是二层的? 3 ospf 中包的 ttl 值是多少? 4 OSPF 为什么要划分区域? 5 MPLS VPN 的标签一共有几层。内网的标签放在哪里。 6 MPLS 中 RD 和 RT 的作用分别是什么? 7 RR 防止环路的机制。 8 BGP 控制 out-bound 用 local-pre,控制进来的用 med.(笔试 题) 9 ospf 是工作在哪个协议上的? 10 ospf 的 LSA 类型。 11 简述 OSPF 的基本工作机制。 12 ppp 的 lcp 和 ncp 协商过程。 13 笔试中还有一道 PSTN 的信令控制有哪三种?(笔试题) 14sloari 8.0 查看进程的命令是什么?linux 7.3 查看 IP 的命 令是什么?(笔试题) 15 IP 是 5.32.0.0,掩码 255.224.0.0。请问最大的有效地址是 多少。 (笔试题) 16 下列哪一项不属于于 7 号信令标准? 17 lx/???的有效距离是多少? 18 IP 包头几个字节?加上数据部分几个字节 19 QOS 有一点点。 20 CQ 能不能有一种流量 dominate 第二种流量? (笔试题)21 FTP 下载一个文件完成。有几个 TCP 连接??(笔试题)星期三 2005 年 9 月 7 日 dennyc 语言常见笔试题总结 【1 使用宏】 1.1 #ifdef NDEBUG #define TRACE(S) S #else #define TRACE(S) printf(&%s;\n&, #S); S #endif 问:以上 TRACE()宏的作用是什么? 1.2 #error 的作用? 1.3 定义一个宏,求出给定数组中的元素的个数 #define NELEMENTS(array) ?? 1.4 定义一个宏,求出给定结构中给定成员的偏移量 #define OFFSET(structure, member) ?? 【2 数据声明和定义】 给定以下类型的变量 a 的定义式: a) An integer b) A pointer to an integer c) A pointer to a pointer to an integer d) An array of 10 integers e) An array of 10 pointers to integers f) A pointer to an array of 10 integers g) A pointer to a &I&function&/I& that takes an integer as an argument and returns an integer h) An array of ten pointers to &I&function&/I&s that take an integer argument and return an integer 【3 复杂类型(1) 】 有如下表达式: char (*(*x())[])(); 请用文字描述 x 是什么。 【4 复杂类型(2) 】 jmp_buf 的定义: typedef struct _jmp_buf { REG_SET int extra[3]; } jmp_buf[1]; setjmp 函数的原型: extern int setjmp (jmp_buf __env); 问:调用 setjmp 时传递__env 的内容,还是传递指针? 【5 头文件】 问:为什么标准头文件都有类似以下的结构? #ifndef __INCvxWorksh #define __INCvxWorksh #ifdef __cplusplus extern &C& { #endif /*...*/ #ifdef __cplusplus } #endif #endif /* __INCvxWorksh */ 【6 static 关键字】 请说出 static 关键字的 3 种用处: (1)用于全局变量; (2)用于局部变量; (3)用于函数。 /* file.c */ static int fn() { } 【7 const 关键字】 7.1 const 关键字的意义是什么? 7.2 解释以下的变量定义: const int a1; int const a2; const int *a3; int * const a4; int const * const a5; 【8 volatile 关键字】 8.1 volatile 意义?例如 volatile int *p; 8.2 volatile 能和 const 一起使用吗?例如 volatile const int *p; 【9 sizeof()】 有以下定义: char *pmsg = &A&; char msg[] = &A&; char ch = 'A'; 问: sizeof(pmsg) = ? sizeof(msg) = ? sizeof(“A”) = ? sizeof(ch) = ? sizeof(‘A’) = ? (在 C++中等于多少?) void f(char param[100]) { // sizeof(param) = ? } 【10 字符串】 有以下代码 char *pmsg = &hello, world!&; strcpy(pmsg, &hi, there.&); 试评论该代码。 【11 混合运算】 有以下代码: void foo() { unsigned int a = 6; int b = -20; (a+b & 6) ? puts(&& 6&) : puts(& & = 6&); } 请问调用 foo()的输出? 【12 内存访问】 有以下代码: void fn() { int a[100]; int *p; p = (int *)((unsigned int)a + 1); printf(“p=0x%x\n”, *p); } 试评论以上代码。 【13 C 库函数】 请说明以下函数的意义: void perror(const char *__s); fdprintf(int, const char *, ...); isspace(), isxdigit(), strerr(), sprintf() coon @ 23:44:01 | 阅读全文 | 评论 0 | 引用 0 | 编辑 c 语言笔试题(九)
Tag: C 语言 1. #include &stdio.h& int main() { int *p; p = &a; *p = 0x500; a = (int )(*(&p)); a = (int )(&(*p)); if(a == (int)p) printf(&equal !\n&); else printf(&not equal !\n&); } 请问本程序的输出显示是什么? 答案:输出显示为”equal!” 2.struct { signed int bit0:1; signed int bit1:1; signed int bit2:1; signed int bit3:1; signed int bit4:1; signed int bit5:1; signed int bit6:1; signed int bit7:1; } 请问 sizeof(bits)是否是正确的表达式? 请问语句 的定义是否正确?如果不正确,要如何修改上述的结构定义才能使该语句正确?修改 后的结构定义是否会影响 sizeof(bits)的正确性?如果正确则该表达式的值为多少?如果将上述的结构中 int 类型改为 char 类型,此时 sizeof(bits)的大小为多少? 答案:1)是正确的表达式,因为 sizeof 后面的内容可以是类型,也可以是变量。 2)该语句的定义不正确,因为此时的 bits 为一个变量;应该这样修改结构的定义 typedef struct { signed int bit0:1; signed int bit1:1; signed int bit2:1; signed int bit3:1; signed int bit4:1; signed int bit5:1; signed int bit6:1; signed int bit7:1; } 修改后 sizeof(bits)表达式依然正确,其值为 4;类型改为 char 后其值为 1,注意该值是在 VC 环境中的 32 位 程序中得到的值,在不同的编译器其值有可能不同,因此在编程时不能自己假定类似结构的大小。 3. struct bit{ unsigned int a[0]:1,a[1]:1,a[2]:1….a[7]:1; } 请问这种写法是否正确?为什么? 答案:不正确,位域中的变量不能是数组。 4. struct a { struct a *p; } 请问这种定义结构正确否? 如果有问题,问题在哪里? 答案:结构中不能对定义结构本身的非指针变量,如果编译器支持则会导致无限嵌套,因此一般编译器都会 认为 struct a 是未定义的类型,即使提前声明也不会有任何用处。 5. 什么是可重入函数?C 语言中写可重入函数,应注意的事项? 答案:可重入函数是指能够被多个线程“同时”调用的函数,并且能保证函数结果的正确性的函数。在编写 可重入函数时通常要注意如下的一些问题: 尽量不要使用全局变量, 静态变量, 如果使用了应该注意对变量访问的互斥。 通常可以根据具体的情况采用: 信号量机制,关调度机制,关中断机制等方式来保证函数的可重入性。 不要调用不可重入的函数,调用了不可重入的函数会使该函数也变为不可重入的函数。 注意对系统中的临界资源,互斥资源的访问方式,防止使函数成为不可重入的函数。 一般驱动程序都是不可重入的函数,因此在编写驱动程序时一定要注意重入的问题。 6. 简述 stack frame 的含义。 答案:stack frame 的中文译名为:栈框架,表示函数在栈空间的调用层次,以 x86 平台的函数调用为例,通 常一个函数编译成汇编程序,都有如下的结构:其中的 leave 指令相当于:mov ebp,esp ;pop ebp 各个函数在栈空间的映象为: test1 函数test2 函数test3 函数因此在函数 test3 中,就可以根据这种栈框架的形式得到函数调用层次上的每个函数的基址指针,当前栈指 针,以及函数调用点等信息。 7. printf (“%d%d\n”,++n, power(2,n)); 其中 power(2,n)为实现一定功能的函数 如 2^n 。 请问这种表示方法有什么潜在的问题? 答案:编译器的不同,对++n 和 power(2,n)处理的先后顺序不一样,形成二义性,造成程 序的移植性差,因此最好把++n 写在 printf 函数外面,以消除二义性。 printf (s); 请问这样的语句有没有问题?(s 为一指向有效字符串的指针) 答案:没有%的话,可以这样表达,如果有%在 s 中的话,有意想不到的输出结果。 9. 两段代码共存于一个文件,编译时有选择的编译其中的一部分,请问如何实现? 答案:有两种简单的办法可以实现: 在源码中使用条件编译语句,然后在程序文件中定义宏的形式来选择需 要的编译代码。 在源码中使用条件编译语句,然后在编译命令的命令中加入宏定义命令 来实现选择编译。 10.数据结构指针传给函数,函数能访问数据单元,但不能修改实际的内容,如何实现? 答案:定义为指向常量的指针,这样指针所指的数据结构中的内容就不会被改变。如: const 类型 *p 或 类型 const *p 11. 在头文件中定义静态变量,可能产生什么问题? 答案:在使用了该头文件的每个 c 程序文件中都单独存在一个该静态变量,这样造成空间的浪费并且很容易 引起错误。因此建议不要在头文件中定义任何变量。 12.malloc()与 calloc()的区别? 答案: 1)参数上的区别 malloc (size_t size); calloc (size_t n , size_t size); malloc 分配一块 size 大小的内存块,而 calloc 分配一个 n*size 大小的内存块 2)返回内存块的状态不同 malloc 分配的内存块没有被清零,而 calloc 分配的内存块是清了零的。但是建议在使用内存时,如果需要初 始化,则最好自己按照需要来进行初试化,不要依赖函数的实现说明。 13.寄存器变量可不可以访问其地址?可否是全局变量?在什么场合使用寄存器变量? 答案:这些问题都与编译器的实现有关,建议不要声明全局变量为寄存器变量,即使是局部变量都最好不要 声明其为寄存器变量, 现在的编译器在优化时都会较为合理的安排寄存器变量的使用, 而人为的安排有时会 造成优化的低效。 14.&\n& '\n' 的区别? 答案:前者是一个字符串并且以’/0’结束,而后者只是一个简单的字符。 15.包含预定义头文件& & 和& &的区别? 答案:& &只在指定的目录里寻找被包含文件;& &先在当前目录下查找 ,再在指定目录下查找;通常&&方式 用于系统的头文件,而一般用户的头文件用& &的方式。 16.strunt S_A{ int a[10]; }; void f() { strunt S_A *s_ for (i=0,i&10,i++) s_ptr -& a[i] = } 请问这段代码正确否? 答案:这段代码不正确,没有对 s_ptr 指针进行初始化,在编程中要注意此类低级错误的发生。coon @ 23:37:37 | 阅读全文 | 评论 0 | 引用 0 | 编辑 c 语言笔试题(八)
Tag: C 语言 #pragma pack(8) struct s1{ }; struct s2{ s1 }; #pragma pack() 问 1.sizeof(s2) = ? 2.s2 的 s1 中的 a 后面空了几个字节接着是 b? 如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: 网友 rwxybh(行云)的答案: 内存布局是 1*** 11** 1111 ****
所以答案就是 24 和 3 下面是一个测试的程序,试一试就知道了,我用的是 VC2005 #pragma pack(8) struct s1{ // 2 BY // 4 Bytes }; struct s2{ // 1 Byte s1 // 8 B // 8 Bytes }; // 1*** 11** // 1111 **** //
// // 00 01 02 03 04 05 06 07 // 00 01 02 03 04 05 06 07 // 00 01 02 03 04 05 06 07 // #pragma pack() int main(int argc, char* argv[]) { s2 char *p = (char *)&a; for(int i=0;i&24;++i) p[i] = (char)(i%8); printf(&%d\n&,sizeof(a)); printf(&c=0x%lx\n&,a.c); printf(&d.a=0x%x\n&,a.d.a); printf(&d.b=0x%x\n&,a.d.b); printf(&e=0x%llx\n&,a.e); return 0; } 结果: 24 c=0x0 d.a=0x504 d.b=0x3020100 e=0x100 网友 redleaves (ID 最吊的网友)的答案和分析: 如果代码: #pragma pack(8) struct S1{ }; struct S2 { struct S1 }; #pragma pack() sizeof(S2)结果为 24. 成员对齐有一个重要的条件,即每个成员分别对齐.即每个成员按自己的方式对齐. 也就是说上面虽然指定了按 8 字节对齐,但并不是所有的成员都是以 8 字节对齐.其对齐的规则是,每个成 员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里是 8 字节)中较小的一个对齐.并且结构 的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节. S1 中,成员 a 是 1 字节默认按 1 字节对齐,指定对齐参数为 8,这两个值中取 1,a 按 1 字节对齐;成员 b 是 4 个字节,默认是按 4 字节对齐,这时就按 4 字节对齐,所以 sizeof(S1)应该为 8; S2 中,c 和 S1 中的 a 一样,按 1 字节对齐,而 d 是个结构,它是 8 个字节,它按什么对齐呢?对于结构来说,它 的默认对齐方式就是它的所有成员使用的对齐参数中最大的一个,S1 的就是 4.所以,成员 d 就是按 4 字节对齐. 成员 e 是 8 个字节,它是默认按 8 字节对齐,和指定的一样,所以它对到 8 字节的边界上,这时,已经使用了 12 个 字节了,所以又添加了 4 个字节的空,从第 16 个字节开始放置成员 e.这时,长度为 24,已经可以被 8(成员 e 按 8 字节对齐)整除.这样,一共使用了 24 个字节. ab S1 的内存布局:11**,1111, c S1.a S1.b d S2 的内存布局:1***,11**,1111,**** 这里有三点很重要: 1.每个成员分别按自己的方式对齐,并能最小化长度 2.复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化 长度 3.对齐后的长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐网友 xue23(xue23) 的答案和分析: 有程序查一下各个变量的内存地址得知: 各个变量在内存中的位置为 c***aa** bbbb**** dddddddd 测试代码为: s2 cout && &ss.c = & && &ss && cout && &ss.d.a = & &&&ss.d.a && cout && &ss.d.b = & &&&(ss.d.b) & cout && &ss.d = & &&&ss.e && print out 各个变量的内存地址不就可以看出来了吗。 所以答案是 24,2. 但是我的想像中应该是这样的分布情况: c******* aa**bbbb dddddddd 不知为什么会 c 和 a 放在一起,组成 8 位长度。coon @ 23:35:17 | 阅读全文 | 评论 0 | 引用 0 | 编辑 c 语言笔试题(七)
Tag: C 语言找错 Void test1() { char string[10]; char* str1=&&; strcpy(string, str1); } Void test2() { char string[10], str1[10]; for(I=0; I&10;I++) { str1[i] ='a'; } strcpy(string, str1); } Void test3(char* str1) { char string[10]; if(strlen(str1)&=10) { strcpy(string, str1); } } 2. 找错 #define MAX_SRM 256 DSN get_SRM_no() { static int SRM_ int I; for(I=0;I{ SRM_no %= MAX_SRM; if(MY_SRM.state==IDLE) { } } if(I&=MAX_SRM) return (NULL_SRM); else return SRM_ } 写出程序运行结果3.int sum(int a) { auto int c=0; static int b=3; c+=1; b+=2; return(a+b+C); } void main() { int I; int a=2; for(I=0;I&5;I++) { printf(&%d,&, sum(a)); } } 4. int func(int a) { switch(a) { case 1: 30; case 2: 20; case 3: 16; default: 0 } } 则 func(1)=? 5: int a[3]; a[0]=0; a[1]=1; a[2]=2; int *p, *q; p=a; q=&a[2]; 则 a[q-p]=? 6. 定义 int **a[3][4], 则变量占有的内存空间为:_____ 7. 编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005 年 1 月 1 日 0 时 0 分 0 秒。coon @ 23:34:38 | 阅读全文 | 评论 0 | 引用 0 | 编辑 c 语言笔试题(六)
Tag: C 语言 4. static 有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树? 左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于 1 11. 堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12. 什么函数不能声明为虚函数? constructor 13. 冒泡排序算法的时间复杂度是什么? O(n^2) 14. 写出 float x 与“零值”比较的 if 语句。 if(x&0.000001&&x&-0.. Internet 采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet 物理地址和 IP 地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析fh) 18.IP 地址的编码分为哪俩部分? IP 地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪 些是主机位。2.用户输入 M,N 值,从 1 至 N 开始顺序循环数数,每数到 M 输出该数值,直至全部输出。写出 C 程序。 循环链表,用取余操作做 3.不能做 switch()的参数类型是: switch 的参数不能为实型。 A 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用&::& 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。 对于有些编译器而言, 在同一个函数内可以定义多个同名的局部变量, 比如在两个循环体内都定义一个同名 的局部变量,而那个局部变量的作用域就在那个循环体内 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式, 也可以用 extern 关键字, 如果用引用头文件方式来引用某个在头文件中声明的全 局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用 extern 方式引用时,假定你犯了同样的 错误,那么在编译期间不会报错,而在连接期间报错 3、全局变量可不可以定义在可被多个.C 文件包含的头文件中?为什么? 答:可以,在不同的 C 文件中以 static 形式来声明同名全局变量。 可以在不同的 C 文件中声明同名的全局变量,前提是其中只能有一个 C 文件中对此变量赋初值,此时连接 不会出错 4、语句 for( ;1 ;)有什么问题?它是什么意思? 答:和 while(1)相同。 5、do??while 和 while??do 有什么区别? 答:前一个循环一遍再判断,后一个判断以后再循环 6、请写出下列代码的输出内容 #include main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf(&b,c,d:%d,%d,%d&,b,c,d); return 0; } 答:10,12,120 1、static 全局变量与普通的全局变量有什么区别?static 局部变量和普通局部变量有什么区别?static 函数与 普通函数有什么区别? 全局变量(外部变量)的说明之前再冠以 static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。 这两者的区别虽在于非静态全局变量 的作用域是整个源程序, 当一个源程序由多个源文件组成时, 非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能 使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在 其它源文件中引起错误。 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局 变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。 static 函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static), 内部函数应该在当前源文件中说明和定义。 对于可在当前源文件以外使用的函数, 应该在一个头文件中说明, 要使用这些函数的源文件要包含这个头文件 static 全局变量与普通的全局变量有什么区别: static 全局变量只初使化一次, 防止在其他文件单元中被引用; static 局部变量和普通局部变量有什么区别:static 局部变量只被初始化一次,下一次依据上一次结果值; static 函数与普通函数有什么区别:static 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。 3、设有以下说明和定义: typedef union { int k[5];} DATE; struct data { DATE} DATE 则语句 printf(&%d&,sizeof(struct date)+sizeof(max));的执行结果是:___52____ 答:DATE 是一个 union, 变量公用空间. 里面最大的变量类型是 int[5], 占用 20 个字节. 所以它的大小是 20 data 是一个 struct, 每个变量分开占用空间. 依次为 int4 + DATE20 + double8 = 32. 所以结果是 20 + 32 = 52. 当然...在某些 16 位编辑器下, int 可能是 2 字节,那么结果是 int2 + DATE10 + double8 = 20 4、队列和栈有什么区别? 队列先进先出,栈后进先出 5、写出下列代码的输出内容 #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); } typedef int(FUNC1)(int in); typedef int(FUNC2) (int*,int*,int*); void show(FUNC2 fun,int arg1, int*arg2) { INCp=& int temp =p(arg1); fun(&temp,&arg1, arg2); printf(&%d\n&,*arg2); } main() { show(multi,10,&a); return 0; } 答:110 7、请找出下面代码中的所以错误 说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” 1、#include&string.h& 2、main() 3、{ 4、 char*src=&hello,world&; 5、 char* dest=NULL; 6、 int len=strlen(src); 7、 dest=(char*)malloc(len); 8、 char* d= 9、 char* s=src[len]; 10、 while(len--!=0) 11、 d++=s--; 12、 printf(&%s&,dest); 13、 return 0; 14、} 答: 方法 1: int main(){ char* src = &hello,world&; int len = strlen(src); char* dest = (char*)malloc(len+1);//要为分配一个空间 char* d = char* s = &src[len-1];//指向最后一个字符 while( len-- != 0 ) *d++=*s--; *d = 0;//尾部要加 printf(&%s\n&,dest); free(dest);// 使用完,应当释放空间,以免造成内存汇泄露 return 0; } 方法 2: #include #include main() { char str[]=&hello,world&; int len=strlen(str); for(int i=0; i { t=str[i]; str[i]=str[len-i-1]; str[len-i-1]=t; } printf(&%s&,str); return 0; } 1.-1,2,7,28,,126 请问 28 和 126 中间那个数是什么?为什么? 第一题的答案应该是 4^3-1=63 规律是 n^3-1(当 n 为偶数 0,2,4) n^3+1(当 n 为奇数 1,3,5) 答案:63 2.用两个栈实现一个队列的功能?要求给出算法和思路! 设 2 个栈为 A,B, 一开始均为空. 入队: 将新元素 push 入栈 A; 出队: (1)判断栈 B 是否为空; (2)如果不为空,则将栈 A 中所有元素依次 pop 出并 push 到栈 B; (3)将栈 B 的栈顶元素 pop 出; 这样实现的队列入队和出队的平摊复杂度都还是 O(1), 比上面的几种方法要好。3.在 c 语言库函数中将一个 字符转换成整型的函数是 atool()吗,这个函数的原型是什么? 函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr); 程序例: #include #include int main(void) { char *str = &&; l = atol(lstr); printf(&string = %s integer = %ld\n&, str, l); return(0); } 2.对于一个频繁使用的短小函数,在 C 语言中应用什么实现,在 C++中应用什么实现? c 用宏定义,c++用 inline 3.直接链接两个信令点的一组链路称作什么? PPP 点到点连接 4.接入网用的是什么接口? 5.voip 都用了那些协议? 6.软件测试都有那些种类? 黑盒:针对系统功能的测试 白合:测试函数功能,各函数接口 7.确定模块的功能和模块的接口是在软件设计的那个队段完成的? 概要设计阶段 8.enum string { x1, x2, x3=10, x4, x5, }x; 问 x= 0xx8010f4 ; 9.unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 请问 p1+5= ; p2+5= ; 三.选择题: 1.Ethternet 链接到 Internet 用到以下那个协议? A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 2.属于网络层协议的是: A.TCP;B.IP;C.ICMP;D.X.25 3.Windows 消息调度机制是: A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈; 4.unsigned short hash(unsigned short key) { return (key&&)%256 } 请问 hash(16),hash(256)的值分别是: A.1.16;B.8.32;C.4.16;D.1.32 四.找错题: 1.请问下面程序有什么错误? int a[60][250][1000],i,j,k; for(k=0;k&=1000;k++) for(j=0;j&250;j++) for(i=0;i&60;i++) a[i][j][k]=0; 把循环语句内外换一下 2.#define Max_CB 500 void LmiQueryCSmd(Struct MSgCB * pmsg) { unsigned char ucCmdN ...... for(ucCmdNum=0;ucCmdNum { ......; } 死循环 3.以下是求一个数的平方的程序,请找出错误: #define SQUARE(a)((a)*(a)) int a=5; b=SQUARE(a++); 4.typedef unsigned char BYTE int examply_fun(BYTE gt_ BYTE *gt_code) { BYTE *gt_ gt_buf=(BYTE *)MALLOC(Max_GT_Length); ...... if(gt_len&Max_GT_Length) { return GT_Length_ERROR; } ....... } 五.问答题: 1.IP Phone 的原理是什么? IPV6 2.TCP/IP 通信建立的过程怎样,端口有什么作用? 三次握手,确定是哪个应用程序使用该协议 3.1 号信令和 7 号信令有什么区别,我国某前广泛使用的是那一种? 4.列举 5 种以上的电话新业务? 微软亚洲技术中心的面试题!! ! 1.进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或 撤消线程时的开销。 2.测试方法 人工测试:个人复查、抽查和会审 机器测试:黑盒测试和白盒测试 2.Heap 与 stack 的差别。 Heap 是堆,stack 是栈。 Stack 的空间由操作系统自动分配/释放,Heap 上的空间手动分配/释放。 Stack 空间有限,Heap 是很大的自由存储区 C 中的 malloc 函数分配的内存空间即在堆上,C++中对应的是 new 操作符。 程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行 3.Windows 下的内存是如何管理的? 4.介绍.Net 和.Net 的安全性。 5.客户端如何访问.Net 组件实现 Web Service? 6.C/C++编译器中虚表是如何完成的? 7.谈谈 COM 的线程模型。然后讨论进程内/外组件的差别。 8.谈谈 IA32 下的分页机制 小页(4K)两级分页模式,大页(4M)一级 9.给两个变量,如何找出一个带环单链表中是什么地方出现环的? 一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方 10.在 IA32 中一共有多少种办法从用户态跳到内核态? 通过调用门,从 ring3 到 ring0,中断从 ring3 到 ring0,进入 vm86 等等 11.如果只想让程序有一个实例运行,不能运行两个。像 winamp 一样,只能开一个窗口,怎样实现? 用内存映射或全局原子(互斥变量) 、查找窗口句柄.. FindWindow,互斥,写标志到文件或注册表,共享内存。. 12.如何截取键盘的响应,让所有的‘a’变成‘b’? 键盘钩子 SetWindowsHookEx 13.Apartment 在 COM 中有什么用?为什么要引入? 14.存储过程是什么?有什么用?有什么优点? 我的理解就是一堆 sql 的集合,可以建立非常复杂的查询,编译运行,所以运行一次后,以后再运行速度比 单独执行 SQL 快很多 15.Template 有什么特点?什么时候用? 16.谈谈 Windows DNA 结构的特点和优点。网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区别? 1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。 2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据, 但拥有自己的栈空间,拥有独立的执行序列。 两者都可以提高程序的并发度,提高程序运行效率和响应时间。 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程 适合于在 SMP 机器上运行,而进程则可以跨机器迁移。 思科 1. 用宏定义写出 swap(x,y) #define swap(x, y)\ x = x +\ y = x -\ x = x - 2.数组 a[N],存放了 1 至 N-1 个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必 须为 o(N)函数原型: int do_dup(int a[],int N) 3 一语句实现 x 是否为 2 的若干次幂的判断 int i = 512; cout && boolalpha && ((i & (i - 1)) ? false : true) && 4.unsigned int intvert(unsigned int x,int p,int n)实现对 x 的进行转换,p 为起始转化位,n 为需要转换的长度,假设 起始点在右边.如 x=0b,p=4,n=3 转换后 x=0b unsigned int intvert(unsigned int x,int p,int n){ unsigned int _t = 0; unsigned int _a = 1; for(int i = 0; i & ++i){ _t |= _a; _a = _a && 1; } _t = _t && x ^= _t; } 慧通: 什么是预编译 何时需要预编译: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将 所有包含文件预编译为一个预编译头。 char * char const * p const char *p 上述三个有什么区别? char * //常量指针,p 的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和 char const *p char str1[] = &abc&; char str2[] = &abc&; const char str3[] = &abc&; const char str4[] = &abc&; const char *str5 = &abc&; const char *str6 = &abc&; char *str7 = &abc&; char *str8 = &abc&;cout && ( str1 == str2 ) && cout && ( str3 == str4 ) && cout && ( str5 == str6 ) && cout && ( str7 == str8 ) && 结果是:0 0 1 1 解答:str1,str2,str3,str4 是数组变量,它们有各自的内存空间; 而 str5,str6,str7,str8 是指针,它们指向相同的常量区域。12. 以下代码中的两个 sizeof 用法有问题吗?[C 易] void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母 { for( size_t i=0; i if( 'a'&=str[i] && str[i]&='z' ) str[i] -= ('a'-'A' ); } char str[] = &aBcDe&; cout && &str 字符长度为: & && sizeof(str)/sizeof(str[0]) && UpperCase( str ); cout && str && 答:函数内的 sizeof 有问题。根据语法,sizeof 如用于数组,只能测出静态数组的大小,无法检测动态分配 的或外部数组大小。函数外的 str 是一个静态定义的数组,因此其大小为 6,函数内的 str 实际只是一个指向 字符串的指针,没有任何额外的与数组相关的信息,因此 sizeof 作用于上只将其当指针看,一个指针为 4 个 字节,因此返回 4。 一个 32 位的机器,该机器的指针是多少位 指针是多少位只要看地址总线的位数就行了。 80386 以后的机子都是 32 的数据总线。 所以指针的位数就是 4 个字节了。 main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf(&%d,%d&,*(a+1),*(ptr-1)); } 输出:2,5 *(a+1)就是 a[1],*(ptr-1)就是 a[4],执行结果是 2,5 &a+1 不是首地址+1,系统会认为加一个 a 数组的偏移,是偏移了一个数组的大小(本例是 5 个 int) int *ptr=(int *)(&a+1); 则 ptr 实际是&(a[5]),也就是 a+5 原因如下: &a 是数组指针,其类型为 int (*)[5]; 而指针加 1 要根据指针类型加上一定的值, 不同类型的指针+1 之后增加的大小不同 a 是长度为 5 的 int 数组指针,所以要加 5*sizeof(int) 所以 ptr 实际是 a[5] 但是 prt 与(&a+1)类型是不一样的(这点很重要) 所以 prt-1 只会减去 sizeof(int*) a,&a 的地址是一样的,但意思不一样,a 是数组首地址,也就是 a[0]的地址,&a 是对象(数组)首地址, a+1 是数组下一元素的地址,即 a[1],&a+1 是下一个对象的地址,即 a[5].1.请问以下代码有什么问题: int main() { char *str=&a; strcpy(str,&hello&); printf(str); return 0; } 没有为 str 分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址。 虽然可以正确输出结果, 但因为越界进行内在读 写而导致程序崩溃。 char* s=&AAA&; printf(&%s&,s); s[0]='B'; printf(&%s&,s); 有什么错? &AAA&是字符串常量。s 是指针,指向这个字符串常量,所以声明 s 的时候就有问题。 cosnt char* s=&AAA&; 然后又因为是常量,所以对是 s[0]的赋值操作是不合法的。 1、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。 .#define Min(X, Y) ((X)&(Y)?(Y):(X))//结尾没有; 2、嵌入式系统中经常要用到无限循环,你怎么用 C 编写死循环。 while(1){}或者 for(;;) 3、关键字 static 的作用是什么? 定义静态变量 4、关键字 const 有什么含意? 表示常量不可以修改的变量。 5、关键字 volatile 有什么含意?并举出三个不同的例子? 提示编译器对象的值可能在编译器未监测到的情况下改变。int (*s[10])(int) 表示的是什么啊 int (*s[10])(int) 函数指针数组,每个指针指向一个 int func(int param)的函数。1.有以下表达式: int a=248; b=4;int const c=21;const int *d=&a; int *const e=&b;int const *f const =&a; 请问下列表达式哪些会被编译器禁止?为什么? *c=32;d=&b;*d=43;e=34;e=&a;f=0x321f; *c 这是个什么东东,禁止 *d 说了是 const, 禁止 e = &a 说了是 const 禁止 const *f const =&a; 禁止 2.交换两个变量的值,不使用第三个变量。即 a=3,b=5,交换之后 a=5,b=3; 有两种解法, 一种用算术算法, 一种用^(异或) a = a + b = a - a = a - or a = a^b;// 只能对 int,char.. b = a^b; a = a^b; or a ^= b ^= 3.c 和 c++中的 struct 有什么不同? c 和 c++中 struct 的主要区别是 c 中的 struct 不可以含有成员函数, c++中的 struct 可以。 而 c++中 struct 和 class 的主要区别在于默认的存取权限不同,struct 默认为 public,而 class 默认为 private 4.#include #include void getmemory(char *p) { p=(char *}

我要回帖

更多关于 分布式任务调度框架 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信