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

下载本文档

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

文档简介

.NET工程师笔试真题(含详细答案解析)适用人群:初级/中级.NET开发工程师考试时长:90分钟满分:100分一、单项选择题(共15题,每题2分,共30分)1、在C#中,以下关于值类型和引用类型的说法正确的是()A、string属于值类型B、struct是引用类型C、值类型变量存储在栈中,引用类型变量存储的是堆内存地址D、所有基本数据类型都是引用类型2、以下关键字中,不能用于修饰类的是()A、publicB、staticC、sealedD、abstract3、C#中readonly和const的区别,说法错误的是()A、const必须在声明时初始化B、readonly可以在构造函数中初始化C、const是编译时常量,readonly是运行时常量D、readonly字段可以在方法内修改4、以下关于foreach遍历的说法正确的是()A、遍历过程中可以直接修改集合元素B、遍历过程中不能增删集合元素,否则会触发异常C、foreach只能遍历数组,不能遍历泛型集合D、foreach遍历效率一定高于for循环5、ASP.NETCore中,用于依赖注入生命周期,以下生命周期最短的是()A、SingletonB、ScopedC、TransientD、一样长6、C#中virtual关键字的作用是()A、禁止方法被重写B、允许子类重写父类方法C、定义静态方法D、定义抽象方法7、以下异常类型中,数组越界会触发的是()A、NullReferenceExceptionB、IndexOutOfRangeExceptionC、ArgumentExceptionD、InvalidOperationException8、LINQ查询中,Select的主要作用是()A、筛选数据B、投影、转换数据结构C、排序数据D、分组数据9、ASP.NETCore中,appsettings.json的配置信息,以下读取方式正确的是()A、直接newConfiguration()读取B、通过IConfiguration接口注入读取C、只能通过静态方法读取D、无法在控制器中读取10、C#中async/await的作用是()A、开启多线程并行执行B、简化异步编程,避免线程阻塞C、提高代码执行速度D、同步代码强制执行11、以下关于GC(垃圾回收)说法错误的是()A、GC只回收堆内存资源B、值类型内存由系统自动释放,不受GC管理C、可以手动调用GC.Collect()强制回收D、GC回收时不会暂停程序线程12、EFCore中,FirstOrDefault()和SingleOrDefault()的区别是()A、无区别B、FirstOrDefault多条数据时报错C、SingleOrDefault查询到多条数据时报错D、SingleOrDefault可以返回多条数据13、C#中override和new的区别,正确的是()A、new用于重写父类虚方法B、override会覆盖父类虚方法,实现多态C、两者功能完全一致D、override用于隐藏父类方法14、ASP.NETCore中间件的执行顺序是()A、注册顺序倒序执行B、注册顺序正序进入,倒序退出C、随机执行D、统一优先执行系统中间件15、以下不属于C#面向对象三大特性的是()A、封装B、继承C、多态D、重载二、填空题(共5题,每题3分,共15分)1、C#中实现接口的类,必须________接口中所有的抽象方法。2、ASP.NETCore中,________生命周期为每次请求创建一个实例。3、C#中处理异常的三个关键字是try、________、________。4、EFCore中,________方法用于追踪实体修改,________方法用于关闭实体追踪。5、泛型的核心作用是________、提高代码复用性、保证类型安全。三、简答题(共4题,每题8分,共32分)1、简述C#中值类型和引用类型的核心区别,并列举3种常见的值类型、3种引用类型。2、简述ASP.NETCore中依赖注入的三种生命周期(Singleton、Scoped、Transient)的区别及适用场景。3、简述async/await的工作原理,以及为什么异步编程能提升接口吞吐量。4、简述EFCore中延迟加载和立即加载的区别,以及各自的使用场景。四、编程题(共1题,23分)需求:使用C#结合EFCore实现简单的用户数据操作,要求如下:1、定义User实体类,包含字段:Id(主键、自增)、UserName(用户名)、Password(密码)、CreateTime(创建时间,默认当前时间)、IsDelete(软删除,默认false);2、自定义DbContext数据库上下文,完成实体映射;3、编写新增用户、根据用户名查询用户、软删除用户三个基础方法;4、要求代码规范、注释清晰,适配ASP.NETCore依赖注入。【详细答案及解析】一、单项选择题答案及解析1、答案:C解析:string是引用类型,struct是值类型,基本数据类型(int、bool、double等)均为值类型。值类型存储在栈空间,引用类型变量仅存储堆内存地址,实际数据存在堆中。2、答案:B解析:类可以被public、sealed(密封类,不可继承)、abstract(抽象类)修饰;static不能修饰类,仅可修饰字段、方法、属性。3、答案:D解析:const为编译时常量,必须声明初始化,全局不可修改;readonly为运行时常量,可在声明或构造函数初始化,初始化后无法二次修改,方法内不能修改。4、答案:B解析:foreach遍历集合时,集合处于锁定状态,无法增删元素,否则触发集合修改异常;可以遍历泛型集合,可修改元素属性(不可替换元素本身),遍历效率无绝对优劣。5、答案:C解析:Transient(瞬时):每次获取都创建新实例,生命周期最短;Scoped(作用域):单次请求一个实例;Singleton(单例):全局程序生命周期一个实例。6、答案:B解析:virtual修饰的虚方法,允许子类使用override重写,实现多态;sealed禁止重写,abstract定义抽象方法无方法体。7、答案:B解析:数组下标超出数组长度触发IndexOutOfRangeException;空对象调用方法触发空引用异常;参数非法触发参数异常。8、答案:B解析:Where用于筛选数据,OrderBy用于排序,GroupBy用于分组,Select用于数据投影、字段筛选、结构转换。9、答案:B解析:ASP.NETCore内置配置体系,通过构造函数注入IConfiguration接口,读取appsettings.json配置,是官方标准用法。10、答案:B解析:async/await是异步语法糖,核心是避免IO阻塞线程,让线程可处理其他请求,简化异步编码;不直接开启多线程,不绝对提升单任务速度。11、答案:D解析:GC执行垃圾回收时,会暂停当前工作线程,完成内存清理后恢复;GC仅管理堆内存,栈内存由系统自动分配释放。12、答案:C解析:FirstOrDefault:查询多条数据取第一条,无数据返回默认值;SingleOrDefault:要求查询结果唯一,多条数据直接报错,无数据返回默认值。13、答案:B解析:override重写父类虚方法,实现多态,调用时执行子类逻辑;new隐藏父类方法,不会重写,父类调用仍执行父类逻辑。14、答案:B解析:中间件遵循「洋葱模型」,按注册顺序依次进入处理请求,处理完成后按逆序退出响应请求。15、答案:D解析:面向对象三大特性:封装、继承、多态;重载是方法的语法特性,不属于三大特性。二、填空题答案及解析1、实现解析:接口所有成员默认是公共抽象成员,非抽象类实现接口时,必须完整实现接口所有方法、属性。2、Scoped解析:Scoped作用域为单次HTTP请求,同一次请求内多次获取实例为同一个,不同请求不同实例。3、catch、finally解析:try捕获异常、catch处理异常、finally无论是否报错都会执行,常用于释放资源。4、AsTracking、AsNoTracking解析:EFCore默认追踪实体,AsTracking开启追踪,可直接更新实体;AsNoTracking关闭追踪,提升查询性能,适用于只读查询。5、避免装箱拆箱解析:泛型通过占位符限定类型,编译时确定类型,无需装箱拆箱,提升性能,同时杜绝类型转换异常。三、简答题详细答案1、值类型与引用类型核心区别(1)内存存储:值类型数据直接存储在栈空间;引用类型栈中存储内存地址,真实数据存储在堆空间。(2)赋值方式:值类型赋值是值拷贝,新旧变量相互独立;引用类型赋值是地址拷贝,多个变量指向同一个堆内存数据,修改会相互影响。(3)资源释放:值类型栈内存由系统自动释放;引用类型堆内存由GC垃圾回收机制回收。常见值类型:int、double、bool、struct、enum、decimal常见引用类型:string、class、数组、List、Dictionary、自定义实体类2、依赖注入三种生命周期区别及场景(1)Singleton(单例):程序启动后创建一次,全局所有请求、所有用户共享同一个实例,程序关闭才销毁。适用:全局配置类、工具类、日志类(无状态服务)。(2)Scoped(作用域):单次HTTP请求内共享一个实例,不同请求独立,请求结束后实例销毁。适用:数据库上下文、业务服务层(单次请求复用数据,避免串数据)。(3)Transient(瞬时):每次获取依赖都会创建全新实例,生命周期最短。适用:轻量级、无状态、频繁创建销毁的工具服务。3、async/await工作原理及吞吐量提升原因工作原理:async标记异步方法,方法执行到await时,会释放当前工作线程,线程回归线程池等待调度;当await的IO操作(数据库、网络请求)完成后,重新从线程池获取线程继续执行后续代码,全程不阻塞线程。吞吐量提升原因:传统同步编程中,IO等待时线程会被阻塞占用,无法处理新请求;异步编程让线程不闲置,可持续接收、处理新的HTTP请求,最大化利用线程池资源,大幅提升接口并发吞吐量。4、EFCore延迟加载与立即加载区别及场景(1)立即加载(EagerLoading):通过Include、ThenInclude主动关联查询,查询主数据时一次性将关联的子数据查询出来,单次数据库查询完成。适用:明确需要使用关联数据,需要减少数据库访问次数的场景。(2)延迟加载(LazyLoading):查询主数据时只查主表数据,访问关联子数据时才会单独发起数据库查询。适用:不确定是否需要关联数据、关联数据使用率低的场景,可避免无效数据查询。核心区别:立即加载一次性查全数据,延迟加载按需分次查询;延迟加载需开启配置,否则会出现关联数据为空的问题。四、编程题参考答案(完整可运行代码)csharp

usingMicrosoft.EntityFrameworkCore;

usingSystem;

//1、定义用户实体类

publicclassUser

{

///<summary>

///主键ID(自增)

///</summary>

publicintId{get;set;}

///<summary>

///用户名

///</summary>

publicstringUserName{get;set;}=string.Empty;

///<summary>

///密码

///</summary>

publicstringPassword{get;set;}=string.Empty;

///<summary>

///创建时间

///</summary>

publicDateTimeCreateTime{get;set;}=DateTime.Now;

///<summary>

///软删除标记

///</summary>

publicboolIsDelete{get;set;}=false;

}

//2、自定义数据库上下文

publicclassAppDbContext:DbContext

{

publicAppDbContext(DbContextOptions<AppDbContext>options):base(options)

{

}

//实体数据库映射

publicDbSet<User>Users{get;set;}

//实体配置

protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder)

{

//主键自增配置

modelBuilder.Entity<User>()

.HasKey(u=>u.Id);

modelBuilder.Entity<User>()

.Property(u=>u.Id)

.ValueGeneratedOnAdd();

}

}

//3、用户业务服务类(实现对应方法)

publicclassUserService

{

privatereadonlyAppDbContext_dbContext;

//构造函数注入数据库上下文

publicUserService(AppDbContextdbContext)

{

_dbContext=dbContext;

}

///<summary>

///新增用户

///</summary>

///<paramname="user">用户实体</param>

///<returns>是否新增成功</returns>

publicasyncTask<bool>AddUserAsync(Useruser)

{

_dbContext.Users.Add(user);

returnawait_dbContext.SaveChangesAsync()>0;

}

///<summary>

///根据用户名查询用户(忽略已删除数据)

///</summary>

///<paramname="userName">用户名</param>

///<returns>用户实体</returns>

publicasyncTask<User?>GetUserByNameAsync(stringuserName)

{

returnawait_dbContext.Users

.FirstOrDefaultAsync(u=>u.UserName==userName&&!u.IsDelete);

}

///<summary>

///软删除用户

///

温馨提示

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

评论

0/150

提交评论