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 class
是 dot 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 class
的 configure
方法里面调用。都是用来向应用请求管道里面添加中间件的。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
主要提供了三种依赖注入的方式
其中 AddTransient
与 AddSingleton
比较好区别
- AddTransient 瞬时模式:每次都获取一个新的实例
- AddSingleton 单例模式:每次都获取同一个实例
而 AddTransient
与 AddScoped
的区别更不容易区别一点
首先这两种方式每次请求得到的都不是同一个对象,从这点看会发现这两个都一样。
但是我们可以继续分细一点,虽然不同的请求得到的结果不同,但是我们可以在同一次请求中去获取多次实例测试。
📌小总结:
- AddTransient瞬时模式 :每次请求,都获取一个新的实例。即使同一个请求获取多次也会是不同的实例
- AddScoped:每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例
- AddSingleton单例模式:每次都获取同一个实例
8、dot net core跟dot net比较有哪些更好的地方?
- 第一是跨平台,它可以运行在三大操作系统上面,windows, Linux和MAC。
- 第二是对架构本身安装没有依赖,因为所有的依赖都跟程序本身在一起。
- 第三是
dot net core
处理请求的效率更高,能够处理更多的请求。 - 第四是
dot net core
有更多的安装配置方法。
9、asp dot core有哪些好的功能?
- 第一是依赖注入。
- 第二是日志系统架构。
- 第三是引入了一个跨平台的网络服务器,
kestrel
。可以没有iis, apache和nginx
就可以单独运行。 - 第四是可以使用命令行创建应用。
- 第五是使用
APP settings json file
来配置工程。 - 第六是使用
start up
来注册服务。 - 第七是更好的支持异步编程。
- 第八是支持
web socket
和signal IR
。 - 第九是对于跨网站的请求的预防和保护机制。
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 应用程序的启动过程主要包括以下几个步骤:
- 创建主机:通过
CreateHostBuilder
方法创建主机。 - 配置服务:在
ConfigureServices
方法中注册服务。 - 配置中间件:在
Configure
方法中配置请求处理管道。 - 运行应用程序:调用
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/2
和 WebSocket
。
结语
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层:负责与前端进行交互,接收前端所发来的请求 注:Slf4j用于记录日志使用,可以省略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
第一部分:移除数字以形成最小数的贪心算法实现 在编程的世界里,我们经常遇到需要对字符串表示的数字进行操作的问题。今天,我们要深入探讨一个具体的挑战:给定一个以字符串形式表示的非负整数 num 和一个整数 k,我们的…...
区块链的交易管理和共识机制
区块链的交易管理和共识机制是其核心功能,以下为你详细介绍它们的实现方式: 交易管理的实现 交易发起 • 用户使用钱包软件创建一笔交易,该交易包含发送方地址、接收方地址、转账金额等关键信息。同时,发送方会使用自己的私钥对…...

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

Apollo 9.0 速度动态规划决策算法 – path time heuristic optimizer
文章目录 1. 动态规划2. 采样3. 代价函数3.1 障碍物代价3.2 距离终点代价3.3 速度代价3.4 加速度代价3.5 jerk代价 4. 回溯 这一章将来讲解速度决策算法,也就是SPEED_HEURISTIC_OPTIMIZER task里面的内容。Apollo 9.0使用动态规划算法进行速度决策,从类名…...
Apache Iceberg 与 Apache Hudi:数据湖领域的双雄对决
在数据存储和处理不断发展的领域中,数据湖仓的概念已经崭露头角,成为了一种变革性的力量。数据湖仓结合了数据仓库和数据湖的最佳元素,提供了一个统一的平台,支持数据科学、商业智能、人工智能/机器学习以及临时报告等多种关键功能…...
【LeetCode Hot100 普通数组】最大子数组和、合并区间、旋转数组、除自身以外数组的乘积、缺失的第一个正整数
普通数组 1. 最大子数组和(Maximum Subarray)解题思路动态规划的优化解法(Kadane 算法)核心思想 代码解析 2. 合并区间(Merge Intervals)解题思路代码实现 3. 旋转数组(Rotate Array)…...

共享存储-一步一步部署ceph分布式文件系统
一、Ceph 简介 Ceph 是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自 然的被用做云计算框架 openstack 或 cloudstack 整个存储后端。当然也可以单独作 为存储,例如部署一套集群作为对象存储、SAN 存储、NAS 存储等。 二、ceph 支…...
19.Python实战:实现对博客文章的点赞系统
Flask博客点赞系统 一个基于Flask的简单博客系统,具有文章展示和点赞功能。系统使用MySQL存储数据,支持文章展示、点赞/取消点赞等功能。 功能特点 文章列表展示文章详情查看(模态框展示)点赞/取消点赞功能(每个IP只…...
【stm32】定时器输出PWM波形(hal库)
一. PWM基本原理 PWM是一种通过调节信号的占空比(Duty Cycle)来控制输出平均电压的技术。占空比是指高电平时间与整个周期时间的比值。例如: - 占空比为50%时,输出平均电压为电源电压的一半。 - 占空比为100%时,输出始…...

当Ollama遇上划词翻译:我的Windows本地AI服务搭建日记
🚀 实现Windows本地大模型翻译服务 - 基于OllamaFlask的划词翻译实践 🛠️ 步骤概要1️⃣ python 环境准备2️⃣ Ollama 安装3️⃣ 一个 Flask 服务4️⃣ Windows 服务化封装5️⃣ 测试本地接口6️⃣ 配置划词翻译自定义翻译源7️⃣ 效果展示8️⃣ debug…...
Linux上Elasticsearch 集群部署指南
Es 集群部署 Es 集群部署 Es 集群部署 准备好三台服务器。示例使用:110.0.5.141/142/143 1、es用户和用户组创建,使用root账号 groupadd esuseradd -g es es2、将es安装包和ik分词器上传到:/home/es/目录下(任意目录都行&#…...

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

国产编辑器EverEdit - 二进制模式下观察Window/Linux/MacOs换行符差异
1 换行符格式 1.1 应用场景 稍微了解计算机历史的人都知道, 计算机3大操作系统: Windows、Linux/Unix、MacOS,这3大系统对文本换行的定义各不相同,且互不相让,导致在文件的兼容性方面存在一些问题,比如它们…...

文心一言4月起全面免费,6月底开源新模型:AI竞争进入新阶段?
名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、文心一言免费化的背后:AI成本与应用的双重驱动1️⃣成本下降,推动文心一言普及2…...

解锁机器学习算法 | 线性回归:机器学习的基石
在机器学习的众多算法中,线性回归宛如一块基石,看似质朴无华,却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一,其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动࿰…...
如何使用Three.js制作3D月球与星空效果
目录 1. 基本设置2. 创建星空效果3. 创建月球模型4. 添加中文3D文字5. 光照与相机配置6. 动画与控制7. 响应式布局8. 结语 在本文中,我们将一起学习如何利用Three.js实现一个3D月球与星空的效果,并添加一些有趣的元素,比如中文3D文字和互动功…...
SQL语句语法
SQL数据库的结构为 库database 表table 段segment 行row 列column 或field SQL 语句主要分为以下几类: 数据定义语言(DDL):用于定义数据库对象,如数据库、表、视图、索引等。数据操作语言(DML)&…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...