在这里插入图片描述

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用,熟悉DICOM医学影像及DICOM协议,业余时间自学JavaScript,Vue,qt,python等,具备多种混合语言开发能力。撰写博客分享知识,致力于帮助编程爱好者共同进步。欢迎关注、交流及合作,提供技术支持与解决方案。\n技术合作请加本人wx(注明来自csdn):xt20160813

支持向量机(SVM)深度解析:从数学根基到工程实践

在这里插入图片描述

一、SVM核心概念

1. 什么是SVM?

支持向量机(Support Vector Machine, SVM)是一种监督学习算法,用于分类回归任务(主要用于分类)。其核心目标是找到一个最优超平面,将不同类别的数据分隔开,并使离超平面最近的样本点(支持向量)到超平面的距离(几何间隔)最大化。

2. 核心思想
  • 硬间隔SVM:假设数据完全线性可分,目标是最大化几何间隔。
  • 软间隔SVM:允许部分样本分类错误,引入松弛变量以处理噪声和非线性可分数据。
  • 核技巧:通过核函数将数据映射到高维空间,解决线性不可分问题。
3. 关键术语
  • 超平面:在 n n n 维空间中,满足 w T x + b = 0 w^T x + b = 0 wTx+b=0 n − 1 n-1 n1 维平面。
  • 支持向量:距离超平面最近的样本点,决定超平面的位置。
  • 函数间隔:样本点到超平面的未标准化距离, γ ^ i = y i ( w T x i + b ) \hat{\gamma}_i = y_i(w^T x_i + b) γ^i=yi(wTxi+b)
  • 几何间隔:标准化后的距离, γ i = γ ^ i ∥ w ∥ \gamma_i = \frac{\hat{\gamma}_i}{\|w\|} γi=wγ^i
4. SVM流程图

以下是SVM训练的整体流程:

graph TDA[输入数据] --> B{线性可分?}B -->|是| C[硬间隔SVM]B -->|否| D{引入松弛变量?}D -->|是| E[软间隔SVM]D -->|否| F[核技巧]C --> G[最大化几何间隔]E --> GF --> H[映射到高维空间] --> GG --> I[优化超平面参数]I --> J[输出分类模型]

二、数学原理

1. 硬间隔SVM

优化目标:在数据线性可分的情况下,找到一个超平面 w T x + b = 0 w^T x + b = 0 wTx+b=0,使几何间隔最大化。

数学表达

  • 函数间隔: γ ^ i = y i ( w T x i + b ) \hat{\gamma}_i = y_i(w^T x_i + b) γ^i=yi(wTxi+b)
  • 几何间隔: γ i = γ ^ i ∥ w ∥ \gamma_i = \frac{\hat{\gamma}_i}{\|w\|} γi=wγ^i
  • 优化问题:
    max ⁡ w , b γ s.t.  y i ( w T x i + b ) ≥ γ ^ , ∀ i \begin{aligned} &\max_{w,b} \gamma \\ &\text{s.t. } y_i(w^T x_i + b) \geq \hat{\gamma}, \quad \forall i \end{aligned} w,bmaxγs.t. yi(wTxi+b)γ^,i
  • 通过标准化 γ ^ = 1 \hat{\gamma} = 1 γ^=1,问题转化为:
    min ⁡ w , b 1 2 ∥ w ∥ 2 s.t.  y i ( w T x i + b ) ≥ 1 , ∀ i \begin{aligned} &\min_{w,b} \frac{1}{2} \|w\|^2 \\ &\text{s.t. } y_i(w^T x_i + b) \geq 1, \quad \forall i \end{aligned} w,bmin21w2s.t. yi(wTxi+b)1,i

几何意义:最小化 ∥ w ∥ 2 \|w\|^2 w2 等价于最大化间隔 2 ∥ w ∥ \frac{2}{\|w\|} w2

2. 对偶问题与拉格朗日乘子

为了求解上述约束优化问题,引入拉格朗日乘子法:
L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 m α i [ y i ( w T x i + b ) − 1 ] \mathcal{L}(w, b, \alpha) = \frac{1}{2} \|w\|^2 - \sum_{i=1}^m \alpha_i [y_i(w^T x_i + b) - 1] L(w,b,α)=21w2i=1mαi[yi(wTxi+b)1]

  • w w w b b b 求导并令导数为零:
    w = ∑ i = 1 m α i y i x i , ∑ i = 1 m α i y i = 0 w = \sum_{i=1}^m \alpha_i y_i x_i, \quad \sum_{i=1}^m \alpha_i y_i = 0 w=i=1mαiyixi,i=1mαiyi=0
  • 代入后得到对偶问题:
    max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i , j = 1 m α i α j y i y j x i T x j s.t.  α i ≥ 0 , ∑ i = 1 m α i y i = 0 \begin{aligned} &\max_{\alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2} \sum_{i,j=1}^m \alpha_i \alpha_j y_i y_j x_i^T x_j \\ &\text{s.t. } \alpha_i \geq 0, \quad \sum_{i=1}^m \alpha_i y_i = 0 \end{aligned} αmaxi=1mαi21i,j=1mαiαjyiyjxiTxjs.t. αi0,i=1mαiyi=0

KKT条件

  • α i ≥ 0 \alpha_i \geq 0 αi0
  • y i ( w T x i + b ) ≥ 1 y_i(w^T x_i + b) \geq 1 yi(wTxi+b)1
  • α i [ y i ( w T x i + b ) − 1 ] = 0 \alpha_i [y_i(w^T x_i + b) - 1] = 0 αi[yi(wTxi+b)1]=0(互补松弛条件)

支持向量的意义 α i > 0 \alpha_i > 0 αi>0 的样本是支持向量,决定超平面位置。

3. 软间隔SVM

当数据不可完全线性分隔时,引入松弛变量 ξ i \xi_i ξi
min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ξ i s.t.  y i ( w T x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 , ∀ i \begin{aligned} &\min_{w,b,\xi} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^m \xi_i \\ &\text{s.t. } y_i(w^T x_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \quad \forall i \end{aligned} w,b,ξmin21w2+Ci=1mξis.t. yi(wTxi+b)1ξi,ξi0,i

  • 参数 C C C:控制间隔最大化与分类错误的权衡。
  • 损失函数:Hinge Loss, max ⁡ ( 0 , 1 − y i ( w T x i + b ) ) \max(0, 1 - y_i(w^T x_i + b)) max(0,1yi(wTxi+b))
4. 核技巧

对于线性不可分数据,通过核函数 K ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) K(x_i, x_j) = \phi(x_i)^T \phi(x_j) K(xi,xj)=ϕ(xi)Tϕ(xj) 将数据映射到高维空间,保持计算效率。

常用核函数

核函数类型公式适用场景
线性核 x i T x j x_i^T x_j xiTxj高维稀疏数据
多项式核 ( γ x i T x j + r ) d (\gamma x_i^T x_j + r)^d (γxiTxj+r)d图像处理、非线性问题
RBF核 exp ⁡ ( − γ ∥ x i − x j ∥ 2 ) \exp(-\gamma \|x_i - x_j\|^2) exp(γxixj2)非线性小样本数据
Sigmoid核 tanh ⁡ ( γ x i T x j + r ) \tanh(\gamma x_i^T x_j + r) tanh(γxiTxj+r)神经网络相关任务

核函数选择流程

高维
低维
小样本
大样本
数据分析
特征维度
线性核
数据规模
RBF核
线性核/多项式核
网格搜索 γ, C

三、Python实现与可视化

以下通过 Scikit-learn 实现 SVM 的分类任务,包含详细注释,并展示决策边界。

1. 线性SVM分类
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm# 生成线性可分的二维数据
np.random.seed(42)
center1 = [-2, -2]
center2 = [2, 2]
X = np.r_[np.random.randn(20, 2) + center1, np.random.randn(20, 2) + center2]
y = [-1] * 20 + [1] * 20# 训练线性SVM模型
model = svm.SVC(kernel='linear', C=1.0)
model.fit(X, y)# 获取超平面参数
w = model.coef_[0]
b = model.intercept_[0]
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx = np.linspace(x_min, x_max, 100)# 计算决策边界
yy = (-w[0] / w[1]) * xx - b / w[1]# 计算间隔边界
margin = 1 / np.linalg.norm(w)
margin_y = margin * np.sqrt(1 + w[0] ** 2)
yy_down = yy - margin_y
yy_up = yy + margin_y# 可视化
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='bwr', s=50, edgecolors='k')
plt.plot(xx, yy, 'k-', label='Decision Boundary')
plt.plot(xx, yy_down, 'k--', label='Margin')
plt.plot(xx, yy_up, 'k--')# 绘制支持向量
plt.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1],s=100, facecolors='none', edgecolors='k', label='Support Vectors')plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.title('Linear SVM with Hard Margin')
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.grid(True)
plt.show()

输出
在这里插入图片描述

2. RBF核SVM处理非线性数据
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_moons
from sklearn.model_selection import GridSearchCV# 设置中文字体和解决负号显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 生成非线性数据(月牙形)
X, y = make_moons(n_samples=100, noise=0.15, random_state=42)# 网格搜索最佳参数
param_grid = {'C': [0.1, 1, 10], 'gamma': [0.1, 1, 10]}
model = GridSearchCV(svm.SVC(kernel='rbf'), param_grid, cv=5)
model.fit(X, y)# 可视化决策边界
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5# 增加网格密度以获得更平滑的决策边界
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 300), np.linspace(y_min, y_max, 300))
Z = model.decision_function(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)# 绘图部分
plt.figure(figsize=(8, 6))# 决策区域填充
plt.contourf(xx, yy, Z, levels=[-float('inf'), 0, float('inf')], alpha=0.3, colors=['blue', 'red'])
# 分隔线和间隔边界
plt.contour(xx, yy, Z, levels=[-1, 0, 1], colors='k', linestyles=['--', '-', '--'], linewidths=1.2)# 数据点绘制
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='bwr', edgecolor='k', s=50, label='样本点')# 支持向量绘制
best_svm = model.best_estimator_
plt.scatter(best_svm.support_vectors_[:, 0], best_svm.support_vectors_[:, 1],s=100, facecolors='none', edgecolors='k', label='支持向量')# 图像美化
plt.xlabel('特征 1')
plt.ylabel('特征 2')
plt.title(f'带 RBF 核的 SVM 分类器 (C={model.best_params_["C"]}, γ={model.best_params_["gamma"]})')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

输出
在这里插入图片描述

(注:显示非线性决策边界,支持向量位于边界附近)

3. 不平衡数据处理
import numpy as np
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import matplotlib.pyplot as plt# 设置中文字体和解决负号显示问题(可选)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 生成不平衡数据
np.random.seed(42)
X_unbalanced = np.r_[np.random.randn(10, 2) - [2, 2],   # 正类(少数类)np.random.randn(100, 2) + [2, 2]  # 负类(多数类)
]
y_unbalanced = [1] * 10 + [0] * 100  # 更常见的标签格式:1 表示正类,0 表示负类# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_unbalanced, y_unbalanced, test_size=0.3, random_state=42, stratify=y_unbalanced
)# 使用 class_weight 处理不平衡
model = SVC(kernel='rbf', class_weight={1: 10, 0: 1}, random_state=42)
model.fit(X_train, y_train)# 在测试集上预测和评估
y_pred = model.predict(X_test)
print("分类报告:")
print(classification_report(y_test, y_pred))# 可视化决策边界和支持向量
x_min, x_max = X_unbalanced[:, 0].min() - 1, X_unbalanced[:, 0].max() + 1
y_min, y_max = X_unbalanced[:, 1].min() - 1, X_unbalanced[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 300), np.linspace(y_min, y_max, 300))
Z = model.decision_function(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)plt.figure(figsize=(8, 6))
plt.contourf(xx, yy, Z, levels=np.linspace(Z.min(), Z.max(), 50), cmap='coolwarm', alpha=0.5)
plt.contour(xx, yy, Z, levels=[-1, 0, 1], colors='k', linestyles=['--', '-', '--'], alpha=0.7)
plt.scatter(X_unbalanced[y_unbalanced == 1, 0], X_unbalanced[y_unbalanced == 1, 1],c='red', label='正类 (少数类)', edgecolors='k')
plt.scatter(X_unbalanced[y_unbalanced == 0, 0], X_unbalanced[y_unbalanced == 0, 1],c='blue', label='负类 (多数类)', edgecolors='k')
plt.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1],s=100, facecolors='none', edgecolors='k', label='支持向量')
plt.xlabel('特征 1')
plt.ylabel('特征 2')
plt.title('SVM 处理类别不平衡数据(带 class_weight)')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

输出
在这里插入图片描述


四、应用场景与实践经验

1. 典型应用场景
领域应用案例SVM优势
图像处理手写数字识别、医学影像分类处理高维稀疏特征
文本分类垃圾邮件过滤、情感分析适合高维文本特征
生物信息学基因序列分类、蛋白质预测小样本高维数据表现优异
金融风控欺诈检测、信用评分鲁棒性强,抗噪声干扰
2. 参数调优建议
  • 惩罚系数 C C C
    • C C C:严格分类,易过拟合。
    • C C C:允许更多错误,模型更简单。
  • RBF核参数 γ \gamma γ
    • γ \gamma γ:决策边界更复杂,适合小样本。
    • γ \gamma γ:决策边界平滑,适合大样本。
  • 调参方法:使用 GridSearchCV 或随机搜索,结合交叉验证。
3. 多分类问题
  • One-vs-Rest (OVR):训练 K K K 个二分类器,每类对其他类。
  • One-vs-One (OVO):训练 K ( K − 1 ) / 2 K(K-1)/2 K(K1)/2 个二分类器,投票决定类别。
  • 流程图
graph TDA[多分类数据] --> B{策略选择}B -->|OVR| C[训练K个二分类器]B -->|OVO| D[训练K(K-1)/2个二分类器]C --> E[投票/概率预测]D --> EE --> F[输出多分类结果]

五、算法局限性与改进

1. 局限性
  • 计算复杂度:SMO算法复杂度约为 O ( m 2 ) O(m^2) O(m2) O ( m 3 ) O(m^3) O(m3),不适合超大规模数据。
  • 多分类扩展:需额外策略(如OVR/OVO),效率较低。
  • 参数敏感 C C C γ \gamma γ 对模型性能影响显著,需仔细调参。
  • 数据要求:对缺失值和噪声敏感,需预处理。
2. 改进方向
  • LS-SVM:用等式约束代替不等式,转化为线性方程组,求解更快。
  • 增量学习:支持在线更新,适合动态数据。
  • GPU加速:如 ThunderSVM,利用并行计算提升效率。
  • 特征选择:结合 PCA 或 L1正则化减少维度。
3. 与深度学习的对比
{"type": "radar","data": {"labels": ["样本需求", "计算效率", "可解释性", "特征工程", "泛化能力"],"datasets": [{"label": "SVM","data": [8, 4, 9, 7, 8],"backgroundColor": "rgba(54, 162, 235, 0.2)","borderColor": "rgba(54, 162, 235, 1)","pointBackgroundColor": "rgba(54, 162, 235, 1)"},{"label": "Deep Learning","data": [2, 8, 3, 2, 9],"backgroundColor": "rgba(255, 99, 132, 0.2)","borderColor": "rgba(255, 99, 132, 1)","pointBackgroundColor": "rgba(255, 99, 132, 1)"}]},"options": {"scale": {"ticks": { "beginAtZero": true, "max": 10 }}}
}

说明

  • SVM 在小样本场景下表现优异,可解释性强,但计算效率较低。
  • 深度学习依赖大数据,特征提取自动化,但在可解释性上较弱。

六、最佳实践与工具推荐

  1. 最佳实践

    • 小样本非线性问题优先使用 RBF 核。
    • 高维稀疏数据使用线性核。
    • 通过交叉验证和网格搜索优化 C C C γ \gamma γ
    • 数据预处理(如标准化、缺失值填补)对性能至关重要。
  2. 工具推荐

    • Scikit-learn:适合快速原型开发。
    • LIBSVM:高效处理大规模数据。
    • ThunderSVM:支持 GPU 加速,适合高性能计算。

七、总结

支持向量机(SVM)凭借其严格的数学理论(凸优化、全局最优)、灵活的核技巧和强大的小样本泛化能力,成为机器学习领域的经典算法。尽管在超大规模数据和多分类任务中存在局限性,但通过改进算法(如 LS-SVM、增量学习)和高效工具(如 ThunderSVM),SVM 依然在图像处理、文本分类、生物信息学等领域有广泛应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87451.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87451.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87451.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

矩阵的范数和逆矩阵的范数的关系

文章目录 前提条件关键结论推导过程简述注意事项示例说明📘 谱范数定义✅ 步骤一:计算 A T A A^T A ATA✅ 步骤二:求 A T A A^T A ATA 的特征值✅ 步骤三:取最大特征值的平方根✅ 对 A − 1 A^{-1} A−1 做同样的操作✅ 最终结…

成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用

课程将最新的人工智能技术与实际的遥感应用相结合,提供不仅是理论上的,而且是适用和可靠的工具和方法。无论你是经验丰富的研究人员还是好奇的从业者,本课程都将为分析和解释遥感数据开辟新的、有效的方法,使你的工作更具影响力和…

Debian12 安装 sippts

试了试,貌似不复杂,记录如下: apt-get install -y python3 python3 --version # 3.11.2 apt-get install -y python3-pip pip3 --version # 24.3.1 rm /usr/lib/python3.11/EXTERNALLY-MANAGED cd /usr/src git clone https://github.com/…

VR Panorama 360 PRO Renderer保姆级别教程

总览: 全景图及全景视频录制插件有两个 一个是件(以下简称VR360插件) 一个是Unity官方的Unity Recorder插件(以下简称Recorder插件) 在图片清晰度上VR 360插件要高于Recorder插件,所以渲染全景图时,优先使用VR 360插件,当然全景视频也可以使用VR360插件。 但VR 360插件…

cv610将音频chn0配置为g711a,chn1配置为 aac编码,记录

cv610将音频chn0配置为g711a,chn1配置为 aac编码,记录 工程代码在文章底部 编译时放在 sdk的同级目录 sdk_version: sdk_V010,打了AOV的补丁 aenc可以配置为 chn0=g711a, chn1=aac 设置两个编码通道为不同编码属性 主要思路为在 ss_mpi_aenc_create_chn时将 chn1配置编码为…

CAD2018,矩形设计,新增文字,块新增与打散

一、矩形设计 1.选择页面,点击左键,直接输入【rec】,回车; 2.长按鼠标左键,拉出矩形,抬起左键。 3. 会生成一个矩形框。 4. ①输入宽度数值,②输入逗号切换到高度,③输入高度。 5.成…

day047-部署我的世界-java版服务器

文章目录 1. 官方地址2. Ubuntu配置服务端2.1 下载服务端jar包,并上传2.2 安装jdk2.3 启动服务端2.4 设置云安全组 3. 客户端-我的世界启动器 1. 官方地址 官方服务端下载地址:[Minecraft 服务器下载 | Minecraft](https://www.minecraft.net/zh-hans/d…

飞算JavaAI:精准切中开发者痛点,专治“AI生成代码不可用、逻辑混乱”的顽疾

飞算JavaAI:精准切中开发者痛点,专治“AI生成代码不可用、逻辑混乱”的顽疾 一、前言二、关于飞算JavaAI2.1 飞算JavaAI来源2.2 飞算JavaAI超能力 三、飞算JavaAI我的另一半3.1 Idea安装配置3.2 Main方法写个九九乘法表3.3 Main方法写个冒泡排序3.4 老项…

伞兵 钓鱼的肝

题目描述 为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区…… 输入格式 第一行两个整数 n,m,表示敌国的大小。 以下 n 行&am…

GoFastDFS:轻量级高性能分布式文件存储解决方案(Linux安装部署)

一、GoFastDFS概述 GoFastDFS是一个基于HTTP协议的分布式文件存储系统,采用Go语言开发,具有轻量级、高性能、易部署等特点。它专为互联网应用设计,特别适合图片、视频、文档等中小文件的存储与分发场景。 它基于大道至简的设计理念&#xf…

python 原型污染 perl符号表污染 -- Google 2025 MYTHOS

题目实现了一个Game,分为前后端 part 1 前端存在明显原型污染 def copy(src, dst):for k, v in src.items():if hasattr(dst, "__getitem__"):if dst.get(k) and type(v) dict:copy(v, dst.get(k))else:dst[k] velif hasattr(dst, k) and type(v) dict:copy(v, ge…

数据结构day4——栈

目录 一、栈的核心概念 什么是栈? 栈的核心特性 二、栈的基本操作 三、C 语言实现栈的两种方式 1. 顺序栈(基于数组实现) 实现代码 顺序栈的优缺点 2. 链式栈(基于链表实现) 实现代码 链式栈的优缺点 四、…

用户系统的架构设计与实现策略(二)

一个用户系统除了基本的用户业务功能,还应囊括用户的权限设计及其实现。这本文中我们将探讨一下关于用户权限的设计与实现方法论。 简介 在构建现代应用系统的过程中,很少有设计决策会像访问控制机制那样,对安全性、可扩展性和用户体验产生…

深度学习-逻辑回归

逻辑回归的目的 逻辑回归只判断样本属于正类的概率是多大,0-1之间 找到一组最佳的权重(w1,w2,w3,…) ,b,使得模型预测的概率 P(Y1) 尽可能接近样本的真实标签(1 或 0)。 计算过程 前向传播过程…

对象池模式:减少GC的Kotlin实战指南

对象池模式通过对象复用机制,将对象生命周期从"创建-销毁"转变为"借出-归还",显著减少GC压力。下面通过完整实例展示其实现细节。 一、对象池工作原理图解 #mermaid-svg-Edrz4np9hD6DJdNi {font-family:"trebuchet ms",v…

Java接口报错:Packet for query is too large - 解决方案与架构思考

Java接口报错:Packet for query is too large - 解决方案与架构思考 背景与技术原理解决方案体系(扩展版)一、MySQL服务端配置(永久生效)配置文件修改(推荐生产环境) 文件路径参考Linux: /etc/m…

7月2日作业

思维导图 一、创建一个进程扇 代码 #include <25041head.h>int main(int argc, const char *argv[]) {pid_t pid;for(int i1;i<4;i){pidfork();if(pid>0){sleep(1);}if(pid0){printf("我是子进程%d:%d,父进程%d\n",i,getpid(),getppid());sleep(1);re…

设计模式(九)

职责链模式&#xff08;Chain of Responsibility&#xff09;详解 一、核心概念 职责链模式将请求的发送者和接收者解耦&#xff0c;使多个对象都有机会处理请求。这些对象连接成一条链&#xff0c;请求沿着链传递&#xff0c;直到有一个对象处理它为止。该模式允许动态调整处…

左神算法之Zigzag方式打印矩阵

目录 Zigzag方式打印矩阵1. 题目2. 解释3. 思路4. 代码5. 总结 Zigzag方式打印矩阵 1. 题目 用zigzag的方式打印矩阵&#xff0c;比如下面的矩阵&#xff1a; 0 1 2 3 4 5 6 7 8 9 10 11打印顺序为&#xff1a;0 1 4 8 5 2 3 6 9 10 7 11 2. 解释 Zigzag打印矩阵是指按照…

【前端批量下载图片,并打包成压缩包下载】

一、需求说明 我现在有个需求&#xff1a; 1.列表中有个下载按钮&#xff0c;点击下载&#xff0c;将列表中所有的图片打成压缩包&#xff0c;并下载 2.效果演示点击查看效果 最终效果&#xff1a; 二、安装下载插件 实现此功能需要两个插件&#xff1a;jszip、file-saver …