NET开发面试题及答案.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

.NET开发面试题及答案

一、基础概念题

说说.NETFramework、.NETCore、.NET5+的区别,实际项目中怎么选版本?

答案:.NETFramework仅支持Windows,依赖IIS,适合维护旧项目;.NETCore跨平台(Windows/Linux/macOS),轻量且性能好,是1.x-3.x版本;.NET5+是Core的升级,统一了框架命名,支持更多场景(桌面/移动/云)。选版本时,新项目优先用最新LTS版(如.NET8),保证长期支持;若需跨平台或微服务,必选.NET5+;维护旧系统则延续.NETFramework,若要迁移,优先考虑.NET6+(兼容成本低)。

CLR的GC(垃圾回收)机制核心原理是什么?实际开发中怎么减少GC压力?

答案:GC通过标记-清除-压缩算法回收无引用对象,按对象存活时间分0/1/2代,优先回收年轻代(0代)减少性能损耗。减少GC压力的实操:①用值类型(struct)存小数据(如坐标),避免频繁创建引用类型;②复用对象(如用对象池ObjectPool),尤其高频场景(如API请求处理);③避免静态集合(如staticList)无限制添加数据,及时清理无用元素;④大文件操作用流(Stream)分段处理,别一次性加载到内存。

二、C#核心特性题

泛型和object类型相比,优势在哪?实际用泛型时要注意什么?

答案:优势是类型安全(编译时检查类型,避免装箱拆箱)和性能好(object需装箱拆箱,泛型直接操作具体类型)。注意点:①泛型类/方法若需约束类型,用where关键字(如whereT:class限制引用类型,whereT:new()限制有默认构造函数);②避免过度泛化,简单场景(如仅处理string)没必要用泛型,反而增加复杂度;③泛型集合(如List)比非泛型(ArrayList)优先用,但需注意值类型的List扩容时的性能损耗(可初始化时指定容量)。

async/await使用时容易出现死锁,怎么复现?怎么解决?

答案:复现场景:在UI线程(如WinForm/WPF)或ASP.NETCore早期版本中,调用async方法后用.Result/.Wait()阻塞等待,导致上下文(SynchronizationContext)被占用,async方法执行完无法回调,造成死锁。示例代码:

//死锁代码

publicvoidDeadLockDemo()

{

vartask=GetDataAsync();

vardata=task.Result;//阻塞当前线程,占用上下文

}

publicasyncTaskstringGetDataAsync()

{

awaitHttpClient.GetStringAsync();//执行完需回调到原上下文

}

解决方法:①全程用async/await,不混合.Result/.Wait();②若必须阻塞,用.ConfigureAwait(false)取消上下文捕获,示例:

publicasyncTaskstringGetDataAsync()

{

awaitHttpClient.GetStringAsync().ConfigureAwait(false);

}

注意:ASP.NETCore3.0+已移除SynchronizationContext,此场景下死锁概率低,但仍建议规范用async/await。

三、ASP.NETCore题

中间件的执行顺序是什么?怎么自定义一个记录请求日志的中间件?

答案:执行顺序:①请求从外到内经过“全局中间件”(如日志、静态文件);②再到“路由中间件”匹配端点;③最后到“端点中间件”处理业务(如MVC、API);响应时按相反顺序返回。

自定义日志中间件示例(用工厂方式,避免耦合):

//1.定义中间件类

publicclassRequestLogMiddleware

{

privatereadonlyRequestDelegate_next;

privatereadonlyILoggerRequestLogMiddleware_logger;

publicRequestLogMiddleware(RequestDelegatenext,ILoggerRequestLogMiddlewarelogger)

{

_next=next;

_logger

文档评论(0)

151****9429 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档