zoukankan      html  css  js  c++  java
  • 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表插入一条数据信息。

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. using System.Data.SqlClient;  
    2. //新增学生信息  
    3. public void AddStudent(String name, int age)  
    4. {   
    5.     //创建Connection对象  
    6.     string connString = "Data Source=.;Initial Catalog=MyStudyDB;User ID=sa;pwd=sa";  
    7.     SqlConnection connection = new SqlConnection(connString);  
    8.     connection.Open();  
    9.   
    10.     //创建Command对象  
    11.     string sql = String.Format("INSERT INTO Student(StudentName,Age) VALUES('{0}',{1})", name, age);  
    12.     SqlCommand command = new SqlCommand(sql, connection);  
    13.     int result = command.ExecuteNonQuery();  
    14.     if (result > 0)  
    15.     {  
    16.         Console.WriteLine("执行成功");  
    17.     }  
    18.     else  
    19.     {  
    20.         Console.WriteLine("执行失败");  
    21.     }  
    22.     //关闭连接  
    23.     connection.Close();  
    24. }  

    2、  1、1、2、3、5、8、13、21、34......求第30位数是多少,用递归算法实现。

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. static void Main(string[] args)  
    2. {  
    3.     fun(30);  
    4. }  
    5.   
    6. public static int fun(int n)   
    7. {  
    8.     if (n == 0 || n == 1)  
    9.     {  
    10.         return 1;  
    11.     }  
    12.     else  
    13.     {  
    14.         return fun(n - 1) + fun(n - 2);  
    15.     }  
    16. }  

    3、请用冒泡法排序从大到小。

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. static void Main(string[] args)  
    2. {  
    3.     int[] num = { 3, 7, 1, 5, 6, 2, 4 };  
    4.     int temp = 0;  
    5.     for (int i = 0; i < num.Length; i++)  
    6.     {  
    7.         for (int j = i + 1; j < num.Length; j++)  
    8.         {  
    9.             if (num[i] < num[j])  
    10.             {   
    11.                 temp = num[i];  
    12.                 num[i] = num[j];  
    13.                 num[j] = temp;  
    14.             }  
    15.         }  
    16.     }  
    17. }  

    4、基于SQL语句的分页。

    [sql] view plain copy
     
     在CODE上查看代码片派生到我的代码片
      1. SELECT TOP pageSize *  
      2. FROM 表  
      3. WHERE 条件   
      4. AND id NOT IN(  
      5.     SELECT TOP pageSize * (pageIndex - 1) id  
      6.     FROM 表  
      7.     WHERE 条件 ORDER BY 排序条件  
      8. )  
      9. ORDER BY 排序条件  

    转自:http://blog.csdn.net/pan_junbiao/article/details/17462763

  • 相关阅读:
    【SQL】CASE与DECODE
    【SQL】通过rowid查找及删除重复记录
    【SQL】联合语句
    【PLSQL】游标
    【SQL】IN、EXISTS和表连接三者的效率比较
    【SQL】CONNECT BY 层次化查询
    【SQL】MERGE
    【SQL】多表查询
    【Python算法】遍历(Traversal)、深度优先(DFS)、广度优先(BFS)
    【Python算法】归纳、递归、归简
  • 原文地址:https://www.cnblogs.com/jameshappy/p/5850441.html
Copyright © 2011-2022 走看看