自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(174)
  • 问答 (1)
  • 收藏
  • 关注

原创 使用 Spark 进行时间序列分析: 11 时间序列分析的最新进展

当我们来到本书的尾声,回顾这段旅程与掌握的技能时,我们已经为基于 Apache Spark 及其他组件的时间序列分析项目各阶段构建了坚实基础。凭借第 2 章讨论的多个用例、全书获得的实践技能以及本章的最新进展,我们已具备成功实施生产就绪、可扩展且面向未来的时间序列分析项目的所有要素,这些项目可应用于各行各业。如本节所示,使用预训练的基于 Transformer 的基础模型(如 TimesFM)及其默认超参数,所获得的准确性与之前章节采用的不同方法相当。,因为时间序列很少孤立存在。

2025-07-11 11:32:50 467

原创 使用 Spark 进行时间序列分析: 10 深入 Apache Spark 应用

章节中所讨论的,对于生产环境中处理敏感数据的工作负载而言,关键要求是建立适当的监控、安全与治理机制。在展示我们目前完成的时间序列分析结果时,Databricks 提供了几种用户界面选项,包括 AI/BI 仪表板、Genie 空间、基于 AI 的聊天机器人和 Lakehouse 应用。根据您单独启动任务的需求 ,本示例中的作业在您自己的实现中可以进一步拆分。在撰写本文时,这些虚拟机的云服务商费用已超出免费试用账户的额度。请注意,本笔记本展示的是简化版的模型训练过程,这已足够说明本章示例中的训练步骤。

2025-07-11 11:21:15 392

原创 使用 Spark 进行时间序列分析: 9 进入生产环境

在完成时间序列分析模型的构建与测试,并验证了前一章所述的扩展能力后,我们现在将探讨使用 Spark 框架将时间序列模型部署到生产环境中的实际考量和具体步骤。值得注意的是,在本例中,我们本可以将所有这些独立任务的代码合并为一个大任务。本例中出于实际考虑,我们使用了较长的周期来展示 5 年期的预测,每次运行 365 天,共运行 5 次。在我们的示例工作流中,我们已采用滑动窗口的方式在每次运行时包含重训练环节, 使用最新数据进行。在实际应用中,为了优化资源利用率,可以将重训练安排在单独的工作流中以较低频率执行。

2025-07-11 11:13:54 382

原创 使用 Spark 进行时间序列分析: 8 大规模扩展

基于并扩展了第 7 章的代码示例,我们重点聚焦于特征工程和模型训练阶段的扩展。如果您还记得,在第 7 章中,我们使用单节点上的 GridSearchCV 来调优 LightGBM 模型的超参数。在本节的代码示例中,我们将通过并行化这一过程来进行改进。这需要使用支持多节点处理后端(如本文采用的 Apache Spark)的库,例如这里使用的 XGBoost。本章我们将探讨如何在将数据集规模扩大五倍的同时,减少第 7 章中的处理时间。这里,为了展示支持 Spark 的梯度提升模型的训练并行性,我们将使用。

2025-07-11 11:00:54 660

原创 使用 Spark 进行时间序列分析: 7 构建与测试模型

模型的研发基于对时间序列性质的特定假设,这些假设决定了模型的适用性,而模型只有在这些假设下才能良好运作。本节我们将重点讨论适用性并跳过定义部分,假设通过第 1 章的介绍和第 6 章的代码示例,您已熟悉本节将使用的术语。转换后的差分序列即可用于此类模型。我们将介绍的第三个模型是 NeuralProphet,这是一个免费开源的深度学习模型,其灵感来源于前几章使用过的 Prophet 以及 AR-Net。本章涵盖的概念将作为模型开发的实用指南,为构建有效的时间序列模型提供基础要素,从而实现准确预测和深入分析。

2025-07-11 10:47:57 533

原创 使用 Spark 进行时间序列分析: 6 探索性数据分析

例如,在考虑家庭能耗时,分钟级别的时间序列可能是不规则的,但根据历史数据,我们预期每小时或每天都会有能耗记录。一旦识别出间隙,我们可以采用与规律时间序列相同的处理方法,即前向填充或类似插补、更高时间间隔的聚合,或直接忽略该间隙。虽然本节中的滞后分析方法用于自相关,但它们同样适用于互相关分析——我们将接下来讨论这种不同类型的相关性,这次是不同时间序列之间的关联。对于时间序列数据,另一个需要考虑的因素是时间线本身的间隙,如下面这个家庭能源消耗数据集的例子所示,我们预期数据会每分钟更新一次。

2025-07-11 10:16:53 953

原创 使用 Spark 进行时间序列分析: 5 数据准备

至此,我们已经介绍了时间序列和 Apache Spark 的基础知识,以及时间序列分析项目的完整生命周期。内容包括处理缺失值的技术、应对异常值的方法,以及如何构建适合 Spark 分布式计算模型的数据结构。恰当的数据准备能提升后续分析流程的可靠性,使本章成为从时间相关数据集中获取有意义洞见的必要前提 (使用 Spark)。从可复现性的角度来看,这也非常有用——即使数据已经发生变化,我们仍能回溯到之前使用的特定数据版本,用于审计、审查和重新执行分析工作。Apache Spark 提供了高效去除重复值的函数。

2025-07-11 09:51:29 529

原创 使用 Spark 进行时间序列分析: 4 时间序列分析项目的端到端全景

对于细粒度或不规则间隔的数据,需要将其聚合到更高层级的时间间隔,例如从每分钟到每小时,从每小时到每天,依此类推。最后,作为 DataOps 阶段的一部分,我们希望数据科学家、分析师和其他用户能够使用数据进行探索、分析和报告。总之,时间序列分析项目的 ModelOps 涵盖了模型开发、部署和维护的端到端流程,同时因其数据需求与 DataOps 有所重叠。总之,从清晰理解用户需求出发,基于用例的项目能确保与业务的适用性和相关性,紧密契合利益相关者的目标,并产生可衡量的影响。是建立数据可信度的首要步骤。

2025-07-11 09:18:04 917

原创 使用 Spark 进行时间序列分析: 3 Apache Spark 简介

在关于 Apache Spark 架构的这部分内容中,我们了解了该架构如何实现从多种数据源将数据摄入 Spark 系统,通过 Spark 库进行处理,最终存储或提供给用户及下游应用。从本地部署到云原生解决方案,再到与其他数据平台集成的版本,Apache Spark 的每个发行版都满足不同的需求。通过迄今为止完成的实践练习,我们已经积累了一些关于 Spark 和存储的经验,其中包括从 Databricks Community Edition 的 Spark 集群本地存储中读取 CSV 文件。

2025-07-11 08:59:42 715

原创 使用 Spark 进行时间序列分析: 2 为何需要时间序列分析?

到目前为止,针对第 1 章中的温度时间序列 ,我们仅考虑了单一变量(单变量),即特定位置的温度数据。通过单步预测,我们基于对历史数据点的分析和据此构建的模型, 预测时间序列中的下一个事件。虽然单步预测通常是我们能得到的最可靠预测,但遗憾的是,这远不能满足许多实际需求,因为在现实生活中,我们的规划往往远不止提前一个(时间)步长。这些数据被收集、存储和分析——通常是实时进行的——应用场景覆盖各行各业,其中一些已经讨论过,从用于预测性维护的机器传感器数据,到预测能耗的智能电表数据,再到健康追踪器, 不一而足。

2025-07-11 08:51:56 808

原创 使用 Spark 进行时间序列分析: 1 什么是时间序列?

我们将在下一章深入探讨时间序列分析的结果和模型选择,包括异常检测、模式识别以及预测建模等内容, 并阐述时间序列的重要性。训练时的数据泄露(在时间序列数据中往往难以察觉)会破坏方法的完整性,导致模型在开发阶段表现出误导性的优异性能,而在面对新的未见数据时表现欠佳。时间序列中的周期反映了影响该序列的外部周期性因素。第 11 章 , 时间序列分析的最新进展 ,探讨了时间序列分析领域的最新发展,包括将生成式 AI 这一激动人心的领域应用于时间序列预测的方法,以及使时间序列分析结果能够以非技术方式呈现的新方法。

2025-07-11 08:43:30 633

原创 C++ 内存管理:15 当代议题

因此,为了结束我们关于 C++内存管理的讨论,我想我们可以聊聊(是的,亲爱的读者,就你和我)当代 C++内存管理中一些有趣的话题。对某些人而言 C++的演进太慢,对另一些人则太快,但这种节奏始终坚定不移(我们称这种发布节奏为"火车模型"以强调其持续性),不断为我们深爱的这门语言带来持续的进步与创新。当然,由于涉及风险,这些函数构成了非常锋利的工具集:以这种方式开始生命周期的非平凡可销毁对象尤其可疑,你必须高度信任那些提供字节的设施,因为对象的生命周期是通过这些字节手动且显式开始的。我们如何实现这一点?

2025-07-11 08:14:09 725

原创 C++ 内存管理:14 编写支持分配器的泛型容器

请注意,在这种情况下,我们将使用第 12 章中的显式内存管理方法作为基线,因为我们想要探索分配器感知的影响,这将帮助我们更清楚地了解实现的更改。在 C++11 之前的时代,我们不知道该如何处理这种情况,因此除非容器在不会被复制的上下文中使用(比如函数内部的局部 vector,且关联使用栈空间作为存储的分配器),大多数人都会完全避免使用有状态的分配器。因此,我们将详细编写的示例会采用 C++11 分配器,以展示其实际含义,但会使用 C++17 标准进行编译,使代码更易于阅读( 和编写)。

2025-07-11 08:00:35 121

原创 C++ 内存管理:13 使用隐式内存管理编写通用容器

类型案例中,经过初期努力实现了一个可用但有时效率低下的版本后,我们进一步将内存分配与对象构造分离,这种做法减少了运行时所需的冗余操作,但代价是实现逻辑变得更加精妙。在这个更复杂的实现中,我们区分了底层存储中已初始化的部分与未初始化的部分,并相应地以不同方式处理这两部分(将对象视为对象,原始内存视为原始内存)。在 C++ 中,将我们的 Vector<T> 实现从手动管理内存的方式更改为隐式管理的方式,最简单的方法是使用智能指针。这...真令人遗憾。类型,当该类型的对象被销毁时,会隐式确保链表中的节点被析构。

2025-07-10 09:14:43 646

原创 C++ 内存管理:12 使用显式内存管理编写泛型容器

若要完整实现受标准库启发的两种容器类型的所有成员函数,本书的篇幅将变得极其庞大——而您的标准库实现所涵盖的边界情况(以及提供的精妙优化)远比本书所能呈现的要多得多。根据所使用的整数类型,指针和两个整数的大小可能相同,也可能略有差异。通过这种优化,当对象需要存储的数据足够小时,实现会直接使用对象的"控制块"(实际上是数据成员)存储空间作为原始存储,完全避免动态内存分配。类似的情况也出现在具有引用类型数据成员的复合对象上:你无法创建引用容器,因为引用不是对象,但你完全可以创建包含引用类型数据成员的对象容器。

2025-07-10 08:31:32 854

原创 C++ 内存管理:11延迟回收机制

这样做的一个原因是,在这类语言中,对象很难(某些情况下甚至不可能)知道程序中还有哪些其他对象仍然存在,因为没有终结顺序的保证...而且当垃圾回收器需要处理相互引用的对象循环时,怎么可能有这种保证呢?由于所有类型没有一个共同的基类,这意味着我们要么放弃终结操作(如果我们仅限于分配可平凡析构类型的对象,这在编译时是可以验证的,这种做法是可行的),要么必须找到其他方法来记住已分配对象的类型,并在适当时机调用相应的析构函数。没错,就是单例模式,但在这里这是正确的工具,因为我们讨论的是影响整个程序的功能。

2025-07-10 07:52:53 775

原创 C++ 内存管理:10 基于内存池的内存管理及其他优化

为了编写能够进行正确比较的代码,我们需要两个独立的可执行文件,因为我们将面临非此即彼的情况(要么使用标准版本,要么使用我们正在编写的"自制"版本), 因此这是基于宏条件编译的典型应用场景。当然,这取决于你的需求。当然,与大多数微基准测试一样,对这些测量结果应持保留态度:在实际程序中,由于内存分配与其他代码交错执行,数值会有所不同,但至少我们对两种内存分配运算符的实现应用了相同的测试,因此比较结果应该是相对公平的。我们将把基于竞技场的实现与基准实现进行比较,这里的基准实现指的是标准库提供的内存分配函数版本。

2025-07-10 07:44:24 967

原创 C++ 内存管理:9 非典型分配机制

这是一个有用的技巧:如果我们编写两个具有相同名称的函数(一个接受 shared_mem_id 类型的参数,另一个接受 std::size_t 类型的参数),即使 shared_mem_id 的底层类型是 std::size_t,这些也将是不同的函数。希望这对您来说是个可接受的折衷方案, 亲爱的读者。为简化起见,我们使用了将数据成员清零的构造函数和一个简单的析构函数,但在实际应用中,我们可以通过构造函数(默认或其他形式)来初始化内存映射设备的状态以满足需求,并通过析构函数将该设备状态重置为某种可接受的状态。

2025-07-10 07:44:04 996

原创 C++ 内存管理:8 编写一个简易泄漏检测器

既然您正在阅读本书,您必定是一位极其敏锐的读者,因此可能已经注意到这里存在一个问题:我们的分配函数通过参数知道要分配的字节数,但释放函数却没有这个优势,它们仅获知待释放内存块的起始地址。该技术确保所有此类单例都能以正确的顺序创建(即如果单例 A 的构造函数需要单例 B 的服务,这将促使单例 B"及时"被构造),即使它们本质上是"全局"变量,只要创建它们的调用链中不存在循环依赖当然。我们将这个单例类命名为。但请记住,内存分配和释放机制需要是线程安全的,因此我们需要确保对该整数表示形式的所有访问都是同步的。

2025-07-09 10:51:51 521

原创 C++ 内存管理:7 重载内存分配运算符

当然,还有许多其他与内存分配相关的函数,例如 calloc()、realloc() 和 aligned_alloc(),还不包括为特定用例执行类似任务的操作系统特定服务,但这些足以支持我们的讨论。需要特别指出的是,这些重载运算符会被派生类继承,这意味着如果这些运算符的实现依赖于该类的特定细节——例如其大小对齐方式,或任何可能因派生类中看似不起眼的改动(如添加数据成员)而失效的特性——就应考虑将重载这些运算符的类标记为。其二是如果您不重载内存分配运算符,编译器可以假定您进行的内存分配次数是不可观测的。

2025-07-09 10:37:18 863

原创 C++ 内存管理:6 编写智能指针

如果我们不想对可克隆类型强制使用基类,我们可以使用类型特征来检测是否存在带 const 限定符的 clone() 成员函数,并假设这是一个合理的声明,即克隆是比复制更好的选择。在本章末尾,我们研究了一些相对简单(但实用)的智能(或者说轻度智能)指针,它们可用于函数边界(通常作为参数类型),通过类型系统隐式表达语义要求,而不必强制用户代码显式执行这些要求...有时用户代码可能会执行失败。我们的意图是展示实现的可行性、具体实现方式,以及如何在不阻碍具有更特殊需求的用户代码前提下,提供合理可用的默认实现。

2025-07-09 10:24:40 712

原创 C++ 内存管理:5 使用标准智能指针

同时假设,该资源的潜在共享是通过侵入式方式实现的(许多平台都采用这种方式),因此要表示我们正在断开与该资源的连接,就需要调用其。最明显的成本是,对于任何类型 T,sizeof(shared_ptr<T>)>sizeof(unique_ptr<T>),因为 shared_ptr<T> 需要处理指向共享资源的指针和指向共享计数器的指针。当然,当指针所模拟的关系既非独占所有权也非共享所有权时,你可能不希望使用提供这些语义的智能指针类型,转而选择非标准且不拥有所有权的智能指针,或者直接使用原始指针。

2025-07-09 10:09:04 848

原创 C++ 内存管理:4 使用析构函数

确实,我们通过函数抛出异常来表明该函数无法满足其后续条件(无法完成其预期任务):可能是内存不足,可能是要读取的文件不存在,可能是您请求的整数除法会导致除零错误从而引发宇宙毁灭(我们当然不希望这种情况发生),也可能是我们调用的某个函数以我们未能预见或不愿处理的方式无法满足其自身后续条件……在前面的章节中,我们探讨了内存表示的基本概念(什么是对象、引用、指针等),如果以不当方式偏离良好编程实践会面临哪些陷阱,以及如何以受控且规范的方式欺骗类型系统——所有这些知识都将在本书后续内容中发挥作用。

2025-07-09 09:54:09 839

原创 C++ 内存管理:3 强制转换与 cv 限定

而 C 风格的类型转换(在其他语言中也能见到)在意图表达上要模糊得多,正如我们将在本章后面看到的,在 C++这样具有丰富类型系统的语言中,它可能会执行不恰当的转换。,这是一种新的类型转换方式,可用于将比特位从一个对象复制到另一个相同宽度的对象,在此过程中会启动目标对象(及其包含的任何子对象)的生命周期,只要源类型和目标类型都是可平凡复制的。以前文提到的将整数转换为四字节数组为例——如果目的是便于寻址单个字节,你必须意识到整数的字节序取决于平台,同时编写的代码很可能是不可移植的,除非采取某些谨慎的措施。

2025-07-09 09:46:43 569

原创 C++ 内存管理:2 需要注意的事项

请注意,值为 0 的指针并不意味着“指向地址零”,因为该地址本身是完全有效的,并且在许多平台上都是这样使用的。后一个例子对我们的研究很有意义:调试版本可能会用可识别的位模式填充新分配的内存块以辅助调试过程,而使用相同工具集的优化版本则可能让新分配内存块的初始位保持"未初始化"状态(即保留分配时的原始位值),从而获得速度提升。本章探讨了一些底层且有时令人不快的功能设施,我们将偶尔使用它们,目的是竖起适当的"警示牌",提醒我们必须保持责任心,编写合理且正确的代码——尽管我们选择的编程语言给予了极大的自由度。

2025-07-09 09:39:36 666

原创 C++ 内存管理:1 对象、指针与引用

亲爱的读者,你已经可以看出,你正在阅读的这本书将涉及基础主题,因为生命周期和对象占用的存储空间是我们日常程序中使用的这些实体的基本属性。如果我们对不同语言背景的程序员进行调研,询问他们如何定义"对象"这一术语,可能会得到诸如"将变量和相关函数组合在一起的实体" 或"类的实例"这样的回答,这些定义对应着面向对象编程领域中对该术语的传统理解。拷贝构造函数将调用数据成员的拷贝构造函数,拷贝赋值运算符将调用它们的拷贝赋值运算符,析构函数将是平凡的,而由于数据成员属于 基础类型 ,移动操作的行为将与拷贝操作相同。

2025-07-09 09:31:18 727

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 16 性能、部署与维护

最后,我们研究了扩展技术,通过垂直扩展、水平扩展、负载均衡、缓存以及基于云的自动扩展等解决方案,使读者能够应对高流量场景。本章探讨了优化、部署和维护 ASP.NET Core 应用程序的关键策略,重点介绍了确保 Web 应用在高负载下平稳高效运行的必要组件。随着应用程序复杂性增加并需要适当扩展,采用稳健的策略结合良好的软件工程实践来维护项目,对于任何希望在全栈开发领域取得成功的开发者都至关重要。在接下来的章节中,我们将讨论 云环境中的自动扩展,这是一种根据 需求动态调整规模的现代方法。

2025-07-09 09:30:42 673

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 15 全栈项目的规划与架构

例如,使用诸如“必须有、应该有、可以有、不会有 (MoSCoW)”方法之类的工具,团队可以系统地确定功能的优先级,确保他们首先专注于交付项目最有价值的组件。于 2001 年提出, 强调了敏捷实践的核心原则,例如更重视个体和互动而非流程和工具,关注可工作的软件而非详尽的文档,以及重视对变化的响应而非严格遵循计划。其目的是形成对用户需求的基本理解基础。尽管对于这种转变的时机尚未形成普遍共识,但在初始阶段进行周密规划能极大简化未来的架构调整,特别是 当 应用的增长轨迹表明微服务架构将成为理想的 长期演进方向时。

2025-07-09 09:30:07 801

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 14 React 与 ASP.NET Core 集成

将 React 与 ASP.NET Core 集成提供了一种开发可扩展全栈应用程序的强大方法。 React 能与 ASP.NET Core 无缝协作,构建动态、响应式的 Web 应用程序。 本章将指导您完成 React 与 ASP.NET Core 的配置步骤,使创建高性能、高效的全栈应用程序变得更加容易。 您将学习如何在 React 和 ASP.NET Core 之间进行 API 调用,确保这两种 强大技术之间的高效通信。您还将学习如何优化前端和后端,以提供响应式的用户体验,充分利用这两种技术的优势。 这

2025-07-09 09:29:31 747

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 13 Angular 与 ASP.NET Core 集成

我们整合了 Angular 和 ASP.NET Core 中的核心工具与功能,通过路由、双向数据绑定、HTTP 客户端、Bootstrap 以及独立的 Angular 组件,提供了功能完善且视觉吸引的解决方案。在本节中,我们 将搭建一个用于集成 Angular 与 ASP.NET Core 的开发环境,配置 ASP.NET Core 以托管 Angular 应用程序,并创建 Angular 项目的基础结构来 开始开发。例如,我们将有用于显示锻炼列表、添加新锻炼和编辑现有锻炼的路由,以及类似的健身目标路由。

2025-07-09 09:29:09 929

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 12 Vue.js 与 ASP.NET Core 集成

将 Vue.js 与 ASP.NET Core 集成是构建全栈应用的绝佳选择,前端可充分发挥 Vue.js 的响应式特性,而后端则采用 ASP.NET Core 这种可扩展的高性能技术。本节将配置一个 ASP.NET Core 的后端应用,将其集成以服务 Vue 应用,创建调用后端端点的 Vue 组件,并配置 Vue.js 中的路由功能。此外,您可以尝试对这些组件应用 UI 修改,并创建新的 类似端点,来体验 Vue 与 ASP.NET Core Web API 项目之间的集成。

2025-07-09 09:28:48 614

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 11 探索 Vue.js 与框架比较

最后,我们以 Vue.js、Angular 和 React 的详细对比作为本章总结,突出每个 JavaScript 框架的优势与不足,并为您提供所需信息来制定选择标准,从而确定哪个框架最适合满足您的 项目需求。随着本章的学习,您将了解 Vue.js 中的状态管理,掌握如何配置路由和导航,并获取在比较 Vue.js 与 Angular 和 React 时做出明智决策所需的技能。在接下来的步骤中,我们将为一家物流公司创建一个简单的货运跟踪仪表板,这将帮助您很好地理解 Vue.js 应用中的响应式机制如何运作。

2025-07-09 09:28:23 764

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 10 JavaScript 框架简介

JavaScript 框架已成为 Web 开发中不可或缺的工具,为构建高效、大型且复杂的前端应用提供了成熟的解决方案。市场上有多种框架可供选择,每种框架都有其独特的特点。在本章中,我们探讨了三种最流行的 JavaScript 框架的基本概念:Angular、React 和 Vue.js。它们各自都具有构建强大 Web 应用程序的特性,您有机会探索它们的主要功能,以帮助您为特定的 开发需求选择正确的工具。通过本章掌握的技能至关重要,它们能让你开始运用这些框架,并随着后续章节的学习逐步扩展到更复杂的应用场景。

2025-07-09 09:28:01 948

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 9 使用 ASP.NET Core 构建 RESTful 服务——第二部分

这些能力将为使用 ASP.NET Core 构建可靠且健壮的 Web 应用奠定坚实基础,确保您的 API 高效、可扩展,并能轻松处理复杂路由场景。首先,我们将探索复杂路由场景,这将使我们有机会创建和配置灵活的 API 端点,让应用程序能够正确处理来自不同需求客户端的多样化请求场景。这些先进的 ASP.NET Core 路由技术为您提供了多种工具来构建动态且可扩展的 API,使您能够充分利用 ASP.NET Core 在路由方面提供的全部灵活性,从而能够应对复杂的业务需求。将货运详情缓存在内存中。

2025-07-08 11:09:31 621

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 8 使用 ASP.NET Core 构建 RESTful 服务 - 第一部分

我们提供了实际示例和代码片段,帮助您构建一个功能完整的 API,涵盖资源检索、创建、更新和 删除的方法。接着,我们将学习如何创建和配置 REST API,处理各种类型的请求和响应,并实现版本控制和文档管理,使我们的 API 保持组织有序 且用户友好。本章我们介绍了使用 ASP.NET Core 构建 RESTful 服务的基础原则与实践,包括理解 RESTful 原则、创建基本 REST API、处理请求与响应、实现 API 版本控制,以及使用 Swagger 创建全面的 API 文档。

2025-07-08 11:00:18 491

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 7 Blazor 中的高级组件架构

通过掌握如何从 Blazor 调用 JavaScript 以及反向操作,您可以利用现有 JavaScript 库、创建丰富的交互体验,并扩展 Blazor 应用程序的功能。此外,我们将了解如何将 JavaScript 与 Blazor 集成,使您能够利用现有的 JavaScript 库和 API 来增强应用程序功能。在本章中,我们深入探讨了 Blazor 组件架构的高级特性,重点介绍了如何利用.NET 9 中的 Blazor 构建复杂且高性能的应用程序。接着将介绍高级路由和导航功能,包括带参数路由的定义。

2025-07-08 10:50:21 716

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 6 高级 Blazor 开发

本节我们将探讨 Blazor 中的多种状态管理技术,包括组件状态、级联值、依赖注入、本地存储以及状态容器的使用。此外,我们还将介绍状态管理技术,这些技术能确保您的应用程序平稳高效运行,在不同组件和用户交互间保持状态一致性。我们学习了如何开发复杂的 Blazor 组件,管理其生命周期,并运用高效的事件处理技术来创建交互式、动态的 Web 应用程序。本节我们深入探讨了组件生命周期的细节,以及如何通过将子组件渲染为片段、建立可用于共享状态和数据的参数,以多种方式实现组件间通信 的机制。

2025-07-08 09:29:20 907

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 5 Blazor 入门

在 Blazor 框架中,WebAssembly 作为在浏览器中运行.NET 代码的基础, 让开发者能够充分利用 C#和.NET 的强大功能进行客户端网页开发。凭借与.NET 生态系统的无缝集成以及对开发者体验的高度重视,Blazor 有望彻底改变 Web 应用程序的构建和部署方式,使创建现代化交互式用户体验变得前所未有的简单。通过利用.NET 生态系统的强大功能和熟悉度,Blazor 使开发者能够轻松构建现代化、交互式的 Web 应用程序,同时促进整个 开发技术栈中的代码复用、一致性和可维护性。

2025-07-08 09:16:08 745

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 4 配置与安全

这种从配置到安全的演进过程,充分体现了 ASP.NET Core 框架下应用开发与维护的全面性,使您能够应对构建健壮、安全且可扩展的 Web 应用程序的挑战。这两个方面构成了任何可靠且具有弹性的 Web 应用的支柱,既确保了部署的灵活性,又能防范不断演变的 安全威胁。通过确保应用程序的灵活性、适应性和安全性,开发者能够创建用户可依赖的数字体验,从而在数字领域中培养用户的信心和忠诚度。ASP.NET Core 支持多种认证方案以满足不同应用需求,从传统的基于 cookie 的表单认证到现代的基于令牌的系统。

2025-07-08 09:03:40 879

原创 使用 ASP.NET Core 进行现代全栈 Web 开发: 3 中间件与依赖注入

正如本节所述,ASP.NET Core 中的依赖注入(DI)是一种设计模式,它将依赖项的创建与使用解耦,从而提升代码的模块化程度、可测试性和可维护性。ASP.NET Core 中的 DI 涉及服务的生命周期注册,如。总之,ASP.NET Core 中的中间件是管理 HTTP 请求和响应的核心,确保错误处理、安全性以及与其他服务和组件的集成。同样在.NET 生态中,Unity、Autofac 的引入,以及最终 ASP.NET Core 内置的 DI 支持,都凸显了 DI 在 应用开发中日益增长的重要性。

2025-07-08 08:54:23 762

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除