1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 36及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读下列说明和数据流图,回答问题 1至问题 3。将解答填入对应栏内。【说明】 某图书馆管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息 (姓名、单位、地址等 )一起写入读者文件。系统的图书管理功能分为四个方面:购入新书、读者借书、读者还书以及图书注销。 (1)购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和 购书日期,将这些信息写入图书目录文件并修改文件中的库存总量 (表示到目前为止
2、,购入此种图书的数量 )。 (2)读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数 (假设每位读者能同时借阅的书不超过 5本 )。若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。 (3)读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相 关的借阅记录,标明还书日期,再写回到借书文件中。若图书逾期,则处以相应的罚款。 (4)注销图书时,需填写注销单并修改图书目录文件中的库存总量。系统的信息
3、查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息以及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。图书管理系统的顶层图如图 13-5所示;图书管理系统的第 0层 DFD图如图 13-6所示,其中加工 2的细化图如图 13-7所示。 1 数据流图 13-6中有两条数据流是错误的,请指出这两条数据流的起点和终点。 2 数据流图 13-7中缺少三条数据流,请指出这三条数据流的起点和终点。 3 根据系统功能和数据流图填充下列数据字典条目中的 (1)和 (2): 查询请求信息 =查询读者请求信息查询图书请求信息 读者情况 =读者号 +姓名 +所在单位
4、 +借书情况 管理工作请求单 =(1) 入库单 =(2) 4 阅读下列说明及图 13-8和图 13-9,回答问题,将解答填入对应栏内。【说明】 某电话公司决定开发一个管理所有客户信息的交互式网络系统。系统功能如下。 (1)浏览客户信息:任何使用 Internet的网络用户都可 以浏览电话公司所有的客户信息 (包括姓名、住址、电话号码等 )。 (2)登录:电话公司授予每个客户一个帐号。拥有授权帐号的客户,可以使用系统提供的页面设置个人密码,并使用该帐号和密码向系统注册。 (3)修改个人信息:客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人信息进行修改。 (4)删除客户信息:只有公
5、司的管理人员才能删除不再接受公司服务的客户的信息。系统采用面向对象方法进行开发,在开发过程中认定出的类见表 13-3。4 在需求分析阶段,采用 UML的用例图 (use case diagram)描述系统功能需求,如图 13-8所示。请指出图中的 A、 B、 C和 D分别是哪个用例 ? 5 请指出图 13-9中 (1) (4)处的重复度分别为多少 ? 6 类通常不会单独存在,因此当对系统建模时,不仅要识别出类,还必须对类之间的相互关系建模。在面向对象建模中提供了 4种关系:依赖 (dependency)、概括(generalization )、关联 (association)和聚集 (aggr
6、egation)。请分别说明这 4种关系的含义,并说明关联和聚集之间的主要区别。 7 阅读下列说明,回答问题。 【说明】 现有事务 T1, T2、 L3它们对数值型数据 A执行的操作分别如下: T1;将 A加 1。 T2:将 A加倍。 T3:输出 A的值,并将 A置为 1。 7 假设 T1、 T2、 T3可以并发执行。若 A的初值为 0,那么存在多少种可能的正确结果 ? 8 各个事务内部的结构如表 13-4所示,若事务执行不施加任何锁,则有多少种不同的调度方式 ?写出简要的计算过程。 在 A的初值给定为 0时,是否存在能够产生正确结果,而且又是不可串行化的调度 ?若有请举例说明。 9 在 A的
7、初值给定为 0时,是否存在能够产生正确结果 ,而且又是不可串行化的调度 ?若有请举例说明。 10 阅读以下说明及图,回答问题。【说明】 Web页面与数据库的连接是 Web数据库的基本要求。目前基于 Web数据库的连接方案主要有服务器端方案和客户端方案两种类型。服务器端方案的实现技术有 ASP等,客户端方案的实现技术有JDBC、 DHTML等。其中, ASP是微软开发的脚本语言技术,嵌入在 IIS中,因此, ASP成为大部分用户的首选脚本语言。图 13-10给出了 ASP的工作原理。10 ASP属于服务器端方案还是客户端方案 ?ASP的工作原理图中 (1)、 (2)应是什么 ? 11 请至少写出
8、 ASP的 5个特点。 12 请至少写出 4种服务器端实现技术。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 13 阅读以下说明和 C+程序代码,将程序填充完整。 【说明】 有时我们希望给某个对象而不是整个类添加一些功能。例如,一个图形用户界面工具箱允许你对任意一个用户界面组件添加一些特性,例如边框,或是一些行为,例如窗口滚动。使用继承机制是添加功能的一种有效途径,从其他类继承过来的边框特性 可以被多个子类的实例所使用。但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机
9、。 一种较为灵活的方式是将组件嵌入另一个对象中,由这个对象添加边框。我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。它将客户请求转发给该组件,并且可能在转发前后执行一些额外的动作 (例如画二个边框 )。透明性使得你可以递归地嵌套多个装饰,从而可以添加任意多的功能。 装饰对象结构模式的意图就是动态地给一个对象添加一些额外的职责。就增加功能来说,该模式相比生成子类更 为灵活。其示意类图如图 13-22所示。 程序代码 13-5是该模式的一个示例,说明了如何实现用户接口装饰,函数的实现全部省略。程序中定义了 VisualComponent的一个子类 Dec
10、orator,我们将生成Decorator的子类以获取不同的装饰。 VisualComponent类是一个描述可视对象的抽象类,它描述了绘制和事件处理的接口。 Decorator的子类定义了特殊的装饰功能, BorderDecorator子类给可视组件添加一个边框, ScrollDecorator给可视组件添加滚动功能。 【程序代码 13-5】 (1); class Window public: roid SetContents (VisualComponent * contents); ; /VisualComponent类是一个描述可视对象的抽象类 class VisllalCompone
11、nt public: VisualComponent(); (2) void Draw(); Virtual void Resize(); ; class Decorator: public VisualComponent public: Decorator() / ; Decorator(VisualComponent * vcom) / ; virtual vold Draw(); virtual vold Resize(); private: /* Decorator装饰由 VisualComponent的指针实现,其在 Decorator的构造函数中初始化 */ VisualCompo
12、nent (3) ; ; vold Decorator: Draw() (4); /缺省实现 void Decorator: Resize() component-Resize(); /缺省实现 /BorderDecorator 子类为它所包含的组件添加一个边框 class BorderDecorator: public Decorator public: BorderDecorator(VisualComponent * vcom, int borderWidth) / ; Virtual Void Draw(); private: void DrawBorder(int); private
13、: int borderWidth; ; void BorderDecorator: Draw() Decorator: Draw(); DrawBorder(_width); Void BorderDecorator:DrawBorder(int Width) / ) Void Window : SetConterlts(VlsualComponent * contents) / /SerollDecorat 给可视组件添加滚动功能 class ScroliDecoratOr:public Decorator public: ScrollDecorator(VlsualComponent *
14、 vcom) / ; / ) ; class TextView: public VisualComponent / ; void main(void) /创建一个正文视图以及放入这个正文视图的窗口 Window * window new Window; TcxtView * textView new TextView; /TextView是一个 VisualComponent,它可以放入窗口中 window- SetContents(textView); /得到一个有边界的和可以滚动的TextView,边界宽为 1 window- SetContents(5); 14 阅读下列说明与相关类图,
15、填空并回答问题。 【说明】 装饰者模式动态地给一个对象添加一些额外的职责,就扩展功能而言,该模式比生成子类方式更加灵活。装饰模式的提出有助于解决滥用继承的问题。 例如,一个名叫星巴兹 (Starbuzz)的咖啡连锁店提供多种多样的咖啡,最朴素的设计就是采用继承,即 设计一个饮料抽象基类 Beverage,让不同种类的咖啡 HouseBlend、 Decaf、 Espresso、 DarkRoast继承 Beverage类,如图 13-23所示。 Beverage类的 cost()方法是抽象方法,每个子类的 cost()方法实现即返回具体咖啡种类的价钱, Beverage类的 descripti
16、on实例变量由每个子类设置,用来描述该类饮料, Beverage类的 getDescription()方法用来返回此描述。 客户在点咖啡时还可以要求添加各种各样的调料 (Condiment),加入的调料 不同所收取的费用也是不同的,让各种加了调料的不同咖啡都继承基类 Beverage,当咖啡种类和调料种类很多时,组合种类的数量就会急剧增长,就会发生 “类数量爆炸 ”现象,如图 13-24所示。 显然,采用这种设计方式会使得代码的维护变得十分困难,可以采用装饰者模式来解决这个问题。软件设计师蝴蝶飞根据装饰者模式的思想设计了如图 13-25所示的类图。 在图 13-25中,将各种调料 Milk、
17、Mocha、 Soy、 Whip作为装饰者来装饰 House- Blend、 Decal、 Espresso、 DarkRoast等各种咖啡 。下面的 Java程序 (代码 13-6)对应其具体实现。 【代码 13-6】 import java.io * ; abstract class Beverage String description=“Unknown Beverage“; public String getDescription() return description; public (1) double cost(); abstract class CondimentDecora
18、tor (2) Beverage public abstract Strmg getDescription(); class Decafextends Beverage public Decaf() description=“Decaf Coffee“; public double cost() return 1.05; class Espresso extends Beverage public Espresso() description=“Espresso“; public double cost() return 1.99; class HouseBlend extends Bever
19、age public HouseBlend() description=“House Blend Coffee“; public double cost() return.89; class DarkRoast extends Beverage public DarkRoast() description=“Dark Roast Coffee“; public double cost() return.99; class Mocha extends CondtmentDecorator Beverage (3); public Mocha(Beverage beverage) this.bev
20、erage=beverage; public String getDescription() return beverage.getDescription()+“, Mocha“; public double cost() return.20+beverage.cost(); Class Soy extends CondimentDecorator Beverage beverage; public Soy(Beverage beverage) this.beverage beverage; public Strillg getDescription() returnbeverage. get
21、Description()+“, Soy“; public double cost() return.15+beverage.cost(); class Whip extends CondimentDecorator Beverage beveragei public Whip(Beverage beverage) this.beverage=beverage; public String getDescrlption() returnbeverage. getDescription()+“, Whip“; public double cost() return.10+beverage.cos
22、t(); class Milk extends CondlmentDecorator Beverlige beverage; public Milk(Beverage beverage) this. beverage=beverage; public String getDescription() return beverage getDescription()+“, Milk“; public double cost() return.10+beverage.cost(); public class StarbuzzCoffee public static void main(Stting
23、args) /订一杯 Espresso咖啡,不需要任何调料,打印出它的描述和价钱 Beverage beverage new Espresso(); System.out.println(beverage.getDescription()+“$“+beverage.cost(); /订一杯加了两份Macha调料、一份 Whip调料的 DarkRoast咖啡 /并打印出它的描述和价钱 Beverage beverage2=new DarkRoast(); beverage2=new Mocha(beverage2): beverage2=new (4) (beverage2); beverage
24、2=new Whip(beverage2); System.out.println(beverage2.getDescription()+“$“+beverage2.cost(); /订一杯加了一份 Soy调料、一份 Mocha调料、一份 Whip调料 /的 HouseBlend咖啡,并打印出它的描述和价钱 Beverage beverage3 new HouseBlend(); beverage3 new Soy(beverage3); beverage3 new Mocha(beverage3); beverage3 new Whip(beverage3); System.out.prin
25、tln(beverage3.getDescription()+“$“+beverage3.cost(); 【问题 1】 根据题目叙述,请将上述 Java程序代码 13-6中的 (1) (4)空填充完整。 【问题 2】 请写出上述程序的输出结果。 15 阅读以下 说明和 C语言函数,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 一棵非空二叉树中 “最左下 ”结点定义为:若树根的左子树为空,则树根为 “最左下 ”结点;否则,从树根的左子树根出发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的 “最左下 ”结点。例如:图 13-26所示的以 A为根的二叉
26、树的 “最左下 ”结点为 D,以 C为根的子二叉树中的“最左下 ”结点为 C。 二叉树的结点类型定义如下: typedef struct BSTNode int data; struct BSTNode * lch, * rch; /结点的左、右孩子指针 * BSTree; 代码 13-7中,函数 BSTree Find_Del(BSTreeroot)的功能是:若root指向一棵二茶树的根结点,则找出该结点的右子树上的 “最左下 ”结点 *p,并从树中删除以 *p为根的子树,函数返回被删除子树的根结点指针;若该树根的右子树上不存在 “最左下 ”结点,则返回空指针。 【代码 13-7】 BSTr
27、ee Find_Del(BSTree root) BSTree p, pre; If(! root) / * root指向的二叉 树为空树 */ return NULL; (1); / * 令 p指向根结点的右子树 */ if( ! p) return NULL; (2); / * 设置 pre的初值 */ while(p- lch) / * 查找 “最左下 ”结点 */ pre p; p (3); if(4) root) / * root的右子树根为 “最左下 ”结点 */ pre- rch NULL; else (5) NULL; / * 删除以 “最左下 ”结点为根的子树 */ retu
28、rn p; 软件水平考试(中级)软件设计师下午(应用 技术)试题模拟试卷 36答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 (1)“2处理查询请求 ”到 “读者文件 ”的数据流; (2)从 “读者文件 ”到 “3登记读者信息 ”的数据流。 2 【正确答案】 (1)从 “借书文件 ”到 “2.1读者信息查询 ”的数据流; (2)从 “借书文件 ”到 “2.2图书信息查询 ”的数据流; (3)从 “图书目录文件 ”到 “2.2图书信息查询 ”的数据流。 3 【正确答案】 (1)入库单借书单还书单注销单 ; (2)分类目录号 +书名 +作者 +价格 +数量 +购书日期。
29、 【试题解析】 以前的考题,往往只是简单地抽掉了一些子图的输入 /输出数据流让考生补充,题型过于简单,只要知道了上面的规则,就很容易解答。但在此题中有了一定的变化。不过我们还是要用到上面的规则,把 0层图中的输入 /输出数据流一条一条地与顶层图中的数据流进行对比。通过对比,我们发现顶层图中的“非法请求信息 ”数据流在 0层图中没有对应的数据流,而 0层图中多出了两个数据流: “非法管理工作请求单 ”和 “非法查询请求信息 ”,这是不是就是问题 1所指的两条错误数据流呢 ?答案不确定。因为从字面上和处理流程来看, “非法管理工作 请求单 ”和 “非法查询请求信息 ”都应属于 “非法请求信息 ”,
30、而且在分层数据流图中完全有可能把子图中的同类信息合并成一个。所以我们现在应该看 0层图中的其它数据流是否有问题。 现在就只剩下与 “读者文件 ”相关的两个数据流了,图中的 “2处理查询请求 ”应要完成的功能是查询出 “图书情况 ”和 “读者情况 ”(这一点可以从题干中的 “系统的信息查询功能主要包括读者信息查询和图书信息查询 ”看出 ),这一过程要用到读者文件中的一些数据,所以应该从读者文件中取数据,但图中的数据流是从 “2处理查询请求 ”到 “读者文件 ”,这种数据流的含义是 把数据存入 “读者文件 ”,这显然不正确。再来看另一条数据流: “读者文件 ”到 “3登记读者信息 ”的数据流,在
31、“3登记读者信息 ”完成的功能是把读者基本信息写入 “读者文件 ”(这一点可以从题于中的“系统自动生成读者号,并与读者基本信息一起写入读者文件 ”看出 )。所以图上的数据流方向不正确,应该是从 “登记读者信息 ”到 “读者文件 ”。所以问题 1的答案是:从 “2处理查询请求 ”到 “读者文件 ”的数据流和从 “读者文件 ”到 “3登记读者信息 ”的数据流。另:细心一点的考生应该会注意到加工 2的细化图中的与读者文件关联的数据流方向与 0层图不同, 而加工 2的细化图中只是缺少了数据流没有错误的数据流,由此也可以看出这条数据流有问题。 用同样的方法来分析 “加工 2的细化图 ”,可以发现此图中的
32、输入 /输出数据流和 0层图中 “2处理查询请求 ”的输入 /输出数据流完全可以对应 (除与 “读者文件 ”相关联的那条外 )。 所以确定缺少的数据流是加工 2的内部数据流。加工 2的细化图中有两个文件是孤立的,没有数据流与之相联,这显然不合常理,所以我们看看题目中关于读者信息查询和图书信息查询的描述: “系统的信息查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息以及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况 ”。这样一来,就十分明显了,读者信息查询要用到 “借书文件 ”,我们就加上一条从 “借书文件 ”到 “2.1读者信息查询 ”的数据
33、流。同理:有从 “借书文件 ”到 “2.2图书信息查询 ”的数据 流和从 “图书目录文件 ”到 “2.2图书信息查询 ”的数据流。 从系统的描述来看,系统的图书管理功能分为四个方面:购入新书、读者借书、读者还书以及图书注销。又因为购入新书时需要为该书编制入库单,读者借书时需填写借书单,读者还书时需填写还书单,注销图书时需填写注销单并修改图书目录文件中的库存总量,所以 (1)应填: 入库单借书单还书单注销单 。 因为题目中明确提到:入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,所以 (2)应填:分类目录号 +书名 +作者 +价格 +数量 +购书日期。 4 【正确答案】 A:浏览
34、客户信息; B:修改个人信息; C:登录; D:删除客户信息。 5 【正确答案】 (1)1 (2)0* (3)01 (4)01 6 【正确答案】 依赖关系:有两个元素 A、 B,如果元素 A的变化会引起元素 B的变化,则称元素 B依赖于元素 A。 概括关系:描述一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。 关联关系:表示两个类的实例之间存在的某种语义上的联系。 聚集关系:表示一种整体和部分的关系。 聚集关系是关联关系的特例,它是传递和反对称的 。 【试题解析】 图 13-8是一个 UML的用例图。在工程的分析阶段,用例图被用来鉴别和划分系统功能,它们把系统分成动作者 (
35、actor)和用例。 动作者 (actor)表示系统用户能扮演的角色 (role)。这些用户可能是人,可能是其他的计算机、一些硬件或者是其他软件系统。判断它们的唯一标准是它们必须要在被划分进用例的系统部分以外。它们必须能刺激系统部分,并接收返回。 用例描述了当动作者之一被系统特定地刺激时系统的活动。这些活动用文本来描述,即描述了触发用例的刺激的本质,输入和输出到其他活动者,以及转换输入到输 出的活动。用例文本通常也描述每一个活动在特殊的活动线时可能的错误和系统应采取的补救措施。 图中的网络用户、公司客户、管理人员都是动作者。题目说明中提到了系统有 4个功能:浏览客户信息、登录、修改个人信息、删
36、除客户信息。这也就是 4个用例,我们现在只需把它们对号入座即可。根据题目说明,我们可以知道任何使用Internet的网络用户都可以浏览电话公司所有的客户信息,在图中符合这一条件的只有 A了,所以 A应填浏览客户信息。又因为只有公司的管理人员才能删除不再接受公司服务的客户的信息,所以 D应填删除客户信息。 剩下就只有 登录和修改个人信息两个用例了,那么 B究竟是填登录还是修改呢 ?我们先来看包含和扩展的概念。 两个用例之间的关系可以主要概括为两种情况:一种是用于重用的包含关系,用构造型 include表示;另一种是用于分离出不同行为的扩展关系,用构造型 extend表示。 包含关系:如果可以从两
37、个或两个以上的原始用例中提取公共行为,或者发现能够使用一个构件来实现某一个用例的部分功能是很重要的事,则应该使用包含关系来表示它们,如图 13-35所示。 扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据 情况可能发生多种事情,我们将这个用例分为一个主用例和一个或多个辅用例来描述可能更加清晰,如图 13-36所示。 因为要先登录才能修改信息,所以B应填修改个人信息, C应填登录。 在 UML,中,重复度 (Multiplicity)又称多重性,多重性表示为一个整数范围 nm,整数 n定义所连接的最少对象的数目。而m则为最多对象数 (当不知道确切的最大数时,最大数用 *号表示
38、)。最常见的多重性有: 01、 0*、 11、 1*。 因为一个 Customer List的实例可以与 0个或多个Customer的实例相关联 ,而一个 Customer的实例只能与一个 CustomerList的实例相关联,所以 (1)应填 1, (2)应填 0*。因为 Customer是 CompanyCustomer的相应的详细信息,所以 (3)和 (4)都应该填写 01。 用 UML,建立业务模型时,可以把业务人员看做是系统中的角色或者类。在建立抽象模型时,很少有类会单独存在,大多数都将会以某种方式彼此通信,因此还需要描述这些类之间的关系。关系是事物间的连接,在 UML中有以下几个很
39、重要的关系: (1)依赖关系。有两个元素 A、 B,如果元素 A的变化会引起元 素 B的变化,则称元素 B依赖(Dependency)于元素 A。在类中,依赖关系有多种表现形式,如:一个类向另一个类发消息;一个类是另一个类的成员;一个类是另一个类的某个操作参数,等等。 (2)概括关系。概括关系 (Generalization,也翻译为 “泛化关系 ”)描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类中继承的,而父类则是子类的泛化。在 UML中,对泛化关系有以下 3个要求: .子类应与父类完全一致,父类所具有的关联、属性和
40、操作, 子类都应具有。 .子类中除了与父类一致的信息外,还包括额外的信息。 .可以使用父类实例的地方,也可以使用子类实例。 (3)关联关系。关联 (Association)表示两个类的实例之间存在的某种语义上的联系。例如,一个老师为某个学校工作,一个学校有多间教室。我们就认为老师和学校、学校和教室之间存在着关联关系。关联关系为类之间的通信提供了一种方式,它是所有关系中最通用、语义最弱的。关联关系通常可以再细分成以下几种。 .聚集关系(Aggregation):是关联关系的特例。聚集关系是表示一种整体和部分的关系。如一 个电话机包含一个话筒,一个电脑包含显示器、键盘和主机等都是聚集关系的例子。
41、.组合关系:如果聚集关系中表示 “部分 ”的类的存在与表示 “整体 ”的类有着紧密的关系 (例如 “公司 ”与 “部门 ”之间的关系 ),那么就应该使用 “组合 ”关系来表示。 7 【正确答案】 根据排列组合原理,三个事务一共有 6种排列结果: T1T2T3 A 的值为 1 T1T3T2 A 的值为 2 T2T1T3 A 的值为 1 T2T3T1 A 的值为 2 T3T1T 2 A的值为 4 T3T2T1 A 的值为 3 8 【正确答案】 假设 Ri、 Rj、 Rk表示各事务的 R操作, Up、 Uq、 Ur表示各事务的 U操作,那么根据组合数学中的乘法原理有: RiRjRkUpUqUr 32
42、1321=36 RiRjUpRkUqUr 322121=24 RiRjUpUqRkUr 322111=12 RiUpRjRkUqUr 312121 =12 RiUpRjUqUkUr 312111=6 全部加起来得: 36+24+12+12+6=90,因此共有 90种不同的调度方式。 9 【正确答案】 存在。 在 A的初值给定为 0时,调度 R1R2R3U3U2U1 的执行结果与 6个可能的串行调度中的 T1T2T3 或 T2T1T3 的执行结果一致, A的值都为 1,也就是说,对于初值 0而言,该并发调度策略是 “正确 ”的。 【试题解析】 数据库系统对并发事务的调度是随机的,而不同的调度往往
43、会产生不同的结果。如 果一个事务运行过程中没有其它事务同时运行。也就是说没有受到其它事务的干扰,那么就可以认为该事务的运行结果是正常的或预想的。因此,将所有事务串行起来的调度策略一定是正确的调度策略,虽然以不同的顺序串行执行事务可能会产生不同的结果,但由于不会将数据库置于不一致的状态,因此都是正确的。 对于多个事务的某种并发调度策略而言,当且仅当该调度的结果与按某一次序串行执行这些事务的结果一样时,就称该策略是可串行化的,并认为该并发调度策略是正确的。 根据排列组合原理,三个事务一共有 6种排列: T1T2T 3 A的值为 1 T1T3T2 A 的值为 2 T2T1T3 A 的值为 1 T2T
44、3T1 A 的值为 2 T3T1T2 A 的值为 4 T3T2T1 A 的值为 3 问题 2中给出了各个事务的内部结构。假设 Ri、 Rj、 Rk表示各事务的 R操作,Up、 Uq、 Ur表示各事务的 U操作,那么根据组合数学中的乘法原理有: RiRjRkUpUqUr 321321=36 RiR jUpRkUqUr 322121=24 RiRjUpUqRkUr 322111=12 RiUpRjRkUqUr 312121=12 RiUpRjUqRkUr 312111=6 全部加起来得: 36+24+12+12+6=90,因此共有 90种不同的调度方式。这里要注意,对于同一事务而言, R操作必须在
45、 U操作之前,如果反了,那就不是原来事务的结构了,也就不是原来的事务了。例如,对次序 RiR jUpRkUqUr而言, Ri可以是 R1、 R2、 R3三者之一,因此连乘式中 Ri对应数字 3。当 Ri选定之后,假设 Ri选定的是 R1,那么对于 Rj而言只能从剩下的 R2、 R3中二选一,所以,连乘式中, Rj对应数字 2,假设 Rj是 R2,那么只剩余 R3(Rk只能是R3了 )。接下来是 Up, Up只能是 U1、 U2二者之一,因为它若是 U3的话,就使得 U3排在了剩余的 R3之前,破坏了事务 T3的结构。又如,次序RiUpRjRkUqUr 中, Ri可以是 R1、 R2、 R3三者
46、之一,因此连乘式中对应数字 3,当 Ri选定之后, 假设 Ri是 R2,那么接下来的 Up只能是 U2,因为如果是 U1或 U3的话,就会破坏 T1或 T3的结构。其它类似。 根据前面的阐述可知,如果一个并发调度策略的执行结果跟某个串行执行的结果一致的话,则该并发调度策略就是正确的。在 A的初值给定为 0时,调度R1R2R3U3 U2U1 的执行结果与 6个可能的串行调度中的 T1T2T3或 T2T1T3 的执行结果一致, A的值都为 1。也就是说,对于初值 0而言,该并发调度策略是 “正确 ”的。但这仅仅是凑巧而已,对其它初值未必如此。例如,若 A的初值为 10, 6种串行调 度 A的值仍有
47、 1、 2、 4、 3四种结果,而调度R1R2R3U3U2U1 执行之后 A的值为 11,跟任一个串行调度执行的结果都不一样,因此是不可串行化的,是不正确的。 10 【正确答案】 ASP属于服务器端方案。 (1)脚本引擎 (2)ADO对象 11 【正确答案】 写出以下任意 5点即可: 无需编译; 易于生成; 独立于浏览器; ASP脚本在服务器端执行; 扩充性; 兼容性好; 源程序不会泄漏。 12 【正确答案】 写出 CGI、 SAPI、 ASP、 PHP、 JSP中任意 4个即可。 常见 的服务器端实现技术有 CGI(Common Gateway Interface,公共网关接口 )、SAPI
48、 (Server Application Programming Interface,服务端应用编程接口 )、 ASP、PHP、 JSP。等。 CGI是最早出现的动态网页发布技术。目前市场上最流行的是ASP、 PHP、 JSP三种应用开发平台。 【试题解析】 ASP一全称为 Active Server Page,提供了一个在服务器端执行脚本指令的环境 (包括 HTML、 VBScrpt和 JavaScript),通过这种环 境,用户可以创建和运行动态的 Web应用程序。由于所有的程序都在服务器端执行,因而大大减轻了客户端浏览器的负担,提高了交互速度。 ASP的工作原理如图 13-37所示。 当用户申请一个 ASP主页时, Web服务器响应该 HTTP请求。当遇到任何与 ActiveX Scripting兼容的脚本 (如 VBScript和 JavaScript)时, ASP引擎会调用相应的脚本引擎进行