首页 > 代码库 > C#面试题
C#面试题
一、填空题
1、面向对象的语言具有(继承性)、(封装性)、(多态性)。
2、能用foreach遍历访问的对象需要实现(IEnumerable )接口或声明(GetEnumerator())方法的类型。
3、在Asp.net中所有的自定义用户控件都必须继承自(Control)。
4、在.Net中所有可序列化的类都被标记为([Serializable])。
5、在.Net托管代码中我们不用担心内存漏洞,这是因为有了(GC)。
6、声明静态变量的关键字是(static),声明常量的关键字是(const)。
7、B/S通常使用的结构设计模型分为(模型)(视图)(控制器)。(MVC经典的Web/Business/DataAccess)
8、.NET Framework数据提供程序的4个核心对象(Connection)、(Command)、(DataReader)、(DataAdapter)。
ADO.NET中常用5个对象:(Connection)、(Command)、(DataReader)、(DataAdapter)、(DataSet)。
9、Command对象的主要方法:(ExecuteNonQuery())、(ExecuteReader())、(ExecuteScalar())。
10、类的成员:(字段)、(属性)、(方法)。
11、C#委托的关键字(delegate)。
二、简答题
1、 简述 private、 protected、 public、 internal 、sealed修饰符的访问权限。
答:private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
sealed: 密封类,用它修饰的类是不能被继承的。
2、C#中,string str = null 与 string str ="",请尽量用文字说明区别。
答:string str ="" 分配空间而string str = null不分配空间。
3、请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
答:session(viewstate) 简单,但易丢失 。
application 全局。
cookie 简单,但可能不支持,可能被伪造。
input ttype="hidden" 简单,可能被伪造 url参数简单,显示于地址栏,长度有限数据库稳定,安全,但性能相对弱。
4、请简述ADO.NET中常用对象。
答:Connection:建立于特定数据源的连接。
Command:对数据源执行命令。
DataReader:从数据源中读取只进且只读的数据流。
DataAdapter:用数据源填充DataSet并解析更新。
DataSet:是一个临时存储数据的地方,位于客户端的内存当中。它不和数据库直接打交道,而是通过DataAdapter对象和数据库联系。
5、请简述Command对象的主要方法。
答:ExecuteNonQuery():用于执行指定的SQL语句,如Update、Insert、Delete,它返回的是受SQL语句影响的行数。
ExecuteReader():执行查询命令,返回DataReader对象。
ExecuteScalar():返回单个值,如执行COUNT(*)。
6、请简述DataReader与DataSet的异与同。
答:DateSet可以在断开数据库连接的情况下操作数据,对数据进行批量操作,数据集(DataSet)是一个临时存储数据的地方,位于客户端的内存当中。它不和数据库直接打交道,而是通过DataAdapter对象和数据库联系的。
DateReader适用于:只读取查询结果;节省内存,提高性能。但是使用DateReader读取数据时,不能够对它们进行修改,所以它是只读 的。而且在读取数据的时候,要始终保持与数据库的连接。使用DateReader读取数据的时候占用了数据库连接,必须调用它的Close()方法关闭 DateReader,才能够用数据库连接(Connection)进行其他操作。
7、描述方法的重载。
答:方法的重载支持两种方式,一种是参数是不同类型的重载,另一种是参数个数不同的重载。在方法重载中,不允许仅仅返回值类型不同的方法的重载。
8、类和结构的区别。
答:类是引用类型,结构是值类型。值类型转换成引用类型的过程为装箱,引用类型转换成值类型称为拆箱。
9、描述值类型和引用类型。
答:值类型:值类型源自System.ValueType家族,每个值类型的对象都有一个独立的内存区域保持自己的值。只要在代码中修改它,就会在它的内存区域内保存这个值。
引用类型:引用类型源自System.Object家族,它存储的是对值的引用,就好比存储值得对象是一个气球,而我们的引用变量是一根线。
值类型转换成引用类型的过程为装箱,引用类型转换成值类型称为拆箱。
值类型包括:基础数据类型(int、long、float、char、bool)、枚举类型、结构类型。(基本数据类型其实也是结构)
引用类型包括:类、接口、数组。
10、使用泛型的好处。
答:泛型的主要应用之一是泛型集合,泛型集合可以约束它所存储的对象的类型,提高了数据的安全性。使用集合中的元素时无须装箱、拆箱,提高了运行效率。
11、简述类的特性。
答: 封装:保证对象自身数据的完整性、安全性。
继承:建立类之间的关系,实现代码复用,方便系统的扩展。
多态:相同的方法调用可实现不同的实现方式。
12、描述抽象方法和虚方法的区别。
答:抽象方法和虚方法都可以实现多态性;
抽象方法:通过abstract关键词声明。抽象方法不允许有方法体。抽象类中的方法并不一定都是抽象方法;抽象类也可以容纳具体实现的方法,或者称为具体方法。但是,含有抽象方法的类必然是抽象类。抽象类不能被实例化。一个类继承抽象类后,在子类中必须实现抽象方法,使用override关键字来重写抽象方法。
虚方法:通过virtual关键词声明。虚方法必须有方法体。被继承后,在子类中可以重写虚方法,使用override关键字来重写虚方法。
13、简述接口。
答:1、在C#中,一个类不能继承多个类,但可以实现多个接口。2、接口是一种规范和标准。3、接口屏蔽了实现的细节。4、接口的使用方便团队协作开发。
14、什么是SQL注入,如何防范。
答:所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度,对关键词进行过滤。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
三、编程题
1、使用ADO.NET向Student表插入一条数据信息。
- using System.Data.SqlClient;
- //新增学生信息
- public void AddStudent(String name, int age)
- {
- //创建Connection对象
- string connString = "Data Source=.;Initial Catalog=MyStudyDB;User ID=sa;pwd=sa";
- SqlConnection connection = new SqlConnection(connString);
- connection.Open();
- //创建Command对象
- string sql = String.Format("INSERT INTO Student(StudentName,Age) VALUES(‘{0}‘,{1})", name, age);
- SqlCommand command = new SqlCommand(sql, connection);
- int result = command.ExecuteNonQuery();
- if (result > 0)
- {
- Console.WriteLine("执行成功");
- }
- else
- {
- Console.WriteLine("执行失败");
- }
- //关闭连接
- connection.Close();
- }
2、 1、1、2、3、5、8、13、21、34......求第30位数是多少,用递归算法实现。
- static void Main(string[] args)
- {
- fun(30);
- }
- public static int fun(int n)
- {
- if (n == 0 || n == 1)
- {
- return 1;
- }
- else
- {
- return fun(n - 1) + fun(n - 2);
- }
- }
3、请用冒泡法排序从大到小。
- static void Main(string[] args)
- {
- int[] num = { 3, 7, 1, 5, 6, 2, 4 };
- int temp = 0;
- for (int i = 0; i < num.Length; i++)
- {
- for (int j = i + 1; j < num.Length; j++)
- {
- if (num[i] < num[j])
- {
- temp = num[i];
- num[i] = num[j];
- num[j] = temp;
- }
- }
- }
- }
4、基于SQL语句的分页。
- SELECT TOP pageSize *
- FROM 表
- WHERE 条件
- AND id NOT IN(
- SELECT TOP pageSize * (pageIndex - 1) id
- FROM 表
- WHERE 条件 ORDER BY 排序条件
- )
- ORDER BY 排序条件
转自:http://blog.csdn.net/pan_junbiao/article/details/17462763
C#面试题