15 Essential ASP.. NET MVC面试问题 *

total source的基本问题是最好的ASP.NET MVC开发人员和工程师可以回答. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.

Hire a Top ASP.NET MVC Developer Now
Toptal logo是顶级自由软件开发人员的专属网络吗, designers, finance experts, product managers, 和世界上的项目经理. 顶级公司雇佣Toptal自由职业者来完成他们最重要的项目.

Interview Questions

1.

什么是ORM,为什么要使用ORM而不是普通的旧ADO.NET?

View answer

ORM是一个对象关系映射框架. 这样的框架可以帮助减少典型web应用程序中手写代码的数量. 当应用程序对性能没有极端要求时,可以使用ORM, 但是有一些框架(例如.g.即使在高负载系统中也可以使用.

2.

You have a CategoriesController and an Add 下一个签名是这样的:

[HttpPost]
public IActionResult添加(NewCategoryModel模型)

你必须显式地指定参数 model 应该从请求体中提取吗. How would you achieve that?

View answer

Add [FromBody] like so:

[HttpPost]
public IActionResult Add([FromBody]NewCategoryModel模型)
3.

Is that OK to place a log.txt file in the ~/bin/ folder of an ASP.NET MVC application? Will it affect the app?

View answer

将日志文件放在目录中不是一个好主意 bin 文件夹,因为每次更改都会导致池重新启动. 您将面临性能问题,除非您已经知道这一点, 追查原因将会很困难.

申请加入Toptal的发展网络

并享受可靠、稳定、远程 Freelance ASP.NET MVC Developer Jobs

Apply as a Freelancer
4.

ASP中有哪些基本的文件夹.NET project without Areas? What are they for? 他们有哪些子文件夹(如果适用)? 哪些文件夹是可公开访问的?

View answer
  • App_Data 可以用来存储一些应用程序的数据吗.
  • App_Start 包含配置类: RouteConfig, BundleConfig, etc.
  • Content 是一个公开访问的文件夹的静态文件,如CSS文件,图像等., but not scripts.
  • Controllers 是应用程序控制器的默认文件夹吗.
  • Scripts 是一个公开访问的文件夹的JavaScript文件.
  • Views:每个控制器对应一个文件夹,外加一个特殊文件夹 Shared 用于多个视图/控制器使用的视图. 例如,如果我们有一个控制器叫做 HomeController, we will have a Home 子文件夹中包含了相关的所有视图 HomeController.
5.

ASP中有哪些基本的文件夹.. NET Core项目使用的MVC模板没有area? What are they for? 他们有哪些子文件夹(如果适用)? 哪些文件夹是可公开访问的?

View answer
  • wwwroot:站点的根目录, publicly accessible, 包含静态文件(CSS)的子文件夹, images, JS, etc.).
  • Controllers:应用控制器的默认文件夹
  • Views:每个控制器对应一个文件夹,外加一个特殊文件夹 Shared 用于多个视图/控制器使用的视图. 例如,如果我们有一个控制器叫做 HomeController, we will have a Home 子文件夹中包含了相关的所有视图 HomeController.
6.

What does MVC mean?

View answer

Model-View-Ccontroller是一种体系结构模式.其主要思想是将业务逻辑与应用程序的UI分离.

应用逻辑位于控制器中. 视图负责呈现适当的UI. 模型通常用于在控制器和视图之间来回传输数据. 有些人还使用它们来包装业务逻辑,与ORM工具共享模型. 但是,最好将模型仅用于传输数据(作为数据传输对象)和验证契约(通过使用数据注释属性标记模型的属性)。.

7.

You have a controller CategoriesController with actions ShowAll, Add, and Delete. 你有几个与应用程序url相关的需求:

URLActionMethod
~/v2/CategoriesShowAllGET
~/v2/Categories/AddAddPOST
~/v2/Categories/DeleteDeleteDELETE

实现这一目标最简单的方法是什么?

View answer

In ASP.NET MVC 5:

在动作方法上使用自定义路由和属性来限制HTTP方法.

步骤1:我们需要添加一个自定义路由 RoutesCollection (usually in ~/App_Start/RoutesConfig) before the default one:

routes.MapRoute(
                name: "v2",
                url:“v2 /{控制器}/{行动}”,
                默认值:new {action = "ShowAll"}
               );

步骤2:为了限制操作的HTTP方法,我们需要标记 CategoriesController的方法与属性 [HttpGet], [HttpPost], and [HttpDelete] 根据我们的要求.


In ASP.NET Core MVC:

有三种方法可以满足这些需求.

选项#1:在动作方法上添加自定义全局路由和属性来限制HTTP方法.

步骤1:我们需要添加一个自定义全局路由(通常在 Startup.cs) before the default one:

routes.MapRoute(
                name: "v2",
                模板:“v2 /{控制器}/ {action = ShowAll}”
               );

步骤2:为了限制操作的HTTP方法,我们需要标记 CategoriesController的方法与属性 [HttpGet], [HttpPost], and [HttpDelete] 根据我们的要求.

对于没有特定URL模式需求的应用程序来说,这是一种很好的方法.

选项#2:在操作级别配置路由.

Steps:

  1. 用属性标记动作以限制允许的HTTP方法.
  2. 通过属性指定路由模板:
        [HttpGet]
        [Route("v2/[controller]")]
        public IActionResult ShowAll()
        {
            return View();
        }

        [HttpPost]
        (路线(“v2 /[控制]/[行动]”))
        public IActionResult Add()
        {
            return View();
        }

如果您对URL方案有特定的要求,这是一个很好的决定.g., a REST API.

选项#3:在控制器级别配置基本路由,在操作级别配置相对路由.

Steps:

  1. 指定一个带有属性的基本控制器路由模板.
  2. 用属性标记动作以限制允许的HTTP方法.
  3. 通过属性指定相关的路由模板:
    [Route("v2/[controller]")]
    公共类categorescontroller:控制器
    {
        [HttpGet]
        [Route("")]
        public IActionResult ShowAll()
        {
            return View();
        }

        [HttpPost]
        [Route("[action]")]
        public IActionResult Add()
        {
            return View();
        }
    // ...

如果您对URL方案有特定的需求,这也是一个很好的决定. In fact, 如果你总是用一个常量字符串或控制器名作为路由的前缀,那么它可能是一个比前一个更好的选择.

8.

默认情况下,应用程序中有母版页 ~/Views/Shared/_Layout.cshtml 而你又创造了一个新的 ~/Views/Shared/_LayoutV2.cshtml. 如何将新的母版页应用到整个应用程序中, 除了非默认布局的页面?

View answer

In both ASP.NET MVC 5 and ASP.. NET Core MVC,你要调整文件 ~/Views/_ViewStart.cshtml.

In ASP.NET MVC 5:

@{
    Layout = "~/Views/Shared/_LayoutV2 ..cshtml";
}

In ASP.NET Core MVC:

@{
    Layout = "_LayoutV2";
}
9.

ASP的推荐方法是什么.. NET MVC来全局拦截异常? 该方法还可以实现哪些其他功能?

View answer

您可以创建自定义异常筛选器来拦截和记录未处理的异常.

In ASP.NET MVC 5:

要在全局截获异常,应该注册过滤器 GlobalFilterCollection (usually in ~/App_Start/FilterConfig). Authentication, authorization, custom action filters, logging, 动作结果转换也可以用同样的方法来完成.


In ASP.NET Core MVC:

要在全局截获异常,应该注册过滤器 Startup.ConfigureServices() as shown below:

services.AddMvc(options => { options.Filters.Add(new ApiExceptionFilter()); });

Authorization, 自定义动作过滤器(同步和异步), 动作结果转换也可以用同样的方法来完成.

10.

在应用程序中使用IoC容器有什么优点?

View answer

The main advantages are:

  • 每个对象的生命周期都可以由外部管理.
  • 对象不负责创建服务和提供依赖关系.
  • 依赖列表的更改不会影响使用该服务的对象.
  • 同一个实例可以由几个不相关的消费者共享.
  • 服务提供契约,因此将来可以更改实现.
11.

ASP中数据库连接/ORM上下文的最合适的生命周期是什么.NET MVC application?

View answer

生命周期应该与请求相同,因为请求通常不会存活很长时间. 在哪里可以将整个请求封装在一个事务中, 这有助于遵守ACID原则.

12.

You have an ASP.. NET MVC应用程序,其中需要使用asp.net.. NET会话状态,并支持跨多个服务器运行. 在不编写自定义代码的情况下可以执行哪些额外的配置?

View answer

In the Web.config file (在应用程序的根文件夹中) set sessionState to StateServer 用于共享内存存储或 SQLServer 共享持久存储.

13.

You have an ASP.. NET Core MVC应用程序,其中需要使用一些缓存解决方案,并支持跨多个服务器运行. What are your steps?

View answer

有几个答案,因为ASP.. NET Core是一个新平台,支持多种方法. 候选人必须强调这一点, in the project, 例如,我们需要使用某种分布式缓存, Redis. 此外,微软还提供了几个包来帮助实现这一点. In the case of Redis, Microsoft.Extensions.Caching.Redis 提供中间件和实现 IDistributedCache 提供一种标准化的方法来处理它.

14.

异步和同步操作的区别是什么? 什么时候使用异步操作?

View answer

异步操作不会阻塞正在执行的线程,如果它等待一个I/O操作. 如果使用异步操作模式进行I/O操作,则可以提高系统的吞吐量, 但它对cpu密集型操作没有帮助.

15.

你有一个关于Razor c#语法的页面. 这两种方法的区别是什么? RenderAction and RenderPartial? What will they do?

@{
    Html.RenderAction("Add");
    Html.RenderPartial("Add");
}
View answer

RenderAction 将调用当前控制器的动作方法并内联呈现结果. In contrast, RenderPartial 将呈现指定的视图内联不调用任何操作方法.

面试不仅仅是棘手的技术问题, 所以这些只是作为一个指南. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.

Why Toptal

厌倦了面试候选人? 不知道该问什么才能让你得到一份好工作?

让Toptal为你找到最合适的人.

Hire a Top ASP.NET MVC Developer Now

我们的独家网络ASP.NET MVC Developers

想找一份ASP的工作.NET MVC Developer?

让Toptal为你找到合适的工作.

Apply as an ASP.NET MVC Developer

工作机会从我们的网络

提出面试问题

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, 由Toptal全权决定, LLC.

* All fields are required

Looking for ASP.NET MVC Developers?

Looking for ASP.NET MVC Developers? Check out Toptal’s ASP.NET MVC developers.

Duy Pham

Freelance ASP.NET MVC Developer

VietnamToptal Member Since October 29, 2019

Duy拥有20多年使用微软技术栈的软件开发经验, primarily with .NET. 他构建高质量和高性能的后端系统,并使用Angular或React等现代框架创建具有良好UX的web应用程序. Duy积极主动,以结果为导向,不仅喜欢编写代码,还喜欢删除代码以确保效率, stable, 灵活的软件在预计的范围和预算内交付.

Show More

Joseph McNulty

Freelance ASP.NET MVC Developer

United StatesToptal Member Since February 2, 2018

约瑟夫是一位具有很强领导才能的专业人士, 在软件工程方面有丰富经验, 专门研究航天领域的关键任务系统, defense, and telecommunications. 他在使用各种技术设计和开发复杂的企业web应用程序方面拥有超过20年的经验, most recently with ASP.NET MVC.

Show More

Ivan Sedlak

Freelance ASP.NET MVC Developer

SerbiaToptal Member Since December 8, 2015

Ivan拥有超过12年的专业实践经验,使用了广泛的微软技术, 主要针对企业web应用, security, internet, and serverless functions. 他以前的职位是在一家私营公司做高级职员 .. NET全栈开发人员、软件架构师和团队负责人. 他主要从事大型项目. Ivan自2015年以来一直与Toptal客户合作.

Show More

Toptal Connects the Top 3% 世界各地的自由职业人才.

Join the Toptal community.

Learn more