当前位置: 首页 > news >正文

ASP.NET Core 面试宝典【刷题系列】

文章目录

      • 引言
      • 1、什么是 dot net core 的 startup class?
      • 2、什么是中间件?
      • 3、application builder 的 use 和 run 方法有什么区别?
      • 4、dot net core 管道里面的map拓展有什么作用?
      • 5、dot net core 里面的路径是如何处理的?
      • 6、如何在 dot net core 中激活 session 功能?
      • 7、描述一下依赖注入后的服务生命周期?
      • 8、dot net core跟dot net比较有哪些更好的地方?
      • 9、asp dot core有哪些好的功能?
      • 10、什么是 ASP.NET Core?它与 ASP.NET 有什么区别?
      • 11、ASP.NET Core 的启动过程是怎样的?
      • 12、ASP.NET Core 中的路由是如何工作的?
      • 13、如何实现 RESTful API 的路由?
      • 14、什么是模型绑定?
      • 15、如何进行模型验证?
      • 16、ASP.NET Core 中的日志系统是如何工作的?
      • 17、 如何优化 ASP.NET Core 应用程序的性能?
      • 18、 如何部署 ASP.NET Core 应用程序?
      • 19、如何使用 Docker 部署 ASP.NET Core 应用程序?
      • 20、什么是 Kestrel?
      • 结语


引言

ASP.NET Core 是一个跨平台、高性能的开源框架,用于构建现代云原生的 Web 应用程序和 API。随着 .NET Core 的普及,ASP.NET Core 成为了许多企业和开发者的首选框架。如果你正在准备 ASP.NET Core 相关的面试,这篇博文将为你提供一份全面的面试宝典,帮助你从基础知识到高级特性全面掌握 ASP.NET Core。


在这里插入图片描述


1、什么是 dot net core 的 startup class?

答:Startup classdot net core 应用的入口。所有的 dot net core 应用必须有这个class 这个类用来配置应用。
这个类的调用是在 program main 函数里面进行配置的。类的名字可以自己定义。

2、什么是中间件?

答:中间件是处理 HTTP 请求和响应的组件,它们按照顺序组成请求处理管道。每个中间件可以选择处理请求并将其传递给下一个中间件,或者直接终止管道。

示例:

public void Configure(IApplicationBuilder app)
{app.Use(async (context, next) =>{// 在处理请求之前执行的代码await next.Invoke();// 在处理请求之后执行的代码});app.Run(async context =>{await context.Response.WriteAsync("Hello, World!");});
}

3、application builder 的 use 和 run 方法有什么区别?

答:这两个方法都在 start up classconfigure 方法里面调用。都是用来向应用请求管道里面添加中间件的。Use 方法可以调用下一个中间件的添加,而 run 不会。

4、dot net core 管道里面的map拓展有什么作用?

答:可以针对不同的路径添加不同的中间件。

5、dot net core 里面的路径是如何处理的?

答:路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。

主要有两种路径处理方式,常规路径处理和属性路径处理。常规路径处理就是用MapRoute 的方式设定调用路径,属性路径处理是指在调用函数的上方设定一个路径属性。

6、如何在 dot net core 中激活 session 功能?

答:首先要添加 session 包. 其次要在 config service 方法里面添加 session 。然后又在 configure 方法里面调用 usesession

7、描述一下依赖注入后的服务生命周期?

答:asp.net core 主要提供了三种依赖注入的方式

其中 AddTransientAddSingleton 比较好区别

  • AddTransient 瞬时模式:每次都获取一个新的实例
  • AddSingleton 单例模式:每次都获取同一个实例

AddTransientAddScoped 的区别更不容易区别一点

首先这两种方式每次请求得到的都不是同一个对象,从这点看会发现这两个都一样。

但是我们可以继续分细一点,虽然不同的请求得到的结果不同,但是我们可以在同一次请求中去获取多次实例测试。

📌小总结:

  • AddTransient瞬时模式 :每次请求,都获取一个新的实例。即使同一个请求获取多次也会是不同的实例
  • AddScoped:每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例
  • AddSingleton单例模式:每次都获取同一个实例

8、dot net core跟dot net比较有哪些更好的地方?

  1. 第一是跨平台,它可以运行在三大操作系统上面,windows, Linux和MAC。
  2. 第二是对架构本身安装没有依赖,因为所有的依赖都跟程序本身在一起。
  3. 第三是 dot net core 处理请求的效率更高,能够处理更多的请求。
  4. 第四是 dot net core 有更多的安装配置方法。

9、asp dot core有哪些好的功能?

  1. 第一是依赖注入。
  2. 第二是日志系统架构。
  3. 第三是引入了一个跨平台的网络服务器,kestrel。可以没有 iis, apache和nginx 就可以单独运行。
  4. 第四是可以使用命令行创建应用。
  5. 第五是使用 APP settings json file 来配置工程。
  6. 第六是使用 start up 来注册服务。
  7. 第七是更好的支持异步编程。
  8. 第八是支持 web socketsignal IR
  9. 第九是对于跨网站的请求的预防和保护机制。

10、什么是 ASP.NET Core?它与 ASP.NET 有什么区别?

答:
ASP.NET Core 是 ASP.NET 的下一代版本,它是一个跨平台、高性能的开源框架,用于构建现代 Web 应用程序和 API。与传统的 ASP.NET 相比,ASP.NET Core 具有以下优势:

  • 跨平台:可以在 Windows、Linux 和 macOS 上运行。
  • 高性能:经过优化,性能显著提升。
  • 模块化:通过 NuGet 包管理,按需引入功能。
  • 依赖注入:内置支持依赖注入。
  • 统一框架:MVC 和 Web API 使用统一的编程模型。

11、ASP.NET Core 的启动过程是怎样的?

ASP.NET Core 应用程序的启动过程主要包括以下几个步骤:

  1. 创建主机:通过 CreateHostBuilder 方法创建主机。
  2. 配置服务:在 ConfigureServices 方法中注册服务。
  3. 配置中间件:在 Configure 方法中配置请求处理管道。
  4. 运行应用程序:调用 Run 方法启动应用程序。
public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});
}

12、ASP.NET Core 中的路由是如何工作的?

ASP.NET Core 使用路由系统将传入的 HTTP 请求映射到相应的控制器和操作方法。路由可以通过两种方式配置:

  • 约定路由:在 Startup 类的 Configure 方法中使用 MapRoute 方法配置。
  • 属性路由:在控制器和操作方法上使用 [Route] 属性配置。

示例:

app.UseEndpoints(endpoints =>
{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");
});

13、如何实现 RESTful API 的路由?

在 ASP.NET Core 中,可以使用属性路由来实现 RESTful API 的路由。

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{[HttpGet]public IActionResult Get(){// 获取所有产品}[HttpGet("{id}")]public IActionResult GetById(int id){// 根据 ID 获取产品}[HttpPost]public IActionResult Create(Product product){// 创建新产品}[HttpPut("{id}")]public IActionResult Update(int id, Product product){// 更新产品}[HttpDelete("{id}")]public IActionResult Delete(int id){// 删除产品}
}

14、什么是模型绑定?

模型绑定是将 HTTP 请求中的数据映射到控制器操作方法参数的过程。ASP.NET Core 支持多种模型绑定方式,包括查询字符串、表单数据、路由数据、请求体等。

15、如何进行模型验证?

ASP.NET Core 提供了数据注解(Data Annotations)来进行模型验证。常用的数据注解包括 [Required]、[StringLength]、[Range] 等。

public class Product
{[Required]public int Id { get; set; }[StringLength(100)]public string Name { get; set; }[Range(0, 1000)]public decimal Price { get; set; }
}

在控制器中,可以通过 ModelState.IsValid 属性来检查模型是否有效。

[HttpPost]
public IActionResult Create(Product product)
{if (!ModelState.IsValid){return BadRequest(ModelState);}// 处理有效的产品数据
}

16、ASP.NET Core 中的日志系统是如何工作的?

ASP.NET Core 提供了一个灵活的日志系统,支持多种日志提供程序(如控制台、调试、文件、Azure App Service 等)。日志系统通过 ILogger 接口提供记录日志的能力。

17、 如何优化 ASP.NET Core 应用程序的性能?

ASP.NET Core 提供了多种性能优化手段,包括:

  • 缓存:使用内存缓存、分布式缓存等。
  • 响应压缩:启用响应压缩以减少传输数据量。
  • 异步编程:使用异步方法提高并发处理能力。
  • 数据库优化:优化数据库查询,使用索引等。
  • CDN:使用 CDN 加速静态资源的加载。

18、 如何部署 ASP.NET Core 应用程序?

ASP.NET Core 应用程序可以部署到多种环境中,包括 IIS、Azure、Docker、Linux 等。常见的部署方式包括:

  • IIS:将应用程序发布到 IIS 服务器。
  • Azure:将应用程序发布到 Azure App Service。
  • Docker:将应用程序打包为 Docker 容器并部署到 Kubernetes 或其他容器编排平台。
  • Linux:将应用程序发布到 Linux 服务器并使用 Nginx 或 Apache 作为反向代理。

19、如何使用 Docker 部署 ASP.NET Core 应用程序?

首先,创建一个 Dockerfile 文件:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["MyApp.csproj", "./"]
RUN dotnet restore "./MyApp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyApp.csproj" -c Release -o /app/buildFROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publishFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

然后,使用以下命令构建和运行 Docker 镜像:

docker build -t myapp .
docker run -p 8080:80 myapp

20、什么是 Kestrel?

Kestrel 是 ASP.NET Core 的跨平台 Web 服务器,它是 ASP.NET Core 应用程序的默认服务器。Kestrel 是一个高性能的服务器,支持 HTTP/2WebSocket

结语

ASP.NET Core 是一个功能强大且灵活的框架,掌握其核心概念和高级特性对于面试和实际开发都非常重要。希望这篇博文能帮助你在 ASP.NET Core 面试中脱颖而出,顺利拿到心仪的职位!

如果你有任何问题或需要进一步的帮助,欢迎在评论区留言,我会尽快回复你。祝你面试顺利!

相关文章:

ASP.NET Core 面试宝典【刷题系列】

文章目录 引言1、什么是 dot net core 的 startup class?2、什么是中间件?3、application builder 的 use 和 run 方法有什么区别?4、dot net core 管道里面的map拓展有什么作用?5、dot net core 里面的路径是如何处理的?6、如何在 dot net core 中激活 session 功能?7、…...

案例-02.部门管理-查询

一.查询部门-需求 二.查询部门-思路 API接口文档 三.代码实现 1.controller层&#xff1a;负责与前端进行交互&#xff0c;接收前端所发来的请求 注&#xff1a;Slf4j用于记录日志使用&#xff0c;可以省略private static Logger log LoggerFactory.getLogger(DeptControlle…...

src和href区别

src和href区别 (1)请求资源类型不同(2)作用结果不同(3)解析方式不同 (1)请求资源类型不同 href 用来建立文档和元素之间的链接(是引用),常用的有a、linksrc 在请求src资源时候会将指向的资源下载并且应用到文档中(引入),常用的有script、iframe、image。 (2)作用结果不同 hr…...

Java每日精进·45天挑战·Day19

第一部分&#xff1a;移除数字以形成最小数的贪心算法实现 在编程的世界里&#xff0c;我们经常遇到需要对字符串表示的数字进行操作的问题。今天&#xff0c;我们要深入探讨一个具体的挑战&#xff1a;给定一个以字符串形式表示的非负整数 num 和一个整数 k&#xff0c;我们的…...

区块链的交易管理和共识机制

区块链的交易管理和共识机制是其核心功能&#xff0c;以下为你详细介绍它们的实现方式&#xff1a; 交易管理的实现 交易发起 • 用户使用钱包软件创建一笔交易&#xff0c;该交易包含发送方地址、接收方地址、转账金额等关键信息。同时&#xff0c;发送方会使用自己的私钥对…...

最新国内 ChatGPT Plus/Pro 获取教程

最后更新版本&#xff1a;20250202 教程介绍&#xff1a; 本文将详细介绍如何快速获取一张虚拟信用卡&#xff0c;并通过该卡来获取ChatGPT Plus和ChatGPT Pro。 # 教程全程约15分钟开通ChatGPT Plus会员帐号前准备工作 一个尚未升级的ChatGPT帐号&#xff01;一张虚拟信用卡…...

Apollo 9.0 速度动态规划决策算法 – path time heuristic optimizer

文章目录 1. 动态规划2. 采样3. 代价函数3.1 障碍物代价3.2 距离终点代价3.3 速度代价3.4 加速度代价3.5 jerk代价 4. 回溯 这一章将来讲解速度决策算法&#xff0c;也就是SPEED_HEURISTIC_OPTIMIZER task里面的内容。Apollo 9.0使用动态规划算法进行速度决策&#xff0c;从类名…...

Apache Iceberg 与 Apache Hudi:数据湖领域的双雄对决

在数据存储和处理不断发展的领域中&#xff0c;数据湖仓的概念已经崭露头角&#xff0c;成为了一种变革性的力量。数据湖仓结合了数据仓库和数据湖的最佳元素&#xff0c;提供了一个统一的平台&#xff0c;支持数据科学、商业智能、人工智能/机器学习以及临时报告等多种关键功能…...

【LeetCode Hot100 普通数组】最大子数组和、合并区间、旋转数组、除自身以外数组的乘积、缺失的第一个正整数

普通数组 1. 最大子数组和&#xff08;Maximum Subarray&#xff09;解题思路动态规划的优化解法&#xff08;Kadane 算法&#xff09;核心思想 代码解析 2. 合并区间&#xff08;Merge Intervals&#xff09;解题思路代码实现 3. 旋转数组&#xff08;Rotate Array&#xff09…...

共享存储-一步一步部署ceph分布式文件系统

一、Ceph 简介 Ceph 是一个开源的分布式文件系统。因为它还支持块存储、对象存储&#xff0c;所以很自 然的被用做云计算框架 openstack 或 cloudstack 整个存储后端。当然也可以单独作 为存储&#xff0c;例如部署一套集群作为对象存储、SAN 存储、NAS 存储等。 二、ceph 支…...

19.Python实战:实现对博客文章的点赞系统

Flask博客点赞系统 一个基于Flask的简单博客系统&#xff0c;具有文章展示和点赞功能。系统使用MySQL存储数据&#xff0c;支持文章展示、点赞/取消点赞等功能。 功能特点 文章列表展示文章详情查看&#xff08;模态框展示&#xff09;点赞/取消点赞功能&#xff08;每个IP只…...

【stm32】定时器输出PWM波形(hal库)

一. PWM基本原理 PWM是一种通过调节信号的占空比&#xff08;Duty Cycle&#xff09;来控制输出平均电压的技术。占空比是指高电平时间与整个周期时间的比值。例如&#xff1a; - 占空比为50%时&#xff0c;输出平均电压为电源电压的一半。 - 占空比为100%时&#xff0c;输出始…...

当Ollama遇上划词翻译:我的Windows本地AI服务搭建日记

&#x1f680; 实现Windows本地大模型翻译服务 - 基于OllamaFlask的划词翻译实践 &#x1f6e0;️ 步骤概要1️⃣ python 环境准备2️⃣ Ollama 安装3️⃣ 一个 Flask 服务4️⃣ Windows 服务化封装5️⃣ 测试本地接口6️⃣ 配置划词翻译自定义翻译源7️⃣ 效果展示8️⃣ debug…...

Linux上Elasticsearch 集群部署指南

Es 集群部署 Es 集群部署 Es 集群部署 准备好三台服务器。示例使用&#xff1a;110.0.5.141/142/143 1、es用户和用户组创建&#xff0c;使用root账号 groupadd esuseradd -g es es2、将es安装包和ik分词器上传到&#xff1a;/home/es/目录下&#xff08;任意目录都行&#…...

字节Trae使用感想(后端)

前言 昨天分享了字节哥的Trae从0到1创作模式构建一个vue前端项目&#xff0c;今天又来试试她的后端项目能力。不是我舔&#xff0c;不得不说确实不错。可惜现在曾经没有好好学习&#xff0c;进不了字节。既然进不了字节&#xff0c;那我就用字节哥的产品吧。 后面有惊喜…...

国产编辑器EverEdit - 二进制模式下观察Window/Linux/MacOs换行符差异

1 换行符格式 1.1 应用场景 稍微了解计算机历史的人都知道&#xff0c; 计算机3大操作系统&#xff1a; Windows、Linux/Unix、MacOS&#xff0c;这3大系统对文本换行的定义各不相同&#xff0c;且互不相让&#xff0c;导致在文件的兼容性方面存在一些问题&#xff0c;比如它们…...

文心一言4月起全面免费,6月底开源新模型:AI竞争进入新阶段?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、文心一言免费化的背后&#xff1a;AI成本与应用的双重驱动1️⃣成本下降&#xff0c;推动文心一言普及2…...

解锁机器学习算法 | 线性回归:机器学习的基石

在机器学习的众多算法中&#xff0c;线性回归宛如一块基石&#xff0c;看似质朴无华&#xff0c;却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一&#xff0c;其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动&#xff0…...

如何使用Three.js制作3D月球与星空效果

目录 1. 基本设置2. 创建星空效果3. 创建月球模型4. 添加中文3D文字5. 光照与相机配置6. 动画与控制7. 响应式布局8. 结语 在本文中&#xff0c;我们将一起学习如何利用Three.js实现一个3D月球与星空的效果&#xff0c;并添加一些有趣的元素&#xff0c;比如中文3D文字和互动功…...

SQL语句语法

SQL数据库的结构为 库database 表table 段segment 行row 列column 或field SQL 语句主要分为以下几类&#xff1a; 数据定义语言&#xff08;DDL&#xff09;&#xff1a;用于定义数据库对象&#xff0c;如数据库、表、视图、索引等。数据操作语言&#xff08;DML&#xff09;&…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...