前言

面试是应聘一个工作岗位的环节,来考察一个人的工作能力与综合素质。在应聘C#程序员或与C#相关岗位时,我们都会被问到一些与.NET、C#、数据库、业务知识或编程思想等问题。本文列举一些问题及提供参考答案,题目(四)。

题目

91、什么是SQL注入,如何预防?请举例说明。

参考答案:SQL 注入是一种攻击方式,将恶意代码插入到字符串中,然后将该字符串传递到SQL语句中进行分析和执行。主要形式包括直接将代码插入到与 SQL 命令串联在一起并使其得以执行的用户输入变量。

示例:

SELECT * FROM OrdersTable WHERE ShipCity = 'Redmond';drop table OrdersTable--'

可采用下列一写方法来预防 :

1、验证所有输入。始终通过测试类型、长度、格式和范围来验证用户输入;如果可能,拒绝包含以下字符的输入。

输入字符在 SQL 中的含义
;查询分隔符。
'字符数据字符串分隔符。
--注释分隔符。
/* ... */注释分隔符。服务器不对 /* 和 */ 之间的注释进行处理。
Xp_用于目录扩展存储过程的名称的开头。

2、使用类型安全的 SQL 参数。

3、在存储过程中使用参数化输入。

4、在动态 SQL 中使用参数集合。

92、在C#中如何取消一个窗体的关闭

参考答案:在FormClosing事件中用e.Cancel=true;

private void UserForm_FormClosing(object sender, FormClosingEventArgs e)
{
  try
  {
    e.Cancel = true;
  }
  catch
  {
  }
}

93、C#可否对内存进行直接的操作?

参考答案:默认情况下C#不可直接对内存进行操作。不过,可以通过不安全代码( unsafe )关键字的方式进行直接内存操作。

94、写出一条Sql语句:取出表Student中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的)

参考答案:下面二条语句可以参考

select top 10 * from Student where id not in (select top 30 id from Student)

select top 10 * from Student where id >(select max(id) from (select top 30 id from Student ) as A)

95、维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?

参考答案:触发器是一种特殊类型的存储过程,当数据库表上的数据发生变化时自动执行。自写业务逻辑是指在应用程序层面处理数据的完整性和一致性。

建议使用自写业务逻辑维护数据库的完整性和一致性,因为写业务逻辑具有灵活编写和调整、性能优化、易于调试的优点。虽然会使代码重复或复杂,数据延迟。

96、什么是事务?什么是锁?

参考答案:事务是由一组SQL语句组成的数据库操作的基本单位,执行结果要么全部成功,要么全部失败。事务具有原子性、一致性、隔离性、持久性四个特性。

锁是数据库用来控制并发访问的一种机制,含共享锁、排他锁、更新锁、意向锁几种类型。

97、什么是索引,有什么优点?

参考答案:SQL索引是数据库中的一种数据结构,能加快数据检索速度。

索引具有提高查询速度、维护数据排序、优化联接操作、支持唯一性约束、减少数据的物理I/O操作几个优点。

98、视图是什么?游标是什么?

参考答案:视图是一种虚拟的表,具有和物理表相同的功能。游标是一种数据库查询结果的指针,它允许用户逐行访问查询结果。

99、什么是SQL存储过程?有什么优点?

参考答案:存储过程是一组完成特定功能的SQL语句,通过指定的名称来调用。存储过程可以接受参数,也可返回结果。它具有提升性能、代码复用、安全性、易于维护、动态执行、错误处理的优点。

100、什么是SQL触发器

参考答案:触发器是一种特殊类型的存储过程,当数据库表上的数据发生变化时自动执行。

101、请编程实现一个冒泡排序算法

参考答案:冒泡排序是一种简单的排序算法。重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

public void BubbleSort(int[] arrayList)
{
   int temporary;
   for (int j = 0; j <= arrayList.Length - 2; j++)
   {
      for (int i = 0; i <= arrayList.Length - 2; i++)
      {
          if (arrayList[i] > arrayList[i + 1])
          {
               temporary = arrayList[i + 1];
               arrayList[i + 1] = arrayList[i];
               arrayList[i] = temporary;
          }
      }
   }
}
// 使用
int[] arraySort = { 20, 66, 50, 19, 22, 41, 90 };
this.BubbleSort(arraySort);

102、XML 与 HTML 的主要区别

参考答案:XML(是可扩展标记语言)与 HTML(超文本标记语言)都是用于描述数据和文档结构的标记语言,但它们有着本质的区别和不同的用途。

HTML是为展示数据而设计的,而XML是为描述和传输数据而设计的。HTML有固定的标签集,而XML允许自定义标签。HTML关注数据的表现,XML关注数据的结构和内容。

103、什么是SOAP,有哪些应用

参考答案:是一种基于XML的简单对象访问协议( Simple Object Access Protocol),主要用于网络上交换结构化信息。

104、简术XML技术及其应用

参考答案:XML 是可扩展标记语言(Extensible Markup Language)用于传输和存储数据。主要应用于数据交换、Web 服务、配置文件、数据查询等方面。

105、什么是 ApplicationPool

参考答案:Application Pool(应用程序池)是微软IIS中的一个概念,用于隔离和管理Web应用程序的运行环境。

106、给定表 Student 中有两个字段 ID(表示更新的事务号)、LastUpdateDate(示更新时的服务器时间)使用一句SQL语句获得最后更新的事务号。

参考答案:

select  id from Student where LastUpdateDate = (select max(LastUpdateDate) from  Student)

107、描述.NET 中类(class)与结构(struct)的异同?

参考答案:类可以被实例化,属于引用类型,是分配在内存的堆上的,结构属于值类型,是分配在内存的栈上的。

108、float f=-103.75F; int i=(int)f; i的值是多少

参考答案:-103

109、C# 中的注释类型有哪些

参考答案:C# 中有单行注释、多行注释、XML 注释 三种类型的注释。

110、在静态类中能使用 this 吗?

参考答案:不能。this 不能与静态类一起使用,因为静态类中只能使用静态变量和静态方法。

111、C#中的string和StringBuilder的区别

参考答案:字符串是不可变的对象,改变字符串时,是清除后重新赋值;StringBuilder 是一个可变对象,追加或替换改符串时创建一个新实例。

112、continue 与 break 关键字的作用

参考答案:在 C# 的循环中使用 continue 和 break 语句。使用 break 语句,中断循环执行,而使用 continue 语句,中断循环的一次迭代。

113、什么是依赖注入,如何实现?

参考答案:依赖注入是一种设计模式。它不是直接在另一个类(依赖类)中创建一个类的对象,而是将对象作为参数传递给依赖类的构造函数。

实现依赖注入的方式有构造函数注入、属性注入、方法注入、接口注入。

114、什么是数组?解释一维和多维数组。

参考答案:数组是存储相同类型值的集合。C# 有一维数组、多维数组、交错数组。一维数组是线性数组,多维数组也称为矩形数组,错数组就像一个嵌套数组,其中交错数组的每个元素本身就是一个数组。

// 一维数组
int[] marks = new int[3] { 20, 35, 78 };
// 多维数组
int[,] numbers = new int[3, 2] { { 1, 5 }, { 2, 3 }, { 3, 4 } };

115、HTTP 中 GET 和 POST 的区别

参考答案:GET 与 POST 主要在用途、数据传输方式、安全性等方面有着区别。

用途:GET 通常用于请求服务器上的数据;POST 通常用于向服务器提交数据。

数据传输方式:GET 请求参数附加在URL之后,通常是键值对的形式;POST 请求参数包含在请求体中。

安全性:GET 参数在URL中直接暴露,安全性较低;POST 参数在请求体,不会直接暴露,相对更安全

数据大小:GET 不适合传输大量数据;POST 可以传输更大量的数据。

116、设计模式有哪些

参考答案:有23种设计模式,分别是创建型模式(工厂模式、抽象工厂模式、单例模式、原型模式等)、结构型模式(代理模式、外观模式、组合模式、装饰器模式、适配器模式等)及行为型模式(观察者模式、策略模式、状态模式、命令模式、访问者模式等)。

117、实现一个单例模式Singleton

参考答案:

public class Log
{
  // 实现线程锁
  privatestatic readonly object _lock = new object();
  //
  privatestatic volatile Log _instance;
  ///<summary>
  ///提供一个静态的公有方法,加入双重检查代码,解决线程安全问题,同时解决懒加载问题。
  ///</summary>
  publicstatic Log Instance
  {
    get
    {
      if(_instance == null)
      {
        //
        lock(_lock)
        {
          // 双重检查
          if(_instance == null)
          {
            _instance = new Log();
          }
        }
      }
      return _instance;
    }
  }
  ///<summary>
  ///构造器私有化
  ///</summary>
  privateLog()
  {
  }
}

118、WebAPI和WebService的区别

参考答案:WebAPI用的是http协议,WebService用的是SOAP协议。WebAPI无状态,相对WebService更轻量级。WebAPI 支持如GET 、POST 等HTTP操作。

119、switch语句控制表达式可以是哪几种数据类型?

参考答案:Switch语句控制表达式所允许的数据类型为:整数类型、字符类型、字符串类型或者枚举类型,可以能够隐式转换成上述类型的其他类型。

120、HTTP定义的基本的与服务器交互的方法有

参考答案:HTTP定义了4种与服务器交互方法,分别是:GET、POST、PUT、DELETE。

小结

以上是30个C#面试题目,后续继续提供一些问题及参考答案,敬请关注后续内容。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部