您的位置:首页 > 职场人生

C#.Net的常见面试试题1

2012-03-04 19:56 316 查看
1.面向对象的思想主要包括什么?

2.什么是ASP.net中的用户控件

3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?

4.列举一下你所了解的XML技术及其应用

5.值类型和引用类型的区别?写出C#的样例代码。

6.ADO.net中常用的对象有哪些?分别描述一下。

7.如何理解委托?

8.C#中的接口和类有什么异同。

9.。net中读写数据库需要用到哪些类?他们的作用

10.UDP连接和TCP连接的异同。

11.ASP.net的身份验证方式有哪些?分别是什么原理?

12.进程和线程分别怎么理解?

13.什么是code-Behind技术。

14.活动目录的作用。

15..net中读写XML的类都归属于哪些命名空间?

16.解释一下UDDI、WSDL的意义及其作用。

17.什么是SOAP,有哪些应用。

18.如何部署一个ASP.net页面。

19.如何理解.net中的垃圾回收机制。

20.常用的调用webservice方法有哪些?

参考答案:

1 继承 多态 封装

2 用户控件. 不会说懂得做

3 装箱和拆箱发生 值类型向引用类型转换,和引用类型向值类型转 重载:同一个函数参数不同

4.xml可以用来做网页(xslt) xml可以当作数据库 xml可以用来保存对象的系列化

5值类型,没有什么好说的.引用类型用处是返回两个以上参数的时候比较好用 ref out 我常用的是out不要先赋值

6 ado.net 我直接用 sqlhelper了 有connection command 还有参数

7 回调机制比较有用的.在net中采用了委托.

8 接口,是可以多继承,类只有单继承.接口强调了你必须实现,而没有具本实现的方法和虚类有点相似

9 datareader dataset 还有一个不太常用

10 udp不要实现什么三次握手.

11 asp.net身份验证最常用还是以前的session方法. form验证没有用过. 微软的哪个也没有用过

12 进程简单理解为单个程序吧(按ctrl+alt+del)可以看到的.它至少有一个主线程 .

13 代码后置..不懂得讲

14 活动目录.. 完全不会

15 system.xml (system.io创建目录的时候用)

16 这个也是web服务里的东西.

17 soap简单协议.我只知道.web服务是基于它之上的

18 部置一个页面. 也就是说没有代码是直接写在aspx中的了.只接放在IIS的虚拟目录下就行了.当然要asp.net支持

19 垃圾回收..一般的只要掌握.非托管对象要记得释放资源就行了吧.

20 直接在vs.net里面引用就OK了.它会自己生成一个代理类

1. 填空:

(1)面向对象的语言具有___继承性、_封装___性、___多态性。

(2)能用foreach遍历访问的对象需要实现 IEnumerable接口或声明GetEnumerable 方法的类型。

(3)列举ADO.net中的五个主要对象Command、Connection、DataSet、DataSetCommand、DataReader。

2. 不定项选择:

(1) 以下叙述正确的是:

A. 接口中可以有虚方法。 B. 一个类可以实现多个接口。

C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。

(2) 从数据库读取记录,你可能用到的方法有:

A. ExecuteNonQuery B. ExecuteScalar

C. Fill D. ExecuteReader

3. 简述 **、 protected、 public、 internal 修饰符的访问权限。

4. 写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。)

5 .列举ASP.NET 页面之间传递值的几种方式。

6. 写出程序的输出结果

class Class1 {

** string str = Class1.str;

** 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. 一列数的规则如下: 1、1、2、3、5、8、13、21、34......

求第30位数是多少, 用递归算法实现。(C#语言)

10. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求: 1.要有联动性,老鼠和主人的行为是被动的。

2.考虑可扩展性,猫的叫声可能引起其他联动效应。

参考答案:

1. (1) 继承性、封装性、多态性。(考基本概念)

(2) IEnumerable 、 GetEnumerator (对foreach机制的理解,本来不想出这题的,凑分)

(3) ... (送分题, 对ADO.net的了解)

评分标准:一空1分,满分10分。

2. (1) B、C (考对接口的理解) (2) B、C、D (考查对ADO.net的熟练程度)

评分标准: 一题5分,不选或者错选均不得分。漏选得2分。满分10分。

3. . ** : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

internal: 在同一命名空间内可以访问。

评分标准:答对1题2分,2题5分,3题7分。全对10分。 (送分题)

4. 解1: select top 10 * from A where id not in (select top 30 id from A)

解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

评分标准: 写对即10分。(答案不唯一,datagrid 分页可能需要用到)

5. 1.使用QueryString, 如....?id=1; response. Redirect()....

2.使用Session变量

3.使用Server.Transfer

....

评分标准: 答对1点得3分, 两点7分, 3点10分。

6. (考查值引用和对象引用)

10

21

0

str

string being converted.

评分标准:答对一点得2分,满分10分。

7. A

B

A.Fun()

评分标准: 写出A.B 得5分,写出A.Fun()得5分,满分10分。

(考查在继承类中构造函数, 以及new 方法, )

8. 2

5

1

6

评分标准: 答对一点得2分,两点得5分,3点得7分。全对得10分。

(一些人做这题,头都晕了.... ^_^ )

9.

public class MainClass

{

public static void Main()

{

Console.WriteLine(Foo(30));

}

public static int Foo(int i)

{

if (i <= 0)

return 0;

else if(i > 0 && i <= 2)

return 1;

else return Foo(i -1) + Foo(i - 2);

}

}

评分标准: 写出return Foo(i -1) + Foo(i - 2); 得5分。

写出if(i > 0 && i <= 2) return 1; 得5分。

方法参数过多需要扣分(扣除分数 = 参数个数 - 1)

不用递归算法扣5分

(递归算法在树结构建立等方面比较常用)

10

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象

评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)

<2>从Mouse和Master中提取抽象(5分)

<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

public inte***ce Observer

{

void Response(); //观察者的响应,如是老鼠见到猫的反映

}

public inte***ce Subject

{

void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠

}

public class Mouse : Observer

{

** 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

{

** 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);

Master master = new Master(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

{

** 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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: