版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.NET经典面试题及详细答案(实战版)一、C#基础语法核心面试题1、值类型和引用类型的区别?日常开发常见类型有哪些?详细答案:两者核心区别是内存存储位置、赋值方式、生命周期不同,是C#最基础也最高频的考点:1)值类型数据直接存储在栈内存中,变量赋值是完整拷贝值,两个变量相互独立,修改一个不会影响另一个。栈内存由系统自动分配、自动释放,回收速度快。常见值类型:int、double、bool、char、decimal、struct(结构体)、枚举enum。2)引用类型数据存储在堆内存中,变量本身只存储堆内存的地址(引用指针)。变量赋值是拷贝地址,多个变量指向同一个堆内存对象,修改任意一个变量,所有关联变量都会同步变化。堆内存需要GC垃圾回收机制回收。常见引用类型:string、class、数组、集合(List、Dictionary)、自定义类、委托、事件。实战补充:string是特殊的引用类型,具备不可变性,每次修改字符串都会生成新对象,不会修改原对象。2、const和readonly的区别?各自使用场景?详细答案:1)生效时机不同const:编译时常量,程序编译时就确定值,必须在声明时直接赋值,不能延迟赋值。readonly:运行时常量,编译时不固定值,可在声明时赋值,也可以在构造函数中赋值(实例readonly在实例构造函数,静态readonly在静态构造函数)。2)修饰范围不同const默认是静态的,不能用static修饰,只能修饰数值、字符串、null,不能修饰引用类型对象。readonly可以修饰实例字段和静态字段,支持所有数据类型。3)使用场景const:用于项目中永久不变的固定值,如固定配置参数、数学常量、状态码。readonly:用于对象初始化时确定、后续不再修改的值,如根据构造参数赋值的配置、动态读取的固定参数。3、string、StringBuilder、string.Format的区别与性能问题?详细答案:核心问题围绕string的不可变性:string一旦创建,内存中的值无法修改,每次拼接、修改都会新建字符串对象,频繁操作会产生大量垃圾内存,触发GC回收,导致性能卡顿。1)string直接拼接(+)少量字符串拼接可用,大量循环拼接绝对禁用。循环中每次+都会生成新对象,造成内存冗余。2)StringBuilder专门解决高频字符串拼接问题,内部维护可变字符缓冲区,修改时不会新建对象,仅扩容缓冲区,性能极高。适合循环拼接、批量文本组装场景。3)string.Format/字符串插值$用于格式化字符串,可读性强,适合固定模板的字符串组装。性能略优于普通+拼接,但远不如StringBuilder,不适合高频循环使用。实战规范:单次拼接用+或插值,模板格式化用Format,循环批量拼接必用StringBuilder。4、ref和out关键字的区别?详细答案:两者都是通过内存地址传递参数,实现方法内修改实参值,打破值类型传参的拷贝机制,核心区别在初始化规则:1)ref(引用传递)实参必须提前初始化赋值,方法内外都可以读取、修改参数值。适用于:参数传入时有初始值,方法中需要修改并返回新值的场景。2)out(输出传递)实参可以不提前赋值,方法内部必须给参数赋值,否则编译报错。out参数主要用于方法返回多个结果。补充:C#7.0之后支持元组返回多值,日常开发已很少用out,仅老项目、底层框架代码中常见。二、面向对象OOP面试题1、面向对象的三大特性及实际项目应用?详细答案:面向对象三大核心:封装、继承、多态,所有.NET项目的架构设计都基于这三点:1)封装将类的字段、属性、方法进行私有化隐藏,只暴露必要的公开接口,屏蔽内部实现细节。项目应用:用private修饰私有字段,通过public属性get/set控制数据读写校验;工具类封装私有逻辑,只暴露公开调用方法,保证代码安全、统一维护。2)继承子类继承父类,复用父类的属性和方法,避免重复代码,实现代码复用。项目应用:定义BaseService、BaseController基类,封装通用的新增、修改、日志、权限校验逻辑,所有业务子类直接继承使用,无需重复编写通用代码。3)多态同一方法在不同子类有不同实现,分为重载(静态多态)和重写(动态多态)。项目应用:定义抽象支付基类,子类实现微信支付、支付宝支付、银行卡支付的不同逻辑,统一调用入口,拓展新支付方式无需修改原有代码,符合开闭原则。2、override和new的区别?详细答案:1)override(重写)必须配合父类virtual/abstract方法使用,重写父类原有逻辑,实现多态。父类引用指向子类对象时,会执行子类重写后的方法。是面向对象多态的核心实现方式。2)new(隐藏)隐藏父类同名方法,不会重写父类逻辑,相当于在子类中新建了一个同名方法。父类引用指向子类对象时,执行的是父类原有方法,子类引用才会执行子类new的方法,不具备多态性。实战建议:业务中需要拓展父类逻辑用override,尽量不要用new,容易造成逻辑混乱。3、抽象类(abstract)和接口(interface)的区别?详细答案:1)成员差异抽象类:可以有字段、属性、普通方法、抽象方法、构造函数,支持成员权限修饰。接口:C#8.0之前只能有抽象方法、属性;8.0之后支持默认方法实现,但不能有字段、构造函数,成员默认公开,不能修改权限。2)继承规则抽象类:类只能单继承,一个类只能继承一个抽象类。接口:类支持多实现,一个类可以同时实现多个接口。3)使用场景抽象类:用于模板复用,多个子类存在大量通用逻辑,仅部分方法不同,用抽象类封装通用代码,定义抽象模板方法。接口:用于行为规范,定义统一的功能标准,无关类只要具备该行为即可实现接口,多用于解耦、依赖注入、规范业务行为。三、.NET框架与核心机制面试题1、GC垃圾回收机制原理?GC回收哪些资源?详细答案:GC是.NET的自动内存回收机制,核心作用是回收堆内存中无引用的对象,避免内存泄漏,开发者无需手动释放内存。1)GC回收规则只回收托管堆内存中的引用类型对象,不回收栈内存、非托管资源(文件流、数据库连接、网络端口、句柄等)。2)分代回收机制(0、1、2代)0代:新建的短期对象,空间小、回收频率最高,大部分对象在0代回收。1代:0代回收后存活的对象,作为缓冲层,回收频率较低。2代:长期存活的全局对象、静态对象,回收频率最低,耗时最长。3)非托管资源处理文件、数据库连接、Socket等非托管资源,GC无法自动回收,必须手动释放,通过IDisposable接口+using语句自动释放,避免资源占用和内存泄漏。2、using关键字的三种用法?详细答案:1)引入命名空间(最常用)usingSystem;简化代码,无需写完整命名空间,仅编译期生效,不影响运行性能。2)using语句块(资源释放)针对实现IDisposable接口的对象(数据库连接、文件流、HttpClient),语句块执行结束后,自动调用Dispose方法释放非托管资源,无论代码正常执行还是报错,都会执行释放逻辑,是项目中规范的资源释放方式。3)using别名用于解决命名冲突,对长命名空间、重名类起别名,简化代码书写。3、装箱和拆箱是什么?有什么性能影响?如何避免?详细答案:1)装箱:值类型转换为引用类型(object、接口),会在堆内存开辟新空间,拷贝栈内存数据到堆内存。示例:objectobj=10;2)拆箱:引用类型转回值类型,需要强制类型转换,读取堆内存数据拷贝到栈内存。示例:intnum=(int)obj;3)性能影响装箱拆箱会产生堆内存分配、数据拷贝,频繁操作会产生大量临时对象,触发GC回收,造成程序卡顿、性能下降。4)避免方式优先使用泛型(List<T>、Dictionary<TKey,TValue>),泛型是类型安全的,全程无装箱拆箱;避免用object接收值类型数据。四、ASP.NETCore高频面试题1、ASP.NETCore中间件的执行原理?自定义中间件步骤?详细答案:1)中间件原理中间件是管道模型,请求进来后按照注册顺序依次执行,响应返回时倒序执行,形成嵌套管道。每个中间件可以拦截请求、处理请求、传递请求、修改响应结果。内置常用中间件:路由、跨域、授权、静态文件、异常处理中间件。2)自定义中间件步骤①创建中间件类,包含构造函数(接收下一个中间件委托RequestDelegate);②实现InvokeAsync方法,接收HttpContext上下文,编写请求前置逻辑、调用下一个中间件、编写响应后置逻辑;③编写扩展方法,方便在Program中注册;④Program中调用扩展方法注册中间件。实战注意:自定义中间件注册顺序至关重要,跨域、路由、授权的顺序错误会导致功能失效。2、依赖注入(DI)的三种生命周期及区别?详细答案:ASP.NETCore内置DI容器,三种生命周期控制对象实例的创建和复用:1)Transient(瞬时)每次获取依赖都会新建一个对象,生命周期最短,适合轻量级、无状态的服务(工具类、通用逻辑类)。2)Scoped(作用域)一次HTTP请求内共用一个对象,不同请求不同对象。是业务服务最常用的生命周期,适合数据库服务、业务逻辑服务,避免单次请求多次创建对象。3)Singleton(单例)程序启动后全局唯一对象,程序关闭才释放,所有请求共用同一个实例。适合全局配置、缓存、日志工具类,禁止在单例中注入Scoped服务,会造成生命周期错乱。3、过滤器(Filter)有哪些?执行顺序?详细答案:ASP.NETCore五大过滤器,按执行优先级从高到低排序:1)授权过滤器(AuthorizationFilter):最先执行,校验用户登录、权限,无权限直接拦截请求,不执行后续过滤器;2)资源过滤器(ResourceFilter):授权后、模型绑定前执行,可缓存请求、拦截重复请求;3)模型验证过滤器(ActionFilter前置):绑定参数、校验模型数据合法性;4)行为过滤器(ActionFilter):控制器方法执行前后执行,用于日志记录、参数处理;5)异常过滤器(ExceptionFilter):全局捕获控制器未处理的异常,统一返回错误格式、记录异常日志。实战场景:全局异常统一处理、接口权限拦截、请求日志打印,全部通过过滤器实现。五、数据库与EFCore面试题1、EFCore延迟加载、贪婪加载、显式加载的区别?详细答案:核心是关联表数据的查询时机,解决多表关联查询的性能问题:1)延迟加载(LazyLoading)查询主表时不查询关联表,访问关联属性时才触发二次查询。优点是按需加载,缺点是容易产生N+1查询问题,批量查询性能极差。需要安装Microsoft.EntityFrameworkCore.Proxies并开启配置。2)贪婪加载(EagerLoading)通过Include、ThenInclude,一次性联表查询所有关联数据,单次SQL完成查询,无N+1问题,是项目中最常用的方式。适合明确需要关联数据的场景。3)显式加载(ExplicitLoading)查询主表后,后续手动调用Load方法加载关联数据,灵活性高,适合动态按需加载的场景。2、什么是N+1查询问题?如何解决?详细答案:1)问题成因开启EF延迟加载后,查询N条主表数据(1次SQL),遍历每条数据时,每条都会单独查询关联表(N次SQL),总共执行N+1次数据库查询,数据量越大,性能损耗越严重。2)解决方案优先使用Include贪婪加载一次性联表查询;关闭全局延迟加载,按需手动加载;禁止在循环中查询数据库。六、性能优化与实战问题面试题1、.NET项目常见的性能优化手段?详细答案:1)代码层面优化循环拼接字符串用StringBuilder;避免频繁装箱拆箱,多用泛型;减少循环内new对象、减少数据库、Redis请求;及时释放using资源。2)数据库优化合理建立索引、避免select*、分页查询、杜绝N+1查询、批量操作代替循环单条操作。3)缓存优化高频不变数据用Redis缓存、本地内存缓存;接口结果缓存,减少重复计算和数据库查询。4)异步优化IO密集型操作(数据库、网络、文件读写)全部用async/await异步编程,不阻塞线程,提升系统并发能力。5)GC优化减少短期大量临时对象、避免大对象频繁创建、合理使用静态对象、杜绝内存泄漏。2、async/await原理?同步和异步的适用场景?详细答案:1)核心原理async/await是语法糖,基于Task任务模型实现。遇到await时,线程不会阻塞,会释放回线程池,去处理其他请求;等待的IO操作完成后,再从线程池获取线程继续执行后续代码,极大提升系统并发吞吐量。2)适用场景异步:所有IO密集型操作,数据库查询、Redis操作、HTTP请求、文件读写、接口调用。同步:CPU密集型操作(计算、加密、数据处理),异步无法提升性能,反而会增加线程切换开销。3、常见的内存泄漏场景及解决
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 季度财务报表分析结果通报6篇范本
- 智慧物流系统服务质量考核表
- 团队领导力发展考核表
- 2026福建泉州市正骨医院招聘(三)考试备考试题及答案解析
- 回复市场部关于广告投放效果询问回复函(3篇)
- 2026年重庆川维化工有限公司人员招聘考试模拟试题及答案
- 新员工入职培训通知函(7篇范文)
- 中国科学院自然科学史研究所科研人员招聘笔试模拟试题及答案解析
- 2026广西崇左市疾病预防控制中心(崇左市卫生监督所)招聘编外人员2人考试备考题库及答案解析
- 智能穿戴设备用户体验设计与优化指南
- 2026道德与法治八年级上册教学课件:4.2《遵守规则》
- 2026秋新教材人教版九年级上册数学第二十九章《圆》教案
- 农田灌溉排水渠系工程监理实施细则
- 2026年学法减分考核题库及答案
- 第4课《夺取解放战争的胜利》第1课时(教学设计)
- 2026年宁夏吴忠社区工作者考试卷附答案
- 2026年西藏从乡村振兴等专干中招录公务员(事业编)(申论)全真模拟试题及答案
- 徐工25吨吊车使用说明书
- 帕金森病深部脑刺激(DBS)手术
- ISO9000-2026 质量管理基础与术语(英文版)
- 2026年温州市房地产行业分析报告及未来发展趋势报告
评论
0/150
提交评论