C# 面试题 (一)

1、C# 理论

1.一、简述 private、 protected、 public、 internal、protected internal 访问修饰符和访问权限javascript

private : 私有成员, 在类的内部才能够访问。html

protected : 保护成员,该类内部和继承类中能够访问。前端

public : 公共成员,彻底公开,没有访问限制。java

internal: 当前程序集内能够访问。ios

protected internal: 访问仅限于当前程序集或从包含类派生的类型。c++

不带修饰符的类是默认internal。程序员

 

1.二、简述abstract、sealed类修饰符web

abstract:能够被指示一个类只能做为其它类的基类。ajax

sealed:指示一个类不能被继承。sql

 

1.三、简述C#成员修饰符

abstract:指示该方法或属性没有实现。

const:指定域或局部变量的值不能被改动。

event:声明一个事件。

extern:指示方法在外部实现。

override:对由基类继承成员的新实现。

readonly:指示一个域只能在声明时以及相同类的内部被赋值。

static:指示一个成员属于类型自己,而不是属于特定的对象。

virtual:指示一个方法或存取器的实现能够在继承类中被覆盖。

 

1.四、ADO.NET中的五个主要对象

Connection:主要是开启程序和数据库之间的链接。没有利用链接对象将数据库打开,是没法从数据库中取得数据的。Close和Dispose的区别,Close之后还能够Open,Dispose之后则不能再用。

Command:主要能够用来对数据库发出一些指令,例如能够对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command: 对象是经过在Connection对象链接到数据源。

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工做,它能够透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。

DataSet:这个对象能够视为一个暂存区(Cache),能够把从数据库中所查询到的数据保留起来,甚至能够将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不仅是能够储存多个Table 而已,还能够透过DataAdapter对象取得一些例如主键等的数据表结构,并能够记录数据表间的关联。DataSet 对象能够说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,自己不具有和数据源沟通的能力;也就是说咱们是将DataAdapter对象当作DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。

DataReader:当咱们只须要循序的读取数据而不须要其它操做时,能够使用DataReader 对象。DataReader对象只是一次一次向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(经过游标)读取当前行的数据,并且这些数据是只读的,并不容许做其它的操做。由于DataReader 在读取数据的时候限制了每次只读取一条,并且只能只读,因此使用起来不但节省资源并且效率很好。使用DataReader 对象除了效率较好以外,由于不用把数据所有传回,故能够下降网络的负载。

ADO.NET 使用Connection 对象来链接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,而后再使用取得的DataReader 或DataAdapter 对象操做数据结果。

 

1.五、列举ASP.NET 页面之间传递值的几种方式和优缺点

1)使用QueryString, 如....?id=1; response. Redirect():  传递的参数会显示在url中,不安全而且不能传递数组或对象。

2)使用Session变量:简单,但易丢失 做用于用户我的,过量的存储会致使服务器内存资源的耗尽。

3)使用Server.Transfer:流程从当前页面引导到另外一个页面中,新的页面使用前一个页面的应答流,数据库稳定,安全,但性能相对弱。

4)Cookie传值:简单,但可能不支持,可能被伪造 Cookie是存放在客户端的,而session是存放在服务器端的。并且Cookie的使用要配合ASP.NET内置对象Request来使用

5)Application传值:对象的做用范围是整个全局,也就是说对全部用户都有效。其经常使用的方法用Lock和UnLock 

6)PreviosPage:这个通常比较少用。

Server.Transfer和Response.Redirect的区别:Server.Transfer是服务器内部的转接,浏览器不知道;Response.Redirect是有浏览器参与的,因此在地址栏中能够看到地址的变化。

 

1.六、C#中的委托是什么?事件是否是一种委托?事件和委托的关系

委托能够把一个方法做为参数代入另外一个方法。

委托能够理解为指向一个函数的指针。

委托和事件没有可比性,由于委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。由于对于事件来说,外部只能“注册本身+=、注销本身-=”,外界不能够注销其余的注册者,外界不能够主动触发事件,所以若是用Delegate就无法进行上面的控制,所以诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove本身,不能赋值。事件只能+=、-=,不能= 。加分的补充回答:事件内部就是一个private的委托和add、remove两个方法。

 

1.七、重写(override)与重载(overload)的区别

override 是进行基类中函数的重写。override是面向对象的概念。override 方法提供从基类继承的成员的新实现。经过 override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具备相同的签名

重载是方法的名称相同。参数个数或参数类型不一样,进行屡次重载以适应不一样的须要。重载(overload)是面向过程的概念。

 

1.八、C#中索引器是否只能根据数字进行索引?是否容许多个索引器参数?

参数的个数和类型都是任意的。用reflector反编译能够看出,索引器的内部本质上就是set_item、get_item方法。

 

1.九、属性和public字段的区别是什么?调用set方法为一个属性设值,而后用get方法读取出来的值必定是set进去的值吗?

属性能够对设值、取值的过程进行非法值控制,好比年龄禁止设值负数,而字段则不能进行这样的设置。虽然通常状况下get读取的值就是set设置的值,可是可让get读取的值不是set设置的值的,极端的例子。Public Age{get{return 100;}set{}}。用reflector反编译能够看出,属性内部本质上就是set_***、get_***方法。

 class Person
        {
            public int Age
            {
                get
                {
                    return 3;
                }
            }
        }
        static void Main(string[] args)
        {
            Person p1 = new Person();
            p1.Age = 30;
            p1.Age++;
            Console.Write(p1.Age);//输出3
       Console.ReadKey();
        }

 

 

1.十、三层架构

一般意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

区分层次的目的即为了“高内聚,低耦合”的思想。

表现层(UI):通俗讲就是展示给用户的界面,即用户在使用一个系统的时候的所见所得。

业务逻辑层(BLL):针对具体问题的操做,也能够说是对数据层的操做,对数据业务逻辑处理。

数据访问层(DAL):该层所作事务直接操做数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。

三层结构是N层结构的一种,通常来讲,层次之间是向下依赖的,下层代码未肯定其接口(契约)前,上层代码是没法开发的,下层代码接口(契约)的变化将使上层的代码一块儿变化。

优势: 分工明确,条理清晰,易于调试,并且具备可扩展性。

缺点: 增长成本。

 

1.十一、MVC模式

MVC(Model View Controller)模型-视图-控制器

aspx就是View,视图;Model:DataSet、Reader、对象;Controller:cs代码。

MVC是典型的平行关系,没有说谁在上谁在下的关系,模型负责业务领域的事情,视图负责显示的事情,控制器把数据读取出来填充模型后把模型交给视图去处理。而各类验证什么的应该是在模型里处理了。它强制性的使应用程序的输入、处理和输出分开。MVC最大的好处是将逻辑和页面分离。

 

1.十二、什么是装箱(boxing)和拆箱(unboxing)?

装箱:从值类型转换到引用类型。

拆箱:从引用类型转换到值类型。

object obj = null;//引用类型

obj = 1;//装箱,boxing。把值类型包装为引用类型。

int i1 = (int)obj;//拆箱。unboxing

 

1.1三、什么叫应用程序域(AppDomain) 

一种边界,它由公共语言运行库围绕同一应用程序范围内建立的对象创建(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。

应用程序域有助于将在一个应用程序中建立的对象与在其余应用程序中建立的对象隔离,以使运行时行为能够预知。

在一个单独的进程中能够存在多个应用程序域。应用程序域能够理解为一种轻量级进程。起到安全的做用。占用资源小。

 

1.1四、CTS、CLS、CLR分别做何解释

CTS:Common Type System 通用系统类型。Int3二、Int16→int、String→string、Boolean→bool

CLS:Common Language Specification 通用语言规范。不一样语言语法的不一样。

CLR:Common Language Runtime 公共语言运行时,就是.Net提供的那些类

 

1.1五、在dotnet中类(class)与结构(struct)的异同?

Class能够被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。

Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。

 

1.1六、堆和栈的区别?

栈是编译期间就分配好的内存空间,所以你的代码中必须栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。

堆是程序运行期间动态分配的内存空间,你能够根据程序的运行状况肯定要分配的堆内存的大小。

 

1.1七、能用foreach遍历访问的对象的要求

须要实现IEnumerable接口或声明GetEnumerator方法的类型。

 

1.1八、GC是什么? 为何要有GC?

GC是垃圾收集器。程序员不用担忧内存管理,由于垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection须要程序员调用Dispose进行资源的回收。

要请求垃圾收集,能够调用下面的方法:GC.Collection()通常不须要手动调用GC.Collection()。

 

1.1九、String s = new String("xyz");建立了几个String Object?

两个对象,一个是“xyz”,一个是指向“xyz”的引用对象。

 

1.20、值类型和引用类型的区别?

1.将一个值类型变量赋给另外一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象自己。

2.值类型不可能派生出新的类型:全部的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也能够实现接口。

3.值类型不可能包含 null 值:然而,可空类型功能容许将 null 赋给值类型。

4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

 

1.2一、C#中的接口和类有什么异同。

不一样点:

不能直接实例化接口。

接口不包含方法的实现。

接口能够多继承,类只能单继承。

类定义可在不一样的源文件之间进行拆分。

相同点:

接口、类和结构均可以从多个接口继承。

接口相似于抽象基类:继承接口的任何非抽象类型都必须实现接口的全部成员。

接口和类均可以包含事件、索引器、方法和属性。

 

1.2二、abstract class和interface有什么区别?

相同点:

都不能被直接实例化,均可以经过继承实现其抽象方法。

不一样点:

接口支持多继承;抽象类不能实现多继承。

接口只能定义行为;抽象类既能够定义行为,还可能提供实现。

接口能够用于支持回调(CallBack);抽象类不能实现回调,由于继承不支持。

接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;

抽象类能够定义字段、属性、包含有实现的方法。

接口能够做用于值类型(Struct)和引用类型(Class);抽象类只能做用于引用类型。例如,Struct就能够继承接口,而不能继承类。

 

1.2三、是否能够继承String类?

String类是sealed类故不能够继承。

 

1.2四、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,何时被执行?

会执行,在return前执行。

public int QueryCount()
{
  try
  {
    return cmd.ExecuteScalar();
  }
  finally
  {
    cmd.Dispose();
  }
}

 

若是C#设计的是先执行cmd.Dispose()再执行return就会出现return执行失败了,由于cmd已经Dispose了。

 

1.2五、new 关键字用法

new 运算符 用于建立对象和调用构造函数。

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

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

 

1.2六、如何把一个Array复制到ArrayList里

实现1 string[] s ={ "111", "22222" }; ArrayList list = new ArrayList(); list.AddRange(s);

实现2 string[] s ={ "111", "22222" }; ArrayList list = new ArrayList(s);

 

1.2七、描述线程与进程的区别?

1.线程(Thread)与进程(Process)两者都定义了某种边界,不一样的是进程定义的是应用程序与应用程序之间的边界,不一样的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。

2.一个进程能够包括若干个线程,同时建立多个线程来完成某项任务,即是多线程。而同一进程中的不一样线程共享代码和数据空间。用一个比喻来讲,若是一个家庭表明一个进程,在家庭内部,各个成员就是线程,家庭中的每一个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也能够派出几个成员来协同完成,而家庭以外的人则没有办法直接消费不属于本身家庭的财产。

 

1.2八、什么是强类型,什么是弱类型?哪一种更好些?为何?

C#中

int i=3;

i="a";

不能够

JavaScript中

var i=3;

i="a";

能够

强类型是在编译的时候就肯定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会肯定类型。

没有好很差,两者各有好处,强类型安全,由于它事先已经肯定好了,并且效率高。弱类型更灵活,可是效率低,并且出错几率高

通常用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb等

 

1.2九、什么是反射?

程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它可以动态的建立类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时建立和使用类型实例。

 

1.30、int、DateTime、string是否能够为null?

int、DateTime不能,由于其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null。string能够为null。

 

1.3一、传入某个属性的set方法的隐含参数的名称是什么?

value,它的类型和属性所声名的类型相同。

 

1.3二、C#支持多重继承么?

类之间不支持,接口之间支持。类对接口叫作实现,不叫继承。

 

1.3三、C#中全部对象共同的基类是什么?

System.Object

 

1.3四、经过超连接怎样传递中文参数?

答:用URL编码,经过QueryString传递,用urlencode编码 用urldecode解码。

 

1.3五、string、String;int、Int32;Boolean、bool的区别

String、Int3二、Boolean等都属于.Net中定义的类,而string、int、bool至关于C#中对这些类定义的别名。CTS。

 

1.3六、Server.Transfer和Response.Redirect的区别是什么?

答: Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect则是彻底的跳转,浏览器将会获得跳转的地址,并从新发送请求连接。这样,从浏览器的地址栏中能够看到跳转后的连接地址。

Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,而后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,因此它的地址栏中仍是原来的地址。 这个过程当中浏览器和Web服务器之间通过了一次交互。

Response.Redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器从新去请求那个地址,通常来讲浏览器会用刚才请求的全部参数从新请求。这个过程当中浏览器和Web服务器之间通过了两次交互。

 

1.3七、不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?

String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",而后咱们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另外一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量再也不指向它了。

 

1.3八、是否能够从一个static方法内部发出对非static方法的调用?

不能够。由于非static方法是要与对象关联在一块儿的,必须建立一个对象后,才能够在该对象上进行方法调用,而static方法调用时不须要建立对象,能够直接调用。也就是说,当一个static方法被调用时,可能尚未建立任何实例对象,若是从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪一个对象上的呢?这个逻辑没法成立,因此,一个static方法内部不能发出对非static方法的调用。

 

1.3九、.Net中会存在内存泄漏吗,请简单描述。

所谓内存泄露就是指一个再也不被程序使用的对象或变量一直被占据在内存中。.Net中有垃圾回收机制,它能够保证一对象再也不被引用的时候,即对象变成了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。虽然.Net能够回收无用的对象,可是.Net仍然存在因为使用不当致使的内存泄露问题。.Net中的内存泄露的状况:长生命周期的对象持有短生命周期对象的引用就极可能发生内存泄露,尽管短生命周期对象已经再也不须要,可是由于长生命周期对象持有它的引用而致使不能被回收,这就是.Net中内存泄露的发生场景,通俗地说,就是程序员可能建立了一个对象,之后一直再也不使用这个对象,这个对象却一直被引用,即这个对象无用可是却没法被垃圾回收器回收的,这就是.Net中可能出现内存泄露的状况,例如,缓存系统,咱们加载了一个对象放在缓存中(例如放在一个全局Dictionary对象中),而后一直再也不使用它,这个对象一直被缓存引用,但却再也不被使用。扩展:使用弱引用那么即便被引用也能够被回收。

 

1.40、说出一些经常使用的类、接口,请各举5个

经常使用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>

经常使用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

 

1.4一、BS与CS的联系与区别。

C/S是Client/Server的缩写。客户端须要安装专用的客户端软件。

B/S是Brower/Server的缩写,客户机上只要安装一个浏览器。在这种结构下,用户界面彻底经过WWW浏览器实现,一部分事务逻辑在前端实现,可是主要逻辑在服务器端实现。浏览器经过Web Server 同数据库进行数据交互。

C/S 与 B/S 区别:

1).硬件环境不一样:

  C/S 通常创建在专用的网络上, 小范围里的网络环境, 局域网之间再经过专门服务器提供链接和数据交换服务.

  B/S 创建在广域网之上的, 没必要是专门的网络硬件环境,例与电话上网, 租用设备. 信息本身管理. 有比C/S更强的适应范围, 通常只要有操做系统和浏览器就行

2).对安全要求不一样

  C/S 通常面向相对固定的用户群, 对信息安全的控制能力很强. 通常高度机密的信息系统采用C/S 结构适宜. 能够经过B/S发布部分可公开信息.

  B/S 创建在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。

3).处理问题不一样

  C/S 程序能够处理用户面固定, 而且在相同区域, 安全要求高需求, 与操做系统相关. 应该都是相同的系统。C/S的客户端因为是本地程序,所以和本地硬件、程序的交互性很强,好比能够控制本机的其余程序、能够读写本地磁盘文件、能够与硬件交互。

  B/S 创建在广域网上, 面向不一样的用户群, 分散地域, 这是C/S没法做到的. 与操做系统平台关系最小,正应为如此B/S很难和本地硬件、程序、文件进行交互,好比很难控制本机的其余程序、很难读写本地磁盘文件、很难与硬件交互,固然能够用ActiveX技术解决,好比网银等就是这么解决的,这样作的问题就是可能会被客户拒绝,并且只局限于Windows操做系统。

 

C/S也分为两层架构和三层架构。两层架构:客户端程序程序直连数据库;三层架构:客户端访问服务端的服务,主要逻辑代码写在服务端的服务中,而后服务端服务再去访问数据库,Oracle版分布式呼叫中心,WCF。

 

1.4二、编写一个单例(Singleton)类。

public FileManager
{
     private FileManager(){}
     public static FileManager Instance = new FileManager();
}

 

 

1.4三、什么是sql注入?如何避免sql注入?

用户根据系统的程序构造非法的参数从而致使程序执行不是程序员指望的恶意SQL语句。使用参数化的SQL就能够避免SQL注入。使用参数化Paramter

1' or 1=1

 

1.4四、说出一些数据库优化方面的经验?

索引内部原理:想象成Dictionary,插入、删除、更新的速度慢了,加上索引也多占用了空间,查询的速度快了。加上索引之后速度提高很是明显。

(1)在常常检索的字段上(select * from Person where Name=@Name)使用索引提升查询速度。

(2)select中只列出必要的字段,而不是*。

(3)避免隐式类型转换形成的全表扫描,在索引上使用函数也会形成全表扫描(由于索引只是为字段创建的,一旦使用表达式或者函数,那么索引就是失效了,固然也能够使用“函数索引”、“表达式索引”解决这个问题),使用索引不必定能提升查询速度。

(4)避免在索引列上使用计算(where Name+'A'=@MyName)

 

1.4五、谈谈ViewState。谈谈对ASP.Net原理的理解。谈谈ASP.Net生命周期。

Label、Textbox在禁用ViewState的时候自增的不一样表现

Http是无状态的,WebForm为了实现基于http的“有状态”从而简化开发,ViewState用来在两次请求间保持状态。页面返回前将界面的状态序列化到ViewState中,这样就将状态保存在了浏览器中,下次页面提交的时候会顺便再将ViewState提交到服务器,这样服务器就根据ViewState还原了状态,这样WebForm开发就像有状态同样了。谈谈自定义AutoInc控件。

 

1.4六、post、get的区别

get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;

使用post提交的页面在点击【刷新】按钮的时候浏览器通常会提示“是否从新提交”,而get则不会;

用get的页面能够被搜索引擎抓取,而用post的则不能够;

用post能够提交的数据量很是大,而用get能够提交的数据量则很是小(2k),受限于网页地址的长度。

用post能够进行文件的提交,而用get则不能够。

 

1.4七、Http默认的端口号是(80)、Ftp默认的端口号是(21)、SQLServer的默认端口号是(1433)

 

1.4八、运算符++a表示(先将a加1,而后表达式的值为a加1后的值),a++表示(表达式的值为a,而后a加1)。

 

1.4九、.Net Framework中的类是专门供C#调用的是吗?

答:错。VB.Net等语言均可以调用.Net Framework中的类。CTS、CLS。

 

1.50、开放性问题:说出尽量多的基于.Net Framework的语言。

参考解答:C#、VB.Net、F#、PowerShell、IronPython、J#、Ruby.Net

 

1.5一、.Net、ASP.Net、C#、VisualStudio之间的关系是什么?

答:.Net通常指的是.Net Framework,提供了基础的.Net类,这些类能够被任何一种.Net编程语言调用,.Net Framework还提供了CLR、JIT、GC等基础功能。

ASP.Net是.Net中用来进行Web开发的一种技术,ASP.Net的页面部分写在aspx 文件中,逻辑代码一般经过Code-behind的方式用C#、VB.Net等支持.Net的语言编写。

C#是使用最普遍的支持.Net的编程语言。除了C#还有VB.Net、IronPython等。

VisualStudio是微软提供的用来进行.Net开发的集成开发环境(IDE),使用VisualStudio能够简化不少工做,不用程序员直接调用csc.exe等命令行进行程序的编译,并且VisualStudio提供了代码自动完成、代码高亮等功能方便开发。除了VisualStudio,还有SharpDevelop、MonoDevelop等免费、开源的IDE,VisualStudio Express版这个免费版本。

 

1.5二、AJAX解决什么问题?如何使用AJAX?AJAX有什么问题须要注意?项目中哪里用到了AJAX?

答:AJAX解决的问题就是“无刷新更新页面”,用传统的HTML表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→从新显示这样一个过程,用户体验很是差,使用AJAX则不会致使页面从新提交、刷新。

AJAX最本质的实现是在Javascript中使用XMLHttpRequest进行Http的请求,开发中一般使用UpdatePanel、JQuery等方式简化AJAX的开发,UpdatePanel的方式实现AJAX最简单,可是数据通信量比较大,由于要来回传整个ViewState,并且不灵活,对于复杂的需求则能够使用JQuery提供的ajax功能。

UpdatePanel的内部原理。

AJAX最重要的问题是没法跨域请求(www.rupeng.com →so.rupeng.com),也就是没法在页面中向和当前域名不一样的页面发送请求,能够使用在当前页面所在的域的服务端作代理页面的方式解决。

 

1.5三、NET经过对各语言先编译成( IL),而后再执行时用( JIT)将其编译成本地平台代码,来实现异构平台下对象的互操做。

 

1.5四、Application 、Cookie和 Session 两种会话有什么不一样?

答:Application是用来存取整个网站全局的信息,而Session是用来存取与具体某个访问者关联的信息。

 

1.5五、开放式问题:你常常访问的技术类的网站是什么?

博客园(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文档、msdn论坛

 

1.5六、你对.net的GC的理解

GC是.Net的垃圾收集器,能够进行内存资源的回收,程序员无需关心资源的回收,当一个对象没有任何引用的时候就能够被回收了。一个对象能够被回收并不意味着必定会被当即回收,GC会选择时机进行回收。能够调用GC.Collect()让GC当即回收。GC不能回收非托管资源,对于非托管资源通常都实现了IDisposable接口,而后使用using关键字进行资源的回收。

 

1.5七、请写一个SQL语句:从user表中取出name列中的起始字符是“北京”的所有记录

select * from [user] wherer name like'北京%'

 

1.5八、若是不用VisualStudio,用哪一个命令行编译C#程序?

答:csc.exe。

 

1.5九、请你简单的说明数据库创建索引的优缺点

使用索引能够加快数据的查询速度,不过因为数据插入过程当中会建索引,因此会下降数据的插入、更新速度,索引还会占磁盘空间。

 

1.60、什么是WEB服务控件?使用WEB服务控件有那些优点、劣势?

web服务控件就是能够在服务器执行的控件,优点在于能够回传数据(ViewState),带有事件驱动(doPostBack),简化了Html标签的使用,使得开发ASP.net程序能够像开发Winform程序同样简单。Web服务控件最终仍是被渲染(Render)为Html标签。使用WEB服务控件的劣势是会生成一些无用的属性、ViewState等,不利于SEO,通常在内网系统或者互联网系统的后台中使用WEB服务控件。若是没有复杂的服务器交互动做,就不用Web服务器控件。runat=server的HTML控件有什么特色:路径不用程序员解析,能够使用“~”来虚拟路径。

 

1.6一、开放式问题:若是程序连不上SQLServer数据库服务器服务器,你会怎么排除这个故障?

参考解答:首先ping一下服务器IP,看是否可以ping通,若是不能ping通,则看是否网络有问题;若是能ping通,再telnet一下服务器的1433端口,看是否可以连通;若是不能连通则多是SQLServer服务停掉了或者是服务器上的防火墙封掉了1433端口;若是能连通再检查是否是本地程序的问题、驱动的问题。

 

1.6二、Http状态码各是什么意思。

301 :重定向

404 :页面不错在

500:服务器内部错误

 

1.6三、MVC模式的优缺点

MVC(Model-View-Controller)把交互系统的组成分解成模型、视图、控制器三种部件

mvc的优势:

1.经过把项目分红model view和controller,使得复杂项目更加容易维护。

2.没有使用view state和服务器表单控件,能够更方便的控制应用程序的行为

3.应用程序经过controller来控制程序请求,能够提供丰富的url重写。

4.对单元测试的支持更加出色

5.在团队开发模式下表现更出众

MVC的不足: 

(1)增长了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增长结构的复杂性,并可能产生过多的更新操做,下降运行效率。    
(2)视图与控制器间的过于紧密的链接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是颇有限的,反之亦然,这样就妨碍了他们的独立重用。    
(3)视图对模型数据的低效率访问。依据模型操做接口的不一样,视图可能须要屡次调用才能得到足够的显示数据。对未变化数据的没必要要的频繁访问,也将损害操做性能。

 

1.6四、什么是Viewstate?它有什么做用?

ViewState用来保存页面状态,就是说提交以后咱们还能够看到文本框里面的内容就是ViewState保存的功劳。 

ViewState只维护当前页面的状态,不一样页面之间不能共享,Session能够。 

ViewState你能够理解为一个隐藏控件。

 

1.6五、ASP.Net页面生命周期简单描述

每一个页面的生命周期为用户的每一次访问,也就是说每一次客户端与服务器之间的一个往返过程.全局变量的生命周期在此之间.

1. Page_Init(); 
2. Load ViewState and Postback data; 
3. Page_Load(); 
4. Handle control events; 
5. Page_PreRender(); 
6. Page_Render(); 
7. Unload event; 
8. Dispose method called;

 

1.6六、存储过程和sql语句的优缺点

优势: 
1.提升性能,减小网络传输,节约时间 。

2.减小网络流量    存储过程位于服务器上,调用的时候只须传递存储过程的名称以及参数,不用每次访问都传递很长的sql 语句。

4.安全性     减小sql 注入式攻击。

5.可维护性高    更新存储过程一般比更改、测试以及从新部署程序集须要较少的时间和精力。

缺点:

1.交互性差 。

2.可移植性差

 

1.6七、何时使用抽象类,何时用接口 

接口用于规范,抽象类用于共性。

接口中只能声明方法,属性,事件,索引器。而抽象类中能够有方法的实现,也能够定义非静态的类变量。抽象类是类,因此只能被单继承,可是接口却能够一次实现多个。抽象类能够提供某些方法的部分实现,接口不能够.抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。再抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要从新编写(这就是为何说接口是一个类的规范了)。接口成员被定义为公共的,但抽象类的成员也能够是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。此外接口不能包含字段、构造函数、析构函数、静态成员或常量。

 

1.6八、C#中的堆和栈

栈(Stack)由系统管理生存期,存储代码执行和调用路径,执行或调用完毕即从栈中清除。
堆(Heap)中保存值和对象,调用完毕以后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除。

 

1.6九、C# ref与out区别: 

一、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。

二、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以知足匹配。

三、out适合用在须要retrun多个返回值的地方,而ref则用在须要被调用的方法修改调用者的引用的时候。

 

1.70、你对泛型了解吗?简单说明一下泛型的有什么好处?

泛型:经过参数化类型来实如今同一份代码上操做多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用 
好处是——类型安全和减小装箱、拆箱。提升性能、类型安全和质量,减小重复性的编程任务 

 

1.7一、new有几种用法 

第一种:实例化对象,new Class();

第二种:覆盖基类方法,public new XXXX(){}

第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。

 

1.7二、Session有什么重大BUG,微软提出了什么方法加以解决? 

答:iis中因为有进程回收机制,系统繁忙的话Session会丢失,能够用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,并且没法捕获Session的END事件 

 

1.7三、<%# %> 和 <% %> 有什么区别?

<%# %>表示绑定的数据源 <% %>是服务器端代码块 常量

 

1.7四、DateTime.Parse(myString); 这行代码有什么问题?

有问题,当myString不能知足时间格式要求的时候,会引起异常,建议使用DateTime.TryParse() 

 

1.7五、为何不提倡catch(Exception) ,catch(Exception e){throw e;}和catch(Exception e){throw;}的区别,error和exception区别

try..catch在出现异常的时候影响性能; 应该捕获更具体得异常,好比IOExeception,OutOfMemoryException等 

第一个将发生的异常对象抛出,另外一个只是抛出异常,并无抛出原异常对象

error 表示恢复不是不可能但很困难的状况下的一种严重问题。好比说内存溢出。不可能期望程序能处理这样的状况。

exception 表示一种设计或实现问题。也就是说,它表示若是程序运行正常,从不会发生的状况。

 

1.7六、GET与POST的区别 

在FORM提交的时候,若是不指定Method,则默认为GET请求,Form中提交的数据将会附加在url以后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中X

为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;

在使用 POST 方法的状况下,传输数据时不会将数据做为 URL 的一部分;它们会做为一个独立的实体来传输。所以,POST 方法更安全,你也能够用这个方法传输更多的数据。并且用 POST 传输的数

据不必定要是文本,用 GET 方法传输的却必定要是文本。

(1)get是从服务器上获取数据,post是向服务器传送数据。

(2)在客户端,Get方式在经过URL提交数据,数据在URL中能够看到;POST方式,数据放置在HTML HEADER内提交。

(3)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

(4)GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

(5)安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。因此,若是这些数据是中文数据并且是非敏感数据,那么使用 get;若是用户输入的数据不是中文字符并且包含敏感数据,那么仍是使用 post为好。

 

1.7七、Bind和Eval函数的区别

绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名") %> 

1. Eval 单向绑定:数据是只读的 
    Bind 双向绑定:数据能够更改,并返回服务器端,服务器能够处理更改后的数据,如存入数据库. 
2.当对次表达式操做时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %> 
3. 绑定控件的属性时要用Bind,而Eval则是其它一些。 例如

<asp:TextBox ID="First" RunAt="Server" Text='<%# Bind("FirstName") %>' /> 
<td><%# Eval("ProductID") %></td>

 

1.7八、Server.UrlEncode、HttpUtility.UrlDecode的区别 

Server.UrlEncode的编码方式是按照本地程序设置的编码方式进行编码的,HttpUtility.UrlEncode是默认的按照.net的utf-8格式进行编码的。

 

1.7九、如何实现链接池

确保你每一次的链接使用相同的链接字符串(和链接池相同);只有链接字符串相同时链接池才会工做。若是链接字符串不相同,应用程序就不会使用链接池而是建立一个新的链接。

优势

使用链接池的最主要的优势是性能。建立一个新的数据库链接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,并且这个过程一般是一个很耗时的过程。而采用数据库链接池后,数据库链接请求能够直接经过链接池知足而不须要为该请求从新链接、认证到数据库服务器,这样就节省了时间。

缺点

数据库链接池中可能存在着多个没有被使用的链接一直链接着数据库(这意味着资源的浪费)。

技巧和提示

1.当你须要数据库链接时才去建立链接池,而不是提早创建。一旦你使用完链接当即关闭它,不要等到垃圾收集器来处理它。

2.在关闭数据库链接前确保关闭了全部用户定义的事务。

3.不要关闭数据库中全部的链接,至少保证链接池中有一个链接可用。若是内存和其余资源是你必须首先考虑的问题,能够关闭全部的链接,而后在下一个请求到来时建立链接池。

 

1.80、提升.NET的性能 

1 使用异步方式调用Web服务和远程对象

只要有可能就要避免在请求的处理过程当中对Web服务和远程对象的同步调用,由于它占用的是的ASP.NET 线程池中的工做线程,这将直接影响Web服务器响应其它请求的能力。

2 使用适当的Caching策略来提升性能

3 判断字符串,不要用""比较。

//避免 
if(strABC!=null && strABC!="") 
{}

//推荐 
if(!strABC.IsNullOrEmpty) 
{}

4 页面优化

5 用完立刻关闭数据库链接 

6 尽可能使用存储过程,并优化查询语句 

7 只读数据访问用SqlDataReader,不要使用DataSet

……….

 

1.8一、简述你对XML Web Service的原理的认识? 

答:利用SOAP(简单对象访问协议)在http上执行远程方法的调用,也能够使用WSDL(Web服务描述语言)来完成完整的描述Web服务,而后用UDDI注册各个服务提供商提供的服务,以便共享他们。

 

1.82.什么是受管制的代码? 

答:unsafe:非托管代码。不通过CLR运行。

 

1.83.net Remoting 的工做原理是什么? 
答:服务器端向客户端发送一个进程编号,一个程序域编号,以肯定对象的位置。

 

1.84.O/R Mapping 的原理 
答:利用反射,配置将对象和数据库表映射。

 

1.85.remoting和webservice两项技术的理解以及实际中的应用。 
答:WS主要是可利用HTTP,穿透防火墙。而Remoting能够利用TCP/IP,二进制传送提升效率。

 

1.86.out保留字怎么使用,何时使用。
答:有时为了从一个函数中返回多个值,咱们须要使用out关键字,把输出值赋给经过引用传递给方法的变量(也就是参数)。但C#要求变量再被引用的前必须初始化。在调用该方法时,还须要添加out关键字。

 

1.87.PDB是什么东西? 在调试中它应该放在哪里?

答:PDB是用于保存调试和项目状态信息的文件,在debug的时候将产生pdb文件,调试的时候应该放在和对应应用程序集相同目录。

 

1.88.使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?

答:Web服务使用的消息机制,而Remoting采用的RPC. Web Service能用于不一样平台,不一样语言,Remoting只适用于.Net。效率上Remoting高于Xml Web Service。

 

1.89.从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?

这个就像是强弱类型的比较类似,前期绑定是在编译的时候就肯定了要绑定的数据,然后期绑定是在运行的时候才填充数据。因此前期绑定若是失败,会在编译时报编译错误,然后期绑定失败只有在运行时的时候才发生。

 

1.90.概述反射和序列化

反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您能够使用反射动态地建立类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。而后,能够调用类型的方法或访问其字段和属性。

序列化:序列化是将对象转换为容易传输的格式的过程。例如,能够序列化一个对象,而后使用 HTTP 经过 Internet 在客户端和服务器之间传输该对象。在另外一端,反序列化将从该流从新构造对象。

 

1.91.XmlSerializer是如何工做的?使用这个类的进程须要什么ACL权限?

我只知道XmlSerializer是将对象的属性和字段进行序列化和反序列化的,序列化成为xml数据,反序列化再将xml转换成对象。应该至少须要ACL权限中的读权限.

 

1.92.XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?

只序列化有用的数据,而不是序列化整个对象。实现不必的数据冗余,和提高序列化时的性能。

 

1.93.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句得到最后更新的事务号

答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

 

1.94.在对象比较中,对象一致和对象相等分别是指什么?a.Equals(b)和a == b同样吗?

对象一致是指两个对象是同一个对象,引用相同。而对象相等是指两个对象的值相同,但引用不必定相同。

不同。a.Equals(b)表示a与b一致, a==b表示a与b的值相等。

 

1.95.请解释一下IClonable

IClonable方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造方法,建立新的对象,包括建立对象中嵌套的引用对象的新实例。而Shadow复制则不一样,是浅表复制,不从新建立新实例。浅表复制的实现是Object.MemberWiseClone().

深度复制(Deep Copy)与浅表复制(Shadow Copy)

 

1.96.特性可以放到某个方法的参数上?若是能够,这有什么用?

能够,做用能够对参数有进一步限定,好比输入参数为int类型,能够经过容许AttributeTargets=ParameterInfo的Attribute自定义实现来限定输入参数的大小,好比当输入参数小于100的时候便报错。

 

1.97.WEB控件能够激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为何要使用自动传回。 

在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,而后根据传回的状态信息自动调用服务端事件自动传回,当咱们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端 只有经过自动传回才能实现服务端事件的机制,若是没有自动回传机制就只能调用客户端事件,而不能调用服务端事件。

 

1.98.请解释web.config文件中的重要节点 
appSettings包含自定义应用程序设置。 
system.web 系统配置 
compilation动态调试编译设置 
customErrors自定义错误信息设置 
authentication身份验证,此节设置应用程序的身份验证策略 
authorization受权, 此节设置应用程序的受权策略

 

1.99.请解释什么是上下文对象,在什么状况下要使用上下文对象 
上下文对象是指HttpContext类的Current 属性,当咱们在一个普通类中要访问内置对象(Response,Request,Session,Server,Appliction等)时就要以使用此对象

 

1.100. 几十上百万行,如何快速查询出表数据 

答:用分页存储过程 

 

1.101.数据库查询优化: 
一、多态性,多种数据库兼容; 

二、支持翻页,支持查询总数,页码显示; 
三、能处理100万以上数据量; 

 

1.102.两个表,写查询语句,根据两个字段一个是升序,一个将序。 

答:select * from a,b where a.字段1 = b.字段1 order by a.字段2 asc,b.字段2 desc

 

 

1.10三、string与String的区别

string、int是C#定义的类型,而String、Int32是.net类型便是CTS类型; 
string 是 .NET 框架中 System.String 的别名。 
string在编译的时候会转化为String类

 

1.10四、虚方法(virtual )和抽象方法(abstract)的区别?

之一:抽象方法仅有声明,而没有任何实现,如abstract someMethod();,虚方法却不能如此
之二:子类继承父类,能够对父类中的虚方法进行重写、覆盖、不处理三种处理(见5),对抽象方法却必须实现

 

1.10五、子类对父类中虚方法的处理有重写(override)和覆盖(new),请说明它们的区别?

有父类ParentClass和子类ChildClass、以及父类的虚方法VirtualMethod。有以下程序段:
ParentClass pc = new ChildClass();
pc.VirtualMethod(...);
若是子类是重写(override)父类的VirtualMethod,则上面的第二行语句将调用子类的该方法
若是子类是覆盖(new)父类的VirtualMethod,则上面的第二行语句将调用父类的该方法

 

1.10六、抽象类(abstract)和接口(interface)的区别

抽象类能够有本身的实现,接口却仅有声明,能够有本身的静态数据字段;
java和C#中能够实现多个接口,却只能继承一个抽象类(或者非抽象类)(单继承,和c++的多继承不一样);

 

1.107.页面生命周期?

页面生命周期执行一系列步骤:页面的初始化、实例化控件、还原和维护状态、运行事件处理程序代码、呈现。为了在合适的阶段执行所需的代码,因此要对页面生命周期很是熟悉。在页生命周期的各个阶段,页面会逐个引起定义的事件,经过对代码开发,在页面的生命事件中执行咱们所须要的程序;

1.108.页生命周期阶段?
一、页请求:发生在页面生命周期以前,用户请求页时,ASP.NET 将肯定是否须要分析和编译页,从而肯定是否开始页面的生命周期,或者是否能够在不运行页面的状况下发送页面缓存以进行响应;
二、开始:设置页属性,如:HttpContext 以及其余属性;在此阶段,页面须要肯定是回发请求仍是新请求,并设置 IsPostBack 属性;设置页面的 UICulture 属性;
三、页面初始化:加载全部主题;控件生成,并设置 UniqueID;
注:ViewState、ControlState中的值还未加载至控件;若是页面是回发,则回发数据也还未加载;故此时控件能够访问,但值可能出错;
四、加载:若是当前请求是回发请求,则为控件加载 ViewState 和 ControlState 中的值;
五、验证:调用全部验证程序控件的 Validate 方法,此方法将设置验证程序控件和页的 IsValid 属性;
六、回发事件处理:若是请求是回发请求,则调用全部事件处理程序;
七、呈现:首先对该页和全部控件进行保存视图状态,而后对每一个控件调用 Render 方法,它会提供一个文本编写器,用于将控件的输入写入页的 Response 属性的 OutputStream 中;
八、卸载:完成呈现,并已将页发送至客户端、准备丢弃该页后,调用卸载。将卸载属性如:Response和Request等等;

1.109.生命周期事件?大概描述一下ASP.NET服务器控件的生命周期?

1)、PreInit
完成操做:检查IsPostBack属性来肯定是否是第一次处理该页;建立或从新建立动态控件;动态设置主控页;动态设置Theme属性;读取或设置配置文件属性;
注:若是请求是回发请求,则控件的值还没有从视图状态恢复,即:不该该在此事件中设置控件属性。
2)、Init
完成操做:在全部控件都已经初始化而且应用全部外观设置后引起。使用该事件来读取和初始化控件属性;
3)、InitComplete
完成操做:由Page对象引起,使用该事件来处理要求完成全部初始化工做的任务;
4)、PreLoad
完成操做:为页和全部控件加载视图状态,而后处理 Request 实例包括的任何回发数据;
注:若是须要在Load以前对页或控件进行处理,须要该事件;
5)、Load
完成操做:以递归方式加载全部控件;
6)、控件事件
完成操做:处理控件引起的事件;
注:在回发请求中,若是页包含验证程序控件,请在执行任何处理以前检查Page和各个验证控件的IsValid属性;
7)、LoadComplete
8)、PreRender
在控件输出前最后的修改机会;
注:在该事件发生前的操做:Page对全部控件递归进行EnsureChildControl操做、设置了DataSourceID属性的数据绑定控件会调用DataBind方法;
9)、SaveStateComplete
在该事件发生前,已经对控件的ViewState进行了保存。
10)、Render
11)、UnLoad
服务器控件的生命周期初始化、加载视图状态、处理回发数据、加载、发送回发更改通知、处理回发事件、预呈现、保存状态、呈现、处置、卸载;

1.110.应用程序生命周期?
在应用程序的生命周期期间,应用程序会引起可处理的事件并调用可重写的特定方法。若要处理应用程序事件或方法,能够在应用程序根目录中建立一个名为 Global.asax 的文件。若是建立了 Global.asax文件,ASP.NET 会将其编译为从 HttpApplication 类派生的类,而后使用该派生类表示应用程序;
HttpApplication 进程的一个实例每次只处理一个请求。因为在访问应用程序类中的非静态成员时不须要将其锁定,这样能够简化应用程序的事件处理过程。这样还能够将特定于请求的数据存储在应用程序类的非静态成员中。例如,能够在 Global.asax 文件中定义一个属性,而后为该属性赋一个特定于请求的值;
Application_Start 和 Application_End 方法是不表示 HttpApplication 事件的特殊方法。在应用程序域的生命周期期间,ASP.NET 仅调用这些方法一次,而不是对每一个 HttpApplication 实例都调用一次;


1.111.ASP.NET 页面在何时产生?又在何时销毁?
1)、Page_Init() —— 初始化对象
这一过程主要是初始化包括页面自己的全部控件,每次的页面载入就会执行一次初试过程,而在这里面访问到的也是控件的初始值。还有就是能够经过OnInit()来重载初试化事件;
2)、LoadViewState() —— 导入ViewState数据
在初试化事件后,在 LoadViewState 事件中全部控件将得到他们的第一个属性 ViewState 属性,这个属性最终将被返回给服务器以判断这个页面是已经被用户访问完毕仍是仍然在被用户所访问。也可重 LoadViewState 事件对相应的控件进行值设定;
3)、LoadPostData() —— 用 LoadPostData 处理 Postback 数据
Postback数据也能够理解成就是服务器页面提交的表单数据,每一次表单数据的提交都会触发执行 IPostBackDataHandler 接口操做的控件;
4)、Page_Load() —— 导入对象
这个过程就比较熟悉了,也是在页面的每次载入时必定会执行,可是注意和 PageInit() 之间的区别,全部的对象第一次被布置在 DOM 页面(在ASP.NET中称控件树)里了而且能够经过代码或是相关的位置被引用。这样,对象就能够很容易的从客户端得到诸如宽度、高度、值、可见性等在 HTML中的属性值。常常会用到的Page.IsPostBack()指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问;
5)、Handle Control Events —— 具体的控件事件
这个过程执行的是相应具体控件事件;
6)、Page_PreRender() —— 预先呈递对象
预先呈递对象能够改变对象并将改变保存的最后时刻。能够对控件的属性、控件树的结构等作出最后的修改,同时还不用考虑ASP.NET对其做出任何改变,由于此时已经脱离了数据库调用以及 ViewState 更新了,也能够经过OnPreRender来重载;
7)、Page_Render() —— 呈递对象呈递页面
全部对页面控件的修改完成后 ViewState就被保存了。运用HTML建立给浏览器输出的页面的时候Render事件就发生了。在Render事件过程当中,页面调用其中的对象将它们呈递给HTML。而后,页面就能够以HTML的形式被用户的浏览器访问了。当Render事件被重载时,开发者能够编写自定义的HTML代码使得原先生成的HTML都无效而按照新的HTML来组织页面。Render方法将一个 HtmlTextWriter 对象做为参数并用它将HTML在浏览器上以网页的形式显示。这时仍然能够作一些修改动做,不过它们只是客户端的一些变化而已了。亦能够重载Render事件;
8)、Unload event —— 卸载对象
当想服务器请求一个对象的时候,就会在内存里生成一个继承页面对象,也就是页面的类,它继承自System.Web.UI.Page。当页面对象从内存中卸载时发生,将触发该事件;
9)、Dispose method called
在呈递给HTML完成后,全部的对象都应被销毁。在Dispose事件中,你应该销毁全部在创建这个页面时建立的对象。这时全部的处理已经完毕,因此销毁任何剩下的对象都是不会产生错误的,包括页面对象。你能够重载Dispose事件;

 

1.1十二、String str=new String("a")和String str = "a"有什么区别?

String str = "a"; 这个只是一个引用,内存中若是有“a"的话,str就指向它,若是没有才建立若是你之后还用到"a"这个字符串的话而且是这样用: String str1 = "a"; String str2 = "a"; String str2 = "a"; 这4个变量都共享一个字符串"a" 而String str = new String("a");是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str

 

1.11三、判断字符串变量str是否为空的一下三种方法哪一个性能更优:a、str=="";b、str==String.Empty;c、str.Length==0;?

答案是c;缘由我就不说了。

 

补充:

若是你的简历上面写“熟悉/了解C#”,那么你就应该可以回答下面的这些基础问题。

  1. 传入某个属性的set方法的隐含参数的名称是什么?
    value,它的类型和属性所声名的类型相同。
  2. 如何在C#中实现继承?
    在类名后加上一个冒号,再加上基类的名称。
  3. C#支持多重继承么?
    不支持。能够用接口来实现。
  4. 被protected修饰的属性/方法在何处能够访问?
    在继承或间接继承与这个类的子类中能够访问。
  5. 私有成员会被继承么?
    会,可是不能被访问。因此看上去他们彷佛是不能被继承的,但实际上确实被继承了。
  6. 请描述一下修饰符protected internal。 
    被protected internal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问。
  7. C#提供一个默认的无参数构造函数,当我实现了另一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?
    两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,因此须要手动实现那个无参数构造函数。
  8. C#中全部对象共同的基类是什么?
    System.Object.
  9. 重载和覆写有什么区别?
    重载提供了对一个方法签名的不一样参数调用的实现。覆写提供了子类中改变父类方法行为的实现。
  10. 在方法定义中,virtual有什么含意? 
    被virtual修饰的方法能够被子类覆写。
  11. 可以将非静态的方法覆写成静态方法么?
    不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改成override。
  12. 能够覆写私有的虚方法么?
    不能够,甚至子类中没法访问父类中的私有方法。
  13. 可以阻止某一个类被其余类继承么? 
    能够,使用关键字sealed。
  14. 可以实现容许某个类被继承,但不容许其中的某个方法被覆写么? 
    能够,标记这个类为public,并标记这个方法为sealed。
  15. 什么是抽象类(abstract class)?
    一种不能够被实例化的类。抽象类中通常含有抽象方法,固然也可有具体实现。继承类只有实现过全部抽象类的抽象方法后才能被实例化。
  16. 什么时候必须声明一个类为抽象类? 
    当这个类中包含抽象方法时,或是该类并无彻底实现父类的抽象方法时。
  17. 接口(interface)是什么?
    只含有共有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。
  18. 为何不能指定接口中方法的修饰符? 
    接口中的方法用来定义对象之间通讯的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。
  19. 能够继承多个接口么? 
    固然。
  20. 那么若是这些接口中有重复的方法名称呢? 
    这种状况中你能够决定如何实现。固然须要特别得当心。可是在编译环节是没有问题的。
  21. 接口和抽象类的区别是什么? 
    接口中全部方法必须是抽象的,而且不能指定方法的访问修饰符。抽象类中能够有方法的实现,也能够指定方法的访问修饰符。
  22. 如何区别重载方法? 
    不一样的参数类型,不一样的参数个数,不一样的参数顺序。
  23. const和readonly有什么区别?
    const关键字用来声明编译时常量,readonly用来声明运行时常量。
  24. System.String 和System.StringBuilder有什么区别?
    System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法。 

 


若是你的简历上面说“精通.NET”,那么下面的问题应该大均可以给出较完美的答案。

注:对于每一个判断是非问题,都要考虑“为何”与“为何不”。

  1. Thread和Process之间有什么区别?.NET新引入了Application Domain的概念,这样他们三个之间有什么区别?引入了Application Domain会带来一些潜在的问题么?
  2. Windows Service与普通的EXE在执行过程当中有什么区别?
  3. 一个进程能够访问的Windows地址空间有多大?等于系统的虚拟内存大小么?这两方面将对系统的设计产生什么样的影响?
  4. EXE和DLL之间的区别是什么?在系统设计中应该如何选择使用它们?
  5. 普通的EXE与.NET EXE的执行过程有什么不一样?
  6. 什么是弱类型,什么是强类型?在系统设计中应该首先考虑使用哪一种类型?
  7. PDB文件是做什么用的?里面包含了什么信息?
  8. Cycloramic Complexity是什么?为何它很重要?
  9. 为建立一个critical section以访问某个变量书写一个标准的lock() 并加上double check。
  10. 为某个对象实现标准的Dispose模式。
  11. 什么是FullTrust? 存在于GAC中的 assembly 拥有FullTrust么?
  12. 下面这个命令是作什么的?gacutil /l | find /i “system”
  13. 下面这个命令是做什么的? sn -t something.dll
  14. 跨防火墙的 DCOM必须打开哪一个端口?端口135是用来作什么的?
  15. 有什么办法能够与现有unmanaged code集成?在集成的时候应该考虑什么问题?
  16. 简要解释一下OOP与SOA都是用来做什么的?
  17. XmlSerializer是如何工做的?进程运行XmlSerializer时候须要什么样的ACL权限?
  18. 在系统设计时,什么时候应该使用try catch?什么时候须要避免使用?
  19. Debug.Write()和Trace.Write()之间有什么区别?两者分别应该用于何处?
  20. Debug Build和Release Build有什么区别?在执行效率上有什么明显的区别么?
  21. JIT是针对Assembly仍是Method发生的?解释一下为何.NET的设计者要这样作?
  22. 简要描述一下GC的执行过程。
  23. 应该如何选择使用abstract class仍是interface?
  24. 在设计一个自定义类型时应如何选择使用Value Type仍是Reference Type?
  25. 对于Value Type和Reference Type,a.Equals(b)的默认实现方式有什么不一样?
  26. .NET中为何不提供默认的deep copy?若是须要,要如何实现deep copy?
  27. 相对于.NET 1.1,.NET2.0为了不过分的boxing/unboxing形成的系统开销提供了哪些支持?
  28. String是Value Type仍是Reference Type?为何.NET中的String对象被设置成immutable?

 

2、C# 笔试

2.1.using关键字有什么用?什么是IDisposable?

using能够声明namespace的引入,还能够实现非托管资源的释放,实现了IDisposiable的类在using中建立,using结束后会自动调用该对象的Dispose方法,释放资源。using其实等价于try……finally,用起来更方便。

 

2.2.Assembly.Load("foo.dll"); 这句话是否正确?

错误,正确的应该是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll");

 

2.3.XML 与 HTML 的主要区别

(1)XML是区分大小写字母的,HTML不区分。

(2)在HTML中,若是上下文清楚地显示出段落或者列表键在何处结尾,那么你能够省略</p>或者</li>之类的结束 标记。在XML中,绝对不能省略掉结束标记。

HTML:<img src="1.jpg"><br><br>

XML:<img src="1.jpg"></img><br/><br/>

(3)在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符做为结尾。这样分析器就知道不用 查找结束标记了。

(4)在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

(5)在HTML中,能够拥有不带值的属性名。在XML中,全部的属性都必须带有相应的值。

XML是用来存储和传输数据的,HTML是用来显示数据的

 

2.4.string str = null 与 string str = “”说明其中的区别。

答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 string str = null没有string对象,string str = “”有一个字符串对象。

 

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

答:解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)

解3:select id,row_number() over (order by id) as rowNum from A where rowNum between 31 and 40(推荐)

 

2.6.面向对象的语言具备________性._________性.________性

答:封装.继承.多态。

 

2.7.在.Net中全部可序列化的类都被标记为_____?

答:[serializable]

 

2.8.在.Net托管代码中咱们不用担忧内存漏洞,这是由于有了______?

答:GC。

 

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

应用程序域为安全性.可靠性.版本控制以及卸载程序集提供了隔离边界。应用程序域一般由运行库宿主建立,运行库宿主负责在运行应用程序以前引导公共语言运行库。应用程序域提供了一个更安全.用途更广的处理单元,公共语言运行库可以使用该单元提供应用程序之间的隔离。

受管制的代码:在.Net环境中运行的任何代码都是受管制的代码(managed code),.Net外部的代码也运行在windows上,这些代码称为未受管制的代码(unmanaged code)。

使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具备许多优势,例如:跨语言集成.跨语言异常处理.加强的安全性.版本控制和部署支持.简化的组件交互模型.调试和分析服务等。

强类型语言是可以禁止任何违反类型系统的代码的语言,或者说是可以捕获全部违反类型系统的错误的语言。咱们说C++相对于C是强类型的,是由于C++禁止了一些C中的隐式转换,好比将void*转换为任意的指针类型。

装箱和拆箱使值类型可以被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型能够存储于垃圾回收堆中。拆箱将从对象中提取值类型。

每一个类型成员都有一个惟一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不一样,就能够在一种类型内定义具备相同名称的多种方法。当定义两种或多种具备相同名称的方法时,就称做重载。

CTS通用类型系统 (common type system)

一种肯定公共语言运行库如何定义.使用和管理类型的规范。

CLR公共语言运行库

.NET Framework 提供了一个称为公共语言运行库的运行时环境,它运行代码并提供使开发过程更轻松的服务。

CLS公共语言规范

要和其余对象彻底交互,而无论这些对象是以何种语言实现的,对象必须只向调用方公开那些它们必须与之互用的全部语言的通用功能。为此定义了公共语言规范 (CLS),它是许多应用程序所需的一套基本语言功能。

 

2.10.什么是code-Behind技术。

就是代码隐藏,在ASP.NET中经过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的建立。好比分工,美工和编程的能够个干各的,不用再像之前asp那样都代码和html代码混在一块儿,难以维护。

 

2.11.接口是一种引用类型,在接口中能够声明方法.属性.索引器和事件,但不能够声明公有的域或私有的成员变量。

 

 

2.12. 在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。

 a) insert.update.delete等操做的Sql语句主要用ExecuteNonQuery()方法来执行;

b) ExecuteNonQuery()方法返回执行Sql语句所影响的行数。

 c) Select操做的Sql语句只能由ExecuteReader()方法来执行;

 d) ExecuteReader()方法返回一个DataReder对象;

解答:ExecuteScalar→select getdate()。

 

 

2.13.下列关于C#中索引器理解正确的是(c )

 a) 索引器的参数必须是两个或两个以上

 b) 索引器的参数类型必须是整数型

 c) 索引器没有名字

 d) 以上皆非

 

2.14. 要建立多文档应用程序,须要将窗体的(d )属性设为true。

a) DrawGrid;

b) ShowInTaskbar;

c) Enabled;

d) IsMdiContainer;

 

2.15.若是设treeView1=new TreeView(),则treeView1.Nodes.Add("根节点")返回的是一个 (a)类型的值。

a) TreeNode;

b) int;

c) string;

d) TreeView;

 

2.16.下面关于XML的描述错误的是(d)。

a) XML提供一种描述结构化数据的方法;

b) XML 是一种简单.与平台无关并被普遍采用的标准;

c) XML文档可承载各类信息;

d) XML只是为了生成结构化文档;

 

2.17.如下的C#代码,试图用来定义一个接口:

public interface IFile
{
int A;
int delFile()
{
   A = 3;
}
void disFile();
}

 

关于以上的代码,如下描述错误的是(d )。

a) 以上的代码中存在的错误包括:不能在接口中定义变量,因此int A代码行将出现错误;

b) 以上的代码中存在的错误包括:接口方法delFile是不容许实现的,因此不能编写具体的实现函数;

c) 代码void disFile();声明无错误,接口能够没有返回值;

d) 代码void disFile();应该编写为void disFile(){};空和null不同。

 

2.18.在ASP.NET中有Button控件myButton,要是单击控件时,导航到其余页面http://www.abc.com, 正确的代码为( c)。

a) private void myButton_Click(object sender, System.EventArgs e){Redirect(“http://www.abc.com”);}

b) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);}

c) private void myButton_Click(object sender, System.EventArgs e){Reponse.Redirect(“http://www.abc.com”);}

d) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);return true;}

 

2.19.声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是(b )。

a) void myCallBack(int x) ;

b) int receive(int num) ;

c) string receive(int x) ;

d) 不肯定的;

 

2.20.StringBuilder 和 String 的区别?

答:String 在进行运算时(如赋值.拼接等)会产生一个新的实例,而 StringBuilder 则不会。因此在大量字符串拼接或频繁对某一字符串进行操做时最好使用 StringBuilder,不要使用 String

若是要操做一个不断增加的字符串,尽可能不用String类,改用StringBuilder类。两个类的工做原理不一样:String类是一种传统的修改字符串的方式,它确实能够完成把一个字符串添加到另外一个字符串上的工做没错,可是在.NET框架下,这个操做实在是划不来。由于系统先是把两个字符串写入内存,接着删除原来的String对象,而后建立一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了很多时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,可以在已有对象的原地进行字符串的修改,简单并且直接。固然,通常状况下觉察不到这两者效率的差别,但若是你要对某个字符串进行大量的添加操做,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

 

2.21.请叙述属性与索引器的区别。 

属性 索引器

经过名称标识。 经过签名标识。

经过简单名称或成员访问来访问。 经过元素访问来访问。

能够为静态成员或实例成员。 必须为实例成员。

属性的 get 访问器没有参数。 索引器的 get 访问器具备与索引器相同的形参表。

属性的 set 访问器包含隐式 value 参数。 除了 value 参数外,索引器的 set 访问器还具备与索引器相同的形参表。

 

2.22.请叙述const与readonly的区别。

const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。

const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。由于它是在编译时就须要彻底评估。

const成员能够使用另外一个const成员来初始化,前提是二者之间没有循环依赖。

readonly在运行期评估赋值,使咱们得以在确保“只读访问”的前提下,把object的初始化动做推迟到运行期进行。

readonly 关键字与 const 关键字不一样: const 字段只能在该字段的声明中初始化。readonly 字段能够在声明或构造函数中初始化。所以,根据所使用的构造函数,readonly 字段可能具备不一样的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数。

readonly 只能在声明时或者构造函数里面初始化,而且不能在 static 修饰的构造函数里面。

参考资料:

http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html

http://www.cnblogs.com/jams742003/archive/2010/03/23/1692913.html

http://www.cnblogs.com/wayfarer/archive/2006/04/27/386658.html

 

2.23.请解释ASP。NET中的web页面与其隐藏类之间的关系?

一个ASP.NET页面通常都对应一个隐藏类,通常都在ASP.NET页面的声明中指定了隐藏类例如一个页面Tst1.aspx的页面声明以下

<%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.aspx.cs" 代表经编译此页面时使用哪个代码文件,Inherits="T1.Tst1" 表用运行时使用哪个隐藏类

 

2.24.什么是viewstate,可否禁用?是否所用控件均可以禁用?

Viewstate是保存状态的一种机制,EnableViewState属性设置为false便可禁用。最有力的举例子:Label.TextBox在禁用ViewState后不一样的表现来讲明。

 

2.25.你对web service的体会?

答:若是本身写的一些程序也但愿别人能够经过Web服务来使用,也能够把本身编写的方法贴上标签[WebMethed]来实现Web 服务。[是当编写程序时,但愿实现一些别的网站已经实现过的,也用Web服务可视成XML语言的编码。能够使用别人的编码生成的XML找到本身须要的信息,来实现本身编写的程序的一些功能。

 

2.26.您在什么状况下会用到虚方法?它与接口有什么不一样?

答案:子类从新定义父类的某一个方法时,必须把父类的方法定义为virtual

在定义接口中不能有方法体,虚方法能够。

实现时,子类能够不从新定义虚方法,但若是一个类继承接口,那必须实现这个接口。

 

2.27.不定项选择:

(1) 如下叙述正确的是: B C

A. 接口中能够有虚方法。B. 一个类能够实现多个接口。 C. 接口不能被实例化。 D. 接口中能够包含已实现的方法。

 

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

A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader

 

(3)对于一个实现了IDisposable接口的类,如下哪些项能够执行与释放或重置非托管资源相关的应用程序定义的任务?(多选) ( ABC )

A.Close B.Dispose C.Finalize D.using E.Quit

 

(4)如下关于ref和out的描述哪些项是正确的?(多选) ( ACD )

A.使用ref参数,传递到ref参数的参数必须最早初始化。

B.使用out参数,传递到out参数的参数必须最早初始化。

C.使用ref参数,必须将参数做为ref参数显式传递到方法。

D.使用out参数,必须将参数做为out参数显式传递到方法。

 

2.28.单项选择:

(1)下列选项中,(C)是引用类型。

a)enum类型 b)struct类型 c)string类型 d)int类型

 

(2).关于ASP.NET中的代码隐藏文件的描述正确的是(C)

a)Web窗体页的程序的逻辑由代码组成,这些代码的建立用于与窗体交互。编程逻辑惟一与用户界面不一样的文件中。该文件称做为“代码隐藏”文件,若是用C#建立,该文件将具备“.ascx.cs”扩展名。

b)项目中全部Web窗体页的代码隐藏文件都被编译成.EXE文件。

c)项目中全部的Web窗体页的代码隐藏文件都被编译成项目动态连接库(.dll)文件。

d)以上都不正确。

 

(3).下列描述错误的是(D)

a)类不能够多重继承而接口能够;

b)抽象类自身能够定义成员而接口不能够;

c)抽象类和接口都不能被实例化;

d)一个类能够有多个基类和多个基接口;

 

2.29.DataReader和DataSet的异同?

DataReader使用时始终占用SqlConnection,在线操做数据库,每次只在内存中加载一条数据,因此占用的内存是很小的,是只进的. 只读的

DataSet则是将数据一次性加载在内存中.抛弃数据库链接..读取完毕即放弃数据库链接(非链接模式),将数据所有加载在内存中.因此比较消耗内存...可是确比DataReader要灵活..能够动态的添加行,列,数据.对数据库进行 回传更新操做(动态操做读入到内存的数据)

 

2.30.public static const; int A = 1;这段代码有错误么?

错误:const不能被修饰为static ;由于定义为常量 (const )后就是静态的(static )。

 

2.3一、下面程序的执行结果是什么?

int i = 10;
Console.WriteLine(i++);
Console.WriteLine(++i);
Console.WriteLine(i=20);

 

答案:

10

12

20

 

2.3二、下列哪一个名词和WebService不直接相关?(B)

A、UDDI

B、GUID

C、WSDL

D、SOAP

SOAP和HTTP的关系:SOAP基于Http协议的,和普通网页不一样的是网页返回HTML,SOAP则是符合SOAP协议的XML数据。

 

 

2.3三、下面程序的执行结果是什么?

int i = 10;
if (i <=0);
Console.WriteLine("i必须大于0");
Console.WriteLine("ok");

 

答案:

i必须大于0

ok

解答:注意if (i <=0)后面的“;”,因为有了“;”,因此Console.WriteLine("i必须大于0")再也不是和if一块儿的一部分,而是独立的语句。for循环也是如此。

 

2.3四、下面程序的执行结果是什么?

static void Main(string[] args)
{
    Console.WriteLine(Calc());
    Console.ReadKey();
}

static int Calc()
{
    int i = 0;
    try
    {
        return i;
    }
    finally
    {
        Console.WriteLine("finally");
        i++;
    }
}

 

答案:

finally

0

解答:return先执行,finally后执行,因此return的值是没有i++以前的0。注意并非return的时候函数真的就“返回、执行结束”了,return只是标记函数的返回值是0,标记完了还会执行finally中的代码,只有finally中的代码执行完成后函数才真正的返回。

 

 2.3五、在下述选项时,没有构成死循环的程序是 (C)

A.int i=100;while (1) { i=i%100+1; if (i>100) break; }

B.for (;;);

C.int k=1000; do { ++k; }while(k>=10000);

D.int s=36; while (s);--s;

 

2.3六、下列哪一个是和数据库访问技术关系不大的技术(C)

A、SQLHelper

B、EnterPrise Library

C、AppDomain

D、Linq

 

2.3七、下列哪些说法是错误的(AC)

A、将bmp格式的文件修改成jpg是修改图片格式最简单的方法

B、将QQ动态表情显示在网页上用gif格式比较好

C、将bmp格式的图片放到网页中能够优化网站速度

D、png格式用在网页中能够实现透明的效果。

答案:A、C。A错误是由于修改文件的后缀并无真的修改文件的格式,要使用Photoshop、mspaint等图片处理工具进行转换才能够。C错误是由于在网页中不能使用bmp图片。

 

2.3八、从如下简写中任选一个简单描述

OA(Office Automation):办公自动化

MIS(Managment Information system):管理信息系统

HRM(Human Resource Managment):人力资源管理,包括员工管理、薪资管理、入职管理、离职管理、报销管理、请假管理等

CRM(Customer Relation Managment):客户关系管理系统,包括客户管理、客户关怀、客户回访、投诉管理、咨询管理、报修管理等

KM(Knowledge Managment):知识管理

 

2.3九、下面程序的执行结果是什么?

public struct Point
{
    public int x;
    public int y;
    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}
Point p1 = new Point(100, 100);
Point p2 = p1;
p1.x = 200;
Console.WriteLine("{0},{1}", p1.x, p2.x);

 

答案:

200,100

解答:结构体是复制传递的。

相关文章
相关标签/搜索