首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

N笔试题

Posted on 2010-09-22 20:50  停留的风  阅读(2193)  评论(1编辑  收藏  举报

 
一、填空题:

 

1、能用foreach遍历访问的对象需要实现 _______接口或声明_______方法的类型。答:IEnumerable 、 GetEnumerator。
2、索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似与属性,不同之处在于他们的访问器采用参数。被称为有参属性。
3、在.Net托管代码中我们不用担心内存漏洞,这是因为有了GC
4、不能使用修饰符 new、static、virtual 或 abstract 来修饰 override 方法,virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。
5、当类T只声明了私有实例构造函数时,则在T的程序文本外部,_不可以_(可以 or 不可以)从T派生出新的类,_不可以_(可以 or 不可以)直接创建T的任何实例。
6、在.Net中所有可序列化的类都被标记为[serializable]
7、委托声明的关键字是__delegate__。
8、用sealed修饰的类有什么特点?答:密封,不能继承。
9、WCF中的ABC是:Address, Binding, Contract。
10、 在.net(C# or vb.net)如何启动另一个程序。process

 

二、选择题
1、Net依赖以下哪项技术实现跨语言互用性?(  C  )---cls是公共语言定义(Common Language Specification)
A.CLR               B.CTS               C.CLS                  D.CTT

2、对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?(多选) (   ABC     )
A.Close                 B.Dispose   C.Finalize
D.using                 E.Quit

3、以下哪些可以作为接口成员?(多选) ( ABDE )
A.方法  B.属性  C.字段 D.事件 E.索引器

4、在ADO.NET中执行一个存储过程时,如果要设置输出参数则必须同时设置参数的方向和(d ),必要时还要设置参数尺寸。
a)大小;             b)上限;              c)初始值;            d)类型;

5、下列关于C#中索引器理解正确的是(C )
a)索引器的参数必须是两个或两个以上   b)索引器的参数类型必须是整数型
c)索引器没有名字                     d)以上皆非

6、下面关于XML的描述错误的是(D)。
a)XML提供一种描述结构化数据的方法;
b)XML 是一种简单、与平台无关并被广泛采用的标准;
c)XML文档可承载各种信息;
d)XML只是为了生成结构化文档;

7、Net Framework通过什么与COM组件进行交互操作?(   C )
A.Side By SideB.Web Service
C.InteropD.PInvoke

8、以下哪个类是int的基类?(  C  )
A.Int32   B.Object   C.ValueType     D.Int16

 

 


三、简答题:

1、class
    访问修饰符:
    internal,只有当前项目能够访问
    public,在任何地方可以访问
    其它类的属性:
    abstract,抽象类,不能实例化,只能继承
    sealed,密封的,不能被继承(不能派生),只能实例化
    默认是Internal
    abstarct的声明必须是:
    public abstract class MyClass{}
或者internal abstract class MyClass
sealed的必须按这种方式声明:
public sealed class MyClass{}
internal sealed class MyClass{}

C#类定义中,只能有一个基类,如果没有基类,则默认继承了System.Object,如果一个基类继承了一个抽象类,就必须实现所继承的所有的抽象成员。
编译器不允许派生类的可访问性比其基类更高。

类可以继承多个接口,要实现接口中所有的抽象成员。


2、interface

可以使用public和internal修饰

接口的成员是公共的,但抽象类的成员可以是私有的、受保护的、内部的等。
接口不能包含字段、构造函数、析构函数、静态成员或常量。

抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。
接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。

接口不同于类:
1)不允许使用访问修饰符,所有的接口成员都是公共的。
2)接口成员不能包含代码体
3)接口不能定义字段成员
4)接口成员不能使用关键字static、virtual、abstract或者sealed来定义
5)类型定义成员是禁止的

可以使用new隐藏接口的方法


实现接口的类必须包含该接口所有成员的执行代码,且必须匹配指定的签名,并且必须是公共的。


接口不是类,所以没有继承System.Object
接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规范,统一调用方法,在大型项目中接口正发挥日益重要的作用。


Override用来重写父类的方法,重载使用相同名的方法或操作符拥有不同类型的参数

3、.net错误处理机制

.net错误处理机制采用 try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。


4、重载与覆盖的区别
1)方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。
2)覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
3)覆盖要求参数列表相同;重载要求参数列表不同。
4)覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。

4、DataReader和 DataSet的异同
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据, 所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet 则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作.

 

5、在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
 Using 引入一个命名空间,或在使用了一个对像后自动调用其IDespose,New 实例化一个对像,或修饰一个方法,表此方法完全重写此方法,


6.下面的例子中

     using System;
     class A
     {
          public static int X;
          static A(){
               X=B.Y+1;
          }
      }
      class B
      {
           public static int Y=A.X+1;
           static B(){}
           static void Main(){
                Console.WriteLine("X={0},Y={1}",A.X,B.Y);
           }
       }
产生的输出结果是什么?

x=1,y=2

 

7、根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。(10分)

public void test(int i)

{  

lock(this)

{

if (i>10)

{

i--;

test(i);

}

}

}

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)


8、简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。(

答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

 


9.    请解释webService? 如何实现webService。
    webService可以描述为可以在 Web 上部署并可以被任何应用程序或其他服务调用的功能它可以是商业应用功能,也可以是系统功能,webService使用了SOAP这个所有主要供应商都支持的新标准协议,SOAP 使用 HTTP 在网络上进行通信或传递信息,使用 XML 定义数据能力

    在.net中webService实现步骤:
    创建一个webService,生成相应的.asmx文件。
    添加一个通过 Internet 公开和调用的方法。此类方法又称为 [WebMethod]
    部署创建好的webService
    在将要调用webService的项目中添加web引用,生成相应的代理类。
    实例化代理类对象
    通过代理类对象调用相应的WebMethod


10、什么是反射?如何实现反射?
反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。通过反射命名空间中的类以及 System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。您也可以使用反射在运行时创建类型实例,然后调用和访问这些实例。


11、请解释流与文件有什么不同?
文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。因此,对于文件,人们常会想到目录路径、磁盘存储、文件和目录名等方面。相反,流提供一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一。正如除磁盘外存在多种后备存储器一样,除文件流之外也存在多种流。例如,还存在网络流、内存流和磁带流等。

12、程序集与命名空间有什么不同?
命名空间是用于避免命名冲突,专用于组织代码,当代码要在其他某个应用程序中重用时,可以降低复杂性。
程序集是重用代码的一种方式

不同: 可以将相同命名空间中的类部署到不同的程序集中,也可以命名空间中的类部署到一个程序集中

命名空间              程序集
有逻辑编译时机制     有物理编译时机制
不是运行时实体             是运行时实体
为源代码元素的名称提供逻辑结构    为可执行文件的运行时提供物理结构


13、委托与事件是什么关系?为什么要使用委托
委托提供了封装方法的方式,事件是某动作已发生的说明,事件是建立于委托之上的
程序运行时同一个委托能够用来调用不同的方法只要改变它的引用方法即可
同一个委托能够用来调用不同的方法,只要改变它引用的方法即可,因此委托调节器用的方法不是在编译时决定的,而是在运行时确定的.


14、Params是什么含义?
params 关键字可以指定在参数数目可变处采用参数的方法参数。在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键

15、C#中有没有运算符重载?能否使用指针?
重载操作符意味着使该操作符具有不同的行为
使用操作符可以使方程式简单易懂
重载运算符使用operator关键字来创建一个运算符方法

能使用指针, 在 C# 中很少需要使用指针,但仍有一些需要使用的情况。例如,在下列情况中使用允许采用指针的不安全上下文是正确的:
处理磁盘上的现有结构
涉及内部包含指针的结构的高级 COM 或平台调用方案
性能关键代码
不鼓励在其他情况下使用不安全上下文。具体地说,不应该使用不安全上下文尝试在 C# 中编写 C 代码。


16、私有程序集与共享程序集有什么区别?
私有程序集:
默认情况下,C# 程序编译为私有程序集
需要放在应用程序所在的文件夹中
程序集的名称在应用程序中应当是唯一的
共享程序集:
可以被不同的应用程序共享
在所有使用程序集的应用程序中,程序集名称应当是唯一的
放在全局程序集缓存中


17、Ref 与out有什么不同?
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。传递到 ref 参数的参数必须最先初始化。将此方法与 out参数相比,后者的参数在传递到 out 参数之前不必显式初始化。属性不是变量,不能作为 ref 参数传递。如果两种方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无法定义仅在 ref 和 out 方面不同的重载。
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。属性不是变量,不能作为 out 参数传递。如果两个方法的声明仅在 out 的使用方面不同,则会发生重载。不过,无法定义仅在 ref 和 out 方面不同的重载。

18、装箱与拆箱是互逆操作吗?

首先纠正一个认识错误。有许多人说,装箱与拆箱是互逆的操作。其实装箱与拆箱在严格意义上并不是互反操作。拆箱操作的代价要比装箱操作小很多。拆箱操作仅仅是获取指向对象中包含的值类型部分(数据字段)的指针而已,它不会像装箱操作那样涉及到任何内存字节的拷贝。然而,紧接着拆箱之后典型的操作往往就是字段拷贝,这两个操作合起来与装箱操作才成为真正的互反操作。

19、用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?答:一般为3层
数据访问层,业务层,表示层。
数据访问层对数据库进行增删查改。
业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
表示层为了与用户交互例如用户添加表单。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。


20、堆和栈的区别?
答:
栈:由编译器自动分配释放。在函数体中定义的变量通常在栈上。
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。

21、什么是SOA?
面向服务架构SOA(Service-Oriented Architecture)是一种架构模型和一套设计方法学,其目的是最大限度地重用应用程序中立型的服务以提高IT适应性和效率。它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。 SOA的关键是“服务”的概念,W3C将服务定义为:“服务提供者完成一组工作,为服务使用者交付所需的最终结果。最终结果通常会使使用者的状态发生变化,但也可能使提供者的状态改变,或者双方都产生变化”。


22、概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

23、介绍SOA
面向服务架构SOA(Service-Oriented Architecture)是一种架构模型和一套设计方法学,其目的是最大限度地重用应用程序中立型的服务以提高IT适应性和效率。它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。 SOA的关键是“服务”的概念,W3C将服务定义为:“服务提供者完成一组工作,为服务使用者交付所需的最终结果。最终结果通常会使使用者的状态发生变化,但也可能使提供者的状态改变,或者双方都产生变化”。

25、列举 ASP.NET 页面之间传递值的几种方式?

1.URL传值
2.Session 传值
3.Cookie传值
4.Server.Transfer 传值
5.Application传值
6.跨页面传送

24、说说你对面向对象的理解?