版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.NET后端面试题及详细答案(实战完整版)说明:所有题目均为一线企业高频面试原题,答案贴合工程实战,无套话、无生硬模板,适合求职、复盘、技术摸底使用。一、C#基础核心面试题1.简述值类型和引用类型的区别,以及常见类型有哪些?参考答案:值类型存储在栈内存中,引用类型存储在堆内存中,栈中仅保存对象的内存地址。核心区别:1.赋值方式:值类型赋值是拷贝完整数据,两个变量互不影响;引用类型赋值是拷贝内存地址,多个变量指向同一个对象。2.内存回收:值类型方法执行结束后自动释放栈内存;引用类型需等待GC垃圾回收。3.初始化:值类型默认有默认值,不可为null;普通引用类型默认null。常见值类型:int、double、bool、struct、枚举、decimal常见引用类型:string、class、数组、集合(List、Dictionary)、自定义类2.string和StringBuilder的区别?日常开发如何选用?参考答案:string是不可变字符串,一旦赋值就无法修改,每次拼接、替换都会生成新的字符串对象,频繁操作会产生大量内存垃圾,性能极差。StringBuilder是可变字符串,底层维护字符缓冲区,修改数据时不会新建对象,仅修改缓冲区内容,性能高效。使用场景:1.少量字符串拼接、固定文本赋值,直接用string;2.循环拼接、批量文本处理、大量字符串修改场景,必须用StringBuilder。3.简述const和readonly的区别参考答案:1.赋值时机:const是编译时常量,必须在声明时赋值;readonly是运行时常量,可以在声明时或构造函数中赋值。2.作用域:const可以修饰字段、局部变量;readonly只能修饰类字段。3.访问方式:const静态隐含,无需实例调用;readonly实例字段需对象调用,静态readonly需静态构造函数赋值。4.跨程序集:const修改后,引用的程序集不会自动更新;readonly会在运行时读取最新值。4.封装、继承、多态在C#中的实际应用参考答案:封装:通过private/protected隐藏类的内部数据,仅暴露公开方法和属性,避免外部随意修改内部状态,保证数据安全。比如实体类字段私有,通过属性get/set访问。继承:实现代码复用,子类继承父类的属性和方法,避免重复代码。比如通用BaseService封装公共增删改查,业务Service直接继承。多态:分为重载和重写。父类引用指向子类对象,运行时执行子类重写的逻辑。常用于接口、抽象类场景,比如不同支付方式(微信、支付宝)重写统一支付方法。5.抽象类和接口的区别?开发怎么选型?参考答案:区别:1.抽象类可以有字段、构造函数、已实现方法;接口只能定义方法、属性、事件,不能有字段和构造函数(C#8.0后接口可默认实现)。2.类只能单继承抽象类,但可以多实现接口。3.抽象类偏向模板复用,接口偏向行为规范。选型:有公共代码、通用逻辑复用用抽象类;只定义统一行为标准、多类异构实现、需要多继承场景用接口。二、.NET框架与进阶面试题1..NETFramework和.NETCore/.NET5+的核心区别参考答案:1.跨平台:.NETFramework仅支持Windows;.NETCore及以上支持Windows、Linux、Mac。2.部署方式:Framework依赖系统全局安装;.NETCore支持独立部署,无需安装运行时。3.性能:.NETCore重构了底层架构,GC、异步、网络性能远优于Framework。4.模块化:Framework整体臃肿,依赖全包;.NETCore采用Nuget模块化部署,按需引用。5.开源跨平台:.NETCore完全开源,Framework闭源。2.简单说说ASP.NETCore管道模型参考答案:ASP.NETCore核心是中间件请求管道,所有HTTP请求都会按顺序经过管道中的中间件。执行流程:请求进来→依次执行注册的中间件逻辑→路由匹配→控制器/接口执行→响应返回→倒序执行中间件后续逻辑。常用中间件:静态文件、路由、身份认证、授权、跨域、异常处理、日志记录等。中间件特点:支持顺序自定义、可短路请求、可全局/区域单独注册,是Core框架的核心设计。3..NET依赖注入(DI)的三种生命周期及区别参考答案:1.Transient(瞬时):每次获取都创建全新对象,生命周期最短,适合轻量级无状态服务。2.Scoped(作用域):同一个HTTP请求内只创建一个对象,请求结束自动释放,是业务服务最常用的生命周期。3.Singleton(单例):程序启动创建一次,全程全局唯一,程序关闭才释放,适合配置类、工具类。高频踩坑:单例服务不能注入Scoped服务,会出现生命周期穿透报错。4.异步await/async原理,为什么能提升性能?参考答案:async/await是基于任务的异步编程模型,本质是线程复用,不会开启新线程。执行逻辑:遇到await阻塞操作(数据库、接口请求、IO)时,当前线程释放回线程池,去处理其他请求;等待IO操作完成后,再从线程池取线程继续执行后续代码。性能提升点:避免线程阻塞等待,极大提高服务器线程利用率,提升并发吞吐量,尤其适合WebIO密集型场景。注意:CPU密集型任务异步无提升,反而会增加开销。5.Task和Thread的区别参考答案:1.Thread是操作系统级线程,开销大,生命周期手动控制;Task是线程池封装的任务,轻量级,自动管理线程。2.Task支持异步等待、取消、异常捕获、链式调用,功能更完善;Thread功能单一。3.现代.NET开发全部使用Task,Thread基本废弃,仅底层特殊场景使用。三、.NET网络与Web面试题1.GET和POST的区别,面试常问的深层考点参考答案:1.参数传递:GET参数拼接在URL,POST参数在请求体。2.缓存:GET默认可缓存,POST不会主动缓存。3.数据长度:GET受URL长度限制,传参量小;POST无长度限制,适合传大量数据、文件。4.安全性:GET参数暴露在地址栏,不安全;POST相对隐蔽,但不加密情况下依然可抓包。5.幂等性:GET是幂等请求,多次请求结果一致;POST非幂等,多次提交可能产生重复数据。补充:REST规范中,GET查、POST增、PUT改、DELETE删。2.跨域是什么?ASP.NETCore如何解决跨域?参考答案:跨域是浏览器同源策略限制,协议、域名、端口任意一个不同,前端请求后端就会触发跨域拦截。Core解决跨域步骤:1.注册跨域服务:AddCors();2.配置跨域策略,允许指定域名、请求头、请求方法、允许携带Cookie;3.启用跨域中间件:UseCors();支持全局跨域、控制器跨域、单接口跨域三种配置方式。3.谈谈HTTP协议状态码,常用核心码参考答案:2xx成功:200正常请求、201创建成功、204无返回内容3xx重定向:301永久重定向、302临时重定向、304缓存未修改4xx客户端错误:400参数错误、401未授权、403禁止访问、404地址不存在、405请求方法不允许5xx服务端错误:500服务器异常、502网关错误、503服务不可用4.接口幂等性是什么?如何实现?参考答案:幂等性指同一个请求执行多次,结果和执行一次完全一致,避免重复提交、重复下单、重复扣款问题。常用实现方案:1.唯一ID防重:前端生成唯一请求号,后端根据单号判断是否已处理;2.数据库唯一索引:针对订单号、交易号加唯一索引,重复插入直接报错;3.状态机控制:已完成的订单/交易,不再重复处理;4.分布式锁:高并发场景用Redis锁防止重复执行。四、EFCore数据库面试题1.EFCore延迟加载和立即加载的区别参考答案:延迟加载:查询主表数据时,不查询关联表,访问关联属性时才会额外执行SQL查询,默认关闭,需配置开启。优点是按需加载,缺点是容易产生N+1查询问题。立即加载:通过Include/ThenInclude主动关联查询,一次SQL查询带出所有关联数据,无N+1问题,日常开发推荐使用。2.什么是N+1查询问题?如何解决?参考答案:场景:查询10条主数据(1次SQL),遍历每条数据时分别查询关联表(10次SQL),总共11次查询,就是N+1问题,数据量大时性能极差。解决方式:使用Include预加载关联数据、关闭延迟加载、手动联表查询。3.EFCore事务使用场景和方式参考答案:多个数据库操作需要要么全部成功,要么全部回滚时必须用事务,比如下单扣库存、新增订单、扣余额联动操作。EFCore支持:显式事务、隐式事务(SaveChanges默认事务)、分布式事务。五、性能优化与GC面试题1..NETGC垃圾回收机制参考答案:GC专门回收堆内存中无引用的对象,分为0、1、2三代,优先级0代回收最频繁、速度最快。核心逻辑:新对象分配在0代,0代满了触发回收,存活对象晋升1代;1代满晋升2代;2代回收开销最大,尽量避免频繁触发。GC回收时会暂停主线程,大量大对象、频繁创建销毁对象会导致GC频繁回收,造成程序卡顿。2.日常开发中.NET性能优化手段参考答案:1.字符串操作优先用StringBuilder,减少string拼接;2.避免频繁new对象,复用对象、使用静态工具类;3.数据库查询避免N+1、避免全表查询、合理加索引、分页查询;4.高并发场景使用Redis缓存热点数据,减少数据库压力;5.异步优化IO请求,提升接口并发;6.释放无用资源,using释放文件、数据库、网络连接资源;7.避免死循环、阻塞线程,减少线程卡死。3.using关键字的作用和原理参考答案:using用于实现IDisposable接口的资源类(数据库连接、文件流、网络流),可以自动释放非托管资源。原理:编译后会自动生成try-finally代码块,无论代码正常执行还是报错,最终都会执行Dispose方法释放资源,避免内存泄漏。六、实战高频面试题1.说说你项目中遇到的高并发问题及解决方案参考答案:项目中主要遇到秒杀、商品库存扣减、重复下单等高并发问题。解决方案:1.接口层面:做幂等防重、限流拦截非法请求;2.缓存层面:Redis缓存库存、热点数据,缓解数据库压力;3.数据层面:使用Redis分布式锁、数据库乐观锁防止超卖;4.架构层面:通过队列异步处理订单,削峰填谷,避免瞬时流量压垮服务。2.如何排查.NET接口卡顿、响应慢问题?参考答案:1.查看日志:定位报错、超时、死锁信息;2.检查数据库:查看慢SQL、是否全表扫描、缺失索引、N+1问题;3.排查接口逻辑:是否有同步阻塞、循环查询、大量数据遍历;4.查看服务器状态:CPU、内存、GC回收频率、线程池阻塞情况;5.排查第三方接口:外部HTTP、RPC请求超时阻塞。3.简述Redis在.NET项目中的常用场景参考答案:1.热点数据缓存:商品信息、配置数据、首页数据,减少数据库查询;2.分布式锁:解决高并发库存扣减、订单创建竞争问题;3.接口限流、防重:基于Token、请求号做限流防重复提交;4.会话存储:分布式系统中保存用户登录状态;5.计数器、排行榜、秒杀库存预减。七、面试加分拓展题1.什么是脏读、不可重复读、幻读?如何解决?参考答案:脏读:一个事务读取到另一个事务未提交的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗行业外科医生工作效果绩效考核表
- 产品经理汽车配件行业绩效分析表
- 2026年销售数据提交截止时间通知函6篇
- 电商平台直播带货营销策略及执行手册
- 互联网平台数据合规管理实施指引
- 酒店业供应链中断恢复方案手册
- 消费者投诉处理结果通报(8篇)
- 回复贵方关于交货时间确认函(4篇)
- 关于紧急调整2026年年度销售目标的通知函4篇
- 外部顾问绩效考核表
- 财务调账审批制度
- 人像摄影培训课件
- 2026中国电信广西公司春季校园招聘笔试模拟试题及答案解析
- 学校上下学交通疏导、家长接送秩序及安全保障方案
- QC成果-提高钢结构厂房箱形柱施工一次验收合格率
- 物业燃气安全培训课件
- 四川省凉山州2026届高中毕业班第一次诊断性考试物理(凉山州一诊)(含答案)
- 2025心肌梗死心电图诊断标准和报告规范中国专家共识解读课件
- ADHD执行功能训练的个体化方案
- 派出所年工作汇报
- 加油站全员安全生产责任制清单
评论
0/150
提交评论