C#面试题目解答

1.维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?

尽可能的使用约束(主键,唯一键,外键,非空字段)实现,效率高,其次使用触发器,无论何种业务访问数据库都可以维护数据库的完整性,一致性,最后下下之策就是自写业务逻辑,此方法效率低,编程复杂.

2.接口与类的不同

接口是可以多继承,而类只能单继承,接口强调了必须实现但没有具体的方法.类是方法功能的实现和集合,而接口是规范类,约束类

 

在.net中使用了GC垃圾回收,但在C#中不能直接调用finalize,而是在析构函数中调用基类的finalize()方法

C++速度快,功能强大,类库需要手动选择,编译型跨平台

java运行速度慢,需要虚拟机环境,完全跨平台,类库丰富,功能中庸无法进行底层的高级操作

c#运行速度中等,需要虚拟机环境,即将跨平台,类库丰富,功能比java略多,主要是可以与操作系统底层交互

c#吸收了java的语法结果,结合了c++的结构,进行了一些改进,C#不像java完全解释执行,采用编译的汇编代码进行执行,故而c#的运行效率比java快,但不如c++,C#可以跟操作系统底层交

互,而java则不能, 例如建一个半透明的窗体,c#跟C++可以轻易完成,而java 则显得比登天还难

property 讨论的是主题所有物的内容,状态等,比如,人能说话思考,这里的是否能说话思考就是一个属性

attribute讨论的是主题的天性,比如人是人类,这里的人类就是一个特性

vc编写的代码,编译成动态链接库,然后交给.net平台调用

 

使用数据库关系,这样可以尽可能的规范编码,对比较大型的开发来说也容易,最后是自己编写逻辑:这样会造成数据的一致性,完整性的维护逻辑相当大,原型如何改变,业务逻辑都不必做任何改动,继承性和多态性似的代码的可重用性

 

ado是以recordset存储,而ado.net则是以Dataset表示

ado采用的COM技术,而ado.net基于XML格式

委托就是把引用存储为函数的类型,允许江方法作为参数传递.可用于定义回调方法

c#中索引器的实现过程,可以用任何类型进行索引

一个类型要想支持foreache遍历,必须实现IEnumerable,IEnumerator两个接口

接口是一个纯粹的抽象类,没有任何实际的东西,只是定义了一个框架,而抽象类里面可以有实际的一个方法,并不需要所有的方法都是抽象的,可以实现一个接口中的所有方法也可以继承一个抽象的类,然后覆写其中的方法,接口一般只有法防,而没有数据成员或属性.抽象类有方法也有数据成员和属性,一般情况下先考虑用接口,只有当可能要访问到数据成语或属性时,用抽象类

final 修饰符用于指定类不能扩展或者方法或属性不能重写,他将防止其他类通过重写重要的函数来更改该类的行为.带有final修饰符的方法协议由派生类总的方法来隐藏或重载  

finally块用于请给出try块中分配的任何资源,控制重视传递给finally块,与try块的存在方式无关

finalize允许object在垃圾回收GC'回收object之前尝试释放资源并执行其他清理操作

类是方法功能的实现和集合,接口是规范类,约束类

connection数据库连接对象

command 数据库命令

datareader 数据读取器

dataset 数据集

ASP.net的身份验证方式:

whindows验证:为每个用户开启window账号,验证其身份,安全性较高

forms验证:为每个登录用户写入一个身份验证票据,在web中使用最广的验证方式,灵活方便

passport验证:为成员站点提供单一登录和核心配置

 

进程:process

什么是code-Behind技术

新建一个vs.net下的项目,会看到aspx,resx,cs三个后最的文件,这就是代码分离,实现了html代码和服务器代码分离,方便代码编写和整理

活动目录是window2000的最重要的功能,可以将用户信息全部集成起来,登录以后可以访问多个不同的网络服务.

 

 

new 关键字作用:

   new运算符,用于创建对象和调用构造函数

   new修饰符,用于向基类成员隐藏继承成员

   new约束,用于在泛型声明中约束可能用做类型参数的参数的类型

DaataGrid的DataSouse 可以链接DataTable,DataView ,DataSet,DataViewManager,任何实现IListSource接口的组件,任何实现IList接口的组件.

可访问性级别有五种:public ,protected 访问限于包含类或从包含类派生的类型 ,internal 访问仅限于当前程序集,protected internal 访问仅限于从包含类派生的当前程序集或类型. private 访问仅限于包含类型

seled修饰符的特点 :可应用与类,实例方法和属性,密封类不能被继承,密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写,当应用与方法或属性时,sealed修饰符必须始终与override一起使用

列举ADO.net中的共享类和数据库特定类

  共享类: DataSet, DataTable, DataRow, DataColumn,DataRealtion, Constraint, DataColumnMapping,DataTableMapping

  特定类: (x)Connection ,(x)Command ,(X)CommandBuilder,(x)DataAdapter,(x)DataReader,(x)Parameter,(x)Transaction

 

struct 与class的异同

   结构与类共享几乎所有相同的语法,但结构比类受到的限制更多

结构不能声明默认构造函数(无参数的构造函数)或析构函数

结构是值类型,而类是引用类型

struct不能从class或其他struct继承,不能作为一个类的基.

C#中所有值类型本质上都是继承自ValueType,而引用类型是继承自object

struct的实例化可以不适用new运算符

struct可以实现接口,在struct中不能初始化实例字段

应用程序域:为安全性,可靠性,版本控制以及卸载程序集提供了隔离边界.应用程序域一般由运行库宿主创建,运行库宿主负责在运行应用程序之前引导公共语言运行库.

托管代码:使用基于公共语言运行库的语言便一起开发的代码称为托管代码.优点:跨语言集成,跨语言异常处理,增强的安全性,版本控制和部署支持,简化的组件交互模型,调试和分析服务等

强类型:C#是强类型语言,故而每个变量和对象都必须具有声明类型

重载:每个类型成员都有一个唯一的签名.方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成.只要签名不同,就可以在一个类型内定义具有相同名称的多种方法.当定义两种或多种具有相同名称的方法时,就称为重载

值类型和引用类型的区别:

   值类型变量的赋值是对变量的值的赋值,而引用类型的赋值是对对象的引用赋值

   所有的值类型都隐式派生自System.ValueType.

   值类型不能为NULL,但是,可控类型功能允许将NULL赋值给值类型.每种值类型都有一个隐式的默认构造函数来初始化该类型的默认值

声明应用类型的关键字:class interface delegate 内置引用类型:object,string

 

C#中接口和类的异同:

接口,类和结构都可从多个接口继承

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员

接口可以包含事件,索引器,方法和属性

 

GC机制:garbage collection 是.net对内存管理的一种功能,垃圾回收器跟踪冰回收托管内存中分配的对象,定期执行GC以回收分配给没有有效引用的对象的内存,当使用可用内存不能满足内存请求时,GC会自动进行.

  在进行垃圾回收时,垃圾回收器会先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存讲有效对象挪到一起.

 

ASP.net中常见内置对象:Reponse, Request,Server,Session,Applcation,Cookie

posted on 2012-02-11 09:26  雨 落  阅读(1412)  评论(1)    收藏  举报