⭐️关注回复 “888” 领取:《2026最新100道.NET面试真题》
1. 值类型和引用类型的区别?举例说明
答案:
值类型:存储在栈中,包含struct、enum、基本数据类型(int/bool/decimal 等),赋值时传递副本,修改副本不影响原数据。 引用类型:存储在堆中,栈中存引用地址,包含class、interface、delegate、string、数组,赋值时传递引用,修改会影响原数据。

2. ref 和 out 关键字的区别?适用场景
答案:
相同点:均为按引用传递参数,方法内修改会影响外部变量。 不同点: ref:参数传递前必须初始化,方法内可改可不改。 out:参数传递前无需初始化,方法内必须赋值(编译报错)。 场景:ref 用于双向数据传递(如交换两个数);out 用于方法返回多个值(如 int.TryParse)。
3. string 和 StringBuilder 的区别?什么时候用 StringBuilder
答案:
string:不可变字符串,每次拼接都会生成新对象,频繁拼接(循环内)会造成内存浪费。 StringBuilder:可变字符串,默认容量 16,扩容为原 2 倍,直接修改字符数组,无新对象开销。 场景:单次拼接用 string(编译器自动优化);拼接次数≥3 次或循环内拼接必用 StringBuilder。
4. 抽象类(abstract)和接口(interface)的区别?
答案:
5. 重载(overload)和重写(override)的区别?
答案:
重载:同一类中,方法名相同,参数列表(个数 / 类型 / 顺序)不同,与返回值无关,编译时多态。 重写:子类对父类 virtual/abstract 方法的重新实现,方法名、参数、返回值必须一致,运行时多态,需用 override 关键字。
二、.NET 核心与内存管理(高级面试重点)
1. .NET GC 垃圾回收机制?分代回收原理
答案:
GC 负责回收托管堆中不再被引用的对象,自动释放内存,无需手动干预。 分代回收(0/1/2 代): 0 代:新对象默认分配,空间小、回收频繁(最快)。 1 代:0 代回收后存活对象晋升,作为缓冲,回收较少。 2 代:1 代存活对象晋升,空间大、回收最慢(老年代)。 核心逻辑:局部回收优于全局回收,优先回收 0 代,不足时触发 1 代、2 代回收,减少性能损耗。
2. 大对象堆(LOH)的特点?内存泄漏常见原因
答案:
LOH:默认 **≥85000 字节 ** 的对象直接分配,不参与内存压缩(避免移动大对象开销),容易产生内存碎片。 内存泄漏原因(对象被无意引用,GC 无法回收): 静态集合(static List/ Dictionary)长期持有对象。 事件订阅未取消(如 button.Click += OnClick,未移除)。 非托管资源(文件流 / 数据库连接)未用 using 或 Dispose 释放。
3. .NET 中托管代码和非托管代码的区别?如何交互
答案:
托管代码:由 CLR 管理,自动内存回收、类型安全检查,编译为 IL 中间语言(如 C#)。 非托管代码:直接编译为机器码,无 CLR 管理,需手动控制内存(如 C++/VB6)。 交互方式:P/Invoke(C# 调用 C++dll)、C++/CLI(混合编程)、COM 组件互操作。
4. 什么是装箱和拆箱?如何避免性能损耗
答案:
装箱:值类型→引用类型(如 int→object),在堆中生成新对象,拷贝值类型数据。 拆箱:引用类型→值类型,检查类型一致性,拷贝堆中数据到栈。 损耗:频繁装箱拆箱会生成大量临时对象,增加 GC 压力。 避免:用泛型(List<int>代替 ArrayList)、直接使用值类型,减少强制转换。
三、ASP.NET Core 高频真题(Web 面试核心)
1. ASP.NET Core 中间件的作用?常用中间件有哪些
答案:
作用:管道式处理 HTTP 请求和响应,请求进入→依次经过中间件→响应返回,可自定义处理逻辑(认证 / 路由 / 日志)。 常用中间件: 静态文件(StaticFiles):处理 css/js/html 等静态资源。 路由(Routing):匹配请求路径到对应 Controller/Action。 认证(Authentication):身份验证(JWT/ Cookie)。 授权(Authorization):权限校验,控制接口访问。 异常处理(ExceptionHandler):全局捕获异常,返回友好信息。
2. ASP.NET Core 中依赖注入(DI)的三种生命周期?
答案:
- Transient(瞬时)
:每次请求都创建新实例,轻量无状态服务常用(默认)。 - Scoped(作用域)
:同一 HTTP 请求内仅创建 1 个实例,请求结束销毁(如 DbContext)。 - Singleton(单例)
:应用程序生命周期内仅 1 个实例,全局共享,需保证线程安全(如配置服务)。
3. JWT 认证的原理?和 Cookie 认证的区别
答案:
JWT 原理:用户登录→服务器生成加密令牌(含用户信息 / 过期时间)→返回客户端→客户端后续请求携带令牌→服务器解密验证→授权访问。 区别: 存储:JWT 存客户端(Header),Cookie 存浏览器(自动携带)。 跨域:JWT 支持跨域,Cookie 受同源策略限制。 安全性:JWT 防篡改(签名验证),Cookie 易被 CSRF 攻击。 适用场景:JWT 适合前后端分离 / 微服务;Cookie 适合传统 Web 应用。
4. ASP.NET Core 中如何实现全局异常处理?
答案:
- 中间件方式
:自定义异常中间件,管道最前端捕获所有异常,统一返回 JSON 错误信息。 - 过滤器方式
:实现 IExceptionFilter,重写 OnException 方法,仅捕获 Controller/Action 异常。 - UseExceptionHandler
:内置中间件,开发环境显示详细错误,生产环境返回友好页面。
四、.NET 10 新特性高频题(2026 面试热点)
1. .NET 10 Native AOT 的优势?适用场景和局限
答案:
优势: - 编译为原生机器码
,无 CLR 依赖,启动速度极快(毫秒级)。 - 单文件发布
,无需安装.NET 运行时,直接运行。 - 内存占用低
,适合资源受限环境。 场景:桌面应用、微服务、容器化部署、IoT 设备。 局限: 不支持动态加载(Assembly.Load)、反射部分功能。 部分库不兼容,需适配 AOT。
2. .NET 10 中强类型 JSON 序列化(System.Text.Json)优化点
答案:
性能提升:序列化 / 反序列化速度更快,内存分配减少 30%+。 新特性:支持JSON Schema 生成、默认值忽略、循环引用处理。 易用性:内置支持更多类型(DateOnly/TimeOnly),配置更简洁。
五、架构与性能优化(资深 / 架构岗必问)
1. .NET 项目中常见的性能优化手段
答案:
- 内存优化
:用 StringBuilder、减少装箱拆箱、避免静态集合泄漏、合理使用 using 释放资源。 - 代码优化
:循环内避免重复计算、用泛型代替非泛型集合、异步编程(async/await)避免阻塞。 - 数据库优化
:EF Core 启用缓存、避免 N+1 查询、索引优化、批量操作代替循环单条。 - Web 优化
:静态资源缓存、压缩响应数据、JWT 缓存、分布式缓存(Redis)代替 Session。 - GC 优化
:避免大对象、减少临时对象、合理设置 GC 代大小、用内存分析工具(dotnet-dump)排查问题。
2. 微服务架构中.NET 的应用?如何解决服务注册与发现
答案:
应用:用ASP.NET Core 搭建微服务,结合Ocelot 网关、JWT 认证、Redis 缓存、RabbitMQ 消息队列实现高可用架构。 注册与发现: - Consul
:常用,支持服务注册、健康检查、配置中心。 - Nacos
:阿里开源,兼容.NET,支持动态配置、服务发现。 - K8s Service
:容器化部署时,用 K8s 自带服务发现。
简述 private、protected、public、internal 访问权限: private:类内部访问;protected:类内部 + 子类;public:全公开;internal:同一程序集内。 C# 中 using 的作用:释放非托管资源(等价于 try...finally+Dispose)、引入命名空间、创建别名。 委托和事件的区别:事件是特殊的委托,只能在类内部触发,外部只能订阅 / 取消订阅,更安全。

文章来源:
四季读书网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至23467321@qq.com举报,一经查实,本站将立刻删除;如已特别标注为本站原创文章的,转载时请以链接形式注明文章出处,谢谢!