C#xx
一.
1.在C#中,string str = null与string str = "" 请尽量使用文字或图象说明其中的区别.
2.请详述在dotnet中类(class)与结构(struct)的异同:
3.页面之间传递参数一般有多少种方法?(至少4种)
4.列出Asp.Net常用的控件?
5.类之间的关系有哪些?类和对象间的关系又是什么?
6.WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回.
7.WEB控件及HTML服务端控件能否调用客户端方法?如果能请解释如何调用?
8.请解释ASP.NET中的web页面与其隐藏类之间的关系?
9.什么是viewstate,能否禁用?是否所有控件都可以禁用?
10.请解释转发与跳转的区别?
二.程序阅读题
1-5 略
SQLServerxx
一. 略
二. 略
三.
建立3个表:
S(S#,SN,SD,SA)S#,SN,SD,SA 分别代表学号,学员姓名,所属单位,学员年龄
C(C#,CN)C#,CN分别代表课程编号,课程名称
SC(S#,C#,G)S#,C#,G分别代表学号,课程编号,学习成绩
1.使用标准SQL嵌套语句查询选修课程名称为'税收基础'的学员学号和姓名
2.使用标准SQL嵌套语句查询选修课程编号为'C2'的学员姓名和所属单位
3.使用标准SQL嵌套语句查询不选修课程编号为'C5'的学员姓名和所属单位
4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
5.查询选修了课程的
笔试:
大概分四个部分
{dy}部分:基本信息的填写。
第二部分:程序题。
1.有两张表(库存表和销售表),要求查出每天的放库存量(量关键一题)
2.两个VB的题目(具体内容记不清楚了)
3.在ASP中设计报表。
4.给一个需求,要求写出设计思路。
其它还有几个数据库的题,记不清了。
第三个部分:是不记分的,主要是些与编程无关的问题(比如说中国的xx钢铁企业,现在{zlx}的软件等)
第四个部分:是财务方面的题,上次基本上没写(名词解释)。
乾坤主要是用VB做MS系统的,用VB和SQL2000开发。
数据库.
1. 你对哪种数据库最熟悉?使用该数据库多少年?简单描述对该数据库的理解.
2. 对其它较熟悉的商业数据库的了解及使用年限.
3. 如何将数据库(实例)备份和还原?(针对自己最熟悉的)
4. 如何知道一个表或视图的结构?
5. 描述INNER JOIN的功能和已在何种情况下使用INNER JOIN.
6. 如何让你的一个系统能支持异构数据库.你会怎么样设计?
1什么情况下用到虚方法,他接口的区别?
2ArrayList,Arra和string[]三着的区别?
3ADO.net常用的对象有哪些?DataSet和DataReader的区别
4Web控件和HTML控件能调用客户段吗?若能,都用到什么技术。说Web控件的优点。
5 ASP.net的身份验证有那些?都用了什么原理?
6 在.net中页面传递参数除了用到Session,Application和cookie还有几种方式?
7 有张表student有字段id,name,sex,birth
(1)找出Name相同的学生(用一句SQL语句)
(2)用一句SQL语句把学生Sex为男的改为女,女的改为男
第8题忘了
1.在什么情况下使用虚方法?虚方法和接口的差别?
2.ArraryList,Arrayr string[]的差别是什么?
3.Html ,Web的服务器端的控件能不能在客户端调用,如果能,怎样调用?
4. 身份验证有那几种方法?原理是什么?
5.DataReader和DataSet有什么区别?
还有一些关于JavaScript方面的一些题目,我不是很清楚的我记不得
就这些了还有些就忘了
1.父类有虚函数,子类是否能实现多态?
2.随机输入一个字符串,并使它倒置输出,用C++
3 下列写法那种正确,为什么?
if(n == 10)
if(10 == n)
4,写出下列结果
char[] a = "word" cout<<sizeof(a)<<endl;
char a = 10 cout<<sizeof(a)<<endl;
char *pp = malloc(10) cout<<sizeof(p)<<endl;
5考结构体,共同体的内存长度
6线程有几种通信方式
7,考虚函数感念
8,有表里面有部门编号,部门名,工资,算出除某个部门外所有的平均工资,并按部门字母排序
9,多表查询。
10。指出下列有什么不同
coust char *p
char coust *p
char *coust p
1、什么是面向对象
2、怎样实现多态
3、out保留字怎么使用,什么时候使用
4、什么时候使用抽象类,什么时候用接口
5、访问修饰符各种访问范围
6、new的两种用法
7、c#的五种类型
8、数据类型装换的运算符是什么
9、虚函数的用法
10、委托与事件的用法
面试的时候全是口述的,所以记的不全
1.application与session的区别
2。用javascript写一个脚本,以确认用户输入
3。viewstate的用法以及button的causevalide的作用
4。数据库设计
5。说出一到两个你写过的自定义控件以及他的作用,并说明他使用的基类和方法
6。XML的XSLT的用法
7。数据流有什么要素
1.抽象类和接口有什么异同?10分
2.结构和类有什么异同?10 分
3.有根粗细不一的绳子有A,B两端,从A端烧到B端的时间是一个小时,从B端烧到A端也是一个小时 .但从中间烧到A端或是B端不是半个小时.
给你两跟绳子和一个打火机 怎么样得到45分钟?15分
4.有一个数据库中的两个表(具体的记不太清楚)
1).再建两个表 10分
2).通过建的两个表查询 10分
3).两表查询 10分
4).两表复杂查询 15分
还有两个10分的题目我真的记不起来了
1.C/S和B/S的区别,优缺点有哪些?
2.ADO.NET的常用对象
3.MVC指的是什么?
4.三层架构?
5.为什么要用ISPORTBACK?
6.用户自定义控件?
7.WEBSERVERS调用主要有哪两种方法?
8.怎样在ASP.NET中改变DATAGRID的自动换行?
9.怎样布置一个ASP.NET的界面?
10.谈谈你对ASP和ASP.NET的区别?
1 你知道哪几种WEB服务器? 你最熟悉哪种?
2 微软的WEB应用服务器是什么?配置步骤(具体步骤)
3 如何优化WEB服务器?
4 你熟悉哪些数据库? 你最熟悉哪个?
5 怎么还原一个数据库? 简单操作步骤?
6 查询一张表,姓名为张三,根据姓名张三 查询他的信息
7 什么是网络协议?Windows有什么网络协议?
8 在局域网中,某台电脑有问题不能上网,上网慢 这是什么原因,如何解决?
9 你认为作为一个人力资源软件的技术支持人员 应该具备哪些素质跟能力?
10 自我评价跟职业规划?
客户服务工程师
电子邮箱: gzjdware@pub.guangzhou.gd.cn
发布日期: 2006-11-21 工作地点: 广州市
招聘人数: 2 工作年限: 二年以上
外语要求: 英语 薪水范围: 面议
学 历: 大专 接受简历语言: 中文或英文
职位描述:两年以上管理软件(eHR、OA、进销存或ERP)相关经验; 熟悉计算机软硬件和网络知识,熟悉SQL SERVER数据库,掌握一般编程知识; 耐心细致、思维清晰、任劳任怨,具备良好的沟通能力和应变能力,有培训经验者优先。
联系地址:广州天河工业园软件园区建中路66号佳都商务科技大厦5楼
电话:020-85542558 找张先生 就ok了!
2008年新百度网上笔xx及答案
用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
2 编程:
用C语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove
函数的功能是拷贝src所指的内存内容前n个字节
到dest所指的地址上。
3 英文拼写纠错:
在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包
含了正确英文单词的词典,请你设计一个拼写纠错
的程序。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度;
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。
4 寻找热门查询:
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串
的长度为1-255字节。假设目前有一千万个记录,
这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个
。一个查询串的重复度越高,说明查询它的用户越多,
也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度。
5 集合合并:
给定一个字符串的集合,格式如:
{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}
要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应
输出
{aaa bbb ccc ddd hhh},{eee fff}, {ggg}
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。
////////////////////////////////1
1 题
char *revert(char * str)
{
int n=strlen(str);
int i=0;
char c;
for(i=0;i {
c=str;
str=str[n-i];
str[n-i]=c;
}
return str;
}
///////////////////////////////////
2 题
void * memmove(void *dest,const void *src,size_t n)
{
assert((dest!=0)&&(src!=0));
char * temp=(char * )dest;
char * ss=(char * )src;
int i=0;
for(;i {
*temp++=*ss++;
}
return temp;
}
/////////////////////////////////////////////////
3 题
(1)思路 :
字典以字母键树组织,在用户输入同时匹配
(2)
流程:
每输入一个字母:
沿字典树向下一层,
a)若可以顺利下行,则继续至结束,给出结果;
b)若该处不能匹配,纠错处理,给出拼写建议,继续至a);
算法:
1.在字典中查找单词
字典采用27叉树组织,每个节点对应一个字母,查找就是一个字母
一个字母匹配.算法时间就是单词的长度k.
2.纠错算法
情况:当输入的{zh1}一个字母不能匹配时就提示出错,简化出错处理,动态提示
可能 处理方法:
(a)当前字母前缺少了一个字母:搜索树上两层到当前的匹配作为建议;
(b)当前字母拼写错误:当前字母的键盘相邻作为提示;(只是简单的描述,可
以有更多的)
根据分析字典特征和用户单词已输入部分选择(a),(b)处理
复杂性分析:影响算法的效率主要是字典的实现与纠错处理
(a)字典的实现已有成熟的算法,改进不大,也不会成为瓶颈;
(b)纠错策略要简单有效 ,如前述情况,是线性复杂度;
(3)改进
策略选择最是重要,可以采用统计学习的方法改进。
//////////////////////////////////////////////
4 题
(1)思路:
用哈希做
(2)
首先逐次读入查询串,算哈希值,保存在内存数组中,同时统计频度
(注意值与日志项对应关系)
选出前十的频度,取出对应的日志串,简单不过了。
哈希的设计是关键。
//////////////////////////////////////////////////
5 题
(1)思路:先将集合按照大小排列后,优先考虑小的集合是否与大的集合有交集。有
就合并,如果小集合与所有其他集合都没有交集,则独立。独立的集合在下一轮的比较中不用考虑。这样就可以尽量减少字符串的比较次数。当所有集合都独立的时候,
就终止。
(2)处理流程:
1.将集合按照大小排序,组成集合合并待处理列表
2.选择最小的集合,找出与之有交集的集合,
如果有,合并之;
如果无,则与其它集合是独立集合,从待处理列表 中删除。
3.重复直到待处理列表为空
算法:
1。将集合按照大小从小到大排序,组成待处理的集合列表。
2。取出待处理集合列表中最小的集合,对于集合的每个元素,依次在其他集合中搜索是否有此元素存在:
1>若存在,则将此小集合与大集合合并,并根据大小插入对应的位置 。转3
。
2>若不存在,则在该集合中取下一个元素。如果无下一个元素,即所有元素
都不存在于其他集合。则表明此集合独立,从待处理集合列表中删除。并加入结果集
合列表。3。如果待处理集合列表不为空,转2。
如果待处理集合列表为空,成功退出,则结果集合列表就是最终的输出。
算法复杂度分析:
假设集合的个数为n,{zd0}的集合元素为m
排序的时间复杂度可以达到n*log(n)
然后对于元素在其他集合中查找,最坏情况下为(n-1)*m
查找一个集合是否与其他集合有交集的最坏情况是m*m*(n-1)
合并的时间复杂度不会超过查找集合有交集的最坏情况。
所以最终最坏时间复杂度为O(m*m*n*n)
需要说明的是:此算法的平均时间复杂度会很低,因为无论是查找还是合并,都是处
于最坏情况的概率很小,而且排序后优先用最小集合作为判断是否独立的对象,优先
与{zd0}的集合进行比较,这些都{zd0}的回避了最坏情况。
(3)可能的改进:
首先可以实现将每个集合里面的字符串按照字典序进行排列,这样就可以将查找以及
合并的效率增高。
另外,可能采取恰当的数据结构也可以将查找以及合并等操作的效率得到提高。
武汉世纪畅想数字传播有限公司 .NET笔xx 2006.12.9
公司在武昌雄楚大街图书出版城C座908室
1.填空:
1、 面向对象的语言有_______特性、_______特性、_______特性。
2、 ADO.NET有哪五大对象:
3、 能用foreach遍历访问的对象需要实现( )接口或声明( )方法的类型。
2多选:
1、正确的是:
A.接口中可以有虚方法 B.一个类可实现多个接口
C.接口不能被实例化 D.接口中可以包含已实现的方法。
2、读取数据库里的内容会用到以下那些:
A execute non query B execute sco(不记得了)
C FILL D EXECUTE READER
3、简答:
private public internal protected 权限各自的调用方法。
4、写SQL语句
在SQL里取出A表中第31—40条记录。(SQLServer,以自动增长的ID做主键,注意:ID可能不是 连续的。)
5、列举ASP.NET页面之间传递值的几种方式?
6、 看程序写结果
Class class1
{private string str = “class1.str”;
Private int i = 0 ;
Static void stringconvert (string str )
{
str = “string being converted .”;
}
Static void stringconvert (class1 C )
{ C. str = “string being converted.”;}
Static void Add (int i )
{i++;}
Static void AddwithRef (ref int i )
{i++;}
Static void Main ()
{ int i1= 10; int i2=20;
string str="str";
class1 c=new class1();
Add(i1);
AddwithRef(ref i2);
Add(c.i);
stringconvert(str);
stringconvert(c);
console.writeline(i1);
console.writeline(i2);
console.writeline(c.i);
console.writeline(str);
console.writeline(c.str);
}
}
7看程序写结果
public abstract class A
{
public A ()
{
console.writeline('A');
}
public virtual void Fun()
{
console.writeline("A.Fun()" );
}
}
public class B : A
{
public B ()
{
console.writeline('B');
}
public new void Fun()
{
console.writeline(" B.Fun()" );
}
public static void Main()
{
A a = new B();
a.Fun();
}
}
8看程序写结果
public class A
{
public virtual void Fun1( int i)
{
console.writeline(i);
}
public void Fun2 ( A a )
{
a.Fun1(1);
Fun1(5);
}
}
public class B : A
{
public override void Fun1(int i)
{
base.Fun1( i+1 );
}
public static void Main()
{
B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);
}
}
9 C#设计程序: 有这样规则的几个数: 1,1,2,3,5,8,13,21,34,55...... 用递归的方法算出第30数是多少?
参考答案:
Public static int foo(int i)
{
If(i<=0)
{
Return 0;
}
If(i>0&&i<=2)
{
Return 1;
}
Else
Return foo(i-1)+foo(i-2);
}
10 C#设计程序:
猫大叫一声。所有的老鼠都开始逃跑,主人被惊醒。
要求 1 要有联动性,老鼠和主人的行为是被动的。
2 考虑可扩展性,猫的叫声可能引起其它联动效应。
2 编程:
用C语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。
3 英文拼写纠错:
在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包含了正确英文单词的词典,请你设计一个拼写纠错的程序。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度;
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。
4 寻找热门查询:
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录,这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度。
5 集合合并:
给定一个字符串的集合,格式如: {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh} 要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出 {aaa bbb ccc ddd hhh},{eee fff}, {ggg}
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。
///////////////////////////////////
2 题
void * memmove(void *dest,const void *src,size_t n)
{
assert((dest!=0)&&(src!=0));
char * temp=(char * )dest;
char * ss=(char * )src;
int i=0;
for(;i {
*temp =*ss ;
}
return temp;
}
/////////////////////////////////////////////////
3 题
(1)思路: 字典以字母键树组织,在用户输入同时匹配
(2) 流程:
每输入一个字母:
沿字典树向下一层,
a)若可以顺利下行,则继续至结束,给出结果;
b)若该处不能匹配,纠错处理,给出拼写建议,继续至a);
算法:
1.在字典中查找单词
字典采用27叉树组织,每个节点对应一个字母,查找就是一个字母
一个字母匹配.算法时间就是单词的长度k.
2.纠错算法
情况:当输入的{zh1}一个字母不能匹配时就提示出错,简化出错处理,动态提示可能 处理方法:
(a)当前字母前缺少了一个字母:搜索树上两层到当前的匹配作为建议;
(b)当前字母拼写错误:当前字母的键盘相邻作为提示;(只是简单的描述,可 以有更多的)
根据分析字典特征和用户单词已输入部分选择(a),(b)处理
复杂性分析:影响算法的效率主要是字典的实现与纠错处理
(a)字典的实现已有成熟的算法,改进不大,也不会成为瓶颈;
(b)纠错策略要简单有效 ,如前述情况,是线性复杂度;
(3)改进
策略选择最是重要,可以采用统计学习的方法改进。
//////////////////////////////////////////////
4 题
(1)思路:用哈希做
(2) 首先逐次读入查询串,算哈希值,保存在内存数组中,同时统计频度(注意值与日志项对应关系) my.chinahrlab.com 选出前十的频度,取出对应的日志串,简单不过了。哈希的设计是关键。
//////////////////////////////////////////////////
5 题
(1)思路:先将集合按照大小排列后,优先考虑小的集合是否与大的集合有交集。有就合并,如果小集合与所有其他集合都没有交集,则独立。独立的集合在下一轮的比较中不用考虑。这样就可以尽量减少字符串的比较次数。当所有集合都独立的时候,就终止。
(2)处理流程:
1.将集合按照大小排序,组成集合合并待处理列表
2.选择最小的集合,找出与之有交集的集合,如果有,合并之;如果无,则与其它集合是独立集合,从待处理列表 中删除。
3.重复直到待处理列表为空
1>若存在,则将此小集合与大集合合并,并根据大小插入对应的位置 。转3。
2>若不存在,则在该集合中取下一个元素。如果无下一个元素,即所有元素都不存在于其他集合。则表明此集合独立,从待处理集合列表中删除。并加入结果集合列表。转3。
3。如果待处理集合列表不为空,转2。
如果待处理集合列表为空,成功退出,则结果集合列表就是最终的输出。
算法复杂度分析:
假设集合的个数为n,{zd0}的集合元素为m 排序的时间复杂度可以达到n*log(n) 然后对于元素在其他集合中查找,最坏情况下为(n-1)*m 查找一个集合是否与其他集合有交集的最坏情况是m*m*(n-1) 合并的时间复杂度不会超过查找集合有交集的最坏情况。所以最终最坏时间复杂度为O(m*m*n*n)
需要说明的是:此算法的平均时间复杂度会很低,因为无论是查找还是合并,都是处于最坏情况的概率很小,而且排序后优先用最小集合作为判断是否独立的对象,优先与{zd0}的集合进行比较,这些都{zd0}的回避了最坏情况。
(3)可能的改进:
首先可以实现将每个集合里面的字符串按照字典序进行排列,这样就可以将查找以及合并的效率增高。另外,可能采取恰当的数据结构也可以将查找以及合并等操作的效率得到提高。
问题:
一、 一个文本文档有多行,每行为一个URL。请编写代码,统计出URL中的文档名及出现次数。
a) 文档名不包括域名、路径和URL参数,例如http://www.rs.com/n.op/q/rs?id=1中的文档名是rs。
b) 部分URL可能没有文档名,例如http://www.abc.com/,这类统计为“空文档名”。
c) 出现在不同URL中的相同文档名视为同一文档名,例如http://www.ceshi.com/hi.php
和ftp://ftp.cdef.com/hi.php为同一文档名
文档内容示例如下:
http://www.test.com/abc/de/fg.php?id=1&url=http://www.test.com/index.html
http://www.ceshi.com/hi.jsp
ftp://ftp.ceshi.com/hi.jsp
http://www.hello.com/cw/hi.jsp?k=8
http://www.hi.com/jk/l.html?id=1&s=a.html
http://www.rs.com/n.op/q/rs?id=1
http://www.abc.com/
二、 一个简单的论坛系统,以数据库储存如下数据:
用户名,email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容。
每天论坛访问量300万左右,更新帖子10万左右。
请给出数据库表结构设计,并结合范式简要说明设计思路。
三、 现有两个文档,
a)数据文档A,格式为:关键词、IP地址、时间,记录条数为1000万左右,该文档是无序排列的。
b)数据文档B是关键词ID到关键词的对应表文档,格式为:ID、关键词,记录条数在100万左右,也是无序排列的。该对应表中的记录是一一对应的,不存在ID或关键词重复的情况。
生成新的数据文档C,数据文档C的格式为:关键词ID、IP地址、时间。
请设计一个程式,实现上述功能,并分析时间复杂度和空间复杂度。运行程式所使用的服务器的内存为1G,硬盘足够大。(至少要给出关键算法和设计思路)
百度12-6xx.html
专家回答:
{dy}题简评 百度的主要业务是搜索,搜索的基本原理如下 1.编写爬虫程式到互连网上抓取网页海量的网页。 2.将抓取来的网页通过抽取,以一定的格式保存在能快速检索的文档系统中。 3.把用户输入的字符串进行拆分成关键字去文档系统中查询并返回结果。 由以上3点可见,字符串的分析,抽取在搜索引擎中的地位是何等重要。 因此,百度的笔试面xx中,出现这样的题就变得理所当然了。
1. 填空: (1)面向对象的语言具有____封装____性、_____继承____性、____多态____性。
2. 不定项选择:
(1) 以下叙述正确的是:bc
A. 接口中可以有虚方法。 B. 一个类可以实现多个接口。
C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。
(2) 从数据库读取记录,你可能用到的方法有:bcd
A. ExecuteNonQuery B. ExecuteScalar
C. Fill D. ExecuteReader
3. 简述 private、 protected、 public、 internal 修饰符的访问权限。
答:public 不受限制的访问
Private 只能在本类中访问
Protected 本类和继承与他的类中的都能访问
Internal 同一个应用程序或类库中
4. 写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。)
5 .列举ASP.NET 页面之间传递值的几种方式。
答:
session(viewstate) 简单,但易丢失
application 全局
cookie 简单,但可能不支持,可能被伪造
input type="hidden" 简单,可能被伪造
url参数 简单,显示于地址栏,长度有限
数据库 稳定,安全,但性能相对弱
6. 写出程序的输出结果
class Class1 {
private string str = "Class1.str";
private int i = 0;
static void StringConvert(string str) {
str = "string being converted.";
}
static void StringConvert(Class1 c) {
c.str = "string being converted.";
}
static void Add(int i) {
i++;
}
static void AddWithRef(ref int i) {
i++;
}
static void Main() {
int i1 = 10;
int i2 = 20;
string str = "str";
Class1 c = new Class1();
Add(i1);
AddWithRef(ref i2);
Add(c.i);
StringConvert(str);
StringConvert(c);
Console.WriteLine(i1);
Console.WriteLine(i2);
Console.WriteLine(c.i);
Console.WriteLine(str);
Console.WriteLine(c.str);
}
}
答:10,21,0,str,string being converted.
10. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求: 1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。
public interface Observer
{
void Response(); //观察者的响应,如是老鼠见到猫的反映
}
public interface Subject
{
void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
}
public class Mouse : Observer
{
private string name;
public Mouse(string name, Subject subj)
{
this.name = name;
subj.AimAt(this);
}
public void Response()
{
Console.WriteLine(name + " attempt to escape!");
}
}
public class Master : Observer
{
public Master(Subject subj)
{
subj.AimAt(this);
}
public void Response()
{
Console.WriteLine("Host waken!");
}
}
public class Cat : Subject
{
private ArrayList observers;
public Cat()
{
this.observers = new ArrayList();
}
public void AimAt(Observer obs)
{
this.observers.Add(obs);
}
public void Cry()
{
Console.WriteLine("Cat cryed!");
foreach (Observer obs in this.observers)
{
obs.Response();
}
}
}
class MainClass
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat);
Mouse mouse2 = new Mouse("mouse2", cat);
cat.Cry();
}
}
//---------------------------------------------------------------------------------------------
设计方法二: 使用event -- delegate设计..
public delegate void SubEventHandler();
public abstract class Subject
{
public event SubEventHandler SubEvent;
protected void FireAway()
{
if (this.SubEvent != null)
this.SubEvent();
}
}
public class Cat : Subject
{
public void Cry()
{
Console.WriteLine("cat cryed.");
this.FireAway();
}
}
public abstract class Observer
{
public Observer(Subject sub)
{
sub.SubEvent += new SubEventHandler(Response);
}
public abstract void Response();
}
public class Mouse : Observer
{
private string name;
public Mouse(string name, Subject sub) : base(sub)
{
this.name = name;
}
public override void Response()
{
Console.WriteLine(name + " attempt to escape!");
}
}
public class Master : Observer
{
public Master(Subject sub) : base(sub){}
public override void Response()
{
Console.WriteLine("host waken");
}
}
class Class1
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat);
Mouse mouse2 = new Mouse("mouse2", cat);
Master master = new Master(cat);
cat.Cry();
}
}