NET面试题及参考答案(实战版).docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

.NET面试题及参考答案(实战版)

一、基础语法与CLR相关(10题)

问:C#中值类型和引用类型的本质区别是什么?请举2个实际开发中容易踩坑的场景。

答:本质区别是存储位置和内存管理方式——值类型(int、struct、enum等)存储在栈上,复制时拷贝完整数据;引用类型(class、interface、string等)存储在堆上,变量仅保存堆内存地址,复制时仅传递地址。

踩坑场景:①用struct定义复杂数据结构(如包含多个引用类型字段),传递时误判为“引用传递”导致数据同步问题;②字符串拼接时未使用StringBuilder,因string是不可变引用类型,频繁拼接产生大量临时对象占用内存。

问:CLR的GC(垃圾回收)机制中,“代”的概念是什么?第0代、第1代、第2代的回收策略有何不同?

答:GC的“代”是基于“对象存活时间越久,越不容易被回收”的统计假设设计的内存分区。

第0代:新创建的短期对象(如方法内局部变量),回收频率最高,回收速度最快(标记-清除);

第1代:第0代回收后存活的对象,作为“过渡代”,回收频率低于第0代;

第2代:长期存活对象(如单例对象、静态变量),回收频率最低,采用标记-整理算法(避免内存碎片)。

问:C#中virtual、override、new关键字的区别?请写一段代码示例说明。

答:virtual声明可被重写的基类方法;override重写基类virtual方法(遵循多态);new隐藏基类方法(不遵循多态,调用时取决于变量声明类型)。

代码示例:

publicclassBaseClass{

publicvirtualvoidShow()=Console.WriteLine(BaseVirtual);

publicvoidHide()=Console.WriteLine(BaseHide);

}

publicclassSubClass:BaseClass{

publicoverridevoidShow()=Console.WriteLine(SubOverride);

publicnewvoidHide()=Console.WriteLine(SubNew);

}

//调用结果:

BaseClassb1=newSubClass();

b1.Show();//输出:SubOverride(多态生效)

b1.Hide();//输出:BaseHide(隐藏基类方法,按声明类型调用)

SubClassb2=newSubClass();

b2.Hide();//输出:SubNew(按实例类型调用)

问:什么是装箱和拆箱?会带来什么性能问题?如何避免不必要的装箱?

答:装箱是值类型转换为object/接口类型(栈→堆,创建新对象);拆箱是object/接口类型转换回原值类型(堆→栈,类型校验+数据拷贝)。

性能问题:频繁装箱拆箱会增加内存分配和GC压力,降低程序效率。

避免方式:①优先使用泛型(如List替代ArrayList);②避免值类型与object类型混用(如方法参数用具体值类型而非object);③字符串格式化时用StringBuilder.AppendFormat而非直接拼接值类型。

问:C#中接口和抽象类的核心区别?实际开发中如何选择?

答:核心区别:

|维度|接口|抽象类|

|--------------|-----------------------|-----------------------|

|继承限制|多继承|单继承|

|成员类型|仅抽象方法/属性(C#8+支持默认实现)|可包含抽象/非抽象成员|

|访问修饰符|默认为public|可自定义(public/protected等)|

|设计目的|定义行为契约|提供基类模板|

选择原则:①需多继承或仅定义行为规范→用接口;②需复用代码(非抽象成员)或限制单继承→用抽象类;③框架设计中常用“接口+抽象类”组合(接口定义契约,抽象类提供默认实现)。

问:什么是委托?Lambda表达式和委托的关系是什么?

答:委托是“方法的类型安全指针”,定义

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档