机器学习5
1.1 决策树的定义
- 决策树是用于分类和回归的机器学习算法。它通过一系列的“是或否”的决策来分类数据。每个决策是基于数据的某个属性进行的,如“色泽是青绿吗?”。
- 决策树的核心是通过树状结构,将一个复杂的问题逐步拆解为多个简单的二元问题,最终通过一系列决策得出结果。
示例:假设我们要判断一个水果是否是苹果。可能的决策过程包括:
- 颜色是红色吗?如果是,继续判断;
- 形状是圆的吗?如果是,继续判断;
- 它的味道是甜的吗?如果都是,那么我们可以说它是苹果。
1.2 决策树的基本元素
- 根节点:根节点是决策树的起点,它包含了所有数据。在决策树中,所有的分类判断从根节点开始。
- 内部节点:每个内部节点代表对某个属性的判断。例如,“颜色是否为红色”可以是一个内部节点。
- 叶节点:叶节点代表最终的分类结果。例如,经过一系列判断后,叶节点会告诉我们“是苹果”或“不是苹果”。
示例:
颜色/ \红色 其他/ \形状 不是苹果/ \
圆 其他|
味道|
甜 -> 苹果
在这个例子中,我们通过颜色、形状和味道的逐步判断,最终得出是否是苹果的结论。
1.3 决策树的生成步骤
决策树生成过程基于“分而治之”的策略,通过不断地划分数据集,逐步建立决策规则。
-
输入:给定一个训练数据集 (D = {(X_1, Y_1), (X_2, Y_2), \dots, (X_m, Y_m)}) 和属性集 (A = {a_1, a_2, \dots, a_n})。
- 训练数据集包含特征和标签,如 (X_1) 是样本的属性,(Y_1) 是它的分类结果。
- 属性集是可用来划分样本的特征,比如色泽、根蒂等。
-
生成节点:从根节点开始,递归创建决策树。如果节点包含的样本都属于同一类别(如都是“好瓜”),那么将该节点标记为叶节点,并终止进一步划分。
-
选择划分属性:当节点中的样本不属于同一类别时,需要选择一个最优的属性来划分样本。例如,如果属性“色泽”对样本的分类效果最好,选择它来划分数据。
-
递归生成子节点:对于每个子节点,重复步骤2和3,直到所有节点都成为叶节点或无法继续划分为止。
1.4 决策树递归返回的三种情形
- 样本同类:如果当前节点中所有样本属于同一类(如全部是好瓜),则该节点直接标记为叶节点,无需继续划分。
- 属性无法再划分:如果样本在当前所有属性上的取值相同,则无法继续划分。这种情况下,将该节点标记为样本数最多的类。
- 样本集为空:如果某个节点没有样本,则标记为其父节点样本数最多的类别。
示例:假设我们在划分过程中遇到一个节点,包含的所有样本都是“好瓜”,那么这个节点会被标记为“好瓜”,不再进行进一步划分。
递归过程:决策树的生成是一个递归的过程,树会不断地被细化,直到所有节点都无法再进行划分。每次划分时都选择当前最优的属性来进行,这保证了决策树能够尽量准确地分类数据。
1.5 总结与示例
为了更好地理解决策树的流程,我们可以看以下的例子:
-
问题:判断一个水果是否是苹果。
-
属性:
- 颜色:红色、绿色、黄色;
- 形状:圆形、椭圆形;
- 味道:甜、酸。
决策过程如下:
颜色/ \红色 其他/ \形状 不是苹果/ \
圆 其他|
味道|
甜 -> 苹果
在这个决策树中,首先判断颜色,如果是红色则继续判断形状;如果形状是圆的,再判断味道;最终,如果味道是甜的,可以判断为苹果。
2. 划分选择
2.1 信息增益
首先,信息增益的目标是通过某个属性对数据集进行划分,使得划分后的数据集更加“纯净”,即每个子集尽可能只包含同一类别的样本。
我们首先来看 信息熵 的定义:
[
Ent(D) = - \sum_{k=1}^{|Y|} p_k \log_2 p_k
]
这个公式的每一个符号解释如下:
- (Ent(D)):表示数据集 (D) 的 信息熵,是衡量数据集纯度的一个指标。
- (\sum_{k=1}^{|Y|}):这是一个求和符号,表示对 (k) 从 1 到 (|Y|) 进行求和。 (|Y|) 表示数据集中类别的数量。例如,西瓜数据集中有两类(好瓜和坏瓜),所以 (|Y| = 2)。
- (p_k):这是数据集中第 (k) 类样本的比例。例如,如果在数据集中好瓜占 60%,坏瓜占 40%,那么 (p_1 = 0.6),(p_2 = 0.4)。
- (\log_2 p_k):这是 (p_k) 在以 2 为底的对数,表示第 (k) 类的熵值。
公式含义:信息熵是通过计算各个类别在数据集中的占比 (p_k),然后将这些占比进行加权求和,用来衡量整个数据集的不确定性。熵值越大,表示数据集越混乱,类别分布越分散;熵值越小,表示数据集越纯净,样本集中在某一类别。
示例:假设在一个西瓜数据集中,有 60% 是好瓜,40% 是坏瓜,则信息熵计算如下:
[
Ent(D) = -(0.6 \log_2 0.6 + 0.4 \log_2 0.4) \approx 0.971
]
这个值表示当前数据集中的不确定性程度。
信息增益 的公式为:
[
Gain(D, A) = Ent(D) - \sum_{v \in Values(A)} \frac{|D_v|}{|D|} Ent(D_v)
]
每个符号的解释如下:
- (Gain(D, A)):表示使用属性 (A) 对数据集 (D) 进行划分后,所获得的 信息增益。信息增益是指划分后数据集的熵值减少量。
- (Ent(D)):表示划分之前整个数据集 (D) 的信息熵。
- (\sum_{v \in Values(A)}):表示对属性 (A) 的每个可能取值 (v) 进行求和。 (Values(A)) 表示属性 (A) 的所有可能取值,例如“色泽”属性可能有“青绿”、“乌黑”、“浅白”等取值。
- (\frac{|D_v|}{|D|}):表示子集 (D_v) 的样本数占总样本数 (D) 的比例。即在划分后,每个子集的大小对总信息增益的贡献权重。
- (Ent(D_v)):表示子集 (D_v) 的信息熵。划分后,每个子集中的样本越“纯净”,这个值就越小。
公式含义:信息增益是衡量使用某个属性 (A) 对数据集 (D) 进行划分时,数据集的纯度提升了多少。信息增益越大,说明使用该属性进行划分能够更有效地减少数据集的不确定性,从而使得子集更加纯净。
示例:如果我们使用“色泽”作为划分属性,将数据集 (D) 分为三个子集 (D_1)(青绿),(D_2)(乌黑),和 (D_3)(浅白)。分别计算每个子集的信息熵和它们在总数据集中的比例,然后计算出信息增益。
2.2 增益率
增益率用于避免信息增益对可取值较多的属性(如编号)产生偏好。它的公式为:
[
Gain_ratio(D, A) = \frac{Gain(D, A)}{IV(A)}
]
其中:
- (Gain(D, A)):表示属性 (A) 的信息增益。
- (IV(A)):表示属性 (A) 的 固有值,用于调整信息增益的偏好。
固有值 的计算公式为:
[
IV(A) = - \sum_{v \in Values(A)} \frac{|D_v|}{|D|} \log_2 \frac{|D_v|}{|D|}
]
每个符号的解释如下:
- (\sum_{v \in Values(A)}):对属性 (A) 的每个取值 (v) 进行求和。
- (\frac{|D_v|}{|D|}):子集 (D_v) 的样本占总样本数的比例。
- (\log_2 \frac{|D_v|}{|D|}):子集占比的对数。
公式含义:固有值衡量的是属性 (A) 的取值的分布情况。如果一个属性的取值越多,固有值 (IV(A)) 就会越大。这是为了减少信息增益对取值较多属性的偏好。
示例:例如,编号属性虽然对每个样本的分类都能得到高的信息增益,但它并没有实际意义。增益率通过使用固有值来调整这种偏好,使得划分更加合理。
2.3 基尼指数
基尼指数 是另一种衡量数据集纯度的指标,常用于 CART 决策树。它的公式为:
[
Gini(D) = 1 - \sum_{k=1}^{|Y|} p_k^2
]
每个符号的解释如下:
- (Gini(D)):表示数据集 (D) 的基尼指数。
- (\sum_{k=1}^{|Y|}):对类别 (k) 从 1 到 (|Y|) 进行求和,(|Y|) 是类别的总数。
- (p_k):表示第 (k) 类样本的比例。
公式含义:基尼指数衡量的是从数据集中随机抽取两个样本,它们属于不同类别的概率。基尼指数越小,表示数据集的纯度越高。
示例:假设一个数据集有60%的好瓜和40%的坏瓜,那么基尼指数为:
[
Gini(D) = 1 - (0.6^2 + 0.4^2) = 0.48
]
这个值表示数据集中样本的混合程度。
通过这些公式,我们可以根据数据的特征选择最优属性来划分决策树,从而提高模型的分类效果。
3. 剪枝处理
剪枝是决策树学习中的一个重要步骤,用来防止过拟合。过拟合是指模型对训练数据过度拟合,导致对新数据的泛化能力下降。剪枝可以减少模型的复杂度,从而提高模型的泛化能力。
剪枝策略通常分为两种:
- 预剪枝:在生成决策树的过程中,提前停止分裂,避免生成过多分支。
- 后剪枝:先生成一棵完整的决策树,然后从叶节点开始向上回溯,去掉一些分支。
3.1 预剪枝
- 预剪枝在每次划分前,通过评估划分是否能提高模型的泛化性能,决定是否进行划分。
- 如果划分不能带来显著的性能提升,算法会停止划分,并将当前节点标记为叶节点。
示例:假设我们正在生成一棵决策树,当前节点的样本集已经通过某个属性划分,但继续划分带来的性能提升很小,甚至可能对新数据的预测准确率下降。在这种情况下,预剪枝策略会停止继续划分,将当前节点标记为叶节点。
3.2 后剪枝
- 后剪枝是在生成一棵完整的决策树之后,通过逐步删除一些分支来减少过拟合。
- 后剪枝的基本步骤是:从树的叶节点开始向上回溯,逐一评估是否可以将当前节点的子树替换为一个叶节点。如果替换能提高泛化性能,则进行剪枝。
示例:假设我们有一棵完整的决策树,其中某个分支只对训练数据有作用,但对新数据预测时效果很差。在这种情况下,后剪枝策略会删除这个分支,将其父节点直接标记为叶节点。
总结:剪枝的目的在于减少决策树的复杂度,避免过拟合,从而提高模型的泛化能力。预剪枝和后剪枝各有优缺点,前者可以减少生成树的时间,但可能错过某些有效的划分;后者能够保留更多的信息,但需要更多的计算资源。
4. 连续与缺失值
在现实中的数据集里,很多属性是 连续值,例如一个水果的密度或含糖量。此外,数据集中还可能存在 缺失值,例如某些样本在某个属性上没有取值。决策树算法需要处理这些情况,以确保模型的可靠性。
4.1 连续值处理
对于离散属性,决策树可以直接根据取值划分数据集,但连续属性的取值范围很大,不能简单地枚举所有可能值。因此,决策树通过 二分法 来处理连续属性。
公式:在划分数据集时,决策树选择一个划分点 (t),将数据集分为两部分:
[
Gain(D, A, t) = Ent(D) - \left( \frac{|D_{\leq t}|}{|D|} Ent(D_{\leq t}) + \frac{|D_{> t}|}{|D|} Ent(D_{> t}) \right)
]
解释如下:
- (Gain(D, A, t)):表示在划分点 (t) 下,使用属性 (A) 进行划分所获得的信息增益。
- (Ent(D)):划分前数据集 (D) 的信息熵。
- (\frac{|D_{\leq t}|}{|D|}):表示取值不大于 (t) 的样本在整个数据集中的比例。
- (Ent(D_{\leq t})):表示取值不大于 (t) 的样本子集的信息熵。
- (\frac{|D_{> t}|}{|D|}):表示取值大于 (t) 的样本在整个数据集中的比例。
- (Ent(D_{> t})):表示取值大于 (t) 的样本子集的信息熵。
公式含义:通过选取不同的划分点 (t),决策树可以将连续属性分为两部分,计算划分后的信息增益。最终选择信息增益最大的划分点作为最佳划分。
示例:假设我们有一个水果数据集,属性“密度”的取值范围是 0.1 到 0.9。决策树可以通过划分点 (t = 0.5) 将数据集分为两部分:密度小于等于 0.5 和密度大于 0.5。然后计算每个部分的信息增益,选择最优的划分点。
4.2 缺失值处理
在现实数据集中,常常会遇到某些属性的值缺失,决策树需要处理这些不完整的样本,而不是简单地舍弃它们。处理缺失值的常见方法包括:
-
属性值缺失:当某个样本在某个属性上的取值缺失时,可以通过样本权重的调整来处理。具体方法是将样本按比例分配到不同的子节点,并根据样本的权重调整划分结果。
-
分类结果缺失:在分类过程中,如果某个样本的某个属性取值缺失,决策树可以同时将样本分配到所有可能的子节点,并根据样本的权重调整最终的分类结果。
公式:处理缺失值时,信息增益的计算公式被修改为:
[
Gain(D, A) = p \times Gain(D, A)
]
其中,(p) 表示没有缺失值样本的比例。
公式含义:在计算信息增益时,仅对没有缺失值的样本集进行计算,同时根据样本集的比例调整最终的信息增益结果。
示例:假设我们有一个数据集,其中某些样本的“色泽”属性缺失。我们可以根据样本权重,将缺失的样本分配到不同的子节点,计算这些子节点的信息增益。
5. 多变量决策树
多变量决策树 是决策树的扩展版本,它允许使用多个属性的线性组合来进行划分,而不仅仅是单个属性。这种方法能够处理复杂的分类问题,特别是当数据的决策边界不是简单的轴平行时。
5.1 多变量决策树的定义
- 在普通的决策树中,非叶节点对单个属性进行测试(如“色泽是否为青绿?”)。
- 而在多变量决策树中,每个非叶节点测试的是多个属性的线性组合。也就是说,决策树的节点不是对某个单独的属性进行划分,而是对多个属性组合后的结果进行划分。
线性分类器 的公式为:
[
w_1 x_1 + w_2 x_2 + \dots + w_d x_d \leq t
]
解释如下:
- (w_1, w_2, \dots, w_d):表示属性 (x_1, x_2, \dots, x_d) 对应的权重。每个权重 (w_i) 代表属性 (x_i) 对分类的重要性。
- (x_1, x_2, \dots, x_d):表示样本的属性值。例如,样本的密度、含糖量等。
- (t):是一个阈值,表示通过这个阈值来决定样本属于哪个类别。
公式含义:通过多个属性的线性组合,决策树能够在数据空间中形成一个斜的划分边界,而不是像传统决策树那样形成轴平行的划分边界。
5.2 多变量决策树的划分方式
- 多变量决策树允许节点使用多个属性的组合进行划分,因此它可以生成“斜决策边界”。这种划分方式能够更好地处理复杂数据,例如当数据的决策边界是斜的,而不是平行于坐标轴时。
示例:在普通决策树中,如果我们使用属性“密度”和“含糖量”分别对数据进行划分,得到的决策边界是平行于这些属性轴的。但在多变量决策树中,我们可以对这两个属性的线性组合进行划分,例如“0.5 * 密度 + 0.3 * 含糖量 \leq 0.7”,从而得到一个斜的决策边界。
图示:
在西瓜数据集上,传统决策树的划分可能会形成直角形的决策区域,而多变量决策树可以通过线性组合形成斜线划分,更加灵活。
6. 阅读材料
这一部分列出了与决策树相关的经典算法和文献,它们对决策树的研究和发展起到了重要的作用。
6.1 经典算法
- ID3:最早的决策树算法之一,它使用信息增益作为划分标准来选择最优属性。
- C4.5:ID3的改进版本,使用增益率来避免对取值较多的属性产生偏好,并且能够处理连续值和缺失值。
- CART:分类与回归树(Classification and Regression Tree),它使用基尼指数作为划分标准,适用于分类和回归任务。
6.2 其他相关文献
- [Murthy, 1998]:提供了决策树相关文献的综述和研究指南。
- [Quinlan, 1993]:C4.5决策树算法的原始论文,介绍了增益率和剪枝处理等技术。
- [Breiman et al., 1984]:CART算法的提出者之一,介绍了基于基尼指数的决策树算法。
6.3 决策树的泛化性能
- 剪枝对决策树的泛化性能有显著影响。过多的分支会导致决策树过拟合,剪枝能够减少过拟合的风险,提高模型对新数据的泛化能力。
- 实验表明,通过剪枝可以将决策树的泛化性能提高约25%,特别是在数据带有噪声时。
6.4 多变量决策树的研究
- OC1 和 Brodley and Utgoff 的一系列算法通过贪心搜索和线性分类器来改进多变量决策树的学习过程。
- 其他算法则结合神经网络的思想,将感知机或神经网络嵌入到决策树的叶节点中,形成混合模型,从而提高学习能力。
6.5 增量学习
- 决策树学习的另一个方向是 增量学习,即能够在接收到新的样本后对已有的决策树模型进行部分更新,而不是重新训练整个模型。
- 代表性算法有 ID4、ID5R 和 ITI,它们通过对分支路径的调整来进行局部更新,降低了每次接收新样本时的训练时间开销。
相关文章:
机器学习5
1.1 决策树的定义 决策树是用于分类和回归的机器学习算法。它通过一系列的“是或否”的决策来分类数据。每个决策是基于数据的某个属性进行的,如“色泽是青绿吗?”。决策树的核心是通过树状结构,将一个复杂的问题逐步拆解为多个简单的二元问…...

【Python技术】利用akshare定时获取股票实时价,低于5日线钉钉通知报警
今天看了下大盘,临时有个想法,我想知道某个股票回踩5日线的价格,如果实时价格低于5日线通过钉钉报警通知我。 说干就干,临时撸了下简单的代码,仅做演示。 1、计算5日线思路 很多券商软件的MA5价格是近5个交易日收盘…...

LINUX1.2
1.一切都是一个文件 (硬盘) 2.系统小型 轻量型,300个包 3.避免令人困惑的用户界面 ------------------> 就是没有复杂的图形界面 4.不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型(win…...
Proximal Distance Algorithm (近段距离算法)
文章目录 第一篇\section*{近端距离算法(Proximal Distance Algorithm)详解}\subsection*{1. MM原理(Majorization-Minimization Principle)}\subsection*{2. 近端距离算法(Proximal Distance Algorithm)}\…...
如何判断一个数是几位数与这个数是否为回文数并打印出其逆序数
1 问题 判断一个数是几位数与这个数是否为回文数并打印出其逆序数。 2 方法 先输入一个少于五位数的数用int的方法打出这个数的个十百千万的数字再用条件语句else-if来判断这个数是几位数,并打印其逆序数最后判断这个数是否为回文数,打印其数 通过实验、…...
Solon 之 STOMP
一、STOMP 简介 如果直接使用 WebSocket 会非常累,就像用 Socket 编写 Web 应用。没有高层级的交互协议,就需要我们定义应用间所发消息的语义,还需要确保连接的两端都能遵循这些语义。 如 HTTP 在 TCP 套接字之上添加了请求-响应模型层一样…...

在掌控板上搭建http服务器
在掌控板上搭建http服务器 打开Arduino IDE,并且已经添加了ESP32的支持库。以下是创建一个基本HTTP服务器的步骤: 包含必要的库: #include <WiFi.h> #include <WebServer.h>配置WiFi: 替换ssid和password为你的WiFi网…...

HCIA复习实验
实验要求 实验拓扑以及实验分析 第一步先划分网段 先对内网划分 192.168.1.0/24划分 192.168.1.0/26---骨干主线路 192.168.1.64/26---骨干备线路 ---192.168.1.128/25--vlan2 3汇总---便于减少路由表条目---在大型网络方便 192.168.1.128/26---vlan2 192.168.1.192/26---vla…...

生信软件39 - GATK最佳实践流程重构,提高17倍分析速度的LUSH流程
1. LUSH流程简介 基因组测序通常用于分子诊断、分期和预后,而大量测序数据在分析时间方面提出了挑战。 对于从FASTQ到VCF的整个流程,LUSH流程在非GVCF和GVCF模式下都大大降低了运行时间,30 X WGS数据耗时不到2 h,从BAM到VCF约需…...

c#编写的各类应用程序、类库的引用(黑白盒)
001 课程简介,C# 语言简介,开发环境准备 (yuque.com)https://www.yuque.com/yuejiangliu/dotnet/timothy-csharp-001 一个Solution里包含多个Project 一、见识 C# 编写的各类应用程序 二、类库的引用(黑/白盒引用) 1、黑盒引用&a…...

计算机网络考研笔记
...

用感性的方式浅要了解什么是AI 与 大模型
什么是人工智能(AI)? 人工智能(Artificial Intelligence,简称 AI)是指由人制造出来的具有一定智能的系统,能够理解和学习人类的行为,并在某些任务上模仿人类的智能行为。这些任务包…...

Linux文件的查找和打包以及压缩
文件的查找 文件查找的用处,在我们需要文件但却又不知道文件在哪里的时候 文件查找存在着三种类型的查找 1、which或whereis:查找命令的程序文件位置 2、locate:也是一种文件查找,但是基于数据库的查找 3、find:针…...

专题十四_哈希表_算法专题详细解答
目录 哈希表简介 1. 两数之和(easy) 解析: 解法一:暴力: 解法二:哈希O(N) 总结: 2. 判断是否互为字符重排(easy) 解析: 哈希: 总结&…...
C++源码生成·序章
文章目录 C源码生成序章1 概述1.1 前言1.2 Python 易用性简介 2 使用 python 生成 c 源码2.1 运行脚本2.2 结果 3 项目启动3.1 项目概述3.2 环境准备3.3 克隆仓库3.4 查看标签(Tags)3.4 根据标签拉取代码3.5 后续步骤 C源码生成序章 1 概述 1.1 前言 …...
Android中的MVP模式
MVP(Model-View-Presenter)架构在 Android 开发中是一种流行的架构模式,它将业务逻辑和 UI 代码分离,通过 Presenter 来处理用户的操作和界面更新。MVP 提高了代码的可维护性和测试性,特别是 Presenter 中的逻辑可以单…...

kebuadm部署k8s集群
官方文档: Installing kubeadm | Kubernetes 切记要关闭防⽕墙、selinux、禁用交换空间, cpu核⼼数⾄少为2 内存4G kubeadm部署k8s⾼可用集群的官方文档: Creating Highly Available Clusters with kubeadm | Kubernetes 你需要在每台…...

Unity3D学习FPS游戏(2)简单场景、玩家移动控制
前言:上一篇的时候,我们已经导入了官方fps的素材,并且对三维模型有了一定了解。接下来我们要构建一个简单的场景让玩家能够有地方移动,然后写一个简单的玩家移动控制。 简单场景和玩家移动 简单场景玩家移动控制玩家模型视野-摄像…...

网上的 AQS 文章让我很失望
一、AQS 很多人都没有讲明白 🤔 翻看了网上的 AQS(AbstractQueuedSynchronizer)文章,质量参差不齐,大多数都是在关键处跳过、含糊其词,美其名曰 “传播知识” 。 大多数都是进行大段的源码粘贴和注释&…...

滑动窗口子串
文章目录 滑动窗口一、无重复字符的最长子串二、找到字符串中所有字母异位词 子串三、和为 K 的子数组四、滑动窗口最大值五、最小覆盖子串 滑动窗口 一、无重复字符的最长子串 题目链接 (方法一:暴力枚举) (方法二ÿ…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...