码迷,mamicode.com
首页 > Windows程序 > 详细

C#面试常见题目

时间:2017-10-22 23:30:34      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:nal   ted   能力   man   url   它的   .net   this   net   

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

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

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

2、GC是什么? 为什么要有GC?

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

要请求垃圾收集,可以调用下面的方法:GC.Collection()一般不需要手动调用GC.Collection()。

3、new 关键字用法

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

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

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

4、C# ref与out区别: 

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

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

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

5、概述反射和序列化

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

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

6、简述 private、 protected、 public、 internal、protected internal 访问修饰符和访问权限

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

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

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

internal: 当前程序集内可以访问。

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

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

7、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 对象操作数据结果。

 

8、列举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是有浏览器参与的,所以在地址栏中可以看到地址的变化。

 

9、C#中的委托是什么?事件是不是一种委托?事件和委托的关系

委托可以把一个方法作为参数代入另一个方法。

委托可以理解为指向一个函数的指针。

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

10、System.String 和System.StringBuilder有什么区别?
   答:System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法。

11、在c#中,using和new这两个关键字有什么意义?
   答:using 引入名称空间或者使用非托管资源。
   new 新建实例或者隐藏父类方法。

12、const和readonly有什么区别?
   答:const关键字用来声明编译时常量。
     readonly用来声明运行时常量。

 

13.什么是存储过程?有什么优点?

答:存储过程是一组予编译的SQL语句

    它的优点:1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。

              2.允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。

               3.减少网络流量,例如一个需要数百行的SQL代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。

        4.更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。

 

14、类成员有_____种可访问形式?

答:this.; newClass().Method;

 

15、请简述面向对象的多态的特性及意义!

答:面向对象的编程使用了派生继承以及虚函数机制.一个本来指向基类的对象指针可以指向其派生类的.并访问从基类继承而来的成员变量和函数.而虚函数是专门为这个特性设计的,这个函数在每个基类的派生类中都是同一个名字,但函数体却并不一定相同,派生类往往为实现自己的功能而修改这个虚函数.这样用一个指针就能够实现对多种不同的派生类的访问, 并实现其派生类的特定功能(代码 )

16、NEW和Using的区别是什么?

new有两种用法:1.实例化一个对象 2.声明隐藏方法
using两种用法;1.调用命名空间 2.声明一个生存区间,在区间之外,区间内声明的变量自动消亡,被回收

17、写出一条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(推荐)

 

C#面试常见题目

标签:nal   ted   能力   man   url   它的   .net   this   net   

原文地址:http://www.cnblogs.com/witkeydu/p/7712169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!