MVC、EF 高频面试题及详细答案(实战版)_第1页
MVC、EF 高频面试题及详细答案(实战版)_第2页
MVC、EF 高频面试题及详细答案(实战版)_第3页
MVC、EF 高频面试题及详细答案(实战版)_第4页
MVC、EF 高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

MVC、EF高频面试题及详细答案(实战版)一、MVC面试题(ASP.NETMVC核心)1.简述MVC的设计思想及各组件职责MVC是一种经典的分层架构模式,核心目的是解耦数据、视图、业务逻辑,实现代码复用、便于维护和单元测试,主要分为三个核心部分:Model(模型):负责数据承载和业务逻辑处理。包含实体类、数据访问逻辑、业务规则校验,不依赖视图和控制器。主要用于封装数据、处理数据库交互、实现核心业务计算,是程序的核心数据层。View(视图):负责数据展示和页面呈现。仅用于展示控制器传递的数据,不处理任何业务逻辑和数据计算。在ASP.NETMVC中主要是cshtml页面,负责和用户交互,接收用户输入、展示返回结果。Controller(控制器):负责调度和流程控制,是视图和模型的中间枢纽。接收用户的请求,调用对应的Model处理业务数据,最后将处理后的结果传递给View渲染页面,不直接操作数据、不做页面展示。2.ASP.NETMVC的请求处理完整流程1.客户端发起Http请求,抵达IIS服务器,服务器将请求转交ASP.NETMVC框架;2.路由系统(RouteTable)匹配请求的URL地址,根据路由规则解析出对应的控制器名称、动作方法名称及参数;3.控制器工厂创建指定控制器实例,通过依赖注入初始化控制器;4.调用控制器对应的Action方法,方法内部调用Model层完成数据查询、新增、修改等业务操作;5.Action方法执行完毕后返回ActionResult(视图结果、Json结果、重定向结果等);6.视图引擎(Razor引擎)解析视图页面,绑定控制器传递的ViewData、ViewBag、Model数据,渲染完整页面;7.将渲染后的Html页面响应返回给客户端浏览器,完成一次请求闭环。3.ViewBag、ViewData、TempData的区别及使用场景特性ViewDataViewBagTempData数据类型字典类型(键值对),取值需强制转换动态类型,无需强制转换字典类型,取值可直接获取生命周期仅当前一次请求有效,页面刷新、重定向后数据丢失同ViewData,当前请求有效跨请求有效,可用于重定向传值,读取一次后自动销毁使用场景传递少量视图数据,适配低版本MVC日常页面传值,语法更简洁跳转页面、重定向时传递提示信息、临时数据补充:三者均不适合传递大量数据,大量数据优先使用Model绑定或Session。4.MVC路由机制是什么?默认路由规则详解路由是MVC的核心请求匹配机制,作用是将用户的URL请求映射到对应的控制器和Action方法,无需物理文件路径即可访问页面。默认路由规则(RouteConfig.cs):{controller}/{action}/{id}参数说明:-controller:控制器名称,默认必填;-action:控制器中的方法名称,默认必填;-id:可选参数,用于传递主键、页码等数据,可空。默认路由匹配示例:访问/Home/Index/1对应Home控制器的Index方法,id参数为1;仅访问/Home会默认匹配Home控制器的Index方法。5.MVC中Action的返回值类型及适用场景1.ViewResult:最常用,返回视图页面,用于常规页面渲染;2.JsonResult:返回JSON格式数据,主要用于前后端异步交互、AJAX请求;3.RedirectResult/RedirectToActionResult:页面重定向,跳转到其他Action或URL地址;4.FileResult:返回文件流,用于文件下载、图片返回等场景;5.ContentResult:返回自定义文本、字符串,适用于简单数据返回;6.EmptyResult:返回空结果,无任何数据和页面返回。6.MVC模型绑定的原理及作用模型绑定是MVC自动将客户端请求数据(表单、URL参数、AJAX数据)映射到Action方法参数或实体类的机制,无需手动获取Request参数,大幅简化代码。绑定规则:根据参数名称、实体属性名称,自动匹配请求中的同名数据,自动完成类型转换。支持基础数据类型、自定义实体类、集合、数组等绑定。核心作用:简化参数获取逻辑、统一参数校验入口、适配多种请求传参方式。7.MVC过滤器有哪些?执行顺序是什么?MVC过滤器用于对请求进行统一拦截处理,实现横向通用功能,无需在每个Action重复编码,核心四类过滤器:1.授权过滤器(IAuthorizeFilter):最先执行,用于身份验证、权限校验,未授权直接拦截请求;2.行为过滤器(IActionFilter):包含OnActionExecuting(Action执行前)、OnActionExecuted(Action执行后),用于日志记录、参数预处理等;3.结果过滤器(IResultFilter):包含OnResultExecuting(视图渲染前)、OnResultExecuted(视图渲染后),用于页面结果二次处理;4.异常过滤器(IExceptionFilter):最后执行,捕获Action执行过程中的所有未处理异常,用于统一异常处理、错误日志记录。完整执行顺序:授权过滤器→Action执行前→Action方法执行→Action执行后→结果执行前→视图渲染→结果执行后→异常过滤器(异常时触发)二、EF框架面试题(EntityFramework6实战核心)1.简述EF框架的作用及核心优势EF是.NET平台的ORM(对象关系映射)框架,核心作用是将数据库表和实体类映射,无需编写原生SQL语句,通过操作实体对象即可完成数据库增删改查操作,实现面向对象的数据开发。核心优势:1.屏蔽数据库底层差异,支持MySQL、SQLServer、Oracle等多数据库切换;2.大幅减少重复SQL代码,提升开发效率;3.内置事务、缓存、延迟加载、数据校验机制,稳定性高;4.支持三种开发模式,适配不同项目场景。2.EF三种开发模式(DatabaseFirst、ModelFirst、CodeFirst)区别及适用场景1.DatabaseFirst(数据库优先)流程:先创建数据库和数据表,通过EF工具自动生成实体类和数据上下文。适用场景:老旧项目维护、数据库已提前设计完成、数据库由专人维护的项目。2.ModelFirst(模型优先)流程:先在EF可视化模型中设计实体关系,自动生成数据库表和实体类。适用场景:小型新项目、快速原型开发,目前企业使用较少。3.CodeFirst(代码优先)流程:手动编写实体类和数据上下文,通过EF迁移功能自动生成、更新数据库表结构。适用场景:主流企业开发模式,新项目、敏捷开发项目,灵活可控,便于版本迭代和代码管理。3.EF核心对象DbContext、DbSet的作用DbContext(数据上下文)是EF的核心上下文类,相当于数据库的会话连接,负责管理数据库连接、实体映射、数据操作、事务、数据缓存、状态跟踪等所有核心功能。每个数据库操作都需要通过DbContext完成,通常一个数据库对应一个自定义上下文类。DbSet(实体集合)对应数据库中的一张数据表,用于实现单表的增删改查操作。可以直接通过DbSet查询数据、新增实体、删除实体、修改实体,是EF操作数据表的直接入口。4.EF实体的五种状态及各自含义EF通过上下文跟踪实体状态,根据状态自动生成对应的SQL语句,五种状态如下:1.Detached(分离状态):实体未被上下文跟踪,和上下文无关联,新增、查询未加载的实体默认此状态;2.Unchanged(未改变):实体已被上下文跟踪,数据和数据库一致,无任何修改;3.Added(新增状态):实体被上下文标记为新增,调用SaveChanges后执行Insert语句;4.Modified(修改状态):实体被跟踪且属性发生修改,调用SaveChanges后执行Update语句;5.Deleted(删除状态):实体被上下文标记为删除,调用SaveChanges后执行Delete语句。5.EF延迟加载(LazyLoading)和立即加载(EagerLoading)区别延迟加载(默认开启)查询主实体时,不会自动加载关联的外键实体,只有当代码访问关联实体属性时,才会单独发起SQL查询加载关联数据。优点:减少单次查询数据量,提升单次请求速度;缺点:频繁访问关联数据会产生多次数据库请求,造成性能损耗。立即加载通过Include()方法,在查询主实体的同时,一次性加载指定的关联外键实体,单次请求完成所有数据查询。优点:避免多次数据库连接,适合需要批量获取关联数据的场景;缺点:单次查询数据量过大可能影响性能。示例:db.Users.Include(u=>u.OrderList).ToList()一次性查询用户及所有关联订单6.EF新增、修改、删除的常用写法及注意事项新增:db.实体集.Add(实体对象),SaveChanges提交修改:①先查询实体,修改属性后直接提交;②脱离上下文的实体,手动标记状态为Modified删除:①先查询再Remove;②直接附加实体后删除核心注意事项:1.所有增删改操作必须调用SaveChanges()才会提交到数据库;2.同一上下文不能跟踪相同主键的多个实体,会出现状态冲突;3.批量操作时建议统一提交,减少数据库交互次数。7.EF事务的使用场景和实现方式使用场景:多个数据库操作需要保证原子性,要么全部成功,要么全部回滚(如转账、订单创建、库存扣减等关联操作)。EF内置事务实现:通过DbContext.Database.BeginTransaction()开启事务,操作完成后Commit,异常时Rollback回滚。优势:无需手动编写数据库事务SQL,适配EF所有数据操作,兼容性强。8.EF常见性能优化方案(高频面试重点)1.关闭延迟加载:不需要关联数据时手动关闭,避免多余查询;2.使用Include预加载关联数据:避免循环查询数据库,减少N+1查询问题;3.分页查询:使用Skip()、Take()分页,禁止查询全表数据;4.按需查询字段:使用Select()只查询需要的字段,避免查询全字段;5.禁用实体跟踪:纯查询场景使用AsNoTracking(),关闭状态跟踪,提升查询速度;6.批量操作优化:批量增删改避免循环SaveChanges,统一批量提交;7.合理使用索引:数据库查询字段建立索引,优化底层查询效率。9.什么是N+1查询问题?如何解决?问题成因:EF延迟加载机制导致。先查询N条主数据(1次查询),遍历每条主数据时,分别查询关联子数据(N次查询),总共产生N+1次数据库请求,极大损耗性能。解决方案:1.使用Include()立即加载关联数据,一次性查询主数据和子数据;2.关闭延迟加载,手动控制关联数据加载时机;3.采用Join联表查询替代延迟加载关联查询。三、MVC+EF综合面试题(实战场景)1.MVC结合EF开发的完整流程1.搭建MVC项目,引入EF框架NuGet包;2.编写业务实体类,定义实体属性和关联关系;3.创建自定义DbContext数据上下文,注册实体集、配置数据库连接字符串;4.通过EF迁移生成/更新数据库表结构;5.编写Model业务逻辑层,封装EF增删改查、业务校验逻辑;6.编写Controller控制器,接收前端请求,调用业务层方法;7.通过View视图绑定数据,完成页面展示和交互;8.增加过滤器、异常处

温馨提示

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

最新文档

评论

0/150

提交评论