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

DDD学习笔记四

领域模型的构建

  • 基础领域模型的基本组成有名称、属性、关联、职责、事件和异常

  • 发掘领域概念3种策略:
    1)学习已有系统,重用已有模型
    2)使用分类标签。分类标签来源于领域,需要我们研究一些资料并做一些提炼。从采用5W法开始,即事件(What)、原因(Why)、地点(Where)、时间(When)、人员(Who),之后在其上加以补充
    3)识别名词短语。
    一般情况下,我们会从策略1开始,组织中完全没有之前相关的旧系统的情况并不多见,之后策略2和3结合使用

  • 概念类命名的注意事项如下:
    使用领域术语。记住,模型的首要任务是沟通,使用领域专家熟悉和习惯的名字,即使你认为有更精确的表达方式。
    对于相同的名称但不同场景的情况,应该将最易于识别的名字留给最常用的类型,比如“订单”可以在支付场景和配送场景中使用,
    应该 把它用在支付环节而不是配送环节,因为支付环节更加的核心,更符合这个名字的本身的含义,业务逻辑也更复杂。
    尽量避免使用编程语言中的保留字,比如“集合”。
    不要凭空创造概念或添加前缀和后缀来区分名称,这只会增加沟通的障碍。始终以领域专家和系统用户喜欢的方式进行沟通,
    这是DDD的内在特殊要求

  • 创建关联
    阅读导向箭头“►”是可选的,它指示关联名称阅读的方向,并不表示可见性或导航的方向
    关联表示为类之间的连线,关联的末端可以包含多重性
    采用“主谓宾”结构为关联命名,连接线上只显示谓语
    关联符号包含“0”时,不管是“”“0…”,还是“0…1”都客观上意味着这是一种可选关联,并不一定发生
    关联类允许将关联本身作为类,并且使用属性、操作和其他特性对其进行建模。
    在这里插入图片描述
    在这里插入图片描述

  • 使用关联类标准
    1)通用语言中就有关联类的概念,如×××合同,用来约束两个模型之间的关系。
    2)模型的某些属性与关联相关,这些属性脱离关联将显得无意义。
    3)关联类的实例具有依赖于关联的生命周期,如合同期、项目时长等。
    4)两个模型之间有多对多关联,并且存在与关联本身相关的信息。
    其中第3条特征明显,可作为一个常用的标准。

  • 关联简化
    1)限制关联数量
    2)限制关联方向
    3)使用限定关联

  • 定义属性
    当领域模型需要记住信息时,引入属性,
    属性的3种类:基本类型、通用的值对象和项目中的其他业务对象(前两种类型一般写在类图框中,而第三种使用关联来表达)
    在这里插入图片描述

  • 使用方法:
    该操作的访问速度较慢。为了避免线程阻塞,甚至需要考虑为该操作提供一个异步版本,那么将其建模为属性就可能导致开销过大。
    特别是那些访问网络或文件系统的操作,更应该使用方法而非属性。
    该操作是一个转换操作,如toString()方法。
    该操作每次返回的值不同,即使传入的参数不变。比如,Guid().NewGuid()方法每次都返回不同的值。
    该操作有严重的、能观察到的副作用,比如抛出异常。
    该操作返回一个集合。返回集合的属性容易误导用户,比如,Employees和Addresses等属性就是不合适的。
    需要指定参数才能访问的属性,如前面多个地址的例子。
    除以上情况外,请尽量使用属性。

  • 使用属性建模时,还有一些细节值得注意:
    1)如果不想让调用方改变属性的值,要创建只读属性。
    2)不要提供只写属性,也不要让设置方法的存取范围比获取方法更广。如果一个属性值没有获取的意义,比如配置资源地址,此时应该提供set方法而不是属性。
    3)要为所有属性提供默认值。技术上默认值不会导致异常或安全漏洞,业务上也往往体现一定的“默认”的领域含义
    4)要允许用户以任意顺序来设定属性的值
    5)如果属性设置方法抛出异常,则要保留属性原来的值。这在业务上也是合理的。
    6)不要在属性获取方法中抛出任何异常,这会令人感到困惑。如果确实存在这种可能性,请改用方法

  • 分配职责
    业务职责则由其方法来定义

-模型层但职责:分配策略-信息专家模式
在信息专家模式中,职责分配给了具有完成该职责所需信息的模型。信息包括模型的各种成员,如字段、属性、关联,以及对资源的可见性等。
如果一个对象能够承担相应的职责,那么最好不要让更大的、具有更多信息的对象来承担这些职责
领域逻辑不要与技术架构混为一谈,领域逻辑要与任何持久化机制解耦

  • 创建领域服务完成职责
    如果一个职责需要的信息无法由一个模型提供,应该怎么处理?可以分为以下两种情况:
    1)增加关联以获取必要的信息。
    2)使用领域服务。
    当一个职责发现采用信息专家模式没有找到合适的模型时,需考虑创建一个领域服务模型是否更好

  • 方法是职责和操作的实现,方法参数设计的注意事项如下
    1)应使用类层次中最接近基类的类型来作为方法参数,并保证该类型能够提供成员所需信息。这样做可以使得方法的适用范围更广,因为子类能取代任何基类的位置,即子类可以传入以基类定义的参数,但反过来则不行
    2)不要将指针、指针数组和多维数组作为方法的参数。即使不在DDD团队中,且代码要保证优秀可读性的场合,指针和多维数组也是难以应对的。可以对方法进行重新设计以避免使用这些类型作为参数。
    3)尽量不使用输出参数,如out、ref关键字修饰的参数。这会增加代码的复杂性,给领域模型的验证和测试带来干扰。同理,尽量使用值对象而不是实体类型的参数,因为值对象没有状态,传入的是一个副本。
    4)可以使用重载(Overload)机制来简化方法的命名。重载即模型拥有很多同名的方法,但它们的参数不同,根据传入的参数匹配对应的方法。不要增加无谓的名称,以减少沟通的难度。使用重载机制让方法的命名更加顺畅。

  • 触发事件

  • 领域事件是一个特殊的模型成员。领域模型状态的改变(属性)或者执行操作时达到某些判定条件,都可能触发事件
    (1)事件的捕获
    领域事件是领域专家所关心的发生在领域中的有影响力的事件。将领域中发生的活动建模为一系列离散事件,每个事件都用领域对象来表示,领域事件是领域模型的组成部分,用于表示领域中所发生的事。
    定义有两个层面:一是纯业务层面,领域事件来源于领域专家的通用语言,具有业务含义;二是设计层面,领域事件可以建模为一个领域对象,但这种对象是一种不可变类,也就是值对象,它将成为其他领域对象的一部分
    事件的命名是过去时态,事件的载体为类图,其中包含的属性称为事件参数,它们是该事件消费者需要的关于事件的信息
    在这里插入图片描述

  • 领域事件的3个本质:
    操作因果关系的体现。
    为未来处理逻辑留下的逻辑占位符。
    提供操作的异步性。

  • 领域事件的作用。
    保证模型间的数据一致性。
    替换批处理操作。
    系统集成。
    在这里插入图片描述

  • 处理异常
    异常是一种特殊的意外情况处理机制
    异常处理是领域模型要考虑的一部分,原因在于模型的责任不可能无限大。在遇到自己处理能力之外的情况时,要采用异常机制报告错误,并将处理权转交。异常就是这样一种机制,某种程度上,它可以保证领域模型的纯洁性,让其只关注于核心逻辑,而不用包含一堆意外情况处理代码

  • 自定义异常的注意点:
    要避免太深的继承层次,一般Exception类即可满足要求。
    一定要以Exception作为后缀。
    要使异常可序列化。为了使异常能够跨应用程序和跨远程边界工作,这样做是必须的。
    要提供以下常用的构造函数。
    在这里插入图片描述
    要把与安全性有关的信息保存在私有的异常中,确保只有可信赖的代码才能得到该信息。比如数据库连接抛出的各类异常,可能会泄露你的表命名、表结构等信息。
    可以为异常定义属性,这样就能从程序中取得与异常有关的额外信息。

  • 抛出异常的注意点如下:
    在领域模型中,要使用异常来处理意外情况而不是错误码。
    不要在能处理的正常流程中抛出异常。
    要为所有的自定义异常构建一份文档,使开发人员能够掌握,让他们能使用最合理、最具针对性的异常,比如不要使用“集合超容”来描述“购物车已满”。
    在异常消息中避免使用感叹号和问号。
    注意异常消息的本地化。

除了异常本身的类图,也可以在相关领域模型中列出可能抛出的异常
在这里插入图片描述

典型的领域逻辑建模

  • 领域逻辑主要包括规则与约束、流程与分支、验证与筛选、算法与计算、时间与空间、有状态与无状态、同步与异步等
    在模型中,使用大括号{}来标记规则
    在这里插入图片描述

  • 规则与约束

    当规则和判断条件众多时,把这个约束提取到一个单独的方法中,并用具有业务含义的名称来对其命名

    约束既可以放在模型内部,又可以单独将其提炼出来作为策略类或领域服务
    需要单独提炼的验证规则的特点:
    验证约束所需的信息并不属于这个对象。
    相关规则在多个对象中出现,造成了代码重复,违反了“一处一个事实”原则。
    很多领域逻辑是围绕这些约束展开的,它的层级不适合下放到实体或值对象的方法中。将约束单独作为一个模型,可以避免重要的领域概念被淹没,使通用语言更加顺畅

  • 流程与分支

业务流程建模对应的是UML中的活动图
在这里插入图片描述
活动图对应的是协作图或时序图而不可能是类图,它们展示了一个用例的参与对象,以及对象之间传递的消息
在这里插入图片描述
,协作图中的节点已经变成了各个领域模型,其中的逻辑分支用中括号[]来标记,如图5-32中的[支付成功]。在业务流程图的基础上映射绘制出来的协作图,不仅能交流业务,还能直接指导实现开发,是对流程与分支建模的最理想模型。

  • 验证与筛选
    规格模式是将一组判断条件封装成一个单独的值对象,名称中一般带有形容词,表达了很强的领域含义,代表客户对于程度的看法,如“大额存单”“过期发票”“优秀成绩”等。如图5-34所示,这个值对象会有一个是否满足的判断方法(一般是IsSatisfiedBy()函数),用于校验某个对象是否满足该规格所表达的条件,只返回真假校验。多个规格对象还可以灵活组装,生成新的规格对象。
    在这里插入图片描述
    在业务逻辑上,规格与约束的不同点在于,约束是必须满足的,而规格只是从集合中筛选或验证符合条件的成员
    规格的用法主要有以下3种:
    1)验证对象,检查它是否满足某些条件。
    2)筛选符合条件的对象。
    3)创建满足某种条件的新对象

  • 算法与计算
    算法逻辑涉及领域的核心逻辑,其本身往往是内聚的,将其独立出来是最值得倡导的建模实践,如复杂的候选人排名规则、销售佣金的计算策略、保单的风险评估等。算法逻辑独立出来后,避免了复杂算法对领域模型的干扰,领域中的其他模型就可以专注于表达“做什么”的逻辑,而把“如何做”的复杂细节转移给了算法模型
    领域中的算法可以建模为算法对象,常见于实时系统、科学和工程领域中。如果算法需要的信息都在实体或值对象内部,可以将该算法建模为该对象的操作。但如果该算法内聚且明显独立于领域对象而变化,那就不适合绑定一个领域对象,要显式地将其建模为算法对象,而不是隐藏在模型和代码深处。算法对象声明关键字是<>,标记在类图或协作图上以表明身份
    算法对象经常会封装计算其算法所需要的数据,这些数据可以是初始化数据、中间结果或阈值数据。算法对象的主要职责是执行算法,不要把任何业务协调职责放入其中
    在这里插入图片描述
    将算法封装为领域服务是最佳选项,尤其是涉及多个实体类型、返回值为值对象的计算时。
    将领域计算逻辑单独建模而不放在其他业务对象内的优点如下:
    1)不给领域模型增加负担。如果计算所需的信息超出了该对象的范围,又会增加不必要的耦合。
    2)关于计算逻辑的领域概念变得更加清晰,单独的计算规则一般都是核心域范畴,单独出来可以增加通用语言的词汇。
    建模为操作符重载
    操作符重载就是让领域模型可以像基本类型那样进行加(+)、减(-)、乘(*)、除(/)操作,还包括等于(==)、大于(>)、小于(<)等比较操作
    当一个类内部出现public static的方法时,应该考虑该方法是继续放在这个类中还是单独成领域服务

  • 时间与空间
    定时约束建模通常遵循以下策略:
    1)对于交互中的每条消息,考虑其开始时间和触发周期。将这个实时特征建模为消息的定时约束。
    2)对于交互中每个值得关注的消息序列,考虑是否有一个相关的最大的相对时间。将这个实时特征加为对该消息的定时约束。
    把系统对时间的要求表示为约束{},并放在对应的消息旁边即可。时间是动态逻辑,只能展示在时序图或协作图上。
    在这里插入图片描述
    计时器对象是由外部计时器激活的控制对象。计时器对象要么自己执行某个动作,要么激活另一个对象来执行期望的动作
    计时器属于应用服务而不是领域服务
    在这里插入图片描述

  • 时效建模 : 时效是指与时间段相关联的信息
    建模的方式是维护与一组时间间隔相关的信息,而不是单个值
    在这里插入图片描述

  • 建模空间指模型在分布式系统中的位置
    在这里插入图片描述

  • 有状态与无状态
    建模为独立模型的状态:
    领域模型具有多个状态,它们会根据一定条件进行转换。
    不同的状态会导致不同的行为。
    未来还可能会增加新的状态。
    最佳方法是对这些状态建模,而不只是用条件语句加以判断

  • 同步与异步

相关文章:

DDD学习笔记四

领域模型的构建 基础领域模型的基本组成有名称、属性、关联、职责、事件和异常 发掘领域概念3种策略&#xff1a; 1&#xff09;学习已有系统&#xff0c;重用已有模型 2&#xff09;使用分类标签。分类标签来源于领域&#xff0c;需要我们研究一些资料并做一些提炼。从采用5W…...

Head First设计模式中的典型设计模式解析与案例分析

Head First设计模式中的典型设计模式解析与案例分析 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 《Head First设计模式》是一本广受欢迎的书籍&#xff0c…...

iptables 防火墙(一)

iptables 防火墙&#xff08;一&#xff09; 一、Linux 防火墙基础防火墙分类 二、iptables 的表、链结构规则表规则链数据包过滤的匹配流程 三、编写防火墙规则iptables 的安装iptables的基本语法规则的匹配条件通用匹配隐含匹配显式匹配 四、总结 在网络安全的世界里&#xf…...

数据库物理结构设计-定义数据库模式结构(概念模式、用户外模式、内模式)、定义数据库、物理结构设计策略

一、引言 如何基于具体的DBMS产品&#xff0c;为数据库逻辑结构设计的结果&#xff0c;即关系数据库模式&#xff0c;制定适合应用要求的物理结构 1、在设计数据库物理结构前&#xff0c;数据库设计人员首先 要充分了解所用的DBMS产品的功能、性能和特点&#xff0c;包括提供…...

QT加载安装外围依赖库的翻译文件后翻译失败的现象分析:依赖库以饿汉式的形式暴露单例接口导致该现象的产生

1、前提说明 VS2019 QtClassLibaryDll是动态库,QtWidgetsApplication4是应用程序。 首先明确:动态库以饿汉式的形式进行单例接口暴露; 然后,应用程序加载动态库的翻译文件并进行全局安装; // ...QTranslator* trans = new QTranslator();//qDebug() << trans->…...

13_旷视轻量化网络--ShuffleNet V2

回顾一下ShuffleNetV1:08_旷视轻量化网络--ShuffleNet V1-CSDN博客 1.1 简介 ShuffleNet V2是在2018年由旷视科技的研究团队提出的一种深度学习模型&#xff0c;主要用于图像分类和目标检测等计算机视觉任务。它是ShuffleNet V1的后续版本&#xff0c;重点在于提供更高效的模…...

Linux系统编程--进程间通信

目录 1. 介绍 1.1 进程间通信的目的 1.2 进程间通信的分类 2. 管道 2.1 什么是管道 2.2 匿名管道 2.2.1 接口 2.2.2 步骤--以父子进程通信为例 2.2.3 站在文件描述符角度-深度理解 2.2.4 管道代码 2.2.5 读写特征 2.2.6 管道特征 2.3 命名管道 2.3.1 接口 2.3.2…...

docker-本地部署-后端

前置条件 后端文件 这边是一个简单项目的后端文件目录 docker服务 镜像文件打包 #命令行 docker build -t author/chatgpt-ai-app:1.0 -f ./Dockerfile .红框是docker所在文件夹 author&#xff1a;docker用户名chatgpt-ai-app&#xff1a;打包的镜像文件名字:1.0 &#…...

TLS + OpenSSL + Engine + PKCS#11 + softhsm2 安全通信

引擎库路径只有在 /lib 下才能被 "LOAD" 识别到&#xff0c;OpenSSL的ReadMe给的示例在/lib&#xff0c;大概是在构建OpenSSL时默认的configure指定了lib路径 // #define PKCS11_ENGINE_PATH "/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so" #define …...

Unity实现简单的MVC架构

文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;框架是一种架构模式&#xff0c;用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构&#xff0c;提高代码的可维护性…...

【简单讲解下OneFlow深度学习框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

FastGPT 调用Qwen 测试Hello world

Ubuntu 安装Qwen/FastGPT_fastgpt message: core.chat.chat api is error or u-CSDN博客 参考上面文档 安装FastGPT后 登录&#xff0c; 点击右上角的 新建 点击 这里&#xff0c;配置AI使用本地 ollama跑的qwen模型 问题&#xff1a;树上有3只鸟&#xff0c;开了一枪&#…...

Golang-GMP

GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的&#xff0c;为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的&#xff0c;为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率&#xff0c;但多进程、多线程都存在局限性。比如多进程通过时…...

【PythonWeb开发】Flask自定义模板路径和静态资源路径

在大型的 Flask 项目中&#xff0c;确实可能会有多个子应用&#xff08;Blueprints&#xff09;&#xff0c;每个子应用可能都有自己的静态文件和模板。为了更好地管理和组织这些资源&#xff0c;可以使用static_folder 和template_folder 属性来统一管理。必须同时设置好主应用…...

Java对象创建过程

在日常开发中&#xff0c;我们常常需要创建对象&#xff0c;那么通过new关键字创建对象的执行中涉及到哪些流程呢&#xff1f;本文主要围绕这个问题来展开。 类的加载 创建对象时我们常常使用new关键字。如下 ObjectA o new ObjectA();对虚拟机来讲首先需要判断ObjectA类的…...

Does a vector database maintain pre-vector chunked data for RAG systems?

题意&#xff1a;一个向量数据库是否为RAG系统维护预向量化分块数据&#xff1f; 问题背景&#xff1a; I believe that when using an LLM with a Retrieval-Augmented Generation (RAG) approach, the results retrieved from a vector search must ultimately be presented…...

Rust-11-错误处理

Rust 将错误分为两大类&#xff1a;可恢复的&#xff08;recoverable&#xff09;和 不可恢复的&#xff08;unrecoverable&#xff09;错误。对于一个可恢复的错误&#xff0c;比如文件未找到的错误&#xff0c;我们很可能只想向用户报告问题并重试操作。不可恢复的错误总是 b…...

自动化测试:使用Postman进行接口测试与脚本编写

Postman 是一种流行的 API 测试工具&#xff0c;广泛应用于开发和测试过程中。它不仅可以用于手动测试&#xff0c;还支持自动化测试和脚本编写&#xff0c;以确保 API 的可靠性和性能。本文将详细介绍如何使用 Postman 进行接口测试与脚本编写&#xff0c;帮助你更高效地进行自…...

ONLYOFFICE 8.1 桌面编辑器测评:引领数字化办公新潮流

目录 前言 下载安装 新功能概述 1.PDF 编辑器的改进 2. 演示文稿中的幻灯片版式 3.语言支持的改进 4. 隐藏“连接到云”板块 5. 页面颜色设置和配色方案 界面设计&#xff1a;简洁大方&#xff0c;操作便捷 性能评测&#xff1a;稳定流畅&#xff0c;高效运行 办公环…...

基于大语言模型LangChain框架:知识库问答系统实践

ChatGPT 所取得的巨大成功&#xff0c;使得越来越多的开发者希望利用 OpenAI 提供的 API 或私有化模型开发基于大语言模型的应用程序。然而&#xff0c;即使大语言模型的调用相对简单&#xff0c;仍需要完成大量的定制开发工作&#xff0c;包括 API 集成、交互逻辑、数据存储等…...

解锁Transformer的鲁棒性:深入分析与实践指南

&#x1f6e1;️ 解锁Transformer的鲁棒性&#xff1a;深入分析与实践指南 Transformer模型自从由Vaswani等人在2017年提出以来&#xff0c;已经成为自然语言处理&#xff08;NLP&#xff09;领域的明星模型。然而&#xff0c;模型的鲁棒性——即模型在面对异常、恶意或不寻常…...

mybatis#号和$区别

在MyBatis中&#xff0c;#{}和${}都是用于实现动态SQL的占位符&#xff0c;但它们在使用场景和安全性上有明显的区别&#xff1a; 用途区别&#xff1a; #{}主要用于传递接口传输过来的具体数据&#xff0c;如参数值&#xff0c;它可以防止SQL注入&#xff0c;因为MyBatis会…...

AI绘画 Stable Diffusion【实战进阶】:图片的创成式填充,竖图秒变横屏壁纸!想怎么扩就怎么扩!

大家好&#xff0c;我是向阳。 所谓图片的创成式填充&#xff0c;就是基于原有图片进行扩展或延展&#xff0c;在保证图片合理性的同时实现与原图片的高度契合。是目前图像处理中常见应用之一。之前大部分都是通过PS工具来处理的。今天我们来看看在AI绘画工具 Stable Diffusio…...

Linux内核 -- 汇编结合ko案例之PMU获取cpu cycle技术

ARMv7汇编实现周期计数读取与清空 本文档详细描述了如何在ARMv7平台上使用汇编语言编写周期计数器读取与清空函数&#xff0c;如何在内核模块中导出这些函数供其他模块调用&#xff0c;以及如何使用Netlink接口供用户态程序进行调用。 1. 汇编函数实现 首先&#xff0c;编写…...

探索 Symfony 框架:工作原理、特点及技术选型

目录 1. 概述 2. Symfony 的工作原理 2.1 MVC 架构 2.2 前端控制器模式 2.3 路由机制 2.4 依赖注入容器 2.5 事件驱动架构 3. Symfony 的特点 3.1 高度可扩展性 3.2 强大的社区支持和生态系统 3.3 优秀的性能和可伸缩性 3.4 严格的代码规范和最佳实践 4. Symfony …...

从万里长城防御体系看软件安全体系建设@安全历史03

长城&#xff0c;是中华民族的一张重要名片&#xff0c;是中华民族坚韧不屈、自强不息的精神象征&#xff0c;被联合国教科文组织列入世界文化遗产名录。那么在古代&#xff0c;长城是如何以其复杂的防御体系&#xff0c;一次次抵御外族入侵&#xff0c;而这些防御体系又能给软…...

ISO 19110操作要求类中的/req/operation/formal-definition详细解释

/req/operation/formal-definition 要求: 每个要素操作实体必须具有一个形式定义&#xff08;formal definition&#xff09;&#xff0c;该定义应明确描述操作的行为和影响。 具体解释 定义 要素操作实体&#xff08;feature operation entity&#xff09;&#xff1a;这…...

豆包大语言模型API调用错误码一览表

本文介绍了您可能从 API 和官方 SDK 中看到的错误代码。 http code说明 400 原因&#xff1a;错误的请求&#xff0c;例如缺少必要参数&#xff0c;或者参数不符合规范等 解决方法&#xff1a;检查请求后重试 401 原因&#xff1a;认证错误&#xff0c;代表服务无法对请求进…...

AI辅助设计:如何通过机器学习革新创意工作流程

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法&#xff0c;大数据&#xff0c;深度学习 &#x1f492; 公众号…...

轻松解锁电脑强悍性能,4000MHz的玖合星舞 DDR4 内存很能打

轻松解锁电脑强悍性能&#xff0c;4000MHz的玖合星舞 DDR4 内存很能打 哈喽小伙伴们好&#xff0c;我是Stark-C~ 很多有经验的电脑玩家在自己DIY电脑选购内存条的时候&#xff0c;除了内存总容量&#xff0c;最看重的参数那就是频率了。内存频率和我们常说的CPU主频一样&…...

SpringBoot | 使用jwt令牌实现登录认证,使用Md5加密实现注册

对于登录认证中的令牌&#xff0c;其实就是一段字符串&#xff0c;那为什么要那么麻烦去用jwt令牌&#xff1f;其实对于登录这个业务&#xff0c;在平常我们实现这个功能时&#xff0c;可能大部分都是通过比对用户名和密码&#xff0c;只要正确&#xff0c;就登录成功&#xff…...

Springboot基于Redis的高性能分布式缓存数据库的实现与实例

一、引言 在现代的分布式系统和高并发应用中&#xff0c;缓存机制显得尤为重要。Redis作为一种开源&#xff08;BSD许可&#xff09;的内存键值存储&#xff0c;因其高性能、丰富的数据结构和多样化的应用场景&#xff0c;成为开发者们的首选。在这篇博客中&#xff0c;我们将…...

防止多次点击,vue的按钮上做简易的防抖节流处理

话不多说,上个视频,看看是不是你要的效果 防抖节流 1.创建一个directive.js // directive.js export default {install(Vue) {// 防重复点击(指令实现)Vue.directive(repeatClick, {inserted(el, binding) {el.addEventListener(click, () > {if (!el.disabled) {el.disabl…...

云计算【第一阶段(21)】Linux引导过程与服务控制

目录 一、linux操作系统引导过程 1.1、开机自检 1.2、MBR引导 1.3、GRUB菜单 1.4、加载 Linux 内核 1.5、init进程初始化 1.6、简述总结 1.7、初始化进程centos 6和7的区别 二、排除启动类故障 2.1、修复MBR扇区故障 2.1.1、 实验 2.2、修复grub引导故障 2.2.1、实…...

Google 发布最新开放大语言模型 Gemma 2,现已登陆 Hugging Face Hub

Google 发布了最新的开放大语言模型 Gemma 2&#xff0c;我们非常高兴与 Google 合作&#xff0c;确保其在 Hugging Face 生态系统中的最佳集成。你可以在 Hub 上找到 4 个开源模型 (2 个基础模型和 2 个微调模型) 。发布的功能和集成包括&#xff1a; Hub 上的模型https://hf.…...

智能分析赋能等保:大数据技术在安全审计记录中的应用

随着信息技术的飞速发展&#xff0c;大数据技术在各行各业中的应用愈发广泛&#xff0c;特别是在网络安全领域&#xff0c;大数据技术为安全审计记录提供了强有力的支撑。本文将深入探讨智能分析如何赋能等保&#xff08;等级保护&#xff09;&#xff0c;以及大数据技术在安全…...

Django中,update_or_create()

在Django中&#xff0c;可以使用update_or_create()方法来更新现有记录或创建新记录。该方法接受一个字典作为参数&#xff0c;用于指定要更新或创建的字段和对应的值。 update_or_create()方法的语法如下&#xff1a; 代码语言&#xff1a;python obj, created Model.obje…...

每日一学(1)

目录 1、ConCurrentHashMap为什么不允许key为null&#xff1f; 2、ThreadLocal会出现内存泄露吗&#xff1f; 3、AQS理解 4、lock 和 synchronized的区别 1、ConCurrentHashMap为什么不允许key为null&#xff1f; 底层 putVal方法 中 如果key || value为空 抛出…...

SpringMVC(1)——入门程序+流程分析

MVC都是哪三层&#xff1f;在Spring里面分别对应什么&#xff1f;SpringMVC的架构是什么&#xff1f; 我们使用Spring开发JavaWeb项目&#xff0c;一般都是BS架构&#xff0c;也就是Browser&#xff08;浏览器&#xff09;-Server&#xff08;服务器&#xff09;架构 这种架构…...

成绩发布背后:老师的无奈与痛点

在教育的广阔天地里&#xff0c;教师这一角色承载着无数的期望与责任。他们不仅是知识的传播者&#xff0c;更是学生心灵的引路人。而对于班主任老师来说&#xff0c;他们的角色更加多元&#xff0c;他们不仅是老师&#xff0c;还必须是“妈妈”。除了像其他老师一样备课、上课…...

MySQL 索引之外的相关查询优化总结

在这之前先说明几个概念&#xff1a; 1、驱动表和被驱动表&#xff1a;驱动表是主表&#xff0c;被驱动表是从表、非驱动表。驱动表和被驱动表并非根据 from 后面表名的先后顺序而确定&#xff0c;而是根据 explain 语句查询得到的顺序确定&#xff1b;展示在前面的是驱动表&am…...

EE trade:贵金属投资的优点及缺点

贵金属(如黄金、白银、铂金和钯金)一直以来都是重要的投资和避险工具。它们具有独特的物理和化学特性&#xff0c;广泛应用于各种行业&#xff0c;同时也被视为财富储备。在进行贵金属投资时&#xff0c;了解其优点和缺点对于做出明智的投资决策至关重要。 一、贵金属投资的优…...

python工作目录与文件目录

工作目录 文件目录&#xff1a;文件所在的目录 工作目录&#xff1a;执行python命令所在的目录 D:. | main.py | ---data | data.txt | ---model | | model.py | | train.py | | __init__.py | | | ---nlp | | | bert.py | …...

可信和可解释的大语言模型推理-RoG

大型语言模型&#xff08;LLM&#xff09;在复杂任务中表现出令人印象深刻的推理能力。然而&#xff0c;LLM在推理过程中缺乏最新的知识和经验&#xff0c;这可能导致不正确的推理过程&#xff0c;降低他们的表现和可信度。知识图谱(Knowledge graphs, KGs)以结构化的形式存储了…...

秋招季的策略与行动指南:提前布局,高效备战,精准出击

6月即将进入尾声&#xff0c;一年一度的秋季招聘季正在热火进行中。对于即将毕业的学生和寻求职业发展的职场人士来说&#xff0c;秋招是一个不容错过的黄金时期。 秋招的序幕通常在6月至9月间拉开&#xff0c;名企们纷纷开启网申的大门。在此期间&#xff0c;求职备战是一个系…...

Java并发编程-wait与notify详解及案例实战

文章目录 概述wait()notify()作用注意事项用wait与notify手写一个内存队列wait与notify的底层原理:monitor以及wait_setMonitor(监视器)Wait Set(等待集合)Wait() 原理Notify() / NotifyAll() 原理注意事项wait与notify在代码中使用时的注意事项总结案例实战:基于wait与not…...

204.贪心算法:分发饼干(力扣)

以下来源于代码随想录 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {// 对孩子的胃口进行排序sort(g.begin(), g.end());// 对饼干的尺寸进行排序sort(s.begin(), s.end());int index s.size() - 1; // 从最大的饼…...

AI奥林匹克竞赛:Claude-3.5-Sonnet对决GPT-4o,谁是最聪明的AI?

目录 实验设置 评估对象 评估方法 结果与分析 针对学科的细粒度分析 GPT-4o vs. Claude-3.5-Sonnet GPT-4V vs. Gemini-1.5-Pro 结论 AI技术日新月异&#xff0c;Anthropic公司最新发布的Claude-3.5-Sonnet因在知识型推理、数学推理、编程任务及视觉推理等任务上设立新…...

【C++】const修饰成员函数

const修饰成员函数 常函数&#xff1a; 成员函数后加const后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后&#xff0c;在常函数中依然可以修改 class Animal { public:void fun1(){//这是一个普通的成员函数 }void fun2…...

基于模糊神经网络的时间序列预测(以hopkinsirandeath数据集为例,MATLAB)

模糊神经网络从提出发展到今天,主要有三种形式&#xff1a;算术神经网络、逻辑模糊神经网络和混合模糊神经网络。算术神经网络是最基本的&#xff0c;它主要是对输入量进行模糊化&#xff0c;且网络结构中的权重也是模糊权重&#xff1b;逻辑模糊神经网络的主要特点是模糊权值可…...

day02-广播机制

广播机制 广播是numpy对不同形状的数组进行数值计算的方式&#xff0c;对数组的算术运算通常在相应的元素上进行 1.如果两个数组a和b形状相同&#xff0c;即满足a.shape b.shape&#xff0c;那么a*b的结果就是a与b数组对应位相乘。这要求维数相同且各维度的长度相同 a np.a…...

重保期间的网站安全防护:网站整站锁的应用与实践

标题&#xff1a;重保期间的网站安全防护&#xff1a;网站整站锁的应用与实践 一、引言 在重大活动或事件&#xff08;通常被称为“重保”&#xff09;期间&#xff0c;网站的安全问题尤为突出。由于此时网站的访问量和关注度可能达到高峰&#xff0c;因此也成为了黑客攻击的…...

国产音频放大器工作原理以及应用领域

音频放大器是在产生声音的输出元件上重建输入的音频信号的设备&#xff0c;其重建的信号音量和功率级都要理想&#xff1a;如实、有效且失真低。音频范围为约20Hz&#xff5e;20000Hz&#xff0c;因此放大器在此范围内必须有良好的频率响应&#xff08;驱动频带受限的扬声器时要…...

Java 7新特性深度解析:提升效率与功能

文章目录 Java 7新特性深度解析&#xff1a;提升效率与功能一、Switch中添加对String类型的支持二、数字字面量的改进三、异常处理&#xff08;捕获多个异常&#xff09;四、增强泛型推断五、NIO2.0&#xff08;AIO&#xff09;新IO的支持六、SR292与InvokeDynamic七、Path接口…...

大模型技术方向夏令营1期-对话分角色要素提取挑战赛

#AI夏令营 #Datawhale #夏令营 一、 baseline 跑通 Baseline 本身挑战性有限&#xff0c;关键是熟悉 LLM-centric 相关任务 coding 层面的流程方法&#xff0c;比如: 大模型 API&#xff08;这里为科大讯飞 Spark&#xff09;调用token消耗的理解如何调用大模型实现针对给定…...

编译器的控制流图分析

1&#xff0c;建立感性认识 1.1 源码 hello.c int x 10; int y 11; int main(){int z 12;for (int i 0;i < 10;i){z * x * y;}if(z>7.0)z1.0f;elsez 2.0f;return 0; }1.2 编译 2005 sudo apt-get install -y graphviz-doc libgraphviz-dev graphviz2034 ../ex_…...

充电更快!外观更帅!新款起亚EV6亮相!

谈起起亚EV6这一款车,相信国内的网友还是有些陌生,毕竟这是一款23年才在国内亮相的车型,但早在2021年,这一款车型就已经亮相了。在2024年5月,起亚推出了新款EV6。新车在各方面都有着大变化,一起来看看!新款EV6的升级部分主要体现在细节上,例如在前脸部分,新的大灯组造…...

领克07EM-P正式上市售价16.98万-18.98万元

领克07 EM-P 官方指导售价 车型 售价 126长续航 Pro 16.98 126长续航 Halo 17.98 126长续航 Ultra 18.98 制表: Internet Info Agency 除此之外,领克07 EM-P还推出了多重上市权益,包括选配基金礼:至高7000元选配基金,选装“高阶智驾…...

电动新浪潮:长安马自达CX-50与深蓝S7设计美学的较量

在电动化的浪潮中,汽车不仅是代步工具,更是个性与品味的展现。今天,我们将深入探讨两款电动SUV——长安马自达CX-50与深蓝S7,它们如何在设计美学上各领风骚,又如何在电动化的大潮中各显神通。随着环保理念的深入人心和政策的推动,电动车市场迎来了爆发式增长。消费者不再…...

npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本

安装npm时出现如下提示&#xff1a; 出现这个错误信息&#xff0c;是系统禁止执行PowerShell的脚本。 出现的原因是&#xff0c;系统默认的执行策略是Restricted&#xff08;默认设置&#xff09;&#xff0c;限制执行&#xff0c;所以会出现如上提示。 解决方法&#xff1a;…...

【openlayers系统学习】1.6下载要素,将要素数据序列化为 GeoJSON并下载

六、下载要素 下载要素 上传数据并编辑后&#xff0c;我们想让用户下载结果。为此&#xff0c;我们将要素数据序列化为 GeoJSON&#xff0c;并创建一个带有 download​ 属性的 <a>​ 元素&#xff0c;该属性会触发浏览器的文件保存对话框。同时&#xff0c;我们将在地图…...

vmware中Ubuntu虚拟机和本地电脑Win10互相ping通

初始状态 使用vmware17版本安装的Ubuntu的20版本&#xff0c;安装之后什么配置都要不懂&#xff0c;然后进行下述配置。 初始的时候是NAT&#xff0c;没动的. 设置 点击右键编辑“属性” 常规选择“启用”&#xff1a; 高级选择全部&#xff1a; 打开网络配置&#xff0c;右键属…...