首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2026 .NET 面试八股文:高频题 + 答案 + 原理(进阶核心篇)

2026 .NET 面试八股文:高频题 + 答案 + 原理(进阶核心篇)

作者头像
云中小生
发布2026-04-21 20:30:16
发布2026-04-21 20:30:16
1240
举报

前言

2026年.NET生态持续升温,.NET 10正式普及、Native AOT成为企业选型核心、AI集成与云原生落地加速,面试考察重点也从基础语法转向「原理+实战+性能」三维考核。本文整理了2026年.NET/C#面试高频题(覆盖初级→中级→高级),每道题均包含「高频提问场景+标准答案+底层原理+避坑提示」,拒绝无效背诵,帮你吃透核心逻辑,从容应对面试(文末附面试加分技巧)。

二、进阶核心篇(中级必问,考察框架理解)

核心考点:ASP.NET CoreEF Core依赖注入异步编程,是中级开发/后端开发的核心考察点,重点考察「框架使用+底层逻辑」。

1. 高频题:ASP.NET Core 的启动流程是什么?中间件的执行顺序为什么重要?

提问场景: 中级后端必问,常结合「中间件配置」追问。

标准答案:

(1)ASP.NET Core 启动核心流程(以.NET 8+为例):

1.入口为Program.cs,创建WebApplicationBuilder实例(用于配置服务和环境); 2. 通过builder.Services注册服务(如依赖注入、数据库上下文、跨域等); 3. 调用builder.Build()创建WebApplication实例,构建请求处理管道; 4. 配置中间件管道(如UseStaticFilesUseAuthenticationUseAuthorization等); 5. 调用app.Run()启动Web服务,监听HTTP请求。

(2)中间件执行顺序的重要性:

中间件是处理HTTP请求响应的组件,请求按「注册顺序」依次经过中间件,响应按「反向顺序」返回;顺序错误会导致功能失效,例如:

  • UseAuthentication()(身份认证)必须在UseAuthorization()(授权)之前,否则授权时无法获取认证信息;
  • 全局异常处理中间件必须放在最前面,否则无法捕获后续中间件的异常;
  • UseRouting()(路由匹配)必须在UseEndpoints()(端点映射)之前,否则无法匹配路由。

底层原理:中间件管道本质是一个委托链,每个中间件都包含一个RequestDelegate委托,接收HttpContext并返回Task;中间件通过UseRunMap等方法注册到委托链,请求到来时依次执行委托,响应时反向执行。

避坑提示:Run方法是「终结中间件」,注册后后续中间件不会执行,需谨慎使用;Map方法是「分支中间件」,按路径分支处理请求,分支内的中间件仅对该路径生效。

2. 高频题:.NET 依赖注入(DI)的三种生命周期是什么?区别是什么?

提问场景:中级必问,常追问「生命周期倒挂问题」「DbContext为什么用Scoped」。

标准答案:

.NET内置DI容器支持3种生命周期,核心区别是实例的创建时机和销毁时机

  • 1. Transient(瞬时):每次请求服务时都会创建一个新实例,生命周期最短;
  • 2. 适用场景:轻量级、无状态的服务(如工具类、辅助类)。
  • 3. Scoped(作用域):同一个HTTP请求内共用一个实例,不同请求创建新实例;
  • 4. 适用场景:DbContext、业务逻辑服务(确保同一请求内数据一致性)。
  • 5. Singleton(单例):整个应用生命周期内只创建一个实例,所有请求共用;
  • 6. 适用场景:无状态、全局唯一的服务(如配置服务、日志服务)。

底层原理:DI容器内部维护一个服务注册表,记录服务类型和生命周期;当请求服务时,容器根据生命周期创建实例并管理其生命周期:Transient每次创建新实例,使用后立即释放;Scoped绑定到HttpContext,请求结束后释放;Singleton在容器初始化时创建,应用停止时释放。

避坑提示:禁止将Scoped服务注入到Singleton服务中(生命周期倒挂),因为Singleton生命周期长于Scoped,会导致Scoped实例被长期持有,请求结束后无法释放,引发内存泄漏或线程安全问题;若需在Singleton中使用Scoped服务,需通过IServiceScopeFactory创建临时作用域。

3. 高频题:EF Core 中,Tracking(跟踪)NoTracking(无跟踪)的区别?什么时候用?

提问场景:中级后端必问,常结合查询性能数据修改考察。

标准答案:

  • Tracking(跟踪查询):EF Core会跟踪查询到的实体对象,记录实体的状态(新增、修改、删除),后续调用SaveChanges()时,会自动将实体的变更同步到数据库;
    • 适用场景:查询后需要修改实体并保存到数据库(如编辑、删除操作)。
  • NoTracking(无跟踪查询):EF Core不跟踪查询到的实体对象,不记录实体状态,查询效率更高(减少内存开销和跟踪开销);
    • 适用场景:仅查询数据,不进行修改(如列表查询、详情展示)。

底层原理:EF Core内部有一个变更跟踪器(ChangeTracker)Tracking查询时,会将实体加入变更跟踪器,记录实体的原始值和当前值;NoTracking查询时,实体不会加入变更跟踪器,查询后立即脱离EF Core的管理,无法通过SaveChanges()同步变更。

代码示例:

代码语言:javascript
复制
// Tracking 查询(默认)
var user = _dbContext.SysUsers.FirstOrDefault(u => u.Id == 1);
user.UserName = "newName";
_dbContext.SaveChanges(); // 会同步修改到数据库
// NoTracking 查询(推荐用于仅查询场景)
var user = _dbContext.SysUsers.AsNoTracking().FirstOrDefault(u => u.Id == 1);
user.UserName = "newName";
_dbContext.SaveChanges(); // 不会同步修改(无跟踪)

避坑提示:大量数据查询(如分页列表)时,务必用AsNoTracking(),否则会导致变更跟踪器持有大量实体,引发内存泄漏和性能下降;若NoTracking查询后需要修改实体,需调用Attach()方法将实体重新加入跟踪。

4. 高频题:async/await 的原理是什么?和多线程有什么区别?

提问场景:中级必问,常结合IO密集型/CPU密集型场景追问。

标准答案:

(1)async/await 原理: async/await 是.NET的异步编程模型,核心是任务调度+状态机,并非多线程:

  • async:标记方法为异步方法,告诉编译器该方法包含await关键字,会被编译为状态机(继承IAsyncStateMachine);
  • await:暂停当前异步方法的执行,将线程归还到线程池,不会阻塞线程;当await后的异步操作(如数据库查询、网络请求)完成后,线程池会分配一个线程,继续执行await后的代码。

(2)与多线程的区别:

  • async/await:异步非阻塞,不创建新线程(除非await的操作本身是多线程),核心是「释放线程资源」,提升系统吞吐量,适合IO密集型场景(如数据库、网络请求);
  • 多线程(Thread、Task.Run):并行执行,会创建新线程,核心是「利用多核CPU并行处理任务」,适合CPU密集型场景(如计算、排序)。

底层原理:async方法被编译为状态机后,会记录方法的执行状态(未开始、暂停、完成);await本质是调用TaskGetAwaiter()方法,注册回调函数,当异步操作完成后,回调函数会触发状态机切换,继续执行后续代码。

避坑提示:不要在async方法中使用Task.Wait()Task.Result(会导致线程阻塞,违背异步初衷)async方法返回值优先用Task<T>(有返回值)Task(无返回值),避免用void(仅适合事件处理,无法捕获异常)

附录

  • .NET面试题库:.NET面试题库
  • .NET知识库:.NET知识库
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 .NET修仙日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 二、进阶核心篇(中级必问,考察框架理解)
      • 1. 高频题:ASP.NET Core 的启动流程是什么?中间件的执行顺序为什么重要?
      • 2. 高频题:.NET 依赖注入(DI)的三种生命周期是什么?区别是什么?
      • 3. 高频题:EF Core 中,Tracking(跟踪)和 NoTracking(无跟踪)的区别?什么时候用?
      • 4. 高频题:async/await 的原理是什么?和多线程有什么区别?
      • (2)与多线程的区别:
    • 附录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档