NET 工程师笔试真题(含详细答案·企业真实版)_第1页
NET 工程师笔试真题(含详细答案·企业真实版)_第2页
NET 工程师笔试真题(含详细答案·企业真实版)_第3页
NET 工程师笔试真题(含详细答案·企业真实版)_第4页
NET 工程师笔试真题(含详细答案·企业真实版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

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

文档简介

.NET工程师笔试真题(含详细答案·企业真实版)适用人群:初级/中级.NET开发、C#后端、ASP.NETCore岗位考试时长:90分钟满分:100分一、单项选择题(共10题,每题3分,共30分)1.以下关于C#中值类型和引用类型说法正确的是()A.string是值类型B.struct是引用类型C.值类型变量存储在栈中,引用类型变量栈存地址、堆存数据D.所有基本数据类型都是值类型,无例外答案:C详细解析:string是典型引用类型(A错);struct是值类型(B错);string、数组、委托等属于引用类型,并非所有基础类型都是值类型(D错)。值类型数据直接存栈内存,引用类型栈内存存对象地址,真实数据存在堆内存,C表述完全正确。2.C#中readonly和const的区别,说法错误的是()A.const必须在声明时初始化B.readonly可以在构造函数中初始化C.const是编译时常量,readonly是运行时常量D.readonly可以修饰局部变量答案:D详细解析:readonly只能修饰类的字段,不能修饰方法内的局部变量;const可修饰字段、局部变量。ABC均为两者核心区别,是日常开发高频考点。3.以下关于async/await说法正确的是()A.加了async方法一定会异步执行B.await会阻塞当前线程,直到任务执行完成C.async方法若无await,会同步执行D.await可以用于普通void方法答案:C详细解析:async只是标记方法可异步,无await时方法全程同步执行(A错、C对);await不会阻塞线程,会释放线程去处理其他任务,任务完成后再回调执行后续代码(B错);await只能搭配Task/Task<T>方法,不能用于void方法(D错)。4.ASP.NETCore中,以下依赖注入生命周期单次请求唯一的是()A.TransientB.ScopedC.SingletonD.Static答案:B详细解析:Transient:每次获取都新建实例;Scoped:同一个HTTP请求内仅一个实例,跨请求重建;Singleton:程序启动后全局唯一实例,程序销毁才释放;Static不是DI生命周期类型。5.C#中override和new的区别,正确的是()A.new用于重写父类虚方法B.override会覆盖父类方法,实现多态C.new可以实现多态效果D.override可以隐藏任意父类方法答案:B详细解析:override专门重写父类virtual虚方法,支持运行时多态;new是隐藏父类方法,不支持多态,仅在子类调用生效,父类调用仍走原方法。6.以下不会造成内存泄漏的是()A.静态集合持续添加对象不清理B.事件订阅后未取消订阅C.using包裹数据库连接对象D.长生命周期对象引用短生命周期对象答案:C详细解析:using语句会自动调用IDisposable接口,释放非托管资源,避免内存泄漏;其余三项都是.NET开发中常见的内存泄漏场景。7.EFCore中,想要只查询不跟踪实体,提升查询性能的方法是()A.Include()B.AsNoTracking()C.IgnoreQueryFilters()D.AsSplitQuery()答案:B详细解析:AsNoTracking()关闭EF实体跟踪,只读查询场景使用,大幅提升性能;Include用于关联查询、IgnoreQueryFilters忽略全局过滤、AsSplitQuery解决关联查询笛卡尔积问题。8.以下关于GC垃圾回收说法错误的是()A.GC只回收托管堆资源B.可以手动调用GC.Collect()强制回收C.值类型内存由GC负责回收D.非托管资源需要手动释放答案:C详细解析:值类型存储在栈内存,栈内存随方法执行结束自动释放,不需要GC回收;GC仅负责托管堆的引用类型资源回收。9.ASP.NETCore中间件的执行顺序特点是()A.注册顺序与执行顺序无关B.先注册的中间件,先执行进入逻辑,后执行退出逻辑C.后注册的中间件最先执行D.所有中间件并行执行答案:B详细解析:中间件遵循「洋葱模型」,注册顺序就是请求进入顺序,返回响应时倒序执行,先注册的先进后出。10.C#中List和ArrayList最大区别是()A.List容量更大B.List是泛型集合,类型安全,无装箱拆箱C.ArrayList支持更多数据类型D.ArrayList性能更高答案:B详细解析:ArrayList是非泛型集合,存储object类型,存在大量装箱拆箱操作,性能差且类型不安全;List<T>泛型集合,固定类型,无装箱拆箱,性能和安全性更优,是开发首选。二、填空题(共5题,每题2分,共10分)1.C#中实现接口的方法,默认是________(公开/私有)的,且________(可以/不可以)使用访问修饰符。答案:公开、不可以2.ASP.NETCore配置读取的常用来源有appsettings.json、________、环境变量、命令行。答案:用户机密(Secret)3.避免EFCore循环引用报错,常用配置是________。答案:忽略循环引用(IgnoreCycles)4.C#中lock关键字的作用是________,解决多线程________问题。答案:锁定代码块、线程安全5.异步编程中,________用于取消正在执行的异步任务。答案:CancellationToken三、简答题(共4题,每题8分,共32分)1.简述C#中栈、堆的区别,以及对应存储的数据类型参考答案:1)栈内存:空间小、速度快,自动分配自动释放,随方法执行生命周期变化。主要存储值类型(int、bool、struct、decimal等)、局部变量、方法参数。2)堆内存:空间大、速度稍慢,由GC统一管理回收。主要存储引用类型数据(string、数组、类对象、集合等),栈中仅保存对象的内存地址。简单总结:值类型存栈,引用类型数据存堆、地址存栈。2.简述ASP.NETCore三种DI生命周期的区别和实际使用场景参考答案:1)Transient(瞬时):每次调用获取实例都会新建对象,生命周期最短。适用于轻量、无状态的工具类、服务类。2)Scoped(作用域):同一个HTTP请求内全局唯一,不同请求重新创建。适用于请求级业务服务、数据库上下文(DbContext),是项目最常用类型。3)Singleton(单例):程序启动后创建一次,全局所有请求共享,程序关闭才销毁。适用于全局配置、缓存工具、日志工具等全局通用服务,禁止在单例中使用Scoped服务,会造成依赖报错。3.说说async/await的工作原理,为什么能提升并发性能参考答案:async是方法标记符,仅声明方法支持异步操作,不会主动开启异步;await是核心,用于等待耗时任务(数据库查询、接口请求、IO操作)执行。当代码执行到await时,不会阻塞当前线程,而是将线程释放回线程池,让线程去处理其他新的请求任务;待耗时IO任务完成后,再从线程池取回线程,继续执行后续代码。优势:避免线程闲置阻塞,大幅提升服务器线程利用率,提高系统并发承载能力,尤其适合IO密集型场景。4.简述EFCore中懒加载和急加载的区别及使用场景参考答案:1)急加载(EagerLoading):通过Include()、ThenInclude()主动关联查询,一次性查询出主表和关联表数据,仅执行一次SQL查询。适用于明确需要使用关联数据的场景,避免多次查库。2)懒加载(LazyLoading):开启配置后,默认不查询关联数据,访问关联属性时才单独执行SQL查询。优点是按需加载,缺点是容易产生N+1查询问题,频繁访问关联数据时性能极差。开发规范:绝大多数业务场景优先使用急加载,仅数据关联性极低、极少访问关联数据时使用懒加载。四、编程题(共1题,14分)题目:用C#实现一个简单的异步批量查询工具,需求如下:1.模拟3个异步IO任务(耗时100ms、200ms、300ms)2.使用Task.WhenAll并行执行所有任务3.输出每个任务执行结果,以及总耗时4.代码简洁、可直接运行参考答案:csharp

usingSystem;

usingSystem.Threading.Tasks;

namespaceNetDemo

{

publicclassAsyncDemo

{

//模拟异步任务

publicstaticasyncTask<string>TestTask(intnum,intdelay)

{

awaitTask.Delay(delay);

return$"任务{num}执行完成,耗时{delay}ms";

}

publicstaticasyncTaskRunAsync()

{

varstartTime=DateTime.Now;

//批量创建任务

vartask1=TestTask(1,100);

vartask2=TestTask(2,200);

vartask3=TestTask(3,300);

//并行等待所有任务完成

varresultList=awaitTask.WhenAll(task1,task2,task3);

//输出结果

foreach(varresinresultList)

{

Console.WriteLine(res);

}

//计算总耗时(并行执行,总耗时约最长任务时间300ms)

vartotalTime=(DateTime.Now-startTime).TotalMilliseconds;

Console.WriteLine($"总执行耗时:{totalTime:F0}ms");

}

//入口调用

publicstaticvoidMain()

{

RunAsync().Wait();

}

}

}

考点解析:考察异步并行执行、Task.WhenAll使用、IO异步耗时特性,区分串行和并行的耗时差异,是后端开发高频实操考点。五、数据库简答题(共1题,14分)题目:.NET项目中,如何避免数据库查询产生N+1问题?详细说明原因和解决方案参考答案:1.什么是N+1问题查询1次主表数据(1次SQL),遍历N条主表数据时,每条数据单独查询一次关联子表,额外产生N次SQL查询,总共N+1次查询,极大损耗数据库性能。2.产生原因EFCore默认关闭跟踪或使用懒加载,遍历集合时逐个加载关联数据,触发多次数据库请求。3.解决方案(项目常用)1)使用急加载:通过Include()关联需要的子表数据

温馨提示

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

最新文档

评论

0/150

提交评论