NET面试题及参考答案_第1页
NET面试题及参考答案_第2页
NET面试题及参考答案_第3页
NET面试题及参考答案_第4页
NET面试题及参考答案_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

.NET面试题及参考答案覆盖C#基础、面向对象、CLR、多线程、EFCore、\hASP.NETCore、性能、数据库、常见笔试面试高频题,适合初级‑中级开发。一、C#基础1.值类型和引用类型区别答案值类型:存储在栈上,拷贝是复制值,赋值相互独立;struct、int、bool、DateTime、enum。引用类型:存储在堆上,栈存引用地址;赋值拷贝地址,多个变量指向同一个对象;class、string、数组、object。string特殊:引用类型,但不可变,每次修改会生成新字符串。2.string和StringBuilder的区别答案string:不可变,每次拼接会新建对象,频繁拼接大量字符串会产生大量GC垃圾。StringBuilder:可变,维护字符缓冲区,修改直接操作缓冲区,适合大量字符串拼接场景。3.const和readonly区别答案const:编译期常量,编译时就确定值,只能修饰字段,不能修饰局部变量;static隐式。readonly:运行时赋值,只能在构造函数或者字段初始化赋值;实例readonly属于实例,staticreadonly属于静态。4.ref和out关键字区别答案ref:传入前变量必须初始化,方法内外双向传值。out:方法内部必须给参数赋值,调用前可以不初始化,只用于向外输出结果。5.装箱与拆箱答案装箱:值类型转为object/引用类型,把值复制到堆,返回堆引用。拆箱:object转回值类型,从堆拷贝回栈。频繁装箱拆箱会产生堆对象,增加GC压力,尽量避免。二、面向对象OOP6.面向对象四大特性答案

封装、继承、多态、抽象封装:隐藏内部细节,对外暴露访问接口。继承:子类复用父类代码,C#单继承。多态:同一行为不同实现;虚方法virtual+override、接口、抽象类。抽象:abstract抽象类/抽象方法,只定义签名,不实现。7.abstract抽象类vsinterface接口答案抽象类abstract:可以有字段、构造函数、普通方法、虚方法;单继承;可以有访问修饰符。接口interface:C#8前只能有方法签名;C#8+支持默认实现、静态成员;不能有字段;一个类可以实现多个接口;成员默认public,不能写private/protected。8.virtual、override、new关键字答案virtual:父类标记方法允许子类重写。override:子类重写父类virtual/abstract方法。new:隐藏父类同名方法,不是重写;父类引用指向子类实例调用的还是父类方法。三、CLR&内存&GC9.GC垃圾回收原理,GC什么时候回收?答案

CLRGC管理堆内存,栈内存自动释放。代机制:0代、1代、2代;新对象0代,多次回收存活晋升到高代。0代回收频率最高。触发时机:0代空间不足;调用GC.Collect();程序退出。GC做两件事:标记存活对象;压缩堆,移动对象更新引用。注意:GC不回收非托管资源(文件句柄、数据库连接),需要IDisposable释放。10.IDisposable和using答案

IDisposable用来释放非托管资源。using语法糖,编译生成try‑finally,在finally执行Dispose()。csharp

using(varfs=newFileStream()){}规则:托管资源交给GC,非托管手动Dispose。11.什么是托管堆、栈答案

栈:值类型、局部变量、方法参数;方法执行完自动释放,速度快。

托管堆:new出来引用类型对象;由GC负责回收。四、多线程、异步(高频)12.Task、Thread区别答案Thread:操作系统线程,粒度重,直接操作线程;资源开销大。Task:任务抽象,基于线程池,.NET推荐;支持await、取消、异常处理、组合。13.async/await原理答案

编译器语法糖,编译生成状态机;方法不会新开线程,只是把后续逻辑放到回调;await等待任务完成,不阻塞当前线程。async方法返回Task,不是新开线程;IO密集型不需要占用线程。14.lock、Monitor答案

lock是Monitor的语法糖,用于多线程互斥,防止并发修改共享变量。csharp

lock(obj){}注意:不要lock(this)、不要lock字符串。15.死锁产生4个条件答案

互斥、请求保持、不可剥夺、循环等待。

解决:统一锁的获取顺序、设置超时。五、集合16.ListvsDictionary<TKey,TValue>答案

List:数组实现,按索引访问快;查找遍历O(n)。

Dictionary:哈希表,key查找O(1);key必须实现GetHashCode和Equals。17.IEnumerable、IQueryable区别答案IEnumerable:内存查询,LinqtoObject,查询在内存执行。IQueryable:表达式树,LinqtoEF,查询表达式树最终翻译成SQL在数据库执行;调用ToList()才真正执行查询。坑:IQueryable不及时ToList,延迟查询,容易数据库多次查询。六、\hASP.NETCore(面试重中之重)18.\hASP.NETCore管道是什么?中间件Middleware答案

HTTP请求到达后,依次经过一系列中间件,处理请求、响应。Use、Run、Map。Run:终止管道,不传递下一个。Use:可以调用next继续交给下一个中间件。中间件注册顺序很重要,从上到下执行请求,从下到上回写响应。19.依赖注入DI三种生命周期答案Transient瞬时:每次获取都新建实例。Scoped作用域:同一个请求范围内同一个实例。Singleton单例:全局唯一一个实例。坑:Singleton不能注入Scoped服务,会报错。20.Filter过滤器有哪几种答案

执行顺序:授权→资源→模型验证→操作→异常→结果IAuthorizationFilter授权过滤器IResourceFilter资源过滤器IActionFilter操作过滤器IResultFilter结果过滤器IExceptionFilter异常过滤器21.什么是ModelState答案

模型绑定后,保存模型验证结果;校验表单/参数是否合法,IsValid判断是否校验通过。22.配置读取方式appsettings.json答案

IConfiguration接口,可以直接注入;支持多环境appsettings.Development.json。23.身份认证Authentication和授权Authorization区别答案

认证:你是谁(登录,校验身份)。

授权:你能干什么(角色、策略,判断权限)。七、EFCore24.EFCore延迟加载、预加载、显式加载答案延迟加载LazyLoading:访问导航属性才查数据库,需要安装Microsoft.EntityFrameworkCore.Proxies,容易N+1查询。预加载EagerLoading:Include(),一次性join查询,避免N+1。显式加载ExplicitLoading:Entry().Reference/Collection.Load(),手动触发查询。25.SaveChanges什么时候执行?答案

调用SaveChanges()才真正执行SQL;DbContext内部ChangeTracker跟踪实体状态Added、Modified、Deleted。八、常见面试笔试题26.什么是N+1问题答案

查询主表1次,循环每条记录再查询关联表,产生N条SQL;解决方案:Include预加载。27.内存泄漏场景.NET答案事件订阅没有取消;静态集合无限添加对象;长生命周期对象持有短生命周期对象引用;非托管资源没有Dispose。28.什么是闭包答案

lambda捕获外部局部变量,编译器生成隐藏类保存变量;循环中闭包容易出现变量捕获bug。29.LINQ的Where、Select延迟执行?答案

大部分LINQ方法是延迟执行;ToList()、ToArray()、Count()、First()会触发立即执行。九、Web相关30.GET和POST区别答案GET参数放url,有长度限制;POST放请求体。GET可以被缓存、书签;POST一般不缓存。GET用于查询,不修改数据;POST提交数据。http协议层面GETPOST没有严格安全区别,都可以抓包。31.跨域是什么,怎么解决答案

浏览器同源策略,协议、域名、端口任意一个不同就是跨域。

解决方案:\hASP.NETCore配置CORS中间件;网关代理。32.状态码200成功,201创建成功;400参数错误,401未认证,403无权限,404找不到;500服务器内部错误。十、数据库&性

温馨提示

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

评论

0/150

提交评论