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

server/2024/9/24 19:13:56/

前言

        面试是应聘一个工作岗位的环节,来考察一个人的工作能力与综合素质。在应聘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/server/29899.html

相关文章

深度学习之基于Tensorflow卷积神经网络智能体操健身系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人们健康意识的提高和数字化技术的快速发展&#xff0c;智能健身系统逐渐成为健身领域的新趋势。…

计算机视觉(CV)是什么以及应用场景

计算机视觉&#xff08;Computer Vision, CV&#xff09;是指计算机利用摄像机、图像传感器等设备获取图像或视频&#xff0c;并对它们进行处理和分析&#xff0c;以实现对图像或视频中的物体、场景以及其属性的理解和识别的技术领域。CV的目标是让计算机能够像人类一样“看”和…

保护您的连接:无线网络安全探究

目录 一.无线局域网安全 1. 概述 2. WEP 安全协议 3. WPA/WPA2/WPA3 安全协议 二.移动网络安全 三.实际案例 KRACK 漏洞 Stagefright 漏洞 四.结论 一.无线局域网安全 1. 概述 无线局域网&#xff08;WLAN&#xff09;安全是保护家庭和企业网络免受未经授权访问和攻击…

万界星空科技商业开源MES+项目合作+商业开源低代码平台

今天我想和大家分享的是一套商业开源的 MES制造执行管理系统带源码。对于制造业而言&#xff0c;MES 是一个至关重要的系统&#xff0c;它可以帮助企业提高生产效率、优化资源利用、提高产品质量&#xff0c;从而增强市场竞争力。 什么是 MES&#xff1f; MES 是指通过计算机技…

C语言 | Leetcode C语言题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; #define max(a, b) (((a) > (b)) ? (a) : (b))bool canJump(int* nums, int numsSize){int cover 0;int i;// 只可能获取cover范围中的步数&#xff0c;所以i<coverfor(i 0; i < cover; i) {// 更新cover为从i出发能到达的最大…

遍历JavaScript对象(字典)

在JavaScript中&#xff0c;对象通常被用来作为字典使用&#xff0c;因为它们是由键值对组成的。当我们需要遍历这些键值对时&#xff0c;有几种常用的方法。 使用for...in循环 for...in循环是JavaScript中用于遍历对象属性的常用方式。它会遍历对象所有可枚举的属性&#xf…

Surya:强大的开源 OCR 文字识别工具

在当今数字化时代&#xff0c;文字识别技术扮演着至关重要的角色。VikParuchuri/surya 便是一款令人瞩目的开源 OCR 文字识别工具。 主要功能&#xff1a; 支持 90 多种语言的文字识别&#xff1a;Surya 具备强大的语言兼容性&#xff0c;能够轻松应对多种语言的文字识别任务&…

C语言——操作符保姆级教学(含整形提升及算数转换)

操作符 一.操作符的分类二.原码、反码、补码三.移位操作符1.左移操作符&#xff1a;<<2.右移操作符&#xff1a;>> 四.位操作符1.按位与—— &2.按位或—— |3.按位异或—— ^4.按位取反—— ~ 五.逗号表达式六.条件操作符七.操作符的属性&#xff1a;优先级、…