解锁机器学习核心算法 | 支持向量机:机器学习中的分类利刃
一、引言
在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森林、K - 近邻算法、K - 平均算法、支持向量机、朴素贝叶斯算法、主成分分析(PCA)、神经网络。它们涵盖了回归、分类、聚类、降维等多个机器学习任务领域,是众多机器学习应用的基础和核心。
而在这十大算法中,支持向量机(Support Vector Machine,SVM)算法凭借其独特的理论和卓越的性能,占据着举足轻重的地位。SVM 是一种有监督的机器学习算法,可广泛应用于分类和回归问题。它的核心思想是找到一个超平面,将不同类别的数据点尽可能清晰地分隔开,并且使这个超平面到各类数据点的间隔最大化 ,以此来提高模型的泛化能力。这种独特的思想使得 SVM 在处理高维数据和小样本数据时表现出色,并且在非线性分类问题上也有着强大的处理能力,通过核函数技巧,能将低维空间中的非线性问题转化为高维空间中的线性可分问题。在图像识别、文本分类、生物信息学等众多领域,SVM 都有着广泛且成功的应用,为解决实际问题提供了高效的解决方案。接下来,就让我们深入探究支持向量机算法的奥秘。

二、SVM 的起源与发展
支持向量机(SVM)的发展历经漫长探索与演进,众多学者成果为其奠基。
- 1936 年,罗纳德・费希尔提出线性判别分析(LDA),成为 SVM 发展起点,启发分类问题研究。1950 年,阿伦萨因的 “核再现理论” 为 SVM 核方法提供理论基础,拓展其处理非线性问题的能力。1957 年,弗兰克・罗森布拉特发明感知器,为 SVM 处理线性分类提供思路。
- 1963 年,弗拉基米尔・瓦普尼克和雷纳提出肖像算法,为 SVM 出现铺垫。1964 年,艾泽曼等人对内核的几何解释推动 SVM 理论完善。1968 年,史密斯引入松弛变量,增强 SVM 处理复杂数据能力。1973 年,杜达和哈特的宽边界超平面思想为 SVM 发展指明新方向。1974 年,瓦普尼克和切尔沃涅基催生 “统计学习理论”,SVM 成核心部分,1979 年相关著作推动其国际传播。
- 80 年代,哈松博士论文及统计力学与 SVM 的融合,丰富了 SVM 理论。随着对模式识别相关问题研究深入及 VC 维概念提出,SVM 逐渐完善。1992 年 COLT 会议上,接近现代形式的 SVM 算法亮相,标志其走向成熟,随后在多领域广泛应用。
三、SVM 的核心原理
(一)基本概念
- 超平面: 在机器学习领域,超平面是一个极为重要的概念,它在不同维度空间有着独特的定义和表示形式。
- 在二维空间中,超平面就是我们所熟知的直线,其方程可以表示为: a x + b y + c = 0 ax + by + c = 0 ax+by+c=0其中 a a a、 b b b 不同时为 0 0 0 ,通过这个方程可以将二维平面划分为两个区域。
- 在三维空间里,超平面则是一个平面,方程表示为: a x + b y + c z + d = 0 ax + by + cz + d = 0 ax+by+cz+d=0 其中 a a a、 b b b、 c c c 不全为 0 0 0 ,能够把三维空间分割成两个部分。
- 而在更高维度的 n n n维空间 中,超平面同样是一个维度比所在空间低一维的子空间,其方程的一般形式为: w T x + b = 0 w^T x + b = 0 wTx+b=0这里的 w w w 是一个 n n n 维的权重向量, x x x 是 n n n 维空间中的向量, b b b 是偏置项 。
超平面在 SVM 中扮演着分类决策边界的关键角色,它的位置和方向决定了如何将不同类别的数据点分隔开来。对于一个二分类问题,位于超平面一侧的数据点被划分为正类,另一侧的数据点则被划分为负类。例如,在一个简单的二维数据集上,通过确定合适的超平面(直线),可以将红色和蓝色的数据点准确地分开,从而实现分类任务。
-
支持向量:支持向量是距离超平面最近的数据点,它们在 SVM 中对确定超平面的位置和方向起着至关重要的作用。当我们试图找到一个超平面来分隔不同类别的数据时,并不是所有的数据点都对超平面的确定有同等的影响力,支持向量才是真正决定超平面的关键因素。因为超平面的位置和方向是由这些距离它最近的数据点来确定的,其他远离超平面的数据点对超平面的影响较小。在实际应用中,通过调整支持向量与超平面的距离关系,能够找到最优的超平面,使得分类效果最佳。例如,在一个线性可分的数据集里,那些最靠近超平面且分别属于不同类别的数据点就是支持向量,它们如同超平面的 “支撑点”,超平面的确定就是围绕着这些支持向量进行的,以确保能够在最大程度上正确分类数据点的同时,使超平面具有最强的泛化能力。
-
间隔与最大间隔:间隔是超平面到最近支持向量的距离,它是衡量 SVM 分类性能的一个重要指标。在 SVM 中,我们追求的是找到使正类和负类数据点之间间隔最大化的超平面,这就是最大间隔的概念。为什么要最大化间隔呢?因为较大的间隔意味着超平面具有更强的鲁棒性和泛化能力,能够更好地对未知数据进行分类。直观地说,间隔越大,超平面与各类数据点之间的 “缓冲带” 就越宽,这样即使在面对一些噪声数据或者新的数据点时,超平面依然能够较为准确地对其进行分类。从数学角度来看,通过最大化间隔,可以将 SVM 的分类问题转化为一个凸优化问题进行求解。在求解过程中,我们通常会利用拉格朗日乘子法等数学工具,将原始的约束优化问题转化为对偶问题,从而更方便地找到最优解,确定能够使间隔最大化的超平面的参数。
(二)算法原理详解
-
线性可分 SVM:对于线性可分的数据,即存在一个超平面能够将不同类别的数据点完全正确地分开,SVM 的目标就是通过最大化间隔来寻找这个最优超平面。假设我们有一个二分类数据集 D = { ( x i , y i ) } i = 1 n D = \{(x_i, y_i)\}_{i = 1}^n D={(xi,yi)}i=1n 其中 x i x_i xi 是 n n n 维特征向量, y i ∈ { + 1 , − 1 } y_i \in \{ + 1, - 1\} yi∈{+1,−1} 是类别标签。
超平面可以表示为: w T x + b = 0 w^T x + b = 0 wTx+b=0
数据点 x i x_i xi 到超平面的距离可以表示为: ∣ w T x i + b ∣ ∣ ∣ w ∣ ∣ \frac{|w^T x_i + b|}{||w||} ∣∣w∣∣∣wTxi+b∣ 为了找到最优超平面,我们的目标是最大化这个距离,也就是最大化间隔。为了求解这个问题,我们可以利用拉格朗日乘子法将其转化为对偶问题。- 首先,引入拉格朗日乘子 α i \alpha_i αi ,构建拉格朗日函数 L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i [ y i ( w T x i + b ) − 1 ] L(w, b, \alpha) = \frac{1}{2}||w||^2 - \sum_{i = 1}^n \alpha_i [y_i (w^T x_i + b) - 1] L(w,b,α)=21∣∣w∣∣2−i=1∑nαi[yi(wTxi+b)−1] 其中 α i ≥ 0 \alpha_i \geq 0 αi≥0 。
- 然后,对 w w w 和 b b b 求偏导并令其为 0 0 0,得到一些等式关系,再将这些关系代入拉格朗日函数中,就可以得到对偶问题: max α ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j x i T x j \max_{\alpha} \sum_{i = 1}^n \alpha_i - \frac{1}{2} \sum_{i = 1}^n \sum_{j = 1}^n \alpha_i \alpha_j y_i y_j x_i^T x_j αmaxi=1∑nαi−21i=1∑nj=1∑nαiαjyiyjxiTxj 约束条件为: ∑ i = 1 n α i y i = 0 \sum_{i = 1}^n \alpha_i y_i = 0 ∑i=1nαiyi=0 且 α i ≥ 0 \alpha_i \geq 0 αi≥0 。通过求解这个对偶问题,我们可以得到拉格朗日乘子 α i \alpha_i αi 的值,进而确定最优超平面的参数 w w w 和 b b b。
在实际应用中,对于一些简单的线性可分数据集,如经典的鸢尾花数据集的部分子集,我们可以通过这种方法准确地找到最优超平面,实现对不同类别鸢尾花的分类。
-
线性支持向量机(近似线性可分情况):在现实世界中,数据往往存在噪声或只是近似线性可分,完全线性可分的情况较为少见。为了处理这种情况,SVM 引入了松弛变量 ξ i \xi_i ξi,这就产生了线性支持向量机,也称为软间隔 SVM。松弛变量 ξ i \xi_i ξi 允许部分数据点被错误分类或者位于间隔区域内,从而使模型能够更好地适应带有噪声或异常点的数据。此时,优化目标变为: min w , b , ξ 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ξ i \min_{w, b, \xi} \frac{1}{2}||w||^2 + C \sum_{i = 1}^n \xi_i w,b,ξmin21∣∣w∣∣2+Ci=1∑nξi 约束条件为 y i ( w T x i + b ) ≥ 1 − ξ i y_i (w^T x_i + b) \geq 1 - \xi_i yi(wTxi+b)≥1−ξi 且 ξ i ≥ 0 \xi_i \geq 0 ξi≥0 ,其中 C C C 是惩罚系数,它起着权衡分类错误与间隔大小的重要作用。
- 较大的 C C C 值意味着对分类错误的惩罚更严厉,模型会更倾向于拟合训练数据,尽量减少错误分类的情况,但可能会导致过拟合;
- 较小的 C C C 值则会使模型更加容忍错误分类,更加注重模型的简单性和泛化能力,不过可能会增加一些分类错误。
在求解这个优化问题时,同样可以利用拉格朗日乘子法将其转化为对偶问题进行求解。以手写数字识别为例,由于手写数字的图像可能存在变形、噪声等问题,数据并非完全线性可分,使用线性支持向量机可以通过调整 C C C 值和引入松弛变量,有效地对这些手写数字进行分类,在保证一定分类准确率的同时,提高模型的泛化能力。 -
非线性支持向量机:当数据在原始低维空间中呈现非线性分布,无法用一个超平面将不同类别的数据点分开时,就需要使用非线性支持向量机。其核心思想是通过核函数将数据映射到高维空间,使得在高维空间中数据变得线性可分,从而可以使用线性 SVM 的方法进行处理。核函数是一种能够在低维空间中计算高维空间内积的函数,它避免了直接在高维空间中进行复杂的计算,大大降低了计算复杂度。常见的核函数包括:
- 线性核 K ( x , y ) = x T y K(x, y) = x^T y K(x,y)=xTy适用于数据本身接近线性可分的情况,计算速度快,但对于复杂的非线性数据效果有限;
- 多项式核 K ( x , y ) = ( x T y + c ) d K(x, y) = (x^T y + c)^d K(x,y)=(xTy+c)d 可以捕捉数据中的非线性关系,通过调整参数 c c c和 d d d可以控制多项式的次数和复杂度,能够处理一些具有多项式关系的数据;
- 径向基函数(RBF)核,也称为高斯核: K ( x , y ) = exp ( − γ ∣ x − y ∣ 2 ) K(x, y) = \exp(-\gamma |x - y|^2) K(x,y)=exp(−γ∣x−y∣2) 具有很强的非线性映射能力,对各种类型的数据都有较好的适应性,是最常用的核函数之一,在处理图像、文本等复杂数据时表现出色;
- sigmoid 核 K ( x , y ) = tanh ( α x T y + c ) K(x, y) = \tanh(\alpha x^T y + c) K(x,y)=tanh(αxTy+c) 与神经网络中的激活函数类似,适用于某些特定类型的数据,如在一些与神经网络相关的应用场景中可能会发挥作用。
在实际应用中,选择合适的核函数对于模型的性能至关重要。例如,在图像识别任务中,由于图像数据的复杂性和非线性特征,高斯核通常表现出色,通过将图像数据映射到高维空间,SVM 可以有效地捕捉图像的非线性特征,从而提高分类精度;在文本分类任务中,多项式核和线性核都是常见的选择,多项式核可以捕捉文本数据的复杂关系,而线性核则适用于大规模数据集,计算效率更高 。
四、SVM 的应用领域
1. 图像识别领域
- 手写数字识别:应用于邮政系统对手写邮政编码的识别、银行系统对手写支票金额数字的识别等场景。
- 车牌识别:用于智能交通系统中的停车场管理、电子警察抓拍等,实现车辆自动识别和管理。
2. 文本分类领域
- 垃圾邮件过滤:许多电子邮件客户端和邮件服务器采用该技术,为用户提供纯净邮件环境。
- 情感分析:帮助企业了解消费者对产品或服务的评价以改进产品服务,也用于社交媒体分析公众对事件或话题的情感态度,如电商平台分析用户评价提升满意度。
3. 生物信息学领域
- 基因分类:在癌症研究中,通过分析基因表达数据,将基因分为与癌症相关和无关类别,助力了解癌症发病机制与寻找治疗靶点。
- 蛋白质分类:根据蛋白质功能将其分类,辅助了解蛋白质功能和作用机制,为药物研发和生物技术应用提供支持。
4. 金融风险评估领域
- 信贷违约预测:银行或金融机构利用该技术构建信贷违约预测模型,依据预测结果决定是否批准贷款及相关额度、利率,降低信贷风险。
- 股票价格预测:为投资者提供一定参考,辅助其做出更合理投资决策,但需结合其他方法综合判断。
六、SVM 的优缺点
(一)优点
- 高精度与高效性:在中等规模数据集上,SVM 能提供高精度方案。处理高维数据时,它通过寻找最优超平面分隔数据,不依赖数据分布,有效应对维数灾难。如在图像识别,像 MNIST 手写数字识别任务中,可借合适核函数将高维图像数据映射,找到超平面实现准确分类。
- 灵活性与非线性处理能力:核技巧让 SVM 能借不同核函数处理各类数据关系,尤其擅长解决非线性问题。它把低维非线性问题转化为高维线性可分问题。像文本分类,数据呈复杂非线性,多项式核或 RBF 核的 SVM 可有效提取特征分类。
- 泛化能力强:SVM 最大化决策边界边缘,减少过拟合风险。最大化间隔使超平面与数据点“缓冲带”更宽,对噪声和新数据点分类准确。训练只关注支持向量,对非支持向量噪声和异常值鲁棒。如手写数字识别,在测试集面对噪声或变形图像仍能保持高准确率。
- 鲁棒性好:通过选择正则化参数 C,SVM 可处理噪声数据并忽略离群点。软间隔 SVM 引入松弛变量,C 值权衡分类错误与间隔大小。C 小,模型容忍错误分类,注重泛化;C 大,模型倾向拟合训练数据。在金融风险评估中,能合理调整 C 值避免异常数据干扰。
(二)缺点
- 训练时间长与计算复杂度高:数据集大时,SVM 训练时间长。因其需解决优化问题确定支持向量,计算所有样本点内积,使计算量和复杂度剧增。其优化问题是二次规划问题,本身计算复杂。如处理 CIFAR - 10 大规模图像数据集,比深度学习算法如卷积神经网络耗时耗资源。
- 参数选择复杂:SVM 性能受核函数和正则化参数显著影响,需交叉验证确定,过程复杂。不同核函数适用于不同数据,无通用选择方法,靠数据特点和经验尝试调整。正则化参数 C 也需交叉验证找最优值平衡训练和测试误差,实际应用需大量实验计算,增加成本。
- 模型结果难以解释:SVM 是黑盒模型,难直观解释决策过程和结果。不像决策树以树状结构展示决策,SVM 决策边界由支持向量决定,非专业人士难理解其分类决策依据,在医疗诊断等高可解释性需求领域受限。
七、项目实战
(一)Python 实现 SVM 分类
在 Python 中,借助 scikit-learn 库能便捷实现 SVM 分类。以鸢尾花数据集分类为例,代码如下:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target# 划分训练集和测试集,测试集占20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 创建 SVM 分类器,用RBF核函数,C设为1
# SVC 代表支持向量分类(Support Vector Classification)
clf = SVC(kernel='rbf', C=1)# 训练模型
clf.fit(X_train, y_train)# 对测试集预测
y_pred = clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("分类准确率:", accuracy)
代码逐行解释:先导入所需模块,包括数据集、数据划分、标准化、SVM分类器及准确率计算函数。加载鸢尾花数据集后,提取特征 X 和标签 y,按比例划分训练集与测试集并设随机种子保证结果可复现。创建标准化器对训练集和测试集处理。接着创建SVM分类器,指定核函数与惩罚系数,训练模型后预测并计算准确率。
(二)可视化优化
为直观展示分类效果,可用 matplotlib 库可视化,在上述代码基础上添加:
import numpy as np
import matplotlib.pyplot as plt# 可视化部分
# 设置网格步长,用于生成绘制决策边界的网格。
h =.02
# 确定绘制区域的边界,分别根据训练集数据中第一个特征(花萼长度)和第二个特征(花萼宽度)的最小值和最大值来确定,并且在边界上各扩展 1 个单位,以确保所有数据点都在绘制区域内。
x_min, x_max = X_train[:, 0].min() - 1, X_train[:, 0].max() + 1
y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# 将预测结果`Z`的形状重塑为与网格`xx`相同的形状,以便后续绘制等高线图。
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=plt.cm.coolwarm)
plt.title('SVM Classification on Iris Dataset')
plt.xlabel('Sepal length (standardized)')
plt.ylabel('Sepal width (standardized)')
plt.show()
可视化代码通过设置网格步长、确定绘制区域边界,生成网格点并预测,绘制填充等高线图展示决策边界,同时绘制训练集数据点,添加标题与坐标轴标签后显示图表,直观呈现SVM在鸢尾花数据集上的分类效果。

八、总结与展望
支持向量机算法作为机器学习领域的经典算法之一,凭借其独特的核心原理,在众多领域展现出了卓越的应用价值。它通过寻找最优超平面来实现数据分类,在处理高维数据和小样本数据时表现出色,具有高精度、灵活性强、泛化能力好以及鲁棒性强等优点。在图像识别、文本分类、生物信息学和金融风险评估等多个领域,SVM 都发挥着重要作用,为解决实际问题提供了有效的解决方案。
然而,SVM 也并非完美无缺,其训练时间长、计算复杂度高以及参数选择复杂等缺点,在一定程度上限制了它在大规模数据和对模型可解释性要求较高场景中的应用。但随着科技的不断发展,SVM 在未来机器学习领域仍有着广阔的发展空间。在理论研究方面,学者们可能会继续深入研究 SVM 的优化算法,以降低其计算复杂度,提高训练效率;同时,对于参数选择问题,可能会开发出更智能、更自动化的方法,减少人工调参的工作量和不确定性。在应用拓展方面,随着物联网、大数据和人工智能等技术的快速发展,SVM 有望在更多新兴领域得到应用,如智能家居中的设备状态监测与故障诊断、智能交通中的路况预测与车辆行为分析等。此外,SVM 与其他机器学习算法的融合也是一个重要的发展方向,通过结合不同算法的优势,能够构建出更强大、更高效的模型,以满足日益复杂的实际应用需求。
机器学习项目代码地址:【传送门】
延伸阅读
-
机器学习核心算法系列文章
-
解锁机器学习核心算法 | 随机森林算法:机器学习的超强武器
解锁机器学习核心算法 | K -近邻算法:机器学习的神奇钥匙
解锁机器学习核心算法 | K-平均:揭开K-平均算法的神秘面纱
解锁机器学习核心算法 | 决策树:机器学习中高效分类的利器
解锁机器学习核心算法 | 逻辑回归:不是回归的“回归”
解锁机器学习核心算法 | 线性回归:机器学习的基石 -
深度学习框架探系列文章
深度学习框架探秘|TensorFlow:AI 世界的万能钥匙
深度学习框架探秘|PyTorch:AI 开发的灵动画笔
深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决
深度学习框架探秘|Keras:深度学习的魔法钥匙
相关文章:
解锁机器学习核心算法 | 支持向量机:机器学习中的分类利刃
一、引言 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森林、K - 近邻算法、K - 平均算法、支持向…...
青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署
青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署 一、软件开发部署部署的主要内容部署的步骤部署的方式部署的环境 二、Django项目部署1. 准备工作2. 代码部署3. 配置Django项目4. Web服务器和应用服务器配置5. 安全和性能优化6. 监控和日志管理7. 测试和上线 三、在U…...
ARM系统源码编译OpenCV 4.10.0(包含opencv_contrib)
因项目部署在ARM系统上,需要编译一个arm版本的opencv-4.10.0(带opencv_contrib)版本。 若需要Linux系统下源码安装OpenCV,可参考:https://blog.csdn.net/qq_45445740/article/details/142770493?spm1001.2014.3001.55…...
cmake:定位Qt的ui文件
如题。在工程中,将h,cpp,ui文件放置到不同文件夹下,会存在cmake找不到ui文件,导致编译报错情况。 cmake通过指定文件路径,确保工程找到ui文件。 标识1:ui文件保存路径。 标识2:添加…...
(leetcode 1749 前缀和)1749. 任意子数组和的绝对值的最大值
核心题意 任意子数组和 的绝对值的最大值实际上是前缀和之间的差的最大值 建立前缀和数组 如果我们只考虑前缀和的最大值和最小值之差,那么就能够获得一个最大的子数组和的绝对值。因为任意一个子数组的和 prefix[j1] - prefix[i],它的绝对值是最大当…...
下载安装运行测试开源vision-language-action(VLA)模型OpenVLA
1. 安装 项目官网OpenVLA 首先按照官网提示的以下代码,执行创建环境->安装最小依赖->git克隆项目等 # Create and activate conda environment conda create -n openvla python3.10 -y conda activate openvla# Install PyTorch. Below is a sample comma…...
【网络安全 | 漏洞挖掘】我如何通过Cookie Manipulation发现主域上的关键PII?
未经许可,不得转载。 文章目录 正文正文 在分析 Example.com 的认证机制时,我注意到一个特定的 cookie,USER_ID,包含了一个具有预测性的会话标识符,其格式为: USER_ID="VYCVCDs-TZBI:XXXX-random-data"其中,XXXX 是由四个大写字母组成的部分,我使用 Burp S…...
【操作系统】操作系统概述
操作系统概述 1.1 操作系统的概念1.1.1 操作系统定义——什么是OS?1.1.2 操作系统作用——OS有什么用?1.1.3 操作系统地位——计算机系统中,OS处于什么地位?1.1.4 为什么学操作系统? 1.2 操作系统的历史1.2.1 操作系统…...
SQL Server 运算符优先级
在 SQL Server 中,运算符的优先级决定了在没有使用括号明确指定计算顺序时,运算符的执行顺序。 运算符优先级列表 括号 () 一元运算符 (正号)-(负号)~(按位取反) 乘法、除法和取模…...
Python的顺序结构和循环结构
文章目录 一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(c)多分支 if-elif-elif-...-else (3)注意事…...
深入浅出TypedArray:网络数据处理、WebGPU与加密实战
JavaScript的TypedArray是现代Web开发中处理二进制数据的利器。本文将结合网络数据传输、WebGPU编程和简单加密算法三个实战场景,带你领略TypedArray的强大能力。 一、TypedArray基础认知 TypedArray家族包括Int8Array、Uint16Array、Float32Array等11种视图类型&a…...
http 响应码影响 video 标签播放视频
背景 使用后端给的文件下载接口地址实现视频播放,但是 video 标签一直无法播放视频如下图,把接口地址放到浏览器请求能直接下载。但就是不能播放 原因 http 响应码不正确,返回201是无法播放视频200可以如下图 状态码的影响: 20…...
观察者模式原理详解以及Spring源码如何使用观察者模式?
前言 首先说明观察者模式,观察者模式,也叫发布-订阅模式,应该是用来处理对象间的一对多依赖关系的。当被观察者的状态变化时,所有依赖它的观察者都会得到通知并自动更新。 观察者模式的结构,通常包括Subject࿰…...
【Spring】Spring配置文件
目录 什么是配置文件? 配置文件的作用 SpringBoot配置文件 配置文件格式 配置文件的优先级 properties配置文件说明 properties基本语法 读取配置文件 properties缺点 yml配置文件说明 yml基本语法 使用yml连接数据库 yml配置不同数据类型及null 注意…...
MSI微星电脑冲锋坦克Pro Vector GP76 12UGS(MS-17K4)原厂Win11系统恢复镜像,含还原功能,预装OEM系统下载
适用机型:【MS-17K4】 链接:https://pan.baidu.com/s/1P8ZgXc6S_J9DI8RToRd0dQ?pwdqrf1 提取码:qrf1 微星笔记本原装出厂WINDOWS11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、MSI Center控制中心等预装…...
Unity合批处理优化内存序列帧播放动画
Unity合批处理序列帧优化内存 介绍图片导入到Unity中的处理Unity中图片设置处理Unity中图片裁剪 创建序列帧动画总结 介绍 这里是针对Unity序列帧动画的优化内容,将多个图片合批处理然后为了降低Unity的内存占用,但是相对的质量也会稍微降低。可自行进行…...
【Java】逻辑运算符详解:、|| 与、 | 的区别及应用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 💯前言💯一、基本概念与运算符介绍💯二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. …...
深入解析 Flutter GetX
深入解析 Flutter GetX:从原理到实战 GetX 是 Flutter 中一个轻量级且功能强大的状态管理、路由管理和依赖注入框架。它以简单、快速、高效著称,适合从小型到大型项目的开发需求。GetX 的设计理念是一体化解决方案,通过一个框架解决状态管理…...
Java 大视界 -- 人才需求与培养:Java 大数据领域的职业发展路径(92)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
顺序表常用操作和笔试题
1、顺序表的常用操作 1.1 顺序表的创建 如下代码所示:创建了一个默认空间为10的整型顺序表,如果空间不足则会以1.5倍扩容。 List<Integer> list new ArrayList<>(); 创建一个空间为15的整型顺序表 List<Integer> list2 new ArrayL…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
