首页/新闻资讯/正文详情

UNSW-NB15网络攻击检测毕设源码实战:从环境配置到部署排坑

发布时间:2026/9/25 22:57:56 来源:云帆数科 栏目:资讯中心
UNSW-NB15网络攻击检测毕设源码实战:从环境配置到部署排坑
简介面向计算机相关专业毕业设计、课程设计与入门实践的机器学习项目资源围绕 UNSW-NB15 数据集提供网络攻击检测的完整算法实现。数据集涵盖多种现代攻击流量项目基于经典监督学习思路集中展示决策树二分类、逻辑回归与 KNN 近邻分类三类模型便于读者对照不同算法在入侵检测场景下的分类流程与效果差异。压缩包共 4 个文件由 3 个 Python 脚本和 1 个 Markdown 说明文件组成脚本对应三种算法核心实现说明文件提供项目结构、运行方式等内容整体仅约 12KB轻量易读简单部署即可运行。目前已有 143 人学习下载代码功能经过验证。读者既能直接复现并理解算法如何利用 UNSW-NB15 数据特征区分攻击行为也能在此基础上调整特征、参数或评估方法用于课程报告、毕业设计或答辩演示是一份实用性与完成度兼备的实践资料。1. 使用 UNSW-NB15 数据集做网络攻击检测这套毕设源码到底怎么用拿到一个写着“机器学习算法 网络攻击检测 简单部署即可运行”的毕设压缩包绝大多数人的第一反应是怕二次开发成本太高数据从哪来、特征要不要自己标、模型能不能跑起来。实际上UNSW-NB15 是网络流量审计方向做入侵检测IDS研究最常用的公开数据集之一49 维特征已经拆好官方训练集和测试集剩下要做的就是数据预处理、模型训练和结果展示。这套 zip 把这三步封装成了现成脚本解压后补好数据路径就能出准确率、召回率和混淆矩阵非常适合计算机、网络安全、大数据方向的毕业设计或课程设计。它帮你省掉的时间恰恰是查论文和从零调参最痛苦的那部分。2. 环境准备与数据集落地三个步骤让源码第一次跑通打开压缩包后先别急着双击 train.py。毕设源码最常见的问题不是模型写错而是环境不一致导致脚本第一行就报错。我一般会按三个顺序做先建虚拟环境再把数据集放到约定目录最后改配置文件。三步做完再运行基本能一次跑通。2.1 先建虚拟环境为什么建议 Python 3.9 而不是 3.12这类毕业设计代码通常写于两三年前依赖的是当时版本的 sklearn、pandas 和 numpy。Python 3.12 对旧版 pandas 的兼容性很差比如 pandas 1.5.x 在新解释器上会直接触发编译错误反过来Python 3.7 又装不了新版 xgboost。折中方案是 Python 3.9 或 3.10这两个版本几乎能覆盖所有常用机器学习库的历史版本区间。cd attack_detection python -m venv venv # Windows 下激活 venv\Scripts\activate # Linux / macOS 下激活 source venv/bin/activate python --version pip install -r requirements.txt这里有一个容易翻车的细节如果 zip 里没有 requirements.txt只有一句“需要安装 sklearn 等依赖”你按最新版本装完老代码大概率会报AttributeError: module sklearn has no attribute ...。原因是 scikit-learn 1.3 之后弃用了一批旧接口。我的做法是安装一组经过验证的版本组合例如numpy1.24.3、pandas1.5.3、scikit-learn1.2.2、xgboost1.7.6、streamlit1.25.0然后把它们写回 requirements.txt。这套组合在 2023 年到 2025 年的大部分毕设源码里都能直接跑。提示虚拟环境一定要建在项目根目录下不要建在系统 Python 里。后面切换目录或复制项目时整个文件夹带走即可不会污染其他项目也不会被本机其他版本的包干扰。2.2 UNSW-NB15 数据集放对位置四个文件各管什么UNSW-NB15 数据集由澳大利亚新南威尔士大学发布原始压缩包解压后会得到多个 CSV 文件。做毕设必须认准这四个关键文件训练脚本默认读的就是它们。文件作用记录数UNSW_NB15_training-set.csv官方划分的训练集带完整标签约 17.5 万条UNSW_NB15_testing-set.csv官方划分的测试集带标签约 8.2 万条UNSW_NB15_GT.csvGround Truth记录每条流对应的真实攻击类别与测试集一一对应NUSW-NB15_features.csv49 个特征的名字和中文/英文说明特征映射参考下载后建议统一放进项目下的 data 目录并保持文件名不变。训练脚本里一般写死的路径是data/UNSW_NB15_training-set.csv如果你改了文件名脚本会报FileNotFoundError。unzip UNSW_NB15_CSV.zip -d data/ mv data/UNSW_NB15_training-set.csv data/train.csv mv data/UNSW_NB15_testing-set.csv data/test.csv ls -lh data/这里要特别提醒不要用 Excel 打开这些 CSV 再另存。Excel 会自动把sport、dsport这类长数字列改成科学计数法把2000变成2E03一旦保存特征精度就废了。如果发现数据文件被 Excel 动过重新解压原始文件覆盖回去这是最省事的后悔药。2.3 修改配置文件让源码知道数据从哪读大多数毕设项目会有一个config.py或者config.yaml集中管理路径和随机参数。它不涉及模型逻辑却是最容易改错的地方。比如相对路径写的是./data但你在项目外执行脚本就会因为当前工作目录不对而找不到文件。# config.py DATA_DIR data TRAIN_FILE UNSW_NB15_training-set.csv TEST_FILE UNSW_NB15_testing-set.csv MODEL_DIR models RANDOM_STATE 42 # 如果是 Windows路径按下面写法更稳 # DATA_DIR os.path.join(os.path.dirname(__file__), data)参数说明RANDOM_STATE 42是随机种子固定它之后每次训练的结果完全一致答辩时复现数据不会“这次 97%下次变 91%”。MODEL_DIR是模型输出目录训练完的.pkl文件会存到这里后面部署阶段要加载它。第一次跑通前不要动模型参数先让脚本用默认值完整跑完一遍确认数据读取和特征处理没有报错再谈调优。3. 解开 UNSW-NB15 的 49 个特征预处理脚本里必改的参数这个数据集的完整特征有 49 维划分成六组流特征srcip、sport、dstip、dsport、proto、基本特征state、dur、spkts、dpkts、sbytes、dbytes、内容特征ct_state_ttl、ct_dst_src_ltm 等、时间特征stime、ltime、sjit、djit、额外生成特征is_ftp_login、ct_ftp_cmd 等以及标签特征attack_cat、label。多数学生在跑通之前最头疼的是文本列怎么变数值、归一化用哪个、测试集要不要重新 fit——这三件事都写在预处理脚本里改错一个参数模型效果会直接垮掉。3.1 列映射与哑变量编码把 proto/service/state 变成数值49 维里真正需要特殊处理的文本列只有三个proto协议、service服务类型、state连接状态。其他列基本都是数值型。sklearn 的树模型不能直接吃字符串所以必须编码。常见做法是用pd.get_dummies()做哑变量编码而不是LabelEncoder()因为协议和状态之间没有大小关系LabelEncoder把tcp编码成 1、udp编码成 2会误导模型认为 2 比 1 大。import pandas as pd df pd.read_csv(data/UNSW_NB15_training-set.csv) # 行号 id、源/目的 IP 在识别攻击时没有泛化价值先去掉 drop_cols [id, srcip, dstip] df df.drop(columns[c for c in drop_cols if c in df.columns]) # 对三个文本列做独热编码注意 drop_first 保持为 False cat_cols [proto, service, state] df pd.get_dummies(df, columnscat_cols, drop_firstFalse)逻辑说明drop_firstTrue会减少一个列但对新数据做预测时如果测试集里某个类别没出现列数就会对不上部署阶段报Feature shape mismatch。所以我在这里坚持用drop_firstFalse宁可多几列也要保证训练和预测时的列完全一致。这个选择后面在部署时会省掉很多排查时间。3.2 归一化与类别不平衡两个学生最常填错的参数归一化不是所有模型都必需。随机森林、XGBoost 这类树模型对特征尺度不敏感不归一化也能跑但逻辑回归和 KNN 这类基于距离或梯度的算法不归一化会收敛慢甚至结果跑偏。毕设里通常的做法是对全部特征做标准化这样无论后面换哪个算法都不用回头再改预处理。from sklearn.preprocessing import StandardScaler # 只取数值列做标准化 numeric_cols df.select_dtypes(include[float64, int64]).columns scaler StandardScaler() df_scaled df.copy() df_scaled[numeric_cols] scaler.fit_transform(df[numeric_cols])这里最容易踩的坑是在测试集上再调用一次fit_transform。正确的做法是训练集上fit_transform测试集上只transform。否则测试集的均值和方差会混进训练过程造成所谓的数据泄漏测试指标虚高论文数据经不起推敲。类别不平衡也需要在预处理阶段处理。UNSW-NB15 的二分类标签label里normal 和 attack 比例大约四六开不算极端但多分类标签attack_cat里Worms、Backdoors 这类攻击样本极少可能只有几百条而 Generic 有上万条。针对二分类常见做法是给模型传class_weightbalanced让少数类获得更高权重针对多分类则可以考虑对低样本类别做上采样SMOTE或直接放弃多分类、只做二分类。# 二分类场景下直接在模型里指定类别权重不必手动改数据 model RandomForestClassifier(class_weightbalanced, random_state42)3.3 训练集与测试集划分官方文件用还是不用UNSW-NB15 自带官方训练集和测试集强烈建议直接用。原因是网上大量论文都基于官方划分报告结果你用同样的划分指标才有可比性如果用train_test_split随机切虽然也能跑但别人无法复现你的实验对照。# 预处理完的官方训练集/测试集 X_train df_train_scaled.drop(columns[label, attack_cat]) y_train df_train_scaled[label].astype(int) X_test df_test_scaled.drop(columns[label, attack_cat]) y_test df_test_scaled[label].astype(int) print(X_train.shape, X_test.shape)逻辑说明特征矩阵只保留数值特征列label是二分类标签attack_cat是具体攻击类型训练二分类模型时二者都要从特征里去掉。但attack_cat不要急着删掉文件里的列后面做多分类分析、画按类别的混淆矩阵时还要用。如果你是做课程设计而不是毕设想缩短训练时间也可以把官方测试集的 8 万多条数据只取一部分但要在报告里说明采样比例和随机种子。4. 机器学习算法选型与训练脚本从逻辑回归到随机森林和 XGBoost很多人以为毕设的核心是“把模型训练出来”其实训练只是几行代码的事核心是讲清楚“为什么选这个算法、参数为什么这么设、效果好在哪”。UNSW-NB15 上的常见做法是跑三组基线模型逻辑回归、随机森林、XGBoost然后用统一的评估指标做对比。随机森林通常是主力模型逻辑回归负责证明“线性模型不够用”XGBoost 负责刷高分数。4.1 算法对比基线先跑哪个、再跑哪个从工程角度看这四种算法在 UNSW-NB15 上的表现差异很大选型的核心依据是数据形态和资源限制。模型训练速度约 17.5 万条解释性调参难度本数据集上的典型表现逻辑回归极快几十秒高系数可解释低中上约 85%~90%决策树快高低中等容易过拟合随机森林中等3~8 分钟较高有特征重要性中高95% 以上XGBoost较慢10 分钟以上中高很高上限最高我一般会先跑逻辑回归因为它是线性基准能快速验证特征预处理是否正常如果逻辑回归都能到 90%说明特征里信息量足够如果它只有 70%多半是预处理出了问题这时候调随机森林也没用。随后再跑随机森林作为正文主模型最后用 XGBoost 作为“提升尝试”写入对比表。4.2 训练脚本核心代码随机森林参数逐项拆解下面这段是训练随机森林二分类模型的最小可用版本也是毕设项目里最常见的核心训练代码。import joblib from sklearn.ensemble import RandomForestClassifier model RandomForestClassifier( n_estimators100, max_depth20, min_samples_leaf2, min_samples_split10, class_weightbalanced, n_jobs-1, random_state42, ) model.fit(X_train, y_train) joblib.dump(model, models/rf_model.pkl) joblib.dump(scaler, models/scaler.pkl) joblib.dump(X_train.columns.tolist(), models/cols.pkl)参数说明n_estimators100是随机森林里的树数量100 棵在性能和耗时之间比较平衡超过 200 棵准确率提升很有限但训练时间翻倍。max_depth20限制单棵树深度防止学到训练集里的噪声。min_samples_leaf2和min_samples_split10是防止过拟合的两个剪刀叶子节点至少 2 个样本分裂节点至少 10 个样本对 17.5 万条数据来说非常宽松。class_weightbalanced是给少数类加权上面讲过不再重复。n_jobs-1表示用满所有 CPU 核心不设的话默认单核训练时间会拉长四五倍。存模型时我习惯把scaler和训练时的列名一起存下来而不是只存模型。因为部署阶段要把新的输入数据先过同一套标准化再按同样的列顺序送入模型。只存模型不存列名是部署时特征错位的第一大原因。4.3 评估指标与模型保存confusion_matrix 和 joblib 的用法很多论文喜欢把 Accuracy 放第一位但 UNSW-NB15 这种类别不平衡的数据集光看准确率会骗人。比如把所有样本都预测成 normal准确率可能都有 40% 以上这显然不是好模型。所以评估至少要看准确率、精确率、召回率、F1 分数四件套外加混淆矩阵。from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score y_pred model.predict(X_test) y_proba model.predict_proba(X_test)[:, 1] print(classification_report(y_test, y_pred, target_names[normal, attack])) print(AUC:, roc_auc_score(y_test, y_proba)) cm confusion_matrix(y_test, y_pred) print(cm)理解混淆矩阵的输出左上角是真正例把 attack 判成 attack右上角是假负例攻击漏报左下角是假正例normal 误报为攻击右下角是真负例。做毕设时漏报比误报更严重因为你希望模型把攻击流量尽可能兜住。如果发现召回率明显低于精确率说明模型过于保守只在“非常确定”时才判攻击这时应该调低预测阈值或加大少数类权重。5. 本地部署与 5 个常见问题从训练完到能演示的全程排坑毕设交付的标准是“能现场跑演示”所以部署环节不能只停留在训练脚本。压缩包标题里写了“简单部署即可运行”通常意味着项目里已经带了图形界面或接口脚本。部署方式的选择上我一般推荐 Streamlit 而不是 Flask因为 Streamlit 只需要写一个 Python 脚本纯前端界面自动生成对答辩演示足够友好。5.1 用 Streamlit 写出预测界面上传 CSV 立刻出结果部署脚本的核心任务只有两件事加载训练好的模型和标准化器接收用户上传的 CSV输出每条流是不是攻击。难点在列对齐因为训练时做过独热编码列数可能有几十到上百列用户上传的 CSV 往往只包含原始字段必须用reindex补齐缺失列。import streamlit as st import joblib import pandas as pd st.cache_resource def load_model(): model joblib.load(models/rf_model.pkl) scaler joblib.load(models/scaler.pkl) cols joblib.load(models/cols.pkl) return model, scaler, cols model, scaler, cols load_model() st.title(UNSW-NB15 网络攻击检测系统) uploaded st.file_uploader(上传待检测流量 CSV, type[csv]) if uploaded is not None: df pd.read_csv(uploaded) # 用训练时的列名重新索引缺失列填 0多余列丢弃 df df.reindex(columnscols, fill_value0) X scaler.transform(df) pred model.predict(X) result pd.Series(pred).map({0: normal, 1: attack}) st.write(result.value_counts())这段代码的关键是df.reindex(columnscols, fill_value0)它保证用户上传文件的列顺序即使与训练时不同也会被强制对齐到训练时的顺序缺失的独热编码列自动补 0。这比让用户手动整理列顺序要稳得多也省掉了大部分部署报错。启动命令很简单streamlit run app.py --server.port 8501本地部署完成后浏览器访问http://localhost:8501界面会提供文件上传按钮选一个 CSV 就能看到预测统计。注意 Streamlit 默认端口是 8501如果被占用就换成 8502。5.2 问题一特征数量对不上predict 报错现象运行预测时出现类似ValueError: X has 48 features, but RandomForestClassifier is expecting 50 features。 原因训练时的独热编码生成了 50 列新上传的 CSV 里某个文本列的取值集合缺了一项或pd.read_csv把纯数字列读成了 float列数不一致。 解决按前面 5.1 的代码先reindex再用模型预测同时检查上传 CSV 的表头是否包含全部原始特征列名。如果只有部分特征需要明确告诉用户“上传文件必须包含训练集同款字段”。5.3 问题二训练集测试集正常预测却全是 normal现象测试集指标显示准确率 96%但部署后随便传一个流量文件预测结果全是 normal。 原因最常见的是部署时误用了标准化器的fit_transform而不是transform或者上传 CSV 的列里有大量空值fill_value0填到了错误位置特征值整体偏小导致树模型全部走进了 normal 分支。 解决先用训练阶段保存的 scaler 重新检查一遍部署代码再打印几条样本的预测概率predict_proba看概率值是否都在 0.2 以下。如果是把归一化改回scaler.transform即可。5.4 问题三内存溢出、训练停在一半现象训练 17.5 万条数据时内存占用飙到 10GB或者随机森林跑了十分钟还没结束。 原因独热编码把service拆成几十列全表宽度变大同时随机森林默认深度无限单棵树分裂得很深内存和耗时都会爆炸。 解决把max_depth限制在 20~30min_samples_split设为 10n_estimators保持 100。如果仍然卡先降为 50 棵树跑通全流程答辩前再恢复到 100。5.5 问题四Excel 打开过数据集数字全变科学计数法现象预处理脚本跑出来一堆负数或者端口列出现2E05这种值。 原因前面提过用 Excel 打开过 CSV 再另存长数字列会被改成科学计数法数值精度被破坏。 解决重新解压官方数据集不要做任何中间编辑。如果确实需要预览数据用pd.read_csv()在 Python 里查看或者用 VS Code 打开 CSV不要用 Excel。5.6 问题五Windows 控制台乱码导致脚本中断现象运行streamlit run app.py或训练脚本时控制台报UnicodeEncodeError或者界面标题显示乱码。 原因Windows 默认编码是 GBK脚本里的中文字符串输出到控制台时编码冲突。 解决在启动命令前设置环境变量PYTHONIOENCODINGutf-8或把脚本第一行加上# -*- coding: utf-8 -*-并确保代码文件保存为 UTF-8 格式。set PYTHONIOENCODINGutf-8 streamlit run app.py --server.port 85016. 答辩前必须做的进阶验证把准确率讲成完整故事模型跑出 95% 以上的准确率只能证明“跑通了”答辩时老师们更关心你是否理解为什么有效。我会在最后一周补三件事特征重要性、多分类混淆矩阵、ROC 曲线对比并把它们写进论文的结果分析章节。先看特征重要性。随机森林训练后可以直接输出每个特征对分类的贡献度排序结果通常能解释安全问题。比如sload源端每秒负载、sttl源到目的 TTL、dload、ct_state_ttl这些特征往往排在前列说明攻击流在数据包大小、连接状态变化上与正常流量有明显差异。答辩时能指着图说出“为什么负载类特征重要”比单纯报数字更有说服力。import matplotlib.pyplot as plt importance pd.Series(model.feature_importances_, indexcols).sort_values(ascendingTrue) importance.tail(15).plot.barh(figsize(10, 8)) plt.tight_layout() plt.savefig(figures/feature_importance.png)再看多分类。二分类只是“是不是攻击”但 UNSW-NB15 的attack_cat有 9 类攻击毕设里如果能额外输出一张按攻击类别统计的混淆矩阵就能看出模型在 Worms、Backdoors 这类小样本类别上召回率偏低。这个发现本身就是答辩时的亮点远比“准确率 99%”更真实、更有讨论价值。最后是模型对比。把逻辑回归、随机森林、XGBoost 三个模型在同一个测试集上的 ROC 曲线画在一起列出 AUC 值。随机森林通常 AUC 在 0.97 以上逻辑回归在 0.9 左右XGBoost 有时能到 0.99。这张图能支撑你“为什么最终选择随机森林”的论点也能诚实地说出 XGBoost 的提升有限、但训练成本更高。我习惯把每次实验用的随机种子、预处理版本、特征列数都记录在 README 里答辩前一天固定参数重新跑一遍完整流程确认所有截图和数据一致后再进教室。这道工序看起来慢却可以避免演示时因一次性修改导致预测结果对不上论文数据这种尴尬。希望以上的踩坑记录和部署细节能帮你把这份源码变成一篇真正讲得清、跑得动的毕业设计。本文还有配套的精品资源点击获取

相关推荐

一个S型曲线小demo,彻底搞懂扩散模型的核心机制
一个S型曲线小demo,彻底搞懂扩散模型的核心机制

简介:这是一份面向初学者的扩散模型演示项目,内置 Jupyter 笔记本源码与演示动画,通过生成 S 型曲线来展示扩散过程从缓慢起步、快速攀升到逐渐饱和的完整三阶段,可帮助读者直观理解新技术或信息在群体中传播的规律。压缩包共包含… · 2026/9/25 22:57:49

七星卫通技术专业吗
七星卫通技术专业吗

从北斗卫星导航系统完成全球组网,到天通一号卫星移动通信系统建成,国产卫星通信产业从追赶到并跑,从单点突破到体系成型,走过了十余年的攻坚旅程。在这片关乎信息安全、关乎极端场景通信保障的蓝海中,北京七星卫通科技… · 2026/9/25 22:57:49

OpenClaw卸载残留清理指南:服务、配置、缓存三步彻底清除
OpenClaw卸载残留清理指南:服务、配置、缓存三步彻底清除

卸载这类带后台服务的 AI 代理工具,最恼人的不是卸载本身,而是卸载完总觉得哪儿不对劲——端口还在监听,开机又弹出日志报错,翻遍系统目录还有一堆.json、.db、.log残留。OpenClaw 尤其典型,它既有 CLI 主程序&#xf… · 2026/9/25 22:57:25

都以为 AI 越来越便宜,麦肯锡却说:真让它干活,可能贵 30 倍
都以为 AI 越来越便宜,麦肯锡却说:真让它干活,可能贵 30 倍

AI 语音、模型的 token 价格一路暴跌,企业AI账单却一路涨。麦肯锡给正在狂欢喊"AI 降本"的人泼了盆冷水:会聊天的 AI 是便宜了,会让它干活的那种"智能体"(Agent),同一件任务成本能差 3… · 2026/9/25 23:27:01

Codeg Token 用量报告完整指南:趋势、缓存命中率与活动热力图,如何快速优化 AI 编程成本
Codeg Token 用量报告完整指南:趋势、缓存命中率与活动热力图,如何快速优化 AI 编程成本

Codeg Token 用量报告完整指南:趋势、缓存命中率与活动热力图,如何快速优化 AI 编程成本 【免费下载链接】codeg Collaborative multi-agent AI coding workspace: aggregate sessions from Claude Code, Codex, OpenCode, Pi, Grok Build, etc. Desktop… · 2026/9/25 23:26:13

Rocky Linux 9.6一键升级OpenSSH 10.2与OpenSSL 3.5安全整改指南
Rocky Linux 9.6一键升级OpenSSH 10.2与OpenSSL 3.5安全整改指南

简介:面向RockyLinux 9.6等EL9系发行版运维人员的一键升级包,用于将系统内置OpenSSH与OpenSSL批量升级至ssh 10.2p1和ssl 3.5.4版本。其核心价值在于通过统一脚本和RPM包解决手动编译升级易出错、依赖冲突等痛点,适用于需要修复已知安全漏洞的… · 2026/9/25 23:26:13

IM协议调试工具imakit 9.13:面向高并发场景的本地可观测性中枢
IM协议调试工具imakit 9.13:面向高并发场景的本地可观测性中枢

简介:IM安卓开发工具箱imakit 9.13是面向Android ROM开发者、刷机爱好者及系统定制工程师的专业级工具集,聚焦于刷机包制作、img镜像备份、多格式转换(img/dat/br)与脚本化自动化处理,显著提升ROM调试、系统还原与批量… · 2026/9/25 23:26:07

如何用AI拆解机构研报:AlphaGBM Skills研报拆解工作流保留原始评级与关键假设
如何用AI拆解机构研报:AlphaGBM Skills研报拆解工作流保留原始评级与关键假设

如何用AI拆解机构研报:AlphaGBM Skills研报拆解工作流保留原始评级与关键假设 【免费下载链接】skills Bring realtime market data and research workflows into Claude Code, Cursor & beyond — 29 open-source Skills for stocks, options and commodities.… · 2026/9/25 23:26:07

CTF 内核利用视角下的 KPTI(Kernel Page Table Isolation)机制解析与绕过实战
CTF 内核利用视角下的 KPTI(Kernel Page Table Isolation)机制解析与绕过实战

文档网络安全教程 【免费下载链接】ctf-wiki Come and join us, we need you! 项目地址: https://gitcode.com/gh_mirrors/ct/ctf-wiki 点击查看 免费下载 导读 本文以 CTF-Wiki(zh-tw)中 KPTI 文档 为骨架,系统讲解 Linux 内核… · 2026/9/25 23:26:07

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码