版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.NET面试试题及详细答案(完整版、职场实战版)一、C#基础语法与核心知识(高频基础题)1、值类型和引用类型的区别?各自包含哪些常用类型?参考答案:值类型数据存储在栈空间,变量直接存储数据本身,赋值时是完整拷贝,相互之间不会影响。引用类型数据存储在堆空间,变量存储的是对象的内存地址,赋值时只拷贝地址,多个变量指向同一个对象,修改会相互影响。值类型:int、double、bool、char、struct、枚举、decimal等。引用类型:string、class、数组、委托、接口、object等。补充实战点:string是特殊的引用类型,具备不可变性,每次赋值都会生成新对象,不会修改原对象。2、string、StringBuilder、StringBuffer的区别?项目中如何选择?参考答案:1)string:不可变字符串,每次拼接、修改都会重新开辟内存生成新对象,频繁操作会造成大量内存碎片和性能损耗。适合少量、静态字符串场景。2)StringBuilder:可变字符串,预分配内存缓冲区,修改、拼接不会频繁创建新对象,性能极高。适合循环拼接、大量字符串处理场景。3)StringBuffer:.NET中基本不用,是Java中的线程安全字符串工具,.NET统一使用StringBuilder。项目规范:循环内字符串拼接必须用StringBuilder,单次简单拼接直接用string。3、const和readonly的区别?参考答案:1)const是编译时常量,编译时直接替换值,必须在声明时初始化,不能通过构造函数赋值,默认是静态的,不能修饰对象级别字段。2)readonly是运行时常量,可以在声明时或构造函数中初始化,实例构造和静态构造都可以,支持对象级别和静态级别,灵活性更高。实战场景:固定不变的全局常量用const;需要运行时初始化、不同实例可能有差异的只读字段用readonly。4、ref和out关键字的区别?参考答案:1)ref:传入的参数必须提前初始化,方法内外都是同一个变量,主要用于修改原有变量的值。2)out:传入的参数可以不初始化,方法内部必须对参数赋值,主要用于方法多返回值场景。新版C#优化:C#7.0后支持out变量内联声明,代码更简洁,项目中多返回值优先用out,修改变量优先用ref。5、装箱和拆箱是什么?有什么性能问题?如何避免?参考答案:装箱:值类型转换为引用类型(object、接口等),会在堆中开辟新内存,拷贝数据。拆箱:引用类型转回值类型,需要类型校验、内存读取。问题:装箱拆箱会产生额外内存开销和类型校验开销,频繁操作会严重影响程序性能,还会产生大量垃圾回收压力。避免方式:尽量使用泛型、强类型集合,避免频繁将值类型赋值给object类型。二、面向对象与C#进阶特性1、面向对象三大特性及各自作用?参考答案:1)封装:隐藏内部实现细节,只暴露公开访问接口,保证数据安全、降低代码耦合,方便后期维护。2)继承:实现代码复用,子类可以拥有父类属性和方法,支持功能扩展,减少重复代码。3)多态:同一行为在不同对象上有不同实现,分为静态多态(方法重载)和动态多态(方法重写),提升代码扩展性和灵活性。2、override和new的区别?参考答案:1)override:重写父类虚方法,彻底覆盖父类逻辑,多态调用时会执行子类重写后的方法。2)new:隐藏父类方法,只是新建一个同名方法,不会重写父类方法;父类引用指向子类对象时,依然执行父类原有方法,不具备多态性。项目规范:需要扩展父类虚方法逻辑用override,单纯定义同名独立方法用new,禁止滥用new造成逻辑混乱。3、抽象类和接口的区别?项目中如何选型?参考答案:1)抽象类:可以有字段、属性、构造函数、已实现方法和抽象方法,单继承,侧重“是什么”的关系,定义通用模板和通用逻辑。2)接口:不能有字段、构造函数,默认方法是公开抽象,可多实现,侧重“能做什么”的关系,定义行为规范。选型原则:有通用字段、通用默认逻辑、需要统一模板用抽象类;需要定义行为规范、多功能扩展、解耦用接口。4、泛型的原理和优势?参考答案:原理:编译时预留类型占位符,运行时根据实际类型生成对应专属类型,实现类型复用。优势:1、类型安全,编译时校验类型,避免装箱拆箱;2、代码复用,一套逻辑适配多种类型;3、提升性能,减少多余类型转换和内存开销。5、委托和事件的区别?为什么要用事件封装委托?参考答案:委托是方法的容器,可以直接赋值、外部随意调用;事件是委托的安全封装,是一种特殊的委托。区别:事件只能在类内部触发,外部只能订阅和取消订阅,禁止外部赋值和主动触发,安全性更高。项目中事件主要用于解耦,实现观察者模式,比如日志通知、状态变更、异步回调等场景。三、.NET框架与核心机制1、CLR、CTS、CLS分别是什么?作用是什么?参考答案:1)CLR(公共语言运行时):.NET的运行核心,负责内存管理、垃圾回收、线程管理、代码编译执行、异常处理,是程序运行的基础。2)CTS(公共类型系统):统一所有.NET语言的数据类型规范,保证C#、VB.NET等语言类型可以相互兼容调用。3)CLS(公共语言规范):定义跨语言通用的语法和规则,保证不同.NET语言编写的组件可以互相引用、兼容运行。2、GC垃圾回收机制详解?GC回收哪些内存?不回收哪些?参考答案:GC是CLR自动内存管理机制,专门回收堆中不再被引用的对象内存,无需手动释放。栈内存由系统自动分配释放,不受GC管理。GC采用分代回收机制,分为0、1、2代:0代对象生命周期短、回收频率高;2代对象生命周期长、回收频率低。每次优先回收0代,提升回收效率。GC只回收托管堆内存,文件流、数据库连接、Socket、句柄等非托管资源GC无法自动回收,需要手动using释放或重写Dispose方法。3、using关键字的作用和原理?参考答案:using用于托管释放非托管资源,凡是实现IDisposable接口的类都可以使用using。原理:编译后会自动生成try-finally代码块,在finally中强制执行Dispose方法,无论代码正常执行还是异常报错,都能保证资源必然释放,避免内存泄漏。4、值传递和引用传递的本质区别?参考答案:值传递:传递的是数据副本,方法内修改不会影响原变量,默认所有值类型都是值传递。引用传递:传递的是内存地址,方法内修改会直接修改原对象,引用类型默认是引用传递;值类型通过ref/out也可以实现引用传递。四、ASP.NETCore面试高频题1、ASP.NETCore管道模型是什么?中间件执行顺序?参考答案:ASP.NETCore采用请求管道模型,客户端请求进来后,依次经过多个中间件处理,最终生成响应返回客户端。中间件执行遵循先注册先执行、后注册先响应的洋葱模型。请求进入时按注册顺序执行,响应返回时逆序执行。常用中间件:路由、跨域、身份认证、授权、静态文件、异常处理等。2、依赖注入(DI)的三种生命周期及区别?参考答案:1)Singleton(单例):全局唯一实例,程序启动后创建一次,全程复用,性能最高,适合无状态工具类。2)Scoped(作用域):每次请求创建一个实例,同一个请求内全程复用,请求结束自动释放,是业务服务最常用的生命周期。3)Transient(瞬时):每次获取都创建新实例,轻量、无状态小工具类可用。避坑点:禁止单例注入Scoped服务,会导致服务生命周期混乱、数据错乱。3、过滤器有哪些?各自执行顺序?参考答案:ASP.NETCore五大过滤器:异常过滤器、授权过滤器、资源过滤器、操作过滤器、结果过滤器。执行顺序:授权过滤器→资源过滤器→操作过滤器→控制器方法执行→结果过滤器→异常过滤器(仅报错时触发)。实战常用:权限校验用授权过滤器,日志记录、参数校验用操作过滤器,全局异常捕获用异常过滤器。4、跨域问题怎么解决?原理是什么?参考答案:浏览器同源策略限制不同域名、端口、协议的请求访问后端接口,导致跨域报错。.NETCore解决方案:配置CORS跨域中间件,允许指定域名、请求头、请求方法、携带Cookie。原理:后端响应头添加Access-Control-*系列参数,告诉浏览器当前请求合法,放行跨域请求。五、多线程与异步编程(面试重难点)1、同步、异步、阻塞、非阻塞的区别?参考答案:同步:代码顺序执行,上一步执行完才执行下一步。异步:无需等待任务完成,直接执行后续代码,任务完成后回调处理结果。阻塞:当前线程暂停等待,占用线程资源不释放。非阻塞:线程不等待,继续执行其他任务,提升资源利用率。async/await是.NET最优异步方案,实现非阻塞等待,不占用线程闲置等待。2、Task和Thread的区别?参考答案:1)Thread是操作系统级线程,粒度大、开销高,无返回值、不易控制,适合简单后台任务。2)Task是线程池封装的任务,粒度轻、开销小,支持回调、取消、超时、异常捕获,支持async/await,是.NET主流异步方案。项目中全部使用Task代替Thread。3、async/await的工作原理?会不会开启新线程?参考答案:async/await是编译器语法糖,编译后会生成状态机,分段执行异步方法。await等待IO操作时,不会阻塞当前线程,会释放线程回线程池,等待操作完成后再恢复线程继续执行。纯IO异步场景(接口请求、数据库查询、文件读写)不会开启新线程;CPU密集型任务会调用线程池线程执行。4、线程安全问题怎么解决?lock、Monitor、Semaphore区别?参考答案:多线程同时操作共享变量会出现数据错乱,即为线程安全问题。lock:最简同步锁,封装了Monitor,保证同一时间只有一个线程进入代码块。Monitor:功能更强,支持超时、手动加锁解锁、等待唤醒。Semaphore:信号量,控制并发线程数量,适合限流、多线程并发控制场景。六、数据库与EFCore1、EFCore三种使用方式及区别?参考答案:1)CodeFirst:代码优先,通过实体类自动生成数据库表,开发效率高,新项目首选。2)DatabaseFirst:数据库优先,根据已有数据库表反向生成实体类,适合老旧项目维护。3)ModelFirst:模型优先,通过可视化模型设计生成代码和数据库,目前基本淘汰。2、EFCore延迟加载和贪婪加载区别?如何解决N+1查询问题?参考答案:延迟加载:默认开启,访问导航属性时才查询数据库,多次查询,容易产生N+1问题。贪婪加载:通过Include、ThenInclude提前关联查询,一次性查询所有关联数据,减少数据库请求。解决N+1核心:查询关联数据必须手动Include,禁止遍历中访问导航属性。3、数据库索引原理?哪些字段适合建索引?哪些不适合?参考答案:索引是B+树结构,通过空间换时间,大幅提升查询效率,会降低新增、修改、删除性能。适合建索引:高频查询、筛选、排序、分组字段,主键、唯一字段。不适合:数据量小、频繁修改、重复率极高的字段(如状态、性别)。七、性能优化与项目实战(压轴面试题)1、你在项目中做过哪些.NET性能优化?参考答案(实战话术,可直接面试口述):1、字符串优化:循环拼接统一使用StringBuilder,杜绝string频繁拼接。2、异步优化:IO密集型接口全部使用async/await,释放线程池,提升并发量。3、数据库优化:合理建立索引,使用Include贪婪加载避免N+1,分页查询、避免select*,批量操作代替循环单条操作。4、缓存优化:引入Redis缓存热点数据、字典数据、登录信息,减少数据库压力。5、GC优化:减少装箱拆箱、避免大对象频繁创建、using释放非托管资源,减少内存泄漏。6、接口优化:统一返回模型、过滤器统一处理,减少重复代码,开启响应压缩,提升接口响应速度。2、如何排查.NET程序内存泄漏、接口卡顿问题?参考答案:1、接口卡顿:查看日志定位慢接口,分析SQL执行耗时,检查是否缺少索引、是否存在全表扫描、循环查询数据库。2、内存泄漏:排查未释放的非托管资源、静态集合无限累加、事件未取消订阅、单例引用未释放;通过性能监视器、VS性能分析工具定位问题。3、Redis缓存穿透、击穿、雪崩解决方案?参考答案:1、缓存穿透:查询不存在的数据,直接穿透到数据库。解决方案:空值缓存、布隆过滤器、接口参数校验。2、缓存击穿:热点Key过期,瞬间大量请求打向数据库。解决方案:互斥锁、热点Key永不过期、定时续期。3、缓存雪崩:大量Key同时过期,全部请求穿透数据库。解决方案:过期时间加随机值、集群部署、多级缓存、服务限流。八、手写代码面试题(实操必考)1、手写单例模式(双重校验锁)参考答案:csharp
publiccl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年麻纤维纺前加工和纺纱行业渠道布局研究报告及未来五至十年IPO与并购退出路径
- 2026年互联网零售行业投资研究报告及未来五至十年增长动能与投资价值分析
- 2026年粘土砖瓦及建筑砌块制造行业供需格局研究报告及未来五至十年自主创新与安全可控
- 2026年广州石油培训中心人员招聘笔试模拟试题及详细答案解析
- 2026年金陵饭店集团公司人员招聘笔试备考试题及详细答案解析
- 2026年槽式电缆桥架行业洞察报告及未来五至十年发展趋势报告
- 2026年度社区健康体检工作计划
- 2026年度全国安全生产月知识竞赛题库及答案
- 酒店前厅服务礼仪试题及答案
- 高三地理教学设计:地球公转及其地理意义专题复习
- 2026年辽宁省中考数学试卷(含答案及解析)
- GB/T 24002.2-2026环境管理体系针对环境主题领域应用GB/T 24001管理环境因素和应对环境状况的指南第2部分:水
- 聚变装置-氚聚变设施和聚变燃料处理设施的密封和通风系统的设计和操作标准标准立项发展报告
- 家装水电施工工艺标准
- 2026广西民族大学招聘专任教师128人笔试参考题库及答案详解
- 2026年度江西省党史知识竞赛考试复习重点试题(含答案)
- 2026年贵州选调生面试题和参考答案
- 2026中国气象量子计算技术研发进展与产业化前景
- 《中小型无人机抗风性试验实施规范》
- 游乐场客群细分研究-洞察与解读
- 智能数控技术介绍
评论
0/150
提交评论