版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.NET初级工程师面试题及详细答案(实战版)本套面试题针对.NET初级开发岗位整理,全部为企业高频面试原题,涵盖C#基础、面向对象、.NET框架特性、集合、异常、数据库、Web基础、实操问题,答案贴合项目实战,通俗易懂,适合应届生、0-1年经验开发者备考。一、C#基础语法核心题1、简述值类型和引用类型的区别,并举出常用类型案例参考答案:值类型和引用类型最核心的区别是内存存储位置和赋值方式不同。值类型数据直接存储在栈内存中,变量赋值时是完整拷贝数据,两个变量相互独立,修改一个不会影响另一个。常用值类型:int、double、bool、char、struct、枚举。引用类型数据存储在堆内存中,栈内存仅存储数据的内存地址。变量赋值时是拷贝内存地址,多个变量指向同一个堆内存数据,修改其中一个变量的值,其他指向该地址的变量都会同步变化。常用引用类型:string、数组、class、集合(List、Dictionary)、自定义类。2、string和StringBuilder的区别?项目中如何选择使用?参考答案:string是不可变字符串,一旦赋值就无法修改。每次对string进行拼接、替换、截取操作,都会重新在内存中生成新的字符串,废弃旧字符串,频繁操作会造成大量内存浪费、性能低下。StringBuilder是可变字符串,底层是字符数组,修改、拼接数据时不会重新开辟内存,直接在原有内存中修改,性能极高。使用场景:单次、少量字符串操作用string;循环拼接、大量字符串修改场景必须用StringBuilder,比如批量拼接日志、批量组装SQL语句。3、const和readonly的区别参考答案:1、赋值时机:const是编译时常量,必须在声明时直接赋值;readonly是运行时常量,可以在声明时赋值,也可以在类的构造函数中赋值。2、作用域:const默认是静态的,不能用static修饰,可直接通过类名访问;readonly属于实例成员,需要实例化对象访问,也可以加static变为静态只读。3、修改性:两者赋值后都不能修改,但readonly灵活性更高,适合需要通过构造函数动态赋值的固定参数。4、说说int、Int16、Int32、Int64的区别参考答案:本质是占用字节和数值范围不同,都是整数类型:Int16:短整型,占用2字节,数值范围-32768~32767int=Int32:整型,占用4字节,日常开发最常用,范围-2147483648~2147483647Int64:长整型,占用8字节,对应long类型,用于超大数值存储二、面向对象编程(OOP)高频题1、面向对象的三大特性是什么?分别简单说明参考答案:三大特性:封装、继承、多态1、封装:将类的字段、方法进行私有化,隐藏内部实现细节,只对外暴露可用的访问接口,避免外部随意修改内部数据,保证数据安全,简化调用逻辑。比如将字段设为private,通过public属性读写数据。2、继承:子类可以复用父类的属性和方法,实现代码复用,减少重复代码。C#只支持单继承,一个子类只能有一个父类,一个父类可以有多个子类。3、多态:同一方法在不同子类中有不同的实现效果。核心作用是提高代码扩展性,常用实现方式:虚方法重写(virtual+override)、接口实现。2、override和new的区别参考答案:1、override(重写):必须配合父类virtual虚方法使用,重写后会覆盖父类的方法实现,多态调用时,会执行子类重写后的方法。2、new(隐藏):不需要父类虚方法,只是隐藏父类同名方法,不会实现多态。当用父类变量接收子类对象时,调用的仍然是父类原有方法,子类新方法仅在子类对象调用时生效。项目中需要统一重写父类逻辑用override,单纯区分父子类同名方法、无需多态用new。3、接口和抽象类的区别?项目中怎么选用?参考答案:区别:1、继承限制:类可以实现多个接口,只能继承一个抽象类;接口不能继承类,抽象类可以继承普通类。2、成员特性:接口中只能定义方法、属性、事件(无字段、无构造函数),默认是公共的;抽象类可以有字段、构造函数、普通实现方法、抽象方法。3、使用场景:接口侧重行为规范,定义统一的功能标准;抽象类侧重公共代码复用,抽取子类通用属性和方法。选用原则:仅需要统一行为、无通用代码复用,用接口;有大量通用字段、方法需要复用,部分方法需要子类实现,用抽象类。三、.NET框架与核心特性1、说说.NETFramework和.NETCore(.NET5+)的主要区别参考答案:1、跨平台:.NETFramework仅支持Windows系统;.NETCore开源、跨平台,支持Windows、Linux、Mac,可部署在服务器、容器中。2、轻量化:.NETFramework是完整框架,安装体积大、依赖系统组件;.NETCore模块化,按需引用组件,启动更快、占用资源更少。3、部署方式:.NETFramework依赖系统全局环境;.NETCore支持独立部署,无需服务器安装框架。4、版本迭代:.NETFramework4.8为最终版本,不再更新;目前主流使用.NET6、.NET8长期支持版本。2、什么是装箱和拆箱?有什么性能影响?参考答案:装箱:将值类型数据转换为引用类型(object),数据从栈内存拷贝到堆内存。拆箱:将引用类型(object)转回值类型,数据从堆内存拷贝到栈内存。频繁装箱拆箱会产生多余的内存分配和数据拷贝,造成性能损耗。项目开发中尽量避免,比如遍历集合时尽量使用泛型集合(List<T>),而非ArrayList,泛型可避免装箱拆箱。3、泛型的作用是什么?参考答案:泛型可以定义通用、可复用的类、方法、接口,无需指定具体数据类型,使用时再确定类型。核心作用三点:1、避免装箱拆箱,提升程序性能;2、类型安全,编译时校验数据类型,避免运行时报错;3、代码复用,一套代码适配多种数据类型,不用重复写重载方法。四、集合与常用数据结构1、List和Array的区别参考答案:1、长度特性:Array(数组)长度固定,初始化后无法修改;List是动态数组,长度可自动扩容、增减元素。2、功能方法:数组仅有基础取值赋值功能;List封装了丰富的增删改查、排序、去重、查找方法,开发更便捷。3、使用场景:数据数量固定不变用数组;数据数量动态变化、需要频繁操作集合用List。2、Dictionary哈希字典的特点?为什么查询速度快?参考答案:Dictionary是键值对集合,key唯一不重复,value可重复,无序存储。查询速度快的原因:底层基于哈希表实现,通过key的哈希算法直接定位数据存储位置,查询、新增、删除的时间复杂度接近O(1),而List遍历查询是O(n),数据量越大,Dictionary优势越明显。五、异常处理与程序调试1、try-catch-finally各块的执行逻辑,finally一定会执行吗?参考答案:try:包裹可能出现异常的代码;catch:捕获try中出现的异常,处理异常逻辑;finally:无论是否出现异常、是否捕获到异常,都会执行,主要用于释放资源(关闭数据库连接、释放文件流、关闭网络请求)。特殊情况:finally不是绝对执行,只有在try块中执行Environment.Exit(0)终止程序、或程序进程强制退出时,finally不会执行。2、throw和throwex的区别参考答案:throw:直接抛出原有异常,保留完整的异常堆栈信息,能精准定位报错代码行,项目中推荐使用。throwex:重置异常堆栈信息,会丢失原始报错位置,只显示当前抛出代码行,不利于问题排查,开发中禁止使用。六、ADO.NET&数据库基础1、简单说说ADO.NET的核心对象和作用参考答案:ADO.NET是.NET操作数据库的核心组件,常用核心对象:1、Connection:数据库连接对象,负责开启和关闭数据库连接;2、Command:命令对象,负责执行SQL语句、存储过程;3、DataReader:只读向前的数据读取器,读取速度快,适合批量读取数据;4、DataAdapter:数据适配器,自动开启关闭连接,填充数据到DataTable;5、DataTable:内存数据表,存储查询结果,支持离线操作数据。2、数据库连接为什么要用完就关闭?会不会自动释放?参考答案:数据库连接是珍贵的服务器资源,数据库有最大连接数限制。如果连接用完不关闭,会一直占用连接资源,导致后续请求无法连接数据库,出现程序卡死、报错。虽然程序垃圾回收机制会间接释放连接,但回收时机不确定,无法及时释放资源。开发规范:所有数据库连接、流对象必须用using包裹,using执行完毕会自动调用Dispose释放资源,关闭连接。3、什么是SQL注入?如何防范?参考答案:SQL注入是用户通过输入恶意SQL语句,拼接进原生SQL中,篡改查询逻辑,实现越权查询、删除数据等违规操作。常用防范方式:1、杜绝字符串拼接SQL,使用参数化查询(Command.Parameters);2、使用EFCore、Dapper等ORM框架,底层自动处理参数化,规避注入风险;3、后端做输入参数校验,过滤特殊字符。七、ASP.NETCoreWeb基础1、说说MVC和API的区别参考答案:MVC主要用于传统前后端一体项目,核心是返回视图页面(Html页面),兼顾页面渲染和数据处理,适配网页端开发。WebAPI是纯数据接口,只返回JSON、XML格式数据,不渲染页面,专门为前端页面、小程序、APP、第三方系统提供数据交互,是目前前后端分离项目的主流方式。2、GET和POST请求的区别参考答案:1、参数传递:GET参数拼接在URL地址中,POST参数放在请求体中;2、安全性:GET参数公开可见,安全性低;POST参数隐藏,相对安全;3、数据长度:GET有URL长度限制,无法传输大量数据;POST无长度限制,可传文件、大数据;4、缓存特性:GET请求会被浏览器缓存,POST不会缓存;5、使用场景:查询数据用GET,新增、修改、提交数据用POST。3、什么是路由?ASP.NETCore路由的作用参考答案:路由是将浏览器请求的URL地址,匹配到对应的控制器和Action方法的规则。作用:统一请求访问规则,简化地址配置,让程序可以精准接收前端请求、分发对应的处理逻辑,支持自定义路由、属性路由,适配各种接口访问规范。八、实操面试常问问题1、说说using关键字的三种用法参考答案:1、引用命名空间:最常用,usingSystem;,简化类的调用,不用写完整命名空间;2、资源释放语句:using(){}代码块,用于释放实现IDisposable接口的资源(数据库连接、文件流、网络流),代码执行完毕自动释放;3、别名定义:using别名=类名/命名空间,解决命名冲突,简化长命名空间。2、程序中常见的内存泄漏场景(初级必会)参考答案:1、数据库连接、文件流、网络请求未用using释放,资源持续占用;2、静态集合无限添加数据,未及时清空,静态变量常驻内存;3、事件注册后未取消订阅,导致对象无法被垃圾回收;4、循环
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三农田治理项目作业指导书
- 房地产行业策划营销部经理市场敏感度绩效评定表
- 就合同执行过程中争议点的协商函7篇
- 技术总监能力绩效衡量表
- 线上零售店铺库存管理优化方案
- 汽车行业销售顾问销售业绩及客户满意度绩效考评表
- 产品设计师KPI达成率绩效考核表
- 人力资源配置与成本控制考核表
- 探讨技术合作具体细节商洽函(4篇)
- 违约赔偿条款通知函(5篇范文)
- 2026年山西航空产业集团有限公司人员招聘笔试参考试题及详细答案解析
- 鄂尔多斯市色连二矿利用煤矸石协同生态修复治理试验基地项目环境影响报告表
- 地理信息安全在线培训考试系统题库
- 2025年高级育婴师实操考试试题及答案
- T/CNFIA 233-2025无麸质酱油
- 民商仲裁课件
- 课本剧社团教学课件
- 中泰文化差异课件
- 提高脓毒性休克患者1h集束化措施落实率 课件
- 某风电场项目海上升压站施工组织设计
- 运动生理学智慧树知到答案2024年湖南师范大学
评论
0/150
提交评论