1、第一章 2 SOA:(面向服务体系结构)是一个分布式软件体系结构,它是通过松散耦合的服务构建的系统软件这些服务通过标准接口,例如 WSDL(Web 服务描述语言 )接口,以及标准的消息交换协议,例如 SOAP(简单对象访问协议 )互相通信。这些服务是自治和独立于平台的。它们驻留在不同的计算机上并且为了实现期望的目标和最终结果使用彼此的服务。 SOC: (面向服务计算)是基于 SOA 模型的计算范型。它包括三个并发进程中表示的计算概念、原理以及方法。这三个并发进程是服务开发、服务发布以及使用发开出的服务进行应用组合。 SOD:(面向服务开发)是基于 SOA 概念和 SOC 范型的整个软件开发周期
2、,包括需求、问题定义、概念模型、规格说明、体系结构设计、组合、服务发现、服务实现、测试、评估、部署和维护,这些活动将实现可运行的软件。 SOE:(面向服务企业)是一个通过 SOA 系统实现的一个并能外向展示业务过程的一系列技术。 SOE 为管理采用SOA 技术的业务过程提供了一个框架。 SOI:(面向服务的基础设施) 支持 SOC 的硬件和软件。 一个硬件系统可以像软件系统那样按面向服务的方式组织起来。 SOSE:(面向服务的系统工程)是系统工 程、软件工程和面向服务计算的一个组合,它建议在系统工程原则下开发面向服务的软件和硬件,这些原则包括需求、建模、规格说明、验证、设计、实现、确认、运行以
3、及维护。 3.OOC 范型和 SOC 范型在需求分析上有什么区别。 面向对象的需求分析基于面向对象的思想,以用例模型为基础。开发人员在获取需求的基础上,建立目标系统的用例模型。所谓用例是指系统中的一个功能单元,可以描述为操作者与系统之间的一次交互。用例常被用来收集用户的需求。 ( P5) ( 1) SOC 强调的是分布式服务(包含可能的服务数据)而不是分布式对象。 ( 2) SOC 明确区分开发责任、软件提供服务、服务中介,通过服务消费者构建应用。 ( 3) SOC 支持库(公共和私有)中重用服务的匹配、发现和调用(远程或本地) ( 4) 在 SOC 中,服务通过独立于平台和供应商的开发标准和
4、协议通信。 ( P16 表 1.1) 4.把服务提供者和应用构建者分开的主要优点是什么? SOC 这种范型把开发者分成独立但相互协作的三方:应用构建者、服务中介、服务提供者。服务提供者的职责是开发具有标准接口的软件服务。 服务中介发布或市场化可用服务。 应用构建者通过服务中介发现可用的服务并使 用服务开发新的应用,通过发现和组合而不是传统的设计和编码来开发应用。 换言之,应用开发是三方协作的结果。服务和平台无关并且松散耦合,因此在组合服务时,可以使用不同提供者开发的服务。 因此,把服务提供者和应用构建者分开的主要优点是:这种面向服务的体系机构给应用构建者最大的灵活性去选择最好的服务中介以及服务
5、。 5.SOSE 的主要技术是什么?对于每一项技术,用一两句话描述它的目的。 ( P18 表 1.2) 6.比较传统软件开发过程和面向服务软件开发过程。描述开发过程中的每一步的目的、职责和功能。 在传统的 软件开发过程中,整个过程往往由开发者所在组织管理。面向服务软件的开发分为三个平行的过程:服务开发,服务发布到服务中介,应用构建(组合)。 一个面向对象( OOC)应用由同一个团队使用相同的语言开发,而一个面向服务( SOC)应用是通过已开发好的服务创建,这些开发好的服务由独立的服务供应商开发。应用构建者通过服务目录和服务库,查询所需服务。如果服务无法找到,应用者可以发布需求或自己开发。服务提
6、供者则根据自己的需求分析或查询目录中发布的需求来开发服务。 ( P20 图 1.13) 7什么是服务注册中心?什么 是服务库?它们有什么区别?( 不太准确) 服务注册中心是服务发现的支持者。它包含一个可用服务的存储库,并允许感兴趣的服务使用者查找服务提供者接口。 服务数据库:包含系统中所有服务的信息和一个注册中心服务。 服务注册中心实现的基础是一个服务数据库,注册中心服务封装了这个数据库并提供了一套访问这些信息的“标准”APIs。 8.要开发电子旅行社。如果你分别是下面这些角色,你的职责是什么: ( 1)服务提供商? ( 2)服务中介? ( 3)应用构建者? 服务提供者的职责是开发具有标准接口
7、的电子旅行社相关软件服务。 服务中介发布或市场化可用服务。 应用构建者通过服务中介发现可用的电子旅行社相关服务并使用服务开发新的应用,通过发现和组合而不是传统的设计和编码来开发应用。 9.你计划开发一种在线游戏: ( 1)作为应用构建者你必须做什么?你希望服务提供者为你做什么? ( 2)描述你的想法,并列出作为应用建设者你该做的每一件事。 ( 3)列出你可能通过服务中介找到的服务。 ( 1)应用构建者通过服务中介发现可用的相关服务并使用服务开发新的应用,通过发现和组合。服务提供者开发具有标准接口的软件服务,他们需要使用编程语言如 C+、 C#和 JAVA 以及面向服务的软件开发环境开发软构建以
8、提供不同的服务,这些软构建类似于 OOC 中的类和对象。 ( 2)应用构建者通过互联网查找中介服务注册中心,寻找需要的服务以及如何使用服务所需的说明。服务中介中的本体和分类法可以帮助在请求和注册的服务之间自动匹配。应用构建者使用可获得的服务进行组合以生成所需的应用。这是使用服务模块构建大型应用程序的更高层次的编程。 ( 3)例如:游戏装备商场服务、网银服务、聊天室服务。 10.列出几个你认为 SOC 比 OOC 更适合的应用领域,并说明你的理由。 SOC 更适合的应用领域:电子商务:在电子商务中有许多服务都是动态的,而且可以通过因特网远程调用。例如,旅行社可以远程调用航空公司、酒店、和汽车租赁
9、公司提供服务。银行、医疗保健:这些领域,来自不同部门的服务松耦合,给客户提供协作服务。 11.SOC 范型对 IT 市场和计算机科学专业的学生有什么影响? 增大就业面。 第二章 2. 程序 /方法与进程 /线程有什么不同?( 53 页第四段) 答:一个程序 /方法是由程序员写的一段代码,它是静态的。进程 /线程是由执行的程序 /方法、当前值、状态信息和用于支持它执行的资源构成,资源是它执行时的动态因素。换言之,一个进程 /线程是一个动态实体,只有当程序或函数执行时才会存在。 3. 比较多进程(多任务)操作系统和多线程编程环境。( 53 页 5、 6、 7 段) 答:为了真正并行执行多个进程 /
10、线程,必须存在多个处理器。如果系统中只有一个处理器,表面上多个进程 /线程执行,实际上实在分时模式下顺序执行。 从同一代码块可以创建多个进程 /线程。默认情况下,包含在不同进程 /线程中的代码和数据是分离的,每一个都有它自己执行代码的副本、局部变量的栈、对象数据区以及其他数据元素。 通常情况下,一个分布式操作系统可以由不同电脑上的多个实例或副本构成,每一个实例或副本都可以管理多个进程。同样,每个进程可以是由多个线程组成的一个多线程程序。 4. 什么是临界操作?用什么方法可以来保护临界操作? ( 54 页第 1 段) 答:对共享资源的访问称为临界操作。虽然一个简单的锁定可以防止共享资源被访问,但
11、是也消除了并行处理的可能性。更理想的方法是不锁定并行读操作,而锁定并行读 -写和写 -写组 合。 5. 什么是死锁?哪些策略可以用来解决死锁问题? ( 55 页) 答:死锁的情况是两个或多个竞争操作等待对方完成,导致都不能完成。 解决方法: ( 1) 死锁预防:使用一种算法可以保证不会发生死锁。 ( 2) 死锁避免:使用一种算法,能够遇见死锁的发生从而拒绝资源 请求、 ( 3) 死锁检测和恢复:用一种算法来检测死锁的发生,强迫线程释 放资源、挂起等待。 6. 改进哲学家就餐问题使其不会产生死锁? 答:每一次最多只能有 4 个哲学家(共有 5 个哲学家)申请就餐,这样其中的一个哲学家就能申请到两
12、只筷子,就能够进餐,再将筷子释放给其他哲学家就餐,直到所有哲学家就餐完毕。 7. Java 中睡眠使用: sleep()方法;等待使用 wait()方法;挂起使用 join()方法。 sleep() 调用 sleep()方法使线程暂时停止一段执行时间,该时间由给定的毫 秒数决定 ,线程在指定时间内不会运行,会自动唤醒,不会让出控制权。 join() 方法使线程挂起,使当前执行的线程停下来等待,直至 join()方法所调用的那个线程结束,再恢复执行 。例如:当有 a 和 b 两个线程,启用 b.join();方法时, a 线程就会被挂起, 直到 b 线程结束,a 线程才继续执行。 wait()
13、使线程等待,直到线程得到了 notify()和 notifyAll()消息,线程才会进入 “可执行 ”状态。 wait()、 notify()、 notifyAll()不同于其他线程方法,这 3 个方法是 java.lang.Object 类的一部分,所以在定义自己类时会继承下来。 8. 创建子进程: int fork(); 启动子进程: exec(参数列表); 9. 在 java 中,几个线程方法 wait(), notify(), notifyALL()用于协调对共享资源的访问。 C#的 Monitor 类具有执行相同功能的方法,它们是 Monitor.Wait(),Monitor.Pul
14、se(),Monitor.PulseALL()。 完全等价的有: start(); run()。 独有的是: sleep()方法。 10. 比较 C#和 Java 中创建和启动线程的进程? C#和 java 启动线程是一样的,都使用: Thread.Start()方法。 C#中创建线程: Thread t = new Thread( new ThreadStart ( FunctionName); java 中创建线程: 方法一:继承 Thread 类创建线程 ( 1)继承 Thread 类; ( 2)覆盖 run()方法; ( 3)用 new MyThread( .)创建一个线程 ( 4)通
15、过调用 start()方法启动线程 方法二:实现 Runnable 接口创建线程 ( 1)实现 Runnable 接口; ( 2)覆盖 run()方法; ( 3)用 new MyThread( .)创建一个线程 ( 5)通过调用 start()方法启动线程 11. 解释 monitor 是怎么实现的?为什么 monitor.enter/monitor.exit 不能通过自动装箱拆箱的方式获得值类型变量?( P79) 答: ( 1) 在进入一个 buffer 对象引用之前,运行时环境检查锁的开关状态。 如果锁是开的( true),线程告诉 Monitor.Enter 阻塞。堆内存中的对象锁被存储
16、在叫做同步阻塞的表中;如果锁是关的( false),线程告诉 Monitor.Enter 解锁。在访问缓冲区引用的对象时阻止其 它线程进入。 ( 2) 如果 monitor.enter/monitor.exit 通过自动装箱拆箱的方式获得值类型变 量,可能会出现语义错误。 12. 为什么 C#中的 reader/writer 锁比 Monitor 锁更有效率? ( P84) 答: ReaderWriterLock 类允许读 -读重叠,而 Monitor 类阻止任何重叠; ReaderWriterLock 类的锁定方法有一个超时的参数,指定放弃前等待多长时间。而如果对象被锁定, Monitor.
17、Enter永远等待, Monitor.TryEnter 立刻放弃。 13. 当线程正在执行被锁操作保护的代码时,是否可以中断?(从执行状态转换到就绪状态)?为什么? 答:不能。因为 被加锁的代码段就是一段互斥段,互斥段在一个时刻内只允许一个线程进入执行,其它线程必须等待。 14. 如何通过同步 /监视机制保护共享对象? ( 1) lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。 lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放 ( 2)与 lock 关键字类
18、似,监视器防止多个线程同时执行代码块。 Enter 方法允许一个且仅一个线程继续执行后面的语句;其他所 有线程都将被阻止,直到执行语句的线程调用 Exit。这与使用 lock 关键字一样。事实上, lock 关键字就是用 Monitor 类来实现的 15. 什么是事件?事件与锁之间的主要区别是什么? AutoResetEvent 与 ManualResetEvent 之间的区别是什么?( P86 和 P87) 答:在 C#中,事件是某一受关注的事件发生后的通知,每一个事件包含了关于这一特定事件的信息。 16. 异常处理与事件驱动编程的主要区别是什么? 答:异常处理用于处理计算过程中发生的异常情
19、况,是用来处理非正常情况 的;而基于事件驱动的编程时用于处理特殊的令人关注的事件,比如单击鼠标。 17. 基于控制流的编程与事件编程的主要区别是什么?( P95) 答:控制流驱动方法有唯一的程序入口,输入数据来自不同时间不同地点,只有当控制流返回这一地点时输入数据才被处理;在基于事件驱动的方法中,提供了事件板和报警板机制,事件板记录少量的紧迫请求,报警板负责更加迫切的请求。 在事件驱动中,方法作为事件处理,而不是控制流的一部分。 18. 代理与类有什么不同?( P96) 答:代理是类型安全的,不执行隐式类型转换。 ( 1) 代理允许方法名作为参数 ( 2) 通过把事件处理的名字 19. 代理与
20、方法有什么不同? 答:代理声明定义了一个引用类型,它可以封装一个带有特定签名的方法。代理类似于 C+中的函数指针。 方法是一个可以被其它程序调用或者重用的代码块,方法通过名字、参数列表和返回类型来定义,编程时,方法作为程序的一个构件和控制流的一部分。 第三章 2、列出并讨论现有 SOC 软件开发环境各自的特点。 第一部分 P115( 表示各开发环境可适用于) 3、什么是代理?代理和它代表的服务之间有什么不同?如何创建一个代理? 一个代理包含一组端点引用,端点引用往往被定义为虚拟的对象。在面向对象计算中,对象具有抽象的方法。代理创建一个从服务客户到远程服务的管道,因此就像访问本地对象一样访问远程
21、服务。客户端通过调用代理的抽象方法访问服务的操作。给应用添加远程 web 服务(创建代理),鼠标右键单击应用文件夹或者项目中的 “引用 ”文件夹,然后选择 “添加服务引用 ”或者选择 “添加 web 引用 ”。 P145 4、描述 SOC 软件开发中的 SOAP的作用。 第一部分 P137(底下一整段) 5、 SOAP是否支持双向通信?如果不,响应消息如何与发送者建立相关性? SOAP 是一个无状态的单向的信息交换协议不支持双向通信。 SOAP 依赖于 HTTP 把返回消息和请求消息连接起来, HTTP 隐含地给出了请求消息和响应消息的相关性。 (此处为百度扩充内容:把 SOAP 绑定到 HT
22、TP,在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定。 SOAP 也 可以绑定到 TCP 和 UDP 协议上。) 6、在 SOAP 协议中,哪些信息包含在头部?哪些信息包含在正 文? 标头部分包含零个或多个 SOAP 头块,每个标头都确定了 SOAP 消息路径上的接收者。正文包含零个获多个元素信息项,确定了 SOAP 消息路径上最终的 SOAP 接收者。 7、描述 SOC 软件开发中的 WSDL 的作用。 WSDL(Web Service Descript
23、ion Language )是一种用通用的 SML 语法描述 WEB服务的语言。 WSDL 描述了 WEB服务的四个关键方面: ( 1) 服务的功能 ( 2) 参数值的数据类型以及函数(服务)调用的返回类型 ( 3) 所使用的传输协议的绑定信息,一般都用 SOAP协议 ( 4) 定位指定服务的地址信息 换句话说, WSDL 表示了服务请求者和服务提供者之间的契约。这类似于面向对象语言中类中方法(成员函数)的接口,在面向对象语言中用户可以使用类中定义的函数的接口。关键的区别是, WSDL 是平台和语言无关的,主要用于 SOAP 调用(虽然不是独有的)。 通过 WSDL。客户可以找到 web 服务
24、并调用其公开的任何功能,使用 WSDL 相关工具可以自动化这一过程,使新服务很容易集成到应用 中,而很少或根本不用编码。因此, WSDL 在 web 服务体系结构中很重要,因为它不但是用于描述服务的通用语言,而且是一个把服务自动集成到应用的平台。 潜在的,这一特征允许应用进行自动的重新配置和重新组合。重新配置就是用具有相同功能,但性能和可靠性更稳定的 WEB 服务替换应用中的服务。重新组合是指改变应用的结构和功能。 8、 WSDL 描述了 WEB 服务的哪些关键方面? WSDL 没有描述哪些方面?这些元素如何组织? WSDL 描述了 WEB 服务的四个关键方面: ( 5) 服务的功能 6) 参
25、数值的数据类型以及函数(服务)调用 的返回类型 ( 7) 所使用的传输协议的绑定信息,一般都用 SOAP 协议 ( 8) 定位指定服务的地址信息 后面两个问题我没有找到,也没有百度到,但书中 141 页有关于 WSDL 文档中的元素的介绍和结构。 9、什么是服务端点?端点必须包括哪些信息? 一个端点是一个暴露在外的服务接口(方法名和参数),因此客户可以访问服务中的操作(方法)。一个端点包含地址(入口点)、操作名称、返回值类型和参数以及其类型等。 10、在开发过程中托管 Web 服务,可获得哪种托管服务? 有三种不同的方式托管服务,并允许远程方位 windows 环境下创建的服务: .Net 开
26、发服务器、 Windows 下的 IIS和 web 服务器。 ( 1) .Net 开发服务器 .Net 包括一个开发服务器,它允许在同一台计算机上测试并访问 Web 服务,而无需连接互联网或安装 IIS。 ( 2) Windows 下的 IIS IIS 可以将计算机上的任何一个文件夹(目录)作为服务器。 ( 3) WEB 服务器或 windows服务器 如果正在服务器(例如 Windows Server 2008)上开发 Web 或 Windows 服务,当测试服务时,将会在窗口中创建完整的 Web 地址。 11、什么是 IIS?在基于 web 服务的应用中, IIS 的作用是什么? IIS
27、即 INTERNET 信息服务,是 windowsXP 的一个可选组件。 在大多数 WEB 服务器上, IIS 是一个服务运行环境,它可以安装在 windows 操作系统中,使得部分文件系统成为服务器。 IIS 一直在运行,监听请求并处理请求排队。当远程客户激活服务器上的共享服务时, IIS 把远程客户端的请求重定向到它托管的正确服务上。 IIS 管理服务之间的共享资源。 IIS 使用安全套接字( SSL)验证远程调用者并保障服务器上数据的安全。 12、什么是虚 拟目录?为什么我们需要虚拟目录?创建虚拟目录的过程是什么? 答: 虚拟目录的定义每个 Inernet 服务可以从多个目录中发布。通过
28、以通用命名约定( UNC)名、用户名及用于访问权限的密码制定目录,可将每个目录定位在本地驱动器或网络上。虚拟服务器可拥有一个宿主目录和任意数量的其他发布目录。其他发布目录称为虚拟目录。 为什么我们需要虚拟目录? 所谓主目录,就是你 IIS 里设置的网站目录。而虚拟目录则可以是任何目录,可以在主目录下面,也可以不在主目录下面,不过虚拟目录一般都是指的非主目录的文件夹。设置虚拟目录的目的 就是把非主目录下的文件夹虚拟成主目录下的文件夹。比如你的主目录指定为 D 盘下的 wwwroot 文件夹,有时候为了一些特殊目的,我们需要通过网站访问 D 盘下面的 security 目录下的内容,这时直接是无法
29、访问的。因为它不属于主目录。这时候就可以用到虚拟目录了,我们可以建立一个虚拟目录,虚拟目录名可以随便设置。设置以后我们就要吧通过 http:/域名 /虚拟目录名 来访问这个虚拟目录了。 创建虚拟目录的过程是什么? Web 服务器中虚拟目录需要在主目录的基础上进行创建: 第 1 步,在开始菜单中依次单击 “管理工具 ”“Internet 信息服务( IIS)管理器 ”菜单项, 打开“ Internet 信息服务( IIS)管理器 ”窗口。在左窗格中依次展开服务器 “网站 ”目录,右键单击 Web 站点名称,在弹出的快捷菜单中依次选择 “新建 ”“虚拟目录 ”命令。 第 2 步,在打开的 “虚拟目
30、录创建向导 ”中单击 “下一步 ”按钮,打开 “虚拟目录别名 ”对话框。然后在 “别名 ”编辑框中输入一个能够反映该虚拟目录用途的名称(如 MsserverBook),并单击 “下一步 ”按钮。 第 3 步,打开 “网站内容目录 ”对话框,在此处需要指定虚拟目录所在的路径。单击 “浏览 ”按钮,在本地磁盘或网上邻居中选择目标目录,虚拟目录与网站的主目录可以不在一个分区或物理磁盘中。依次单击 “确定 ”“下一步 ”按钮。 第 4 步,在打开的 “虚拟目录访问权限 ”对话框中,可以设置该虚拟目录准备赋予用户的访问权限。用户可以根据实际需要设置合适的权限,并单击 “下一步 ”按钮。 第 5 步,打开
31、完成创建虚拟目录对话框,单击 “完成 ”按钮关闭虚拟目录创建向导。 1 13、理想的服务中介应该提供哪些特征?目前的服务中介( UDDI、 ebXML、临时登记表)提供了哪些功能? 答:理想的服务中介应该具备的特征: 服务注册:这是服务中介的基本功能,它允许服务提供者注册他们服务的类型、描述、 联系信息、访问点(如 URL),并允许服务请求者基于它们拥有的部分信息发现他们想要的服务; 服务存储:托管服务的执行。为了支持大批量访问,托管服务器必须具有超级计算能力 和高速的互联网连接; 服务规范和需求:如果某个服务请求者不能发现服务,可以发布规范或者需求,从而使 服务提供者可以开发以满足规范或者需
32、求的服务。服务需求使用自然语言书 写,而服务规范用规格语言或者接口定义语言如 WSDL 编写; 应用模板:不仅是服务,由多个服务和图形用户界面( GUI)组成的应用也可以使用 SOC 规范。应用模板指定了应用的工作流、参与服务的描述、服务接受的标准以及应用集成标准。应用构建者采用应用模板开发应用; GUI 模板: GUI 是一个软件产品成功的关键。 GUI 模板的发布可以帮助应用构建者通 过使用现有的 GUI 设计创建用户友好的高效率的 GUI; 合作协议和模板:合作协议和模板定义了应该用什么语言定义合作以及服务之间如何通 信。合作协议和模板的发布 规范了服务提供者如何定义应用、 GUI 模板
33、和服务接口。因为合作协议和模板提供了可重用的工作模式,这种模式可在应用和服务开发中采用,因而缩短了开发周期; 策略:基于策略的计算建议把数据和计算分离。用来反映策略变化的数据项存储在配置 文件或者策略数据库中。策略的修改可以在运行时完成,无需中断程序的执行。为了重用,可以发布策略。另一方面,为了满足对服务中介的动态需求,服务中介应该用基于策略的计算实现; 数据库和本体论:服务中介是一个为它的客户提供各种不同服务的服务。为了存储和管 理大量数据和服务,数据库的支 持是必不可少的。自动发现服务和应用模板是服务中介的需求。具有语义属性和推理能力的本体可以扩展传统数据库的能力,更好的支持自动化的服务发现;