NET开发工程师笔试试题(完整版)_第1页
NET开发工程师笔试试题(完整版)_第2页
NET开发工程师笔试试题(完整版)_第3页
NET开发工程师笔试试题(完整版)_第4页
NET开发工程师笔试试题(完整版)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

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

文档简介

.NET开发工程师笔试试题(完整版)考试时长:90分钟满分:100分适用岗位:.NET初级/中级开发工程师注意事项:请独立作答,书写清晰,编程题可手写伪代码或完整可运行代码一、单项选择题(每题2分,共20分)1.以下关于C#中值类型与引用类型的说法,正确的是()A.string属于值类型B.struct是引用类型,class是值类型C.值类型变量存储在栈中,引用类型对象实例存储在堆中D.所有基本数据类型(int、double、bool)均为引用类型2.C#中sealed关键字的作用是()A.修饰的类可以被继承,方法可以被重写B.修饰的类禁止被继承,修饰的方法禁止被重写C.实现接口强制约束D.开启代码安全校验3.下列关于async/await的描述,错误的是()A.await只能在async修饰的方法内部使用B.async方法默认不会开启新线程,是基于状态机的异步实现C.方法返回值可以是void、Task、Task<T>D.使用await会阻塞当前线程,直到任务执行完成4..NET中垃圾回收(GC)的主要回收对象是()A.栈内存中的闲置变量B.堆内存中无引用的对象实例C.所有全局静态变量D.未关闭的文件、数据库句柄5.ASP.NETCore中,用来实现依赖注入生命周期请求级的服务是()A.SingletonB.ScopedC.TransientD.Static6.下列关于LINQ的说法,不正确的是()A.LINQ支持语法糖写法和方法链写法B.LINQ查询默认是延迟执行(惰性加载)C.ToList()、Count()等方法会触发立即执行D.LINQ仅能操作集合,无法对接数据库7.C#中override和new关键字的区别,说法正确的是()A.new用于重写父类虚方法,override用于隐藏父类方法B.override重写虚方法,实现多态;new隐藏父类方法,无多态效果C.两者功能完全一致,可随意替换D.new可以重写抽象方法8.ASP.NETCore中间件的执行顺序特点是()A.注册顺序与执行顺序无关,系统自动调度B.先注册先执行,响应时倒序返回C.统一并行执行,无先后顺序D.路由中间件永远最后执行9.下列不属于.NET异常处理机制的关键字是()A.tryB.catchC.throwD.error10.EFCore中,用来实现实体类数据库唯一约束的特性是()A.[Required]B.[Unique]C.[Index(IsUnique=true)]D.[Key]二、填空题(每空2分,共20分)1.C#中,接口默认的访问修饰符是________,类默认的访问修饰符是________。2.装箱是将________类型转换为________类型,拆箱反之。3..NET中常见的集合线程安全问题,可通过________、________两种常用方式解决。4.ASP.NETCore配置文件中,________用于开发环境配置,________用于生产环境配置。5.EFCore中,追踪查询使用________,不追踪查询使用________,可提升查询性能。三、简答题(每题6分,共30分)1.简述C#中const和readonly的区别,从声明时机、赋值方式、使用场景三个维度说明。2.简述ASP.NETCore中Scoped、Transient、Singleton三种依赖注入生命周期的区别及适用场景。3.什么是内存泄漏?.NET项目中常见的内存泄漏场景有哪些(至少列举3种)?4.简述异步编程和同步编程的区别,为什么IO密集型场景推荐使用async/await?5.简述EFCore延迟加载、贪婪加载、显式加载的区别,以及各自的优缺点。四、编程题(每题10分,共20分)1.基础算法编程请用C#编写方法,实现对一个整型数组的去重、排序(升序),并返回处理后的新数组,禁止直接使用Distinct、Sort内置方法。要求:代码简洁、逻辑清晰,可正常编译运行。2.异步业务编程编写一个异步方法,模拟业务场景:先异步查询用户信息(耗时300ms),再异步查询用户订单列表(耗时500ms),最终整合两个数据返回用户详情信息。要求:合理使用async/await,模拟异步延迟,代码规范,具备基础异常捕获逻辑。五、综合实操题(10分)在ASP.NETCoreWebAPI项目中,需要实现一个全局异常处理功能,要求:1.捕获项目所有接口未处理的异常;2.区分系统异常和自定义业务异常,返回不同的提示信息和状态码;3.异常信息自动记录日志(模拟日志记录即可);请简述实现思路,并写出核心代码片段。参考答案(阅卷参考)一、单项选择题1.C2.B3.D4.B5.B6.D7.B8.B9.D10.C二、填空题1.public、internal2.值、引用3.加锁(lock)、使用线程安全集合(Concurrent系列)4.appsettings.Development.json、appsettings.Production.json5.AsTracking()、AsNoTracking()三、简答题(核心得分点)1.const和readonly区别(1)声明时机:const是编译时常量,readonly是运行时常量;(2)赋值方式:const必须声明时赋值,readonly可声明赋值或构造函数赋值;(3)使用场景:const适用于全局固定不变的常量(如配置固定值),readonly适用于对象初始化后不可修改的变量。2.DI三种生命周期(1)Transient:瞬时,每次请求都创建新实例,适用于轻量无状态服务;(2)Scoped:作用域,单次HTTP请求共用一个实例,适用于业务逻辑服务、数据库上下文;(3)Singleton:单例,程序运行全程仅一个实例,适用于全局配置、工具类服务。3.内存泄漏及常见场景内存泄漏:无用对象持续被引用,GC无法回收,导致内存占用持续升高。常见场景:静态集合持续添加数据未清理、事件订阅未取消、文件/数据库流未释放、长生命周期对象引用短生命周期对象。4.同步与异步区别同步:代码顺序执行,任务未完成会阻塞当前线程;异步:非阻塞执行,线程可释放处理其他任务。IO密集型场景(数据库、接口请求、文件读写)无CPU运算压力,async/await可释放线程,提升服务器并发处理能力。5.EFCore三种加载方式(1)延迟加载:访问导航属性时才查询数据库,优点是按需加载,缺点是易产生N+1查询问题;(2)贪婪加载:Include/ThenInclude一次性加载关联数据,优点是单次查询完成,无N+1,缺点是可能加载冗余数据;(3)显式加载:手动调用Load方法加载关联数据,灵活性高,操作繁琐。四、编程题(核心参考代码)1.数组去重排序csharp

publicstaticint[]DistinctAndSort(int[]arr)

{

if(arr==null||arr.Length==0)returnnewint[0];

//手动去重

List<int>tempList=newList<int>();

foreach(variteminarr)

{

if(!tempList.Contains(item))

{

tempList.Add(item);

}

}

//手动冒泡排序

int[]res=tempList.ToArray();

for(inti=0;i<res.Length-1;i++)

{

for(intj=0;j<res.Length-1-i;j++)

{

if(res[j]>res[j+1])

{

inttemp=res[j];

res[j]=res[j+1];

res[j+1]=temp;

}

}

}

returnres;

}2.异步业务查询csharp

publicclassUserService

{

//模拟查询用户信息

publicasyncTask<UserInfo>GetUserInfoAsync(intuserId)

{

awaitTask.Delay(300);

returnnewUserInfo{UserId=userId,UserName="测试用户"};

}

//模拟查询订单列表

publicasyncTask<List<UserOrder>>GetUserOrdersAsync(intuserId)

{

awaitTask.Delay(500);

returnnewList<UserOrder>

{

newUserOrder{OrderId=1,OrderName="测试订单"}

};

}

//整合数据接口

publicasyncTask<UserDetailDto>GetUserDetailAsync(intuserId)

{

try

{

varuserInfo=awaitGetUserInfoAsync(userId);

varorders=awaitGetUserOrdersAsync(userId);

returnnewUserDetailDto

{

UserInfo=userInfo,

OrderList=orders

};

}

catch(Exceptionex)

{

//简易异常日志

Console.WriteLine($"查询用户数据异常:{ex.Message}");

throw;

}

}

}

//实体类

publicclassUserInfo{publicintUserId{get;set;}publicstringUserName{get;set;}}

publicclassUserOrder{publicintOrderId{get;set;}publicstringOrderName{get;set;}}

publicclassUserDetailDto{publicUserInfoUserInfo{get;set;}publicList<UserOrder>OrderList{get;set;}}五、综合实操题(核心实现)实现思路:自定义全局异常过滤器,继承IExceptionFilter,重写异常处理方法,区分自定义业务异常和系统异常,统一封装返回结果并记录日志,注册到全局过滤器。核心代码csharp

//自定义业务异常

publicclassBusinessException:Exception

{

publicintCode{get;set;}

publicBusinessException(intcode,stringmsg):base(msg)

{

Code=code;

}

}

//全局异常过滤器

publicclassGlobalExceptionFilter:IExceptionFilter

{

privatereadonlyILogger<GlobalExceptionFilter>_logger;

publicGlobalExceptionFilter(ILogger<GlobalExceptionFilter>logger)

{

_logger=logger;

}

publicvoidOnException(ExceptionContextcontext)

{

varex=context.Exception;

ob

温馨提示

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

最新文档

评论

0/150

提交评论