部门培训阶段考试题目,你会几道?
2009-04-04 18:53 ilclr 阅读(388) 评论(4) 编辑 收藏 举报来新公司上班已经快100天了,整个团队的情况比较初级,代码编写方式完全采取堆砌式,过程控制基本没有。所以基于此现状,也为了尽快能以科学的方式对团队进行过程控制,辅助一些控制办法,遂决定对部门进行一个周期性的培训,首选的是Design Pattern技术。通过整个03月份每周五下午的四次培训
(具体内容如下:
第一周:面向过程开发
基于对象开发
面向对象开发
模式化的面相对象开发 四种开发方式的概念、利弊以及比较
简单工厂模式简介
第二周:简单工厂模式类组成
类间、类与接口间常见关系:关联、聚合、合成、依赖、泛化、继承、实现
第三周:策略模式介绍
第四周:Design Pattern技术实现的两个通用步骤:增加代理与响应分层
模式技术交流)
并辅助日常开发过程中细节功能实现的模式化交流,在03月底最后两天进行了一次开卷考试。题目内容如下,有兴趣的朋友可以测试一下自己对Design Pattern技术了解的透彻程度----Design Pattern是一种习惯性思维方式,不要被GOF的23个模式类目拘束,否则不会用好。:)
软件研发部内部培训测试题
----------------------------------------------------------------------------------------------------------------------
姓 名 :__________________________
交卷时间 :_____年___月___日____ : ____
交卷时间 :_____年___月___日____ : ____
注:请于
----------------------------------------------------------------------------------------------------------------------
题目说明:
1、 前8题1空1分,合计21分
2、 第9题12分,漏选1项扣3分,错选1项0分
3、 第10题15分,漏选1项扣6分,错选1项0分
4、 第11题20分,1空10分
5、 第12题32分,漏查1项扣9分,错查1项0分
6、附加题部分可选答,答题结果不计入测试结果
----------------------------------------------------------------------------------------------------------------------
1、系统中普遍存在的是__________和__________,如果__________直接发送消息到__________,则__________很高。为了降低耦合,需要在__________和__________之间增加__________。
2、设计模式的三种分类分别是__________模式、__________模式和__________模式。
3、策略模式属于__________模式,此模式对应对象生命周期的__________阶段。
4、面向对象语言中可以通过__________类的引用指向__________类的对象。
A、父 B、内部 C、子 D、抽象
5、设计模式中的代理层操作的对象为__________对象
A、私有 B、全局 C、抽象 D、静态
6、简单工厂模式的类组成包括(不考虑请求层):__________类、__________类和__________类。
7、策略模式中,我们在策略类中使用__________类的对象,并在请求层中通过传递具体算法类的对象来达到多态的目的。
8、工厂方法中的参数在设计模式中有特定的名称,此名称为__________。
9、下面的话中,哪些话填到后面的括号中是正确的----设计模式____________________。
A、减少了对既有代码的直接改动
B、降低了服务对请求响应的耦合度
C、保护了原有代码
D、通过请求包装了响应
E、实现了晚绑定
F、代理了响应并实现了多态
G、响应分层来实现了对扩展的开放
10、下面的叙述不正确的是:设计模式中,____________________。
A、代理可以彻底解耦,让耦合消失
B、响应必须分层
C、响应分层后可以实现功能的分离
D、代理封装的是请求
E、代理中通过包装子类指针实现对变化点的封装
11、代码填空:请填写下面代码中的两个空白处。
using System;
using System.Collections.Generic;
using System.Text;
namespace SimpleFactory
{
class Program
{
static void
{
Request();
}
private static void Request()
{
SimpleFactory simpleFactory = new SimpleFactory();
Console.Write("请输入要生产的产品订单号:");
try
{
int orderForm = int.Parse(Console.ReadLine());
_______________ abstractProduction = simpleFactory.Product(orderForm);
if (abstractProduction != null)
{
abstractProduction.ShowInformation();
}
else
{
Console.WriteLine("非常抱歉,我们的工厂当前无法生产您要求的产品.....");
}
}
catch
{
Console.WriteLine("订单格式错误。正确的订单格式应为阿拉伯数字");
}
Console.WriteLine();
Request();
}
}
abstract class AbstractProduction
{
public abstract void ShowInformation();
}
class ConcreteProductionA : AbstractProduction
{
public override void ShowInformation()
{
Console.WriteLine("您要求的产品A已生产,请付款取货");
}
}
class ConcreteProductionB : AbstractProduction
{
public override void ShowInformation()
{
Console.WriteLine("您要求的产品B已生产,请付款取货");
}
}
class ConcreteProductionC : AbstractProduction
{
public override void ShowInformation()
{
Console.WriteLine("您要求的产品C已生产,请付款取货");
}
}
class SimpleFactory
{
public _______________ Product(int orderForm)
{
switch (orderForm)
{
case 1:
{
return new ConcreteProductionA();
break;
}
case 2:
{
return new ConcreteProductionB();
break;
}
case 3:
{
return new ConcreteProductionC();
break;
}
default:
{
return null;
break;
}
}
}
}
}
12、代码查错:请在你认为存在错误的代码行前标准“√”和错误序号,并按照自定义错误序号填写错误原因表格。
注:下面的代码中错误数量不超过5处。
using System;
using System.Collections.Generic;
using System.Text;
namespace StrategyPattern
{
class Program
{
static void
{
CallArithmetic(ReceiveExecuteArithmeticInfo());
}
private static int ReceiveExecuteArithmeticInfo()
{
Console.WriteLine("-------------------------请输入您希望执行的算法编号-------------------------");
Console.WriteLine();
Console.WriteLine("说明:算法A编号为1,算法B编号为2,算法C编号为3");
Console.WriteLine();
Console.Write("当前要执行算法编号为:");
try
{
return int.Parse(Console.ReadLine().Trim());
}
catch (Exception e)
{
return -1;
}
}
private static void CallArithmetic(int arithmeticCode)
{
Strategy strategy = new Strategy();
switch (arithmeticCode)
{
case -1:
{
Console.WriteLine();
Console.WriteLine("算法编号内容格式错误,请重新输入正确的算法编号");
Console.WriteLine();
break;
}
case 1:
{
strategy.DoSomeArithmetic;
break;
}
case 2:
{
strategy.DoSomeArithmetic;
break;
}
case 3:
{
strategy.DoSomeArithmetic;
break;
}
default:
{
Console.WriteLine();
Console.WriteLine("算法编号内容不存在,请重新输入正确的算法编号");
Console.WriteLine();
break;
}
}
//重复执行
CallArithmetic(ReceiveExecuteArithmeticInfo());
}
}
class Strategy
{
private AbstractArithmetic abstractArithmetic;
public void DoSomeArithmetic
{
abstractArithmetic.SomeArithmetic();
}
}
abstract class AbstractArithmetic
{
abstract public void SomeArithmetic()
{
//do nothing
}
}
class ConcreteArithmeticA : AbstractArithmetic
{
override public void SomeArithmetic()
{
Console.WriteLine();
Console.Write("具体算法A正在执行 ");
Console.WriteLine();
}
}
class ConcreteArithmeticB : AbstractArithmetic
{
override public void SomeArithmetic()
{
Console.WriteLine();
Console.Write("具体算法B正在执行 ");
Console.WriteLine();
}
}
class ConcreteArithmeticC : AbstractArithmetic
{
override public void SomeArithmetic()
{
Console.WriteLine();
Console.Write("具体算法C正在执行 ");
Console.WriteLine();
}
}
}
错误原因:
错误序号 |
错误原因 |
|
|
|
|
|
|
|
|
|
|
------------------------------------------------附 加 题 部 分------------------------------------------------
13、依赖关系与聚合关系最主要的区别是关系中涉及的两个类的____________________不同。
14、类与类之间的关系包括:____________________、____________________、____________________、____________________和____________________,类和接口之间的关系包括____________________。
15、下面的叙述中正确的是:________________________________________
A、继承本身可能会违反里氏替换原则(LSP)
B、 使用继承扩展功能的同时可能会造成不必要的功能扩展
C、 使用继承扩展功能的方式违背开闭原则(OCP)
D、继承本身会破坏封装特性
E、 接口不支持复用
F、 父类指针指向子类指针,也即向上引用的机制即是多态的本质
16、GOF的23个设计模式实现过程中的两大步骤分别是:
第一步:____________________________________________________________;
第二步:____________________________________________________________。
其中,第一步的主要目的是________________________________________,第二步的主要目的是________________________________________。
17、从严格意义上讲,简单工厂模式违背了面向对象(OO)设计原则中的____________________原则。
18、设计模式中,响应的分层策略有很多种,其中最常见的就是继承方式分层,但此方式的缺点也是显而易见的,请说出你想到的任何缺点。
答:
19、(场景题)假设现在需要制作一个功能,功能内容为:从本地硬盘文件目录中读取一个视频文件的内容到内存,并将此文件内容通过TCP协议方式传输到远端指定IP地址。无论任何形式的内存数据流通过TCP协议进行传输的时候,传输机制都是完全相同的,并假设此场景中不考虑远端序列化。请写出当你碰到此需求的时候,所进行的类设计----仅写出要实现上述功能你需要定义哪些类,以及这些类中包含的关键方法。
答:
20、简单阐述为什么在继承的时候会出现里氏替换原则(LSP)描述的情景。
答:
----------------------------------------------------------------------------------------------------------------------
对于完全掌握模式思想精髓的朋友,可以游刃于代码实现中的朋友可以不屑以待之。