.NET培训
美国上市.NET培训机构

400-111-8989

热门课程

2017版.NET最新面试题集锦

  • 时间:2017-09-28
  • 发布:.Net培训
  • 来源:NET面试题

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

答:使用QueryString,如.../id=1;response.Redirect()

使用Session

使用Server.Transfer

使用Cookie

2、简述private、protected、public、internal修饰符的访问权限。

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

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

public:公开成员,没有访问限制

internal: 当前程序集可以访问

3、简述ADO.NET中的五个主要对象。

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

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

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

4、请简述.NET中类与结构的异同。

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

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

int32、boolean都属于结构。

5、override与重载(overload)的区别。

答:重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。

重载是面向过程的概念。override是进行基类中函数的重写,是面向对象的概念。

6,什么是面向对象

面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗的解释就是万物皆对象,把所有的事物都看作一个个可以独立的对象(单元),它们可以自己完成自己的功能,而不是像C那样分成一个个函数; 现在纯正的OO语言主要是java和C#,C++也支持OO,C是面向过程的。

7、new有几种用法?

答:1、new Class();

2、覆盖方法,public new XXXX();

3、new() 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数

8、用sealed修饰的类有什么特点?

答:sealed修饰符用于防止从所修饰的类派生出其他类。如果一个密封类指定为其他类的基类,则会发生编译错误。

密封类不能同时为抽象类。

sealed修饰符主要用于防止非有意的派生,他还能促使某些运行时优化。

String就是用sealed修饰的密封类,所以不能被继承。

9、在.NET中,配件的意思是?

答:程序集。(中间IL语言、元数据、资源、装配清单)

10、一个数组:1,1,2,3,5,8,13,21...,求第30位数是多少?

答:int[] arr = new int[30];

arr[0] = 1;

arr[1] = 1;

for (int i = 2; i < arr.Length; i++)

{

arr[i] = arr[i-1] + arr[i-2];

}

Console.WriteLine(arr[29]);

Console.ReadLine();

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

答:简单来说,多态是具有表现多种形态的能力特征,在OO中是指,语言根据对象的类型的不同,以不同的方式处理。

特别是重载方法和继承类这种形式的能力。

多态被认为是面向对象语言的必备特性。

面向对象的语言使用虚方法表达多态。

这意味着派生类可以有和父类具有同样签名的方法,并且父类可以调用派生类的方法。

在C#中,必须使用virtual关键字才能使方法被父类调用。

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

12、请编程遍历winform窗口上所有TextBox控件,并给它的Text属性赋值为string.Empty。

答:using System.Windows.Forms;

foreach (Control control in this.Controls)

{

if(control is TextBox)

{

TextBox tb = (TextBox)control;

tb.Text = String.Empty;

}

}

13、什么是装箱(inboxing)和拆箱(unboxing)。

答:装箱:将一个值类型隐式地转换成一个object类型,或把这个值类型转换成一个被该值类型应用的接口类型,把一个值类型的值装箱,就是创建一个object实例并将值复制给这个object

拆箱:和装箱相反,拆箱转换是指将一个对象类型显式地转换成一个值类型,或将一个接口类型显式地转换成一个执行该接口的值类型。

object obj = null;

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

int num = (int)obj;// 拆箱,显示类型转换。

14、如何理解三层架构。

答:三层架构就是将整个业务应用划为:表现层、业务逻辑层、数据访问层。

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

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

业务逻辑层:针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

数据访问层:该层所做事务直接操作数据库,针对数据的增删改查等。

每层之间是一种垂直关系。

三层架构是N层架构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口前,上层代码是无法开发的,下层代码接口的变化将使上层的代码一起变化。

优点:分工明确,条理清晰,易于调试,而且具有扩展性。

缺点:增加系统复杂度,增加成本。

15、写一个冒泡排序(从小到大)。

答:int[] myInts = { 11, 22, 33, 44, 55 ,66};

int temp = 0;

int count = 0;

for (int i = 1; i <= myInts.Length - 1; i++)

{

//bool 是否需要排序 = false;

for (int j = myInts.Length - 1; j >= i; j--)

{

if (myInts[j] < myInts[j - 1])

{

temp = myInts[j];

myInts[j] = myInts[j - 1];

myInts[j - 1] = temp;

}

count++;

}

}

16、数据库三范式是什么?

答:1NF,确保每列保持原子性

2NF,确保表中的每列都和主键相关

3NF,确保每列都和主键列直接相关,而不是间接相关

17、能用foreach遍历访问的对象有什么要求?

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

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

答:GC是垃圾收集器。

程序员不用担心内存管理,因为垃圾收集器会自动进行管理。

GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC回 收 内存,必须由程序员手工回收。

19、说出五个集合类。

答:List、Dictionary、Stack、Queue、Tree等

20、不用JQuery等库,原生JS使用AJAX实现登陆。

答:window.onload = function () {

document.getElementById('btn').onclick = function () {

var username = document.getElementById('username').value;

var password = document.getElementById('password').value;

var xhr = new XMLHttpRequest();

xhr.open('POST','/url?username=' + username + '&password=' + password, true);

xhr.onreadystatechange = function () {

if(xhr.readyState === 4) {

if (xhr.status === 200) {

alert('登陆成功')

} else {

alert('登陆失败')

}

}

}

}

}

21、你觉得如何才能提高代码的效率和性能(可以列举多种思路,越多越好)?

答:可以根据业务流程、业务数据的特点进行优化,比如可以采用缓存、 索引等来提高代码的效率和性能。

同时不要进行无意义的代码优化,重点优化系统的性能瓶颈。

按照设计模式去编写代码,彻底的面向对象编程,多用委托事件。

尽量做到方法的每一个实现代码只写一遍。

22、什么是Code-Behind技术?

答:Code-Behind是代码隐藏。

在ASP.NET中通过ASPX页面指向CS文件的方法显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。

Code-Behind是基于部分类技术实现的。

23、using关键字有什么用?什么是IDisposable?

答:using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposable的类在using中创建对象,using结束后会自动调用Dispose方法,释放资源。

using其实等价于于try...finally,用起来更方便。

24、String是值类型还是引用类型?它是如何工作的。

答:String是引用类型。

String的值是不可变的,当对String类型的对象重新赋值时,这个对象的引用指向就会变成一个新的引用,而原来的那个值并没有改变,只是引用改变了。

25、简述堆与栈的区别。

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

堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。

26、有一个8个数的数组{1,2,3,3,4,5,6,6},计算其中不重复数字的个数。

答:int values = {1,2,3,3,4,5,6,6};

HashSet<int> set = new HashSet<int>();

foreach(int i in values)

{

set.Add(i);

}

Console.WriteLine(set.Count)

27、是否可以从一个static方法内部发出对非static方法的调用?

答:不可以。因为非static方法与对象相关联,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。

也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中调用一个非static方法,那么非static方法没有关联的对象,所以不可以。

28、说出一些常用类、接口,请各列举5个。

答:类:StreamReader、StringBuilder、SqlConnection、FileStream、File、Regex

接口:IDisposable、IEnumerable、IComparable、ICollection、IList

29、C#支持多重继承么?

答:类之间不支持,接口之间支持。

类对接口叫做实现,不叫继承。

类是爹、接口是能力,能力可以有多个,但不能有多个爹。

30、简单说明数据库建立索引的优缺点。

答:优点,使用索引可以加快数据的查询速度。

缺点,插入数据过程中会建立索引,所以会降低数据的插入、更新速度,还会占用磁盘。

如果一个表查询比写入频繁可以建立索引,如果写入比查询频繁,就不建议建立索引。

31、SQL注入漏洞产生的原因?如何防止。

答:程序开发过程中不注意书写sql语句和对特殊字符进行过滤,导致客户端可以提交一些sql语句正常执行。

1、sql语句尽量不要省略引号和单引号。

2、过滤掉SQL语句中的一些关键字。

3、控制错误信息,不要再浏览器上输出错误信息。

4、使用SqlParameter类,尽量不要拼接字符串SQL语句。

上一篇:经典.NET面试题目(一)
下一篇:没有下一篇了
选择城市和中心
贵州省

广西省

海南省