NET程序员面试题及详细答案(真实职场版)_第1页
NET程序员面试题及详细答案(真实职场版)_第2页
NET程序员面试题及详细答案(真实职场版)_第3页
NET程序员面试题及详细答案(真实职场版)_第4页
NET程序员面试题及详细答案(真实职场版)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.NET程序员面试题及详细答案(真实职场版)一、C#基础语法核心面试题1、值类型和引用类型的区别?日常开发常用类型分别有哪些?参考答案:两者核心区别在于内存存储位置、赋值方式和生命周期,是C#最基础的核心知识点:1)值类型:数据直接存储在栈内存中,赋值时是完整拷贝值,两个变量相互独立,修改一个不会影响另一个。栈内存自动分配、自动释放,执行效率高。常用值类型:int、double、bool、char、decimal、struct、枚举(enum)、DateTime。2)引用类型:数据存储在堆内存中,变量仅存储堆内存的地址指针,赋值时是拷贝地址,多个变量指向同一个堆内存对象,修改任意一个变量,所有指向该地址的变量都会同步变化。堆内存需要GC垃圾回收机制回收。常用引用类型:string、数组、class、接口、委托、集合(List、Dictionary等)。补充实战点:string是特殊的引用类型,具备不可变性,每次修改字符串都会生成新对象,原对象不会被修改。2、const和readonly的区别?实际开发如何选择?参考答案:1)初始化时机不同:const是编译时常量,必须在声明时直接赋值;readonly是运行时常量,可以声明时赋值,也可以在构造函数中赋值。2)作用域不同:const默认是静态的,不能用static修饰,仅能作用于当前类;readonly可以是实例级或静态级。3)类型限制不同:const只能修饰值类型、string、null;readonly可以修饰任意类型,包括引用类型。4)程序集差异:跨程序集引用时,const常量会在编译时直接嵌入调用方代码,原程序集更新后调用方不会同步更新;readonly会在运行时读取原值,支持动态更新。开发选择:固定不变的全局常量(如接口地址、固定配置)用const;需要构造赋值、跨程序集更新、引用类型常量用readonly。3、string、StringBuilder、StringBuffer的区别?字符串拼接场景怎么选型?参考答案:1)string:具备不可变性,每次拼接、修改都会新建字符串对象,频繁操作会产生大量内存垃圾,性能差。适合少量、单次字符串操作。2)StringBuilder:位于System.Text命名空间,可变字符串,预分配内存缓冲区,拼接、修改不会重复创建对象,性能极高。适合循环拼接、大量字符串处理场景,是.NET开发首选。3)StringBuffer:C#中基本不用,是Java的类,线程安全但性能略低于StringBuilder,.NET中无对应使用场景。实战选型:简单1-2次拼接直接用string;for/foreach循环、批量文本组装、日志拼接必须用StringBuilder。4、ref和out关键字的区别?各自使用场景?参考答案:两者都是引用传参,直接操作原变量内存,避免值拷贝,核心区别在初始化规则:1)ref:传入的参数必须提前初始化赋值,方法内可以读取、修改参数值,支持传入、传出数据。2)out:传入的参数可以不初始化,方法结束前必须给参数赋值,主要用于方法向外输出多个返回值,方法内一般只赋值不读取。场景举例:需要修改传入的原有数据用ref;一个方法需要返回多个结果(如int.TryParse的输出参数)用out。二、C#高级特性面试题1、面向对象三大特性及实际开发应用?参考答案:面向对象三大特性:封装、继承、多态,是.NET项目架构设计的基础。1)封装:将类的字段、内部逻辑私有化,仅暴露公开的方法和属性,隐藏内部实现细节。实战:类的私有字段+公开属性、业务逻辑封装在Service层,外部仅调用接口,降低代码耦合度。2)继承:子类复用父类的属性和方法,避免代码冗余,实现代码复用。实战:定义BaseService、BaseController基类,封装通用的新增、修改、日志、权限校验逻辑,所有业务子类直接继承使用。3)多态:父类引用指向子类对象,重写方法实现不同业务逻辑,分为重写(override)和重载(overload)。实战:统一调用父类接口,不同子类实现不同逻辑,比如支付接口,微信支付、支付宝支付子类重写支付方法,实现多态适配。2、override和overload的区别?参考答案:1)重载(overload):同一类中,多个方法方法名相同、参数列表不同(参数个数、类型、顺序不同),与返回值无关,属于编译时多态。场景:同一个查询方法,支持根据ID查询、根据名称查询、根据时间查询。2)重写(override):存在于父子类之间,子类重写父类的虚方法(virtual)、抽象方法,方法名、参数、返回值完全一致,覆盖父类逻辑,属于运行时多态。场景:父类通用保存方法,子类根据特殊业务重写保存逻辑。3、抽象类(abstract)和接口(interface)的区别?开发如何选型?参考答案:1)成员差异:抽象类可以有字段、属性、普通方法、抽象方法、构造函数;接口只能有抽象方法、属性、事件,无字段、无构造函数,默认所有成员都是公开的。2)继承规则:类只能单继承一个抽象类;类可以多实现多个接口。3)版本迭代:抽象类新增普通方法,子类无需修改可直接兼容;接口新增方法,所有实现类必须全部重写,否则报错。4)功能定位:抽象类用于模板复用,封装通用代码;接口用于行为规范,定义统一的行为标准。选型原则:需要复用通用字段、通用逻辑用抽象类;需要定义统一规范、多行为拓展、解耦用接口。4、GC垃圾回收机制原理?如何避免内存泄漏?参考答案:1)GC核心原理:.NET运行时自动管理堆内存,定期扫描堆中对象,判断对象是否被引用,无引用的对象标记为垃圾,统一回收释放内存,无需手动释放资源。GC分三代回收:0代(新建短期对象,回收频率最高)、1代(中转缓存)、2代(长期存活对象,回收频率低),分级回收提升效率。2)常见内存泄漏场景及解决:①静态集合、静态全局变量持续引用对象,导致无法回收;解决:及时清空无用静态集合。②事件订阅未取消、委托绑定未释放;解决:页面/模块销毁时解绑事件、清空委托。③文件流、数据库连接、网络请求等非托管资源未释放;解决:使用using语句包裹,自动释放资源。④循环引用导致GC无法识别垃圾对象;解决:优化对象结构,避免无效循环引用。三、.NET框架与核心技术面试题1、ASP.NETCore相比传统ASP.NETMVC有哪些优势?参考答案:1)跨平台:Core支持Windows、Linux、Mac系统部署,传统MVC仅支持Windows。2)轻量高性能:摒弃WebForm冗余机制,内置依赖注入、中间件管道,启动速度快、并发性能更高。3)部署灵活:支持独立部署、框架部署,无需安装完整IIS,可自建宿主、Docker容器部署。4)模块化设计:功能按需引入,通过NuGet单独安装组件,减少项目体积。5)统一架构:合并MVC和WebApi,控制器统一适配前后端分离接口和页面请求,无需区分两套框架。2、ASP.NETCore中间件的作用及执行流程?参考答案:中间件是Core的核心请求处理组件,所有HTTP请求都会按顺序经过中间件管道,完成请求校验、路由、鉴权、日志、异常处理等逻辑。1)执行流程:请求进入管道→依次执行注册的中间件(前置逻辑)→到达路由、控制器执行业务逻辑→反向依次执行中间件(后置逻辑)→响应返回客户端。2)常用内置中间件:静态文件中间件、路由中间件、身份认证中间件、跨域中间件、异常处理中间件。3)注册方式:Use(自定义中间件)、Map(路由分支中间件)、Run(终端中间件,执行后终止管道)。3、依赖注入(DI)的原理及三种生命周期区别?参考答案:依赖注入是Core内置的解耦核心机制,无需手动new对象,由容器统一创建、管理、释放对象,降低类与类之间的耦合度,方便单元测试和后期维护。三种生命周期:1)Transient(瞬时):每次获取都会创建一个全新对象,生命周期最短,适合轻量无状态服务,默认常用生命周期。2)Scoped(作用域):一次HTTP请求内共享同一个对象,请求结束对象销毁,适合业务Service、数据库上下文。3)Singleton(单例):程序启动创建一次,全局所有请求共享,程序关闭才销毁,适合全局配置、工具类、缓存服务。实战避坑:单例服务不能注入Scoped服务,会导致作用域泄露、数据错乱、内存问题。4、EFCore常用查询优化技巧?参考答案:1)避免全表查询:禁止直接使用ToList()、Count()不加条件,必须搭配Where筛选,缩小查询范围。2)延迟加载与贪婪加载优化:关联查询使用Include、ThenInclude主动贪婪加载,避免循环查询数据库(N+1问题);非必要关联字段不加载。3)字段按需查询:使用Select只查询需要的字段,避免查询全部字段,减少数据传输量。4)分页查询:大数据量必须使用Skip+Take分页,禁止查询全部数据后内存分页。5)原生SQL优化:复杂多表联查、聚合查询,优先执行原生Sql,避免EF自动生成低效SQL。6)关闭跟踪:只读查询使用AsNoTracking(),关闭实体跟踪,提升查询性能。四、数据库与ADO.NET面试题1、ADO.NET中DataReader和DataTable的区别?参考答案:1)DataReader:只读、向前流式读取数据,占用内存极小,读取过程中必须保持数据库连接开启,适合大批量数据读取、导出场景,性能更高。2)DataTable:一次性将所有数据加载到内存,支持离线操作、数据修改、筛选、排序,读取完成后可关闭数据库连接,小数据量查询、数据编辑场景使用。实战总结:大数据量遍历用DataReader,小数据量需要二次处理用DataTable。2、数据库事务四大特性(ACID)及.NET事务使用方式?参考答案:事务四大特性:1)原子性:事务内所有操作要么全部成功,要么全部回滚,无中间状态。2)一致性:事务执行前后,数据库数据完整性、约束规则保持一致。3)隔离性:多个事务并发执行互不干扰,通过隔离级别控制并发问题。4)持久性:事务提交成功后,数据永久保存,断电、重启不会丢失。.NET常用事务:ADO.NET原生事务、EFCore事务、分布式事务(TransactionScope),多表、多数据操作必须加事务保证数据一致性。3、SQL索引失效的常见场景?参考答案:1)索引字段使用函数、运算、类型转换,如whereSUBSTRING(name,1,1)='张'、age+1>10。2)模糊查询前置通配符,如%张三、%三,无法走索引,后置通配符可正常使用。3)or连接无索引字段、or前后字段索引不一致。4)隐式类型转换,字符串字段传数字、数字字段传字符串。5)数据量过小、索引区分度极低(如性别、状态字段),数据库自动放弃索引走全表扫描。五、性能优化与实战场景面试题1、网站接口响应慢,如何排查和优化?参考答案:1)排查步骤:①查看接口日志、监控,定位耗时环节(数据库、接口请求、代码逻辑);②查看SQL执行计划,排查慢查询、全表扫描、未分页问题;③检查代码是否存在循环查询、重复计算、资源未释放问题;④排查服务器CPU、内存、磁盘IO、网络带宽瓶颈。2)优化方案:①数据库:加索引、优化SQL、分页查询、读写分离;②代码:优化循环逻辑、使用缓存、减少重复IO操作;③架构:引入Redis缓存热点数据、接口异步处理、请求限流、负载均衡。2、同步和异步的区别?什么场景用异步?参考答案:1)同步:代码顺序执行,上一个任务完成后才执行下一个,线程阻塞等待,简单直观,并发能力弱。2)异步:无需阻塞等待,发起任务后线程释放,可处理其他请求,任务完成后回调执行后续逻辑,大幅提升系统并发吞吐量。异步适用场景:数据库查询、文件读写、网络请求、消息推送、日志记录、定时任务等IO密集型操作。不适用场景:CPU密集型计算、简短核心业务逻辑,异步会增加线程切换开销,降低效率。3、Redis在.NET项目中的常用场景及缓存穿透、击穿、雪崩解决方案?参考答案:1)常用场景:热点数据缓存(字典、配置、商品信息)、接口缓存、分布式会话、限流、分布式锁、计数器。2)缓存穿透:查询不存在的数据,直接穿透到数据库。解决:接口参数校验、空值缓存、布隆过滤器。3)缓存击穿:热点key过期瞬间,大量请求打向数据库。解决:热点key永不过期、加分布式锁、互斥锁。4)缓存雪崩:大量key同时过期/Redis宕机,请求全部涌入数据库。解决:过期时间加随机值、Redis集群高可用、多级缓存、服务熔断降级。六、面试高频手写代码题1、手写单例模式(双重锁线程安全)参考答案:csharp

publicclassSingleton

{

privatestaticSingleton_instance;

privatestaticreadonlyobject_lockObj=newobject();

//私有构造函数,禁止外部实例化

privateSingleton(){}

publicstaticSingletonGetInstance()

{

//双重判断,减少锁等待,提升性能

if(_instance==null)

{

lock(_lockObj)

{

if(_instance==null)

{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论