.net 面试题目答案及总结(一)
net面试试题 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一程序集内可以访问。 2 .列举 页面之间传递值的几种方式。 答get请求、post请求、Session、Application、Cookie、ViewState 3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 4.C#中的委托是什么?事件是不是一种委托? 答: 委托是引用数据类型,可以把一个方法作为参数传递给委托。 委托可以理解为指向一个函数的引用。 事件是一种特殊的委托 5.override与重载的区别? 答重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 6请指出GAC的含义? 答:全局程序集缓存。全局程序集缓存 (global assembly cache, GAC) 计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称。 .Net提供的命令行工具gacutil.exe用于支持这一功能。gacutil.exe可以将具有强名称的程序集添至全局程序集缓存。7.向服务器发送请求有几种方式? 答:http://
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
8.DataReader与Dataset有什么区别? 答:DataRead表示一个只读向前的数据读取器,在读取数据的过程中需要保存与数据库的连接(连接式访问) DataSet:数据集,数据从数据库中读取后保存在内存,因此读取数据时不需要保存与数据库的连接(断开式访问)
DataReader对象是一个简单的数据集,用于从数据源中检索只读数据集,常用于检索大量数据。DataReader对象只允许以只读、顺向的方式查看其中所存储的数据,提供一个非常有效率的数据查看模式,同时DataReader对象还是一种非常节省资源的数据对象。
9.软件开发过程一般有几个阶段?每个阶段的作用? 答:软件开发一般分为五个阶段:
问题的定义及规划
此阶段是软件开发方与需求方放共同讨论,主要确定软件的开发目标及其可行性。
需求分析
在确定软件开发可行性的情况下,对软件需要实现的各个功能进行详细需求分析。需求分析阶段是一个很重要的阶段,这一阶段做的好,将为整个软件项目的开发打下良好的基础。
软件设计
此阶段中偶要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。
程序编码
此阶段是将软件设计的结果转化为计算机可运行的程序代码。在程序编码中必定要制定统一、符合标准的编写规范。以保证程序的可读性、易维护性。提高程序的运行效率。
软件测试
在软件设计完成之后要进行严密的测试,一发现软件在整个软件设计过程中存在的问题并加以纠正。整个测试阶段分为单元测试、组装测试、系统测试三个阶段进行。测试方法主要有白盒测试和黑盒测试。
以上就是软件开发过程的五个阶段,但是有的时候在软件开发过程中并不是必须按照这个过程进行的。
10.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
using 有两个作用,一,是引入命名空间,不叫调用程序包,在.net(C#)中,没有包的概念,只有命名空间的概念。二,可以自动释放对象,如
using(SqlConnection objConn = new SqlConnection("连接字符串"))
{
objConn.Open();
.....
.....
}
到这里,objConn会通过using(){}的控制,会自动释放,但是using(obejct)中的object 必须实现Idispose接口。
new 基本说来也是两个作用:
Class1 o = new Class1();
new 运算符还用于调用值类型的默认构造函数。例如:int i = new int();
在上一个语句中,i 初始化为 0,它是 int 类型的默认值。该语句的效果等同于:int i = 0;//----------------------------------------------------------------------------------2)在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用 new 修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new 显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。
若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用 new 修饰符修饰该成员。例如:
public class BaseC{public int x;public void Invoke() {}}public class DerivedC : BaseC{new public void Invoke() {}}
11.下面这段代码输出什么?为什么? 答: int i=5; int j=5; if (Object.ReferenceEquals(i,j)) Console.WriteLine("Equal"); else Console.WriteLine("Not Equal"); 答:”Not Equal”,因为比较的是对象
Object.ReferenceEquals 和Object.Equals 有什么区别
第一个是引用比较,第二个就是比较两个对象是否相同.
区别是,第一个肯定是比较引用的,所以无法被重写,只要是两个new出来的对象,那么肯定是false
而第二个则允许对象重写比较函数,默认是比较引用(同前一个一样),但对象重写后,可以实现自己的比较规则,也就是比较内容是否相同.
12.什么叫做SQL注入,如何防止?请举例说明。 答:所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。