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 排序条件

收藏的C#面试题:

 

C#精华面试题及答案

 

  • 6
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值