.NET 面试会问哪些问题?
作者 Aaron Cao · 更新于

常见问题包括运行时(CLR、垃圾回收、值类型与引用类型)、语言特性(async 和 await、LINQ、泛型、记录)、框架(ASP.NET Core 中间件与依赖注入、EF Core),以及长期运行的服务发生内存泄漏或 API 端点响应缓慢等情景题。面试官看重的是你的推理过程。
.NET 面试通常先问哪些运行时和语言问题?
面试官通常从框架的起点——运行时——开始。你需要解释公共语言运行时的作用(加载程序集、即时编译中间语言、管理内存),随后深入一层讨论垃圾回收。后续问题往往可以预见:垃圾回收器为什么采用分代机制,什么会让对象存活并进入更高代,大对象堆有什么用途,以及既然内存由系统管理,为什么还需要 IDisposable 和 using。最后一个问题应从文件句柄、连接等非托管资源入手,因为垃圾回收器并不知道如何及时释放它们。
- 值类型和引用类型。它们分别存放在哪里、复制对各自意味着什么,以及装箱有什么成本。
- async 和 await。说明等待任务会释放调用线程,而不是阻塞它;为什么
async void仅用于事件处理程序;以及人们警告.Result时所说的死锁是什么。 - LINQ。延迟执行是常见陷阱:
IEnumerable查询在被枚举时才会运行,而不是在写下时运行;针对数据库提供程序的查询,也只有在表达式可被提供程序理解时才能转换为 SQL。 - 泛型、接口和记录。泛型约束、为了可测试性而优先使用接口而非基类的原因,以及记录的值相等性有什么好处。
回答每个问题时,都要说明机制及其一个后果。比如,因为大多数对象很快就会消亡,所以第零代回收成本很低——这才是面试官期待的深度;只说出各代的名称却不解释原因是不够的。
ASP.NET Core 和 EF Core 会怎么考?
你对编写控制器很有信心,却担心问题会涉及平时很少接触的底层机制。这种担心是有道理的,因为框架类问题正集中在这里。下面按照常见提问顺序介绍这些机制,并附上每项通常会引出的追问。
- 请求管道。中间件按注册顺序运行,每个组件都会决定是否调用下一个组件。追问:身份验证相对于授权应放在哪里?如果注册顺序颠倒,会发生什么?
- 依赖注入生命周期。Singleton 在应用程序生命周期内一直存在,scoped 在一次请求期间存在,transient 每次解析时都会创建。经典陷阱是将数据库上下文等 scoped 服务注入 singleton;你要能解释为什么这是一个缺陷。
- 配置和选项。分层配置源、环境覆盖,以及用于强类型设置的选项模式。
- EF Core。变更跟踪以及何时应在只读查询中将其关闭、N+1 问题以及如何通过预先加载或投影规避它、迁移,还有应坦诚承认手写查询优于 LINQ 的临界点。
- 测试。接口和 DI 容器如何让服务具备可测试性,以及内存中提供程序能证明和不能证明真实数据库的哪些行为。
最优秀的候选人会把这些知识联系起来:在 singleton 后台服务中解析 scoped 上下文,不是一道纯知识题,而是面试官在实际发布的软件中遇到过的内存与正确性缺陷。他们希望听到你会显式创建作用域。
情景题通常如何进行?
高级职位的多轮面试会给出一种症状,并观察你的分析方法。一个典型例子是:某位后端工程师面试物流公司的高级职位时,被告知一个 ASP.NET Core API 的内存占用会连续数日攀升,直到容器重启。优秀的回答不会靠猜测,而是会询问发生了哪些变化,检查是否有对象被静态缓存或长期存在的事件订阅捕获,查找 singleton 持有 scoped 服务的情况,检查大对象堆的增长,并在提出修复方案之前获取内存快照。面试官评估的是你的排查顺序。
其他常见情景包括:某个端点只在高负载下变慢,此时应依次排查同步数据库调用、改用 async、连接池耗尽和缓存;共享集合中的竞态条件,以及并发集合与各种锁定方案的成本;某个请求必须调用三个下游服务时,如何处理超时、重试和部分失败;以及如何在不停机的情况下通过迁移添加一列。每种情况下,都应说明约束条件、选择一种机制,并明确说出取舍。
如果事先通过追问形式大声演练,这些题会容易得多;模拟面试模式正是为此设计。其他语言和岗位的题库汇总在按岗位和主题分类的面试题中。
AI 面试助手能帮助回答 .NET 问题吗?
在对话式面试中可以,但须遵守明确的限制。SubcueAI 的原生 macOS 和 Windows 桌面应用会采集系统音频和你的麦克风声音,并在本地浮层中显示简短的回答建议。因此,当面试官问为什么 singleton 中的 scoped 上下文是一个缺陷时,相关机制会显示在屏幕上,供你用自己的话解释。浏览器扩展适用于 Chrome 和 Edge 中的浏览器标签页通话,并且只采集会议标签页的音频。不会有机器人加入通话,也不会向会议页面注入任何内容;设置方法请参阅教程页面。
限制包括:监考测评、录屏、公司管理的笔记本电脑,以及在他人观察下输入 C# 的现场编程练习,都不在适用范围内;而且,面试要求你编写代码时,恰恰是助手最不擅长的场景。它最适合帮助处理上述运行时、框架和权衡取舍类问题。请先向它提供你的简历,使建议能够反映你真正构建过的系统;该资料保存在简历生成器中。