在 .NET 技术岗位面试中,考察范围通常涵盖 C# 语言特性、ASP.NET Core 架构、Entity Framework Core 优化、依赖注入、异步编程、微服务设计、安全机制、性能调优及云原生集成等多个维度。面试官不仅关注理论知识,更重视候选人在真实场景中的工程实践能力与系统设计思维。
.NET 基础问题
1. 什么是 .NET?
.NET 是一个开源、跨平台的开发框架,可用于构建 Web 应用、API、桌面软件、移动应用、云服务及微服务。其核心组件包括公共语言运行时(CLR)、基础类库(BCL),并支持 C#、F#、VB.NET 等多种语言。
2. CLR 的作用是什么?
CLR(Common Language Runtime)是 .NET 的执行引擎,负责内存管理、垃圾回收、异常处理、安全策略实施以及即时编译(JIT),为托管代码提供运行环境。
3. .NET Framework 与现代 .NET(原 .NET Core)有何区别?
.NET Framework 仅支持 Windows,部署依赖全局安装,对微服务和云原生支持有限;而现代 .NET 具备跨平台能力、高性能、自包含部署模式,并专为云原生架构设计,已成为新项目的首选。
C# 核心概念
4. 抽象类与接口的区别
抽象类可包含部分实现,用于共享基类行为,但不支持多继承;接口定义契约,支持多实现,适用于解耦与扩展。实践中,接口用于声明能力,抽象类用于复用逻辑。
5. Task 与 ValueTask 的适用场景Task 是引用类型,每次异步操作都会在堆上分配内存;ValueTask 是值类型,在同步完成率高的场景下可显著减少 GC 压力。若性能分析显示存在分配瓶颈,可考虑使用 ValueTask。
6. 依赖注入(DI)的价值
DI 通过构造函数注入依赖,降低模块耦合度,提升可测试性与可维护性。例如,服务类接收 IRepository 接口而非直接创建具体实现,便于单元测试时模拟依赖。
7. ASP.NET Core 中的服务生命周期
Transient:每次请求都创建新实例,适用于无状态服务; Scoped:每个 HTTP 请求内单例,适用于数据库上下文等; Singleton:整个应用生命周期内唯一,适用于配置缓存等。
错误的生命周期选择可能导致内存泄漏或并发异常。
ASP.NET Core 架构
8. 中间件(Middleware)的作用
中间件构成请求处理管道,每个组件可在请求进入和响应返回时执行逻辑。例如,日志中间件可在调用后续中间件前后记录时间戳,实现非侵入式监控。
9. 认证(Authentication)与授权(Authorization)的区别
认证验证用户身份(如登录),授权决定权限(如能否删除数据)。认证必须先于授权,两者共同构成安全访问控制链。
10. 模型绑定(Model Binding)机制
模型绑定自动将 HTTP 请求参数(如查询字符串、JSON 体)映射到控制器方法的参数对象,简化数据解析逻辑,提升开发效率。
Entity Framework Core 优化
11. IEnumerable 与 IQueryable 的性能差异IEnumerable 在内存中执行 LINQ 查询,适合小数据集;IQueryable 将查询表达式翻译为 SQL,在数据库端执行,大幅减少网络传输与内存占用,适用于大数据量场景。
12. AsNoTracking() 的使用时机AsNoTracking() 禁用 EF Core 的变更跟踪功能,适用于只读查询(如报表、列表页),可显著提升性能并降低内存消耗。
异步编程
13. async/await 的核心价值async/await 实现非阻塞 I/O 操作,释放线程以处理其他请求,大幅提升 Web 应用的吞吐量与可扩展性。
14. 同步与异步编程的适用场景
同步适用于 CPU 密集型任务(如加密计算);异步适用于 I/O 密集型操作(如数据库查询、HTTP 调用)。在 API 开发中,异步是高并发场景的基石。
架构与设计
15. Clean Architecture 的分层原则
Clean Architecture 将系统划分为表现层、应用层、领域层和基础设施层,确保业务逻辑与技术细节解耦,提升可测试性与长期可维护性。
16. 微服务架构的核心优势
微服务将单体应用拆分为独立部署的服务,每个服务对应单一业务能力。其优势包括:独立扩缩容、故障隔离、快速迭代,但需配套服务发现、配置中心等治理能力。
性能与安全
17. 提升 API 性能的关键措施
全链路异步化; 启用 Redis 缓存热点数据; 优化 EF Core 查询(投影、索引、AsNoTracking); 启用响应压缩(Gzip); 实施限流与熔断; 集成健康检查与可观测性。
18. 垃圾回收(GC)的工作机制
GC 自动回收不再使用的对象内存,采用分代(Gen 0/1/2)与标记-压缩算法。合理管理大对象堆(LOH)与对象生命周期,可避免 GC 停顿影响用户体验。
19. 基于角色的授权(Role-Based Authorization)
通过 [Authorize(Roles = "Admin")] 特性限制接口访问权限,适用于权限模型简单的系统。复杂场景建议采用策略授权(Policy-Based)。
20. JWT 认证的原理
JWT(JSON Web Token)是一种无状态认证机制,由头部、载荷、签名三部分组成。服务端验证签名后即可信任载荷中的用户声明,适用于分布式系统与无会话 API。
高阶话题
高级岗位常涉及以下深度问题:
**Span与 Memory**:栈上分配,避免堆内存分配,适用于高频解析场景; **ConfigureAwait(false)**:避免死锁,提升异步方法在库中的兼容性; Thread / Task / Parallel 的选型:Task 是推荐的异步单元,Parallel 适用于 CPU 并行; 分布式缓存策略:Redis + 本地缓存(Cache-Aside 模式); 容器化部署:Docker 多阶段构建、非 root 用户运行、Chiseled 镜像; 云原生监控:OpenTelemetry 集成、指标导出、日志结构化㉒。
面试准备建议
清晰表达:用简洁语言解释技术原理,避免堆砌术语; 代码规范:展示生产级代码(如异常处理、日志、配置); 场景驱动:结合项目经验说明架构决策(如为何选微服务); 性能意识:能分析 GC、数据库、网络等瓶颈; 系统设计:针对高并发、高可用需求提出合理方案。