跳至正文
这篇笔记的目录
回到笔记存档
技术开发

安全创客实践(2026)

实习实践报告,记录 Linux、Git、算法训练、工程实践与实时对抗 AI 项目,并附上完整答辩演示稿。

#安全创客实践#Linux#Git#算法#AI

实习实践报告#

安全创客实践(2026)

以 Linux、Git、算法训练、软件工程实践与实时对抗 AI 项目为核心的综合实践总结。


一、实践主要内容及进程#

项目概述#

本次安全创客实践以 Linux、Git、程序调试、软件测试与算法训练 为基础,以 “蒜头攻防大作战”实时网格对抗 AI 为综合项目。

平台要求角色每回合向上下左右相邻格移动,处理苹果、护盾、身体增长、双方同步行动和周期性缩圈等机制。

其中核心函数:

walk()

需要在 100 ms 内返回合法动作,同时评测代码不得:

  • 输出标准信息;
  • 读写文件;
  • 创建额外进程。

团队整体采用:

工程工具学习 → 算法能力训练 → 规则建模 → AI 迭代 → 回归测试与答辩

的推进路线。


第一阶段:工程基础训练(7 月 5 日 ~ 7 月 7 日)#

学习内容#

完成:

  • Linux 环境使用;
  • Git 版本控制;
  • 程序调试;
  • 代码规范;
  • 防御式编程实践。

Git 与工程协作#

通过以下操作练习版本管理:

Terminal window
init
add
commit
branch
merge
rebase
clone
fetch
pull

掌握:

  • 版本回退;
  • 冲突处理;
  • 远端协作。

调试与测试#

结合:

  • 编译警告;
  • 日志分析;
  • 断言;
  • gdb;
  • gcov;
  • 黑盒测试;
  • 白盒测试。

定位:

  • WA(Wrong Answer)
  • TLE(Time Limit Exceeded)
  • RE(Runtime Error)

等问题。

同时围绕:

  • Bash 危险操作防护;
  • 字符串函数安全使用;
  • 动态数组安全;
  • 输入检查;
  • 边界处理;

建立防御式编程意识。


第二阶段:算法能力训练(7 月 8 日 ~ 7 月 11 日)#

集中学习:

  • 队列;
  • 栈;
  • 链表;
  • 图;
  • 搜索算法。

完成:

  • DFS;
  • BFS;
  • Dijkstra;
  • SPFA;
  • 贪心算法;
  • 启发式搜索。

通过:

  • 迷宫问题;
  • 连通块问题;
  • 最短路问题;
  • 状态搜索问题;

理解不同数据结构与算法的适用场景。

贪吃蛇状态搜索#

在算法训练中,使用:

四进制 Hash + BFS

压缩蛇身方向状态。

以:

蛇头坐标 + 形状编码

作为搜索状态,为后续综合项目中的:

  • 动态状态重建;
  • 搜索判重;

提供方法基础。


阶段整理(7 月 12 日)#

按照实训安排休息,并整理:

  • 前阶段代码;
  • 错题记录;
  • 学习笔记。

为工程实践阶段做好准备。


第三阶段:工程实践训练(7 月 13 日)#

完成:

  • 自制简易 OJ;
  • “实现自己的 Shell”实验。

自制 OJ#

通过:

Makefile
编译执行
输入输出对比
结果判定

串联完整程序评测流程。

Shell 实验#

结合:

  • 进程;
  • 地址空间;
  • 父子进程;
  • fork();
  • exec();

实现:

  • 命令读取;
  • 命令解析;
  • 子进程执行。

进一步理解用户态程序与操作系统接口。


第四阶段:实时对抗 AI 综合项目(7 月 14 日 ~ 7 月 15 日)#

项目名称:

蒸头攻防大作战

首先分析:

  • Player 接口;
  • 地图规则;
  • 护盾机制;
  • 身体增长;
  • 同步行动;
  • 缩圈规则;
  • 碰撞规则。

随后实现:

状态建模#

包括:

  • 身体历史记录;
  • 尾格释放模拟。

BFS 多指标评估#

对候选落点计算:

  • 连通面积;
  • 出口数量;
  • 资源距离;
  • 尾部连通性;
  • 缩圈风险。

对手策略推演#

枚举对手所有合法一步:

  • 模拟同格碰撞;
  • 计算最坏情况;
  • 对己方动作进行评分。

第五阶段:测试与优化(7 月 16 日)#

使用:

Terminal window
./run.sh
./run.sh --visible

结合:

  • 日志;
  • 多地图;
  • 多对手环境;

完成回归测试与性能验证。

整理:

  • 项目仓库;
  • README;
  • 演示文稿;
  • 实践报告。

复核:

  • 核心算法;
  • 时间复杂度;
  • 测试数据;
  • 工程约束。

第六阶段:项目答辩(7 月 17 日)#

围绕:

  • 任务规则;
  • 状态重建;
  • BFS 多指标评估;
  • 对手最坏情况推演;
  • 复杂度分析;
  • 测试结果;

完成成果展示,并回答教师提问。


二、主要收获与体会#

工程能力提升#

本次实践将零散的:

  • Linux;
  • Git;
  • 调试;
  • 测试;
  • 算法知识;

串联成完整工程链路。

版本控制使策略调整:

可追踪、可回退。

日志、gdb、覆盖分析和批量回归使问题定位从:

“凭感觉修改”

转变为:

“基于可复现实验证”。

同时,通过:

  • 编译警告;
  • 合法性判断;
  • 接口兜底;

使时间、空间和异常行为具有明确边界。


算法思维提升#

团队认识到:

实时对抗的关键不是简单追逐最近资源,而是建立符合裁判规则的动态模型。

身体历史和尾格释放决定下一回合真实可用空间。

BFS 不仅用于最短路,还能够复用:

  • 面积;
  • 出口;
  • 资源;
  • 回尾;

等多个指标。

面对同步行动的不确定性:

对手全枚举 + 最坏情况评分

比单一路线预测更加稳定。


工程协作提升#

阶段目录、统一脚本、README 与答辩材料降低了团队沟通成本。

实践证明:

文档和展示不是开发后的附属工作,而是工程质量的重要组成部分。

只有明确:

  • 规则;
  • 数据结构;
  • 函数职责;
  • 复杂度;
  • 能力边界;

才能及时发现实现偏差,并形成可复用方法。


三、对实践单位的建议#

建议继续保留:

  • 规则明确;
  • 结果可复现;
  • 支持可视化回放;

的对抗任务。

同时补充:

  • 尾格释放;
  • 双方同格拾取护盾;
  • 缩圈临界情况;
  • 无合法落点;
  • 超时情况;

等标准测试用例。

如果平台能够展示:

  • 单回合耗时;
  • 失败原因;
  • 地图覆盖;
  • 关键回合回放;

学习者能够更容易区分:

  • 规则错误;
  • 实现错误;
  • 策略不足。

教学方面建议增加:

  • 中期代码走查;
  • 匿名基线对手;
  • 阶段排行榜;
  • 模拟评审。

四、实践成果#

1. 核心程序#

核心文件:

/code/player.h

实现:

  • init()
  • walk()

包含:

  • 输入检查;
  • 身份识别;
  • 身体历史;
  • 尾格释放;
  • BFS 多指标评估;
  • 对手推演;
  • 碰撞处理;
  • 缩圈处理;
  • 安全兜底。

复杂度:

[ O(n \times {=tex}m) ]


2. 测试结果#

随机种子回归测试:

项目 数量


胜 61000 平 0 负 0

性能测试:

walk() 最大耗时约 1.13 ms

低于平台:

100 ms

限制。

支持:

  • 多地图;
  • 多个预编译对手;
  • 常规运行;
  • 可视化观察。

3. 算法与工程材料#

完成:

  • 队列;
  • 栈;
  • 链表;
  • 图;
  • 搜索算法训练;
  • 贪吃蛇四进制 Hash + BFS 状态压缩;
  • 自制简易 OJ;
  • Shell 实验。

形成:

Makefile
run.sh
README
日志系统
批量运行脚本
地图文件

4. 答辩材料#

完成并部署实际演示稿:单独打开「蒜头攻防大战」答辩演示

系统展示:

  • 项目难点;
  • 总体决策流程;
  • 身体状态重建;
  • BFS 指标;
  • 对手最坏情况;
  • 复杂度;
  • 测试结果;
  • 改进方向。

5. 方法总结#

形成实时网格对抗方案:

  • 使用历史状态补全不可直接观测信息;
  • 使用 BFS 提取可解释指标;
  • 使用最坏情况评价处理对手不确定性;
  • 使用批量回归与性能测试验证实现。

总结:本次实践完成了从基础工具学习,到算法设计,再到完整 AI 工程实现的全过程训练。