- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
.NET核心面试题及参考答案
一、基础语法与CLR相关(初级)
问:C#中值类型和引用类型的核心区别?请举例说明实际开发中容易踩的坑。
答:
存储位置:值类型(int、struct、enum)存栈内存,引用类型(class、interface、string)存堆内存,栈中仅存引用地址。
赋值行为:值类型赋值是拷贝完整数据,引用类型赋值是拷贝引用地址(指向同一堆数据)。
坑点示例:用struct定义复杂数据结构时,传递给方法会拷贝整个实例(导致修改不影响原对象);string虽为引用类型但不可变,拼接操作会创建新对象(高频拼接需用StringBuilder)。
问:CLR的GC(垃圾回收)工作原理是什么?开发中如何减少GC压力?
答:
原理:GC负责回收堆中无引用的对象内存,采用“分代回收”机制(0代、1代、2代),优先回收短期存活对象(0代),减少回收开销。
优化手段:
避免频繁创建短期大对象(如循环内new字符串、集合);
及时释放非托管资源(用using语句包裹Stream、数据库连接等实现IDisposable的对象);
少用装箱拆箱(值类型与object互转会创建临时对象);
大集合操作后及时清空引用(如List.Clear())。
二、.NET框架与特性(中级)
问:ASP.NETCore与传统ASP.NET的核心差异有哪些?为什么推荐用ASP.NETCore开发新项目?
答:
跨平台:ASP.NETCore支持Windows、Linux、macOS,传统ASP.NET仅支持Windows;
架构:ASP.NETCore是模块化、轻量级框架(可按需引用组件),传统ASP.NET依赖IIS且组件耦合度高;
性能:ASP.NETCore基于Kestrel服务器,性能远超传统ASP.NET的IIS托管;
依赖注入:ASP.NETCore内置DI容器,传统ASP.NET需第三方框架(如Autofac);
优势:适合微服务、云原生场景,开发效率更高,生态更完善。
问:C#中的async/await关键字作用是什么?使用时需要注意哪些问题?
答:
作用:简化异步编程,让代码以同步的写法实现异步逻辑(避免回调地狱),本质是基于任务并行库(TPL)的语法糖。
注意事项:
await只能在async标记的方法中使用,且方法返回值通常为Task/Task(无返回值可用Task,而非void,否则无法捕获异常);
避免“异步空等”:如asyncvoid方法(仅适合事件处理),无法等待其完成,易导致线程安全问题;
不要过度异步:简单同步操作(如本地变量赋值)用异步会增加开销;
异常处理:异步方法的异常需在await时捕获(try-catch包裹await语句),否则会被吞掉。
三、数据库与ORM(中级)
问:EntityFrameworkCore(EFCore)中,延迟加载和立即加载的区别是什么?如何实现?
答:
延迟加载:查询主实体时不加载关联实体,直到访问关联实体属性时才触发额外查询(默认关闭,需启用);
实现:安装Microsoft.EntityFrameworkCore.Proxies包,在DbContext中配置UseLazyLoadingProxies(),且关联属性需为virtual;
立即加载:查询主实体时同时加载关联实体,通过Include方法实现;
示例:_dbContext.Users.Include(u=u.Orders).ToList()(加载用户及关联订单);
区别:延迟加载灵活但可能导致N+1查询(性能问题),立即加载一次查询完成但可能加载多余数据,需根据场景选择。
问:EFCore中的跟踪查询和非跟踪查询有什么区别?什么时候用非跟踪查询?
答:
跟踪查询:EFCore会跟踪实体的状态变化(新增、修改、删除),后续可通过SaveChanges()提交变更(默认查询为跟踪);
非跟踪查询:EFCore不跟踪实体状态,查询仅用于读取数据,不支持通过SaveChanges()提交变更,性能更优;
实现:_dbContext.Users.AsNoTracking().ToList();
使用场景:只读操作(如数据列表展示、报表生成),避免跟踪开销,提升查询性能。
四、性能优化与问题排查(高级)
问:ASP.NETCore应用性能优化的常见手段有哪些?
答:
代码层面:
合理使用缓存(内存缓存IMemoryCache、分布式缓存Redis),减少数
原创力文档


文档评论(0)