2026 NET(C ASP NET Core)高频面试题及参考答案_第1页
2026 NET(C ASP NET Core)高频面试题及参考答案_第2页
2026 NET(C ASP NET Core)高频面试题及参考答案_第3页
2026 NET(C ASP NET Core)高频面试题及参考答案_第4页
2026 NET(C ASP NET Core)高频面试题及参考答案_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026.NET(C#/ASP.NETCore)高频面试题及参考答案覆盖初级‑中级‑高级,包含C#基础、异步、DI、中间件、EFCore、GC、性能、安全,适配.NET8/.NET10,面试真实考题。一、C#语言基础1.值类型和引用类型区别答案:值类型:struct、enum、基础类型(int,bool,double),一般分配在栈;变量保存的是数据本身。赋值是拷贝副本。引用类型:class、string、object、数组,对象实例分配托管堆;变量保存堆上对象的地址。赋值拷贝引用,多个变量指向同一个对象。string特殊:引用类型,但不可变。2.装箱与拆箱答案:装箱:值类型转object,在堆上分配对象,复制值。拆箱:object转回值类型,取出堆中数据复制到栈。高频坑:循环里频繁装箱会带来性能损耗;优先用泛型集合List<T>代替ArrayList避免装箱。3.override、new、重载overload区别答案:overload重载:同一个类,方法名相同,参数列表不同;返回值无关。编译期确定。override重写:子类重写父类virtual/abstract方法;多态运行时确定。new隐藏:子类定义同名方法,隐藏父类,不参与多态。4.abstract抽象类vsinterface接口答案抽象类:可以有字段、构造函数;可实现部分方法;单继承;可包含访问修饰符。接口:C#8+可默认实现;不能有实例字段;可多继承;成员默认public。抽象类侧重“是什么”;接口侧重“能做什么”。5.readonly与const答案const:编译期常量,必须赋值,属于静态;不能new对象。readonly:运行时只读;可在构造函数赋值;实例/静态都可以。6.delegate委托、event事件答案:委托:类型安全的方法签名封装,相当于方法的类型安全指针。event事件:是委托的封装,只能在本类内部触发;外部只能+=、-=,禁止直接赋值;实现发布订阅。二、异步编程async/await(必考)7.async/await底层原理答案:

编译器把async方法编译生成状态机类;遇到await暂停方法,释放线程;IO完成后回到状态机继续执行。await不会新开线程;IO密集型不会占用线程等待。8.Task与Thread区别答案Thread:操作系统线程,开销大;直接操作系统资源。Task:任务抽象,基于线程池;IO任务不一定占用线程;支持取消、异常、组合(WhenAll/WhenAny)。9.为什么禁止使用.Result/.Wait()答案

.Result会阻塞线程等待异步完成。\hASP.NETCore环境极易造成线程池饥饿、死锁。原则:asyncallthewaydown,一路await,不要同步等待异步方法。10.ConfigureAwait(false)作用答案

不捕获当前上下文(SynchronizationContext);减少上下文切换开销;非UI场景(后台、服务层)推荐写awaitxxx.ConfigureAwait(false)。11.Task.Run适合什么场景答案

适合CPU密集任务;不适合IO密集(IO本身不需要线程)。\hASP.NETCore尽量少用Task.Run,不要用来包装IO方法。三、.NET基础&CLR&GC12..NETFramework和现代.NET(.NETCore/.NET5+)区别答案.NETFramework:仅Windows;全局安装;老旧Windows框架;不支持跨平台。.NET(原.NETCore):开源跨平台Windows/Linux/macOS;支持自包含部署;云原生、高性能;新项目首选。13.CLR是什么?作用答案

公共语言运行时,.NET执行引擎。负责JIT即时编译、GC垃圾回收、异常处理、内存管理、安全校验,执行托管代码。14.GC垃圾回收,分代回收Gen0Gen1Gen2,LOH大对象堆答案分代思想:新对象在Gen0,存活晋升Gen1、Gen2。Gen0回收频繁;Gen2回收代价大,会造成STW暂停。LOH大对象堆:>=85000字节对象;默认不压缩;容易内存碎片。.NET5+支持LOH压缩。15.Dispose()vsFinalize()答案Dispose():手动释放非托管资源;由用户调用;实现IDisposable。析构函数(Finalize):GC回收对象时自动调用,不确定执行时机,兜底释放。标准模式:Dispose模式。四、\hASP.NETCore核心16.中间件Middleware是什么,执行流程答案

中间件是处理Http请求管道组件;按注册顺序链式执行。InvokeAsync(HttpContext,RequestDelegatenext),awaitnext.Invoke()调用下一个中间件。csharp

publicasyncTaskInvokeAsync(HttpContextcontext,RequestDelegatenext)

{

//请求来到这里

awaitnext(context);

//响应返回这里

}17.依赖注入DI三种生命周期答案Singleton单例:整个应用生命周期,只创建1个实例。Scoped作用域:每个请求创建一个实例;同一个请求内共用。Transient瞬时:每次获取都新建对象。坑:不要长生命周期依赖短生命周期(Singleton不要注入Scoped,会造成CaptiveDependency捕获依赖)。18.IOptions/IOptionsSnapshot/IOptionsMonitor区别答案IOptions<T>:Singleton;配置读取一次,配置文件变更不会刷新。IOptionsSnapshot<T>:Scoped;每个请求重新读取配置。IOptionsMonitor<T>:Singleton;支持配置热更新;提供OnChange回调。19.环境区分Development、Production答案

环境变量ASPNETCORE_ENVIRONMENT;注入IWebHostEnvironment;csharp

if(env.IsDevelopment()){}20.MinimalApi和Controller区别答案Controller:传统MVC/WebApi,特性路由、模型验证、过滤器;适合大型复杂API。MinimalApi:轻量,Program直接定义端点;更少开销;适合小型服务。21.Filter过滤器有哪几种答案

授权过滤器→资源过滤器→模型验证→操作过滤器→异常过滤器→结果过滤器。五、EFCore高频(面试重中之重)22.IEnumerablevsIQueryable答案IEnumerable:查询在内存执行;查询条件加载到内存再过滤。IQueryable:表达式树,翻译成SQL交给数据库执行;延迟执行。不要把IQueryable转IEnumerable过早,会把全表拉到内存。23.AsNoTracking作用答案

关闭实体变更跟踪;只读查询(列表、报表)使用,减少内存,提升性能;不需要更新实体时使用。24.N+1问题,如何解决答案

场景:循环查询导航属性,先查主表1次,循环每条再查子表N次,共N+1次数据库。

解决方案:Include()预加载投影查询SelectDTO,只查需要字段AsSplitQuery()解决多集合Include笛卡尔积问题禁止开发环境开启延迟加载用于生产接口。25.AsSplitQuery什么时候用答案

当多次Include集合导航属性,会产生笛卡尔积膨胀,使用AsSplitQuery()拆分成多条SQL,减少传输数据。26.EFCore事务答案_dbContext.Database.BeginTransactionAsync手动事务;SaveChangesAsync内部默认单事务;跨多个DbContext使用环境事务。六、LINQ、集合27.IQueryable延迟执行什么时候真正执行SQL答案

调用ToList()、ToArray()、First()、Count()、Any()等触发枚举才会执行;定义查询不会访问数据库。七、安全、认证授权28.JWT认证流程答案用户账号密码登录;服务端生成JWT令牌返回客户端;客户端每次请求Header带上Authorization:Bearertoken;服务端校验签名,解析Claims,完成身份;JWT本身不能存敏感信息;无状态,无法直接撤销(需黑名单Redis)。29.身份认证Authenticationvs授权Authorization答案认证:你是谁(登录校验身份)。授权:你能干什么(角色/策略判断权限)。八、性能优化&生产问题30.\hASP.NETCoreAPI性能优化手段答案全链路async/await,禁止.Result;EFCore优化:AsNoTracking、投影DTO、索引、避免N+1;Redis缓存热点数据;开启响应压缩;合理使用DI生命周期;分页,禁止一次性查全部数据;限流熔断;健康检查;监控;避免大对象,减少GC压力。31.死锁发生条件答案互斥占有资源占有且等待不可抢占循环等待;解决:统一锁获取顺序。九、场景问答题(高级)32.接口请求慢,排查思路?答案看日志,确认慢是DB、外部HTTP、CPU还是GC;数据库:看执行计划,是否缺少索引、N+1、没有分页;是否存在同步阻塞(.Result);GC频繁,是否大量创建对象,LOH碎片;第三方接口IO慢;线程池是否耗尽。33.DbContext生命周期怎么配置,为什么不建议单例答案

DbContext默认Scoped。DbContext不是线程安

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论