C#面试题目含参考答案(二)

devtools/2024/9/23 11:19:43/

前言

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

题目

31、值类型和引用类型的区别

参考答案:

1、值类型的数据存储在内存的栈中,引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的;

2、值类型的变量直接存放实际的数据,而引用类型的变量存放的则是内存堆中数据的地址,即对象的引用;

3、值类型继承自System.ValueType,引用类型继承自System.Object;

4、栈的内存分配是自动释放,而堆在.NET中会有GC来释放;

5、值类型存取速度快,引用类型存取速度慢;

6、值变量赋值时,会在栈中保存两个完全相同的值,改变值独立;引用变量赋值时,会拷贝对相同对象的同一个引用,改变变量值实际是改变堆地址对象中的值,会影响另一个引用变量值。

32、string name=null与string name="" 有什么区别

参考答案:string str=null 把这个引用指向了一个null,没有地址没有值的地方,即没分配内存空间;string str="" 把这个引用指向了一个地址,地址里面存的是空的字符,即占用了内存空间。

33、什么是链式委托

参考答案:链式委托也称多播委托是一种委托的使用方式,它将多个委托对象连接成一个链表。当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。

// 定义声明
private delegate void PrintingMethod(object contents);
// 实例化委托 使用其他类的方法
PrintingMethod printingMethod = new PrintingMethod(Log.Printing);
// 添加
printingMethod += Log.End;
// 调用委托实例 一次执行二个方法            
printingMethod("委托调用执行Printing与End方法");
// 删除
printingMethod -= Log.End;

34、序列化有何作用

参考答案:序列化是将对象转换为字节流以将其保存在内存、数据库或文件中的过程。1、保存内存中的各种对象的状态,并且可以把保存的对象状态在读出来;2、可以实现数据的持久化;3、对象数据的远程通信;4、保证对象的完整性和可传递性。

35、委托回调静态方法和实例方法有何区别

参考答案:委托可以回调静态方法或实例方法。委托回调静态方法时,它不需要实例对象。而委托回调实例方法时,需要提供目标对象,方法将在该目标对象上调用,它需要实例对象。

36、StringBuilder有什么作用

参考答案:StringBuilder用于构建可变字符串,并提供了高效地进行字符串拼接和修改的方法。以及常用来和非托管代码交互。

37、描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

参考答案:首先,需要定义一个包含索引器的类或结构体。可以通过在类或结构体内部添加this关键字来创建索引器。然后,指定索引器的返回值类型和参数列表。这些信息将告诉编译器如何调用索引器并获取所需的值。其次,根据自己的需求实现索引器的逻辑。可以使用任意合法的语句、条件判断等来处理索引操作。最后,提供相应的getter(获取特定索引位置上的值)和setter(设置位置上的值)方法。

下面是一个索引器的示例:

public class WeekDays
{string[] days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];// 定义具有表达式体的只有get访问器的索引器public int this[string day] => FindDayIndex(day);//private int FindDayIndex(string day){for (int j = 0; j < days.Length; j++){if (days[j] == day){return j;}}}
}
//使用示例
var week = new DayCollection();
Console.WriteLine(week["Friday"]);

38、ADO.NET 访问数据库的基本步骤是什么?

参考答案:访问数据库的基本步骤是1、创建数据库连接对象;2、打开连接;3、创建命令对象;4、执行SQ语句;5、关闭连接。

示例:

// 声明连接字符串变量
string connectionString = "Persist Security Info=False;Integrated Security=true;Initial Catalog=msdb;server=(local)";
// 创建数据库连接对象
SqlConnection sqlConnection =new SqlConnection(connectionString);
try      
{// 打开数据库连接sqlConnection.Open();// 创建命令对象SqlCommand command = sqlConnection.CreateCommand();command.CommandType = CommandType.Text;// 编写待执行SQL语句command.CommandText = @"select * from sysjobs";//待执行SQL语句SqlDataReader reader = command.ExecuteReader();
}
catch (Exception exception)
{throw new Exception(exception.Message)
}
finally
{// 关闭数据库连接sqlConnection.Close();
}

39、ADO.NET 访问数据库常用的对象有哪些

参考答案:DataConnection=数据库连接对象;Command=执行SQL命令和存储过程;DataReader=向前只读的数据流;DataAdapte=适配器,支持增删查询;DataSet=独立数据集合的数据存储器。

40、ADO.NET中DataSet与DataReader的区别是什么

参考答案:1、获取数据的方式不同:DataReader 为在线操作数据,DataSet 为离线操作数据。2、获取数据的机制不同:DataReader通过ExecuteReader来读取数据;DataSet通过DbDataAdapter.Fill来填充数据。

41、DataSet与DataTable的区别

参考答案:DataSet是数据集,DataTable是数据表,DataSet存储多个DataTable。DataSet和DataTable像是专门存储数据的一个容器,可以将查询数据库得到的结果存储在里面。

42、简单介绍下ADO.NET和ADO主要有什么改进

参考答案:ADO以Recordset存储,而ADO.NET则以DataSet表示,ADO.NET提供了数据集和数据适配器,有利于实现分布式处理,降低了对数据库服务器资源的消耗。

43、列举ADO.NET中的共享类和数据库特定类

参考答案:共享类:DataSet,DataTable,DataRow,DataColumn,DataRealtion,Constraint,DataColumnMapping,DataTableMapping。特定类:根据数据提供程序X=[Sql、Mysql等] (X)Connection,(X)Command,(X)CommandBuilder,(X)DataAdapter,(X)DataReader,(X)Parameter,(X)Transaction。

44、类和对象的区别和关系是什么

参考答案:类是对象的抽象,它属于该类的全部对象提供了统一的抽象描述。类是对象的模板。对象是类的实例。

45、静态字段与非静态字段有什么区别

参考答案:加static修饰字段时,则该字段为静态字段,静态字段不属于某个实例对象,只与类相关联,因此,对静态字段的访问只与类关联,访问时使用类名.字段,实例字段的访问与实例对象关联,访问时使用对象名.字段

46、&和&&的区别

参考答案:&是位运算符表示按位与运算,&&是逻辑运算符表示逻辑与。

示例:

// 定义一个布尔变量 x
bool x = true;
// 定义一个布尔变量 y
bool y = false;
// 两个变量进行逻辑与运算
bool result = (x && y);  //结果为false// 20的二进制为 0001 0100
int i = 20;
// 12的二进制为 0000 1100
int j = 12;
// 整型类型二进制与运算符
int result = i & j;  // 结果为4

47、readonly与const的区别

参考答案:const为编译时常量,只有内置类型可声明为const且声明时初始化,只能内置类型可;readonly 为运行时常量,在声明时可以不初始化,可以在类的构造函数中进行设置,在运行时第一次赋值后将不可以改变。

48、简述C#中using的几种用法

参考答案:1、引用命名空间;2、定义对象的使用范围,即时释放对象;3、引用命名空间使用别名。

示例:

// 引用命名空间
using System;
// 引用命名空间使用别名
using RedefinPrint= System.Drawing.Printing;
// 定义对象的使用范围,即时释放对象
using (PrintDocument printDocument = new PrintDocument())
{printDocument.Print();
}

49、NET的错误处理机制是什么

参考答案:采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。

示例:

try      
{// 执行代码
}
catch (Exception exception)
{// 捕获和处理异常throw new Exception(exception.Message)
}
finally
{// 代码始终都会执行,确保资源的释放和清理
}

50、简述ref 、out和in在用作函数参数修饰符时的区别

参考答案:1、ref参数可用于输入或输出,变量使用前必须初始化。2、out 参数只用于输出,使用前无需初始化。3、in参数只用于输入,按引用传递,它能确保在使用过程中不被修改,变量使用前必须初始化。

51、.NET中所有类的基类是

参考答案:.NET中所有类的基类是object。

52、.Net中所有可序列化的类都被标记为什么

参考答案:都被标记为[serializable]

示例:

[Serializable]
public class Person
{/// <summary>////// </summary>public Person(){}/// <summary>////// </summary>public int Age { get; set; }/// <summary>////// </summary>public decimal Weight { get; set; }
}

53、列举C#中集合类型

参考答案:数组集合类型、ArrayList 和List 集合类型、Hashtable 和 Dictionary 、SortedList 和SortedDictionary 集合类型、队列Queue集合类型、堆栈Stack集合类型、HashSet 集合类型、LINQ Set 运算。

54、在.NET的C#语言中,Appplication.Exit与Form.Close有什么不同

参考答案:Appplication.Exit是退出整个应用程序,Form.Close是关闭其中一个窗体。

55、如何Array复制到ArrayList中

参考答案:1、使用foreach循环,将array数组中的数据逐步放入ArrayList的对象中;2、直接使用构造方法传入;3、使用ArrayList的adpater的方法 ,将整个Array对象封装到ArrayList对象中。

示例:


string[] dayArray =new string[] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
// 定义
ArrayList arrayList = new ArrayList();
//方法一
foreach (string day in dayArray)
{arrayList.Add(day);
}
// 方法二 直接使用构造方法传入,因为Array实现了ICollection
ArrayList copyArrayList = new ArrayList(dayArray);
//方法三
ArrayList dayArrayList = new ArrayList();
dayArrayList = ArrayList.Adapter(dayArray);

56、Func<T> 与Action<T> 的区别

参考答案:Func<T>有返回类型;Action<T>只有参数类型,不能传返回类型。所以Action<T>的委托函数都是没有返回值的。

57、什么是泛型约束

参考答案:泛型约束是一种在泛型类型参数上定义约束条件的机制,它可以帮助我们限制泛型类型参数的取值范围。约束是使用 where 上下文关键字指定的。

示例:


//构造函数约束:要求泛型参数必须有构造函数
public class Person<T> where T : new()
{}

58、C#中的接口和类有什么异同

参考答案:接口是可以多继承,类只有单继承。接口强调了你必须实现,而没有具本实现的方法和虚类有点相似。

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。接口可以包含事件、索引器、方法和属性。

59、new关键字用法

参考答案:1、当运算符时用于创建对象和调用构造函数。2、当修饰符时用于向基类成员隐藏继承成员。3、当约束时用于在泛型声明中约束可能用作类型参数的参数的类型。

60、下面这段代码有错误吗?如有是什么错误

public static const int i=1;

参考答案:存在错吴,const关键字不能用static修饰。

小结

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


http://www.ppmy.cn/devtools/30232.html

相关文章

白话NLP技术的演进发展

自然语言处理是人工智能的一个重要分支,旨在让计算机能够理解、生成和处理人类语言。我们每天都在使用自然语言,比如与人对话、阅读文章、撰写邮件等。NLP的目标就是要让机器也能像人一样处理语言,从而实现人机交互、信息检索、机器翻译、情感分析等多种应用。 要让机器理解自…

iOS 创建依赖其他开源库的开源库

参考文章&#xff08;感激各位大神前路的明灯&#xff09; 参考文章一 参考项目 整体流程 流程简介 1&#xff09;使用pod命令行创建本地项目和git仓库并回答终端里的四个问题 2&#xff09;编辑podspec文件 3&#xff09;将需要开源的代码添加到Development Pods文件夹中&am…

Three.js杂记(十四)———— 汽车展览·上

在学习了一些理论知识后&#xff0c;要做一下实战演练了&#xff0c;做一个简单的车辆展览来看看吧。 通过调整相机的位置&#xff0c;将导入的车辆模型分成三个视角展示。 车辆外部&#xff1a;可以观察车辆的整体外观以及轮廓结构车辆内部&#xff1a;相机在汽车内部&#…

HTML 官网进行移动端和 PC 端适配

使用响应式布局&#xff1a;确保你的 HTML 结构使用了响应式布局&#xff0c;即页面的元素能够根据不同设备的屏幕大小和分辨率进行自适应调整。 媒体查询&#xff1a;在 CSS 中使用媒体查询来针对不同的设备条件应用特定的样式。例如&#xff0c;你可以针对手机、平板和桌面设…

WPF之DataGrid表格,自定义表头、自定义单元格

DataGrid控件在WPF中担任着表格的角色&#xff0c;大多用于展现数据&#xff0c;他有着自定义表头、单元格&#xff0c;和数据绑定等效果。 可以展现的数据 可以显示以下几种标签显示不同数据 : 显示文本: DataGridTextColumn 显示复选框: DataGridCheckboxColumn 下拉框: Data…

php字符串变量和常见的字符串函数

在 PHP 中&#xff0c;字符串变量用于存储文本数据。你可以使用单引号&#xff08;&#xff09;、双引号&#xff08;"&#xff09;或定界符&#xff08;heredoc 或 nowdoc&#xff09;来定义字符串。下面是一些关于 PHP 字符串变量的重要点和示例&#xff1a; 1. 单引号…

wordpress外贸独立站建站10要10不要

创建一个成功的WordPress外贸独立站需要注意很多因素。以下是zhanyes根据多年建站经验总结的wordpress外贸独立站建站的10个建议和10个避免的事项&#xff0c;以帮助您建立一个高质量的外贸网站&#xff1a; 10个要&#xff1a; 1. 要选择合适的域名&#xff1a;确保您的域名…

SpringCloud学习笔记(一)微服务介绍、服务拆分和RestTemplate远程调用、Eureka注册中心

文章目录 1 认识微服务1.1 单体架构1.2 分布式架构1.3 微服务1.4 SpringCloud1.5 总结 2 服务拆分与远程调用2.1 服务拆分原则2.2 服务拆分示例2.2.1 搭建项目2.2.2 创建数据库和表2.2.3 实现远程调用2.2.3.1 需求描述2.2.3.2 注册RestTemplate2.2.3.3 实现远程调用 2.2.4 提供…