当前位置: 首页 > news >正文

CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

 写在前面

╔══════════════════════════════════════════════════════════════════════════╗

哈喽大家好!我是Myon,趁着我的云服务器还没过期,这次给大家出一期很详细的CTF比赛的靶场搭建以及关于Web赛题的制作与docker环境的部署教程,由于本人能力有限,也只能给大家讲一些基础简单的东西,欢迎大家在评论区互相交流学习,希望通过这篇博客大家能学到一些新东西,也期待大家的关注和支持!

╚══════════════════════════════════════════════════════════════════════════╝

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

因为这种CTF的靶场我之前搭过,如果你们看过我之前写的博客就知道,之前介绍的是单纯基于CTFd搭建,而这次是基于H1ve(这个外观看着更好)。我们学校上次的CTF比赛就是我负责搭建和运维的,以及Pwn和Web赛题的环境部署,后面我会一并介绍。

先给大家看一下成品效果图

首页:

排行:

challenges:

公告:

写这篇博客主要是对之前一些内容的补充和总结吧,如果在阅读过程中有不懂的也欢迎大家参考我前面的文章,在《网站搭建》专栏里,再次感谢大家的支持和关注!

 文章开始前给大家分享一个学习人工智能的网站,通俗易懂,风趣幽默

人工智能icon-default.png?t=N7T8https://www.captainbed.cn/myon/

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

使用服务器:centos8               OK正文开始   ◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

目录

Part1、CTF靶场搭建

1、从github上克隆H1ve

2、安装 docker

3、安装 python-pip 

4、安装 docker-compose 

5、拉取镜像并启动 Single Mode

6、将H1ve整个目录下的所有容器设置为自启动

Part2、Web赛题制作与终端docker环境部署

1、题目文件的制作

(1)files文件夹

(2)Dockerfile

​(3)docker-compose.yml

2、docker环境部署

3、赛题前端部署

4、终端赛题运维


Part1、CTF靶场搭建

如果是新的服务器是没有git命令的,我们先安装

yum install git

1、从github上克隆H1ve

位置大家随便放就行了,我这里是在root目录下创了一个Myon的文件夹然后克隆到里面

git clone https://github.com/D0g3-Lab/H1ve.git

克隆好之后,我们还需要先安装一些东西

设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2、安装 docker

yum install -y docker-ce

 看到complete代表安装完成

我们查看一下docker的版本并设置开机自启动

docker versionsystemctl start dockersystemctl enable docker

接着我们安装 docker-compose

(这个docker-compose命令在后面拉取镜像以及赛题的环境时会经常用到)

3、安装 python-pip 

✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧

注意这里默认安装的pip会导致一个错误,先不要执行下面命令,先看后面的报错解释

默认安装的是Python2.7的版本,而这里我们需要Python3版本的pip

✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧

yum -y install epel-releaseyum -y install python-pip

看到complete则代表安装成功,我们也可以使用命令检查一下

pip -V

但是当我们尝试安装 docker-compose 时就会遇到报错

pip install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple 

大概意思就是我们的pip版本太老了,找不到合适的 docker-compose 版本满足

 尝试升级pip版本 

pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade pip

但是大概率你们会遇到以下的报错:

Could not find a version that satisfies the requirement docker-compose (from versions: )
No matching distribution found for docker-compose

You are using pip version 8.1.2, however version 23.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

解决方法:安装python3的pip

由上面pip -v我们知道默认安装的是Python2.7的版本

因此这里我们安装Python3的pip并且进行升级

yum install python3-pippip3 install --upgrade pip

可以看到 pip 成功升级到21.3.1 

 之后的pip操作都用pip3代替

4、安装 docker-compose 

pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple 

可以看到安装成功,至于那个warning不用管它

接下来我们进入到之前克隆好的H1ve目录下

修改配置文件

(这一步最好先不要操作,因为我不确定后面的报错是否与这步有关,建议先尝试直接进行后面的镜像拉取操作,如果有问题可以尝试删掉H1ve再次克隆)

sed -i 's/mariadb:10.4/mariadb:10.4.12/g' single.ymlsed -i 's/mariadb:10.4/mariadb:10.4.12/g' single-nginx.yml

5、拉取镜像并启动 Single Mode

docker-compose -f single.yml up

遇到如下的报错:

ERROR: manifest for mariadb:10.4.12.12.12.12 not found: manifest unknown: manifest unknown 

这种情况意思是docker需要我们指定下载镜像的版本号

但是我并没有找到解决办法,因此我替换了它的single.yml文件

然后就可以拉取了(我怀疑是前面修改配置文件导致的)

之后访问 8000 端口

填写好基本信息后,即可加载出下图所示页面

于是我删掉了H1ve重新克隆进行测试

确定是否因为修改配置文件导致single.yml出了问题

克隆好之后什么都不要做,进入目录直接拉取,居然成了

接着尝试拉取Single-Nginx Mode 

docker-compose -f single-nginx.yml up

 这里可以拉取成功但是无法访问

修改配置文件进行验证,发现也可以拉取成功

就很奇怪了,当然不排除是我拉取之前的版本时对我刚从github上克隆下来的版本环境这些有影响

总的来说给大家的建议就是克隆好之后先直接尝试拉取镜像(后面测试,不需要设置配置文件也是可以拉取成功的,具体还是要看你自己服务器的环境配置),操作错误也可以尝试删除H1ve之后重新克隆。

顺便说一下,你们还需要确保用到的端口那些是允许的,在服务器的安全组规则里面设置。

当然如果你希望直接访问ip就到靶场,那么这里可能需要设置代理转发,将80端口转发到8000。

(在我之前讲的完全基于CTFd搭建的那个里是不需要的,直接访问ip即是靶场首页)

具体内容可以参考我之前的博客:《基于云服务器的博客和靶场搭建-经验教训》

我们需要将与H1ve有关的容器都开启并设置为自启动

查看容器

docker ps -a

启动容器 

docker start 容器名

6、将H1ve整个目录下的所有容器设置为自启动

docker update --restart=always $(docker ps -aq)

 查看开启的容器

docker ps

现在我们不用再拉取镜像,直接访问靶场地址+端口号即可,靶场将一直处于开启状态

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

接下来进入第二部分 ◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Part2、Web赛题制作与终端docker环境部署

为了方便测试,我这里将服务器的所有端口都开放了,你们可以根据题目所在的端口自行添加

1、题目文件的制作

每个网页它至少应该包含一个index.php或者index.html(首页文件)

我们先做一个最简单的web题,比如将flag藏在一个网页的源码里

该文件命名为index.php,内容如下图

内容可能看着复杂,其实它就是一个页面而已。 

(1)files文件夹

这样我们的题目文件就有了,新建一个文件夹files,将这个文件index.php放到files目录下

(为什么文件夹叫files,因为后面我会给你们两个模版文件,按照我说的来就行)

当然如果你会自己写Dockerfile和docker-compose.yml,那么你可以自己想怎么来就怎么来。

我让ChatGPT写过,是可行的,但是这里我主要是讲基础的套路方法,所以给你们模版,按照我说的来,你就可以部署简单的web赛题。

除了files,我们还需要另外两个文件:

(2)Dockerfile

(这个文件你可以直接用,不用修改)

内容如下:

FROM php:5.6-fpm-alpineRUN rm -rf ar/wwwml/*COPY ./files ar/wwwmlEXPOSE 80WORKDIR ar/wwwml
CMD ["php", "-S", "0.0.0.0:80"]



(3)docker-compose.yml

(这个文件需要将端口修改为你自己题目部署在的端口)

内容如下:

version: "2"services:web:build: .restart: alwaysports:- "0.0.0.0:8001:80"environment:- FLAG=Myon{s0_eaSyest_wEb_fl2}

关于第二个文件内容解释:

0.0.0.0:8001:80  # 题目部署在8001端口,选手访问8001端口即可访问到题目环境

80是ngnix所在端口,具体取决于自己环境,一般都是在80,当然我之前部署Pwn赛题时遇到过其他问题,需要修改配置文件的,具体你们可以参考我之前的博客:

《基于CTFTraining在CTFd部署Web题目》 和

《基于xinetd部署pwn题(百分百搭成并且可以nc靶场地址)》

FLAG=Myon{s0_eaSyest_wEb_fl2}  # 这个其实后面我发现它似乎没什么影响,因为正确的flag是你自己放在文件里的,除非题目是那种与环境变量有关系的可能会影响,因此保险起见,你可以把这里的FLAG值改为自己题目的flag值,只是为了进一步确保一致。

其他内容保持不变。

将上述文件:files、Dockerfile、docker-compose.yml 统一放进一个新的文件夹

为了方便记忆和运维,我喜欢以题目名字来命名,比如就叫 f12 (查看源码的题)

这样我们web赛题的文件就都准备好了,将f12这个文件夹放入终端

我这里先建了一个testctf的文件夹,里面用来存放CTF赛题

新建文件夹的命令

mkdir 文件夹名

传文件的话我比较喜欢用xftp,直接拉动或者粘贴复制

2、docker环境部署

进入f12这个目录,使用命令拉取镜像

docker-compose up -d

拉取成功后,使用命令查看该容器

docker ps

访问该题目所在端口,这里是8001

使用F12,在网页源码里找到flag

3、赛题前端部署

那么关于赛题如何放上去,添加到我们靶场的前端,设置flag,分数这些,在我博客《基于CTFTraining在CTFd部署Web题目》里面已经详细讲过,这里就不再赘述。

http://t.csdnimg.cn/TRiOo

链接应该会过期,你们直接搜索我博客的名字即可找到,或者在《网站搭建》的专栏里面

此外,我这里还有一些其他类型的Web题的源码,小游戏、基本传参、php反序列化、命令执行、文件上传、php绕过、信息泄露这些题搭建起来还是很容易的,欢迎大家找我交流讨论。

sql注入的话就需要结合数据库了,有些题的源码也可以让ChatGPT帮写。

4、终端赛题运维

如果我们部署docker环境时遇到问题,比如无法访问,或者有些文件信息没有修改,但是又已经拉取了题目的镜像环境,那么我们就需要先删除这个容器,然后重新拉取:

查看题目容器名字

docker ps

使用命令删除有问题的容器

docker rm -f 容器名

此时题目页面已经无法访问

但是,重点来了,我们还能直接使用docker-compose up -d去拉取吗

这样操作是不行的,拉取之后你会得到一个与你删除前一样的容器,尽管你已经修改了文件内容

这个问题还是可以看我之前的博客《基于xinetd部署pwn题(百分百搭成并且可以nc靶场地址)》

http://t.csdnimg.cn/3QPno

因为docker搭建的是一个容器,你可以理解为一个独立的环境,里面的文件所在路径这些是不一样的。为什么我们敢把漏洞直接部署在自己的服务器上,正因为docker的安全性还是很强的,当然也可能存在docker容器逃逸到本地,但是一般用docker搭建的东西还是很安全的,就算容器里的东西被打烂了,也不会影响到你服务器本地的东西,它是一个单独的环境。

要想真正替换掉题目环境,正确的操作有两种:

方法一:重命名题目文件夹(比如f12改为F12)使用mv命令

当然你需要确保你重命名的名字是未被拉取过镜像的名字,即一个全新的名字

mv f12 F12

这个时候,我们进入到F12进行镜像拉取,也是使用

docker-compose up -d

方法二:删除所有未使用的网络,未使用的网络是不被任何容器引用的网络。

docker network prune

因为这个网络原本的容器已经被我们删除了,但是它的网络还存咋,但是未被容器引用,所以需要先清除掉,之后再进行镜像拉取才会拉取到你修改后的文件内容。

建议使用方法二,不过也可以用重命名的方法,等未使用的网络堆积一段时间后再统一进行清除。

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

文章至此结束 希望你们看完有所收获 期待大家的关注与支持 ◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

相关文章:

CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 写在前面 ╔═══════════════════════════════════════════════════…...

nodejs express vue uniapp新闻发布系统源码

开发技术: node.js,mysql5.7,vscode,HBuilder nodejs express vue uniapp 功能介绍: 用户端: 登录注册 首页显示搜索新闻,新闻分类,新闻列表 点击新闻进入新闻详情&#xff0…...

FastText模型文本分类

项目地址:NLP-Application-and-Practice/07_FastText/7.2-FastText文本分类/text_classification at master zz-zik/NLP-Application-and-Practice (github.com) 加载数据 load_data.py # coding: UTF-8 import os import pickle as pkl from tqdm import tqdmMA…...

CentOS 7 使用Fmt库

安装 fmt Git下载地址:https://github.com/fmtlib/fmt 步骤1:首先,你需要下载fmt的源代码。你可以从https://github.com/fmtlib/fmt或者源代码官方网站下载。并上传至/usr/local/source_code/ ​ 步骤2:下载完成后&#xff…...

如何通过宝塔面板搭建一个本地MySQL数据库服务并实现远程访问

宝塔安装MySQL数据库,并内网穿透实现公网远程访问 文章目录 宝塔安装MySQL数据库,并内网穿透实现公网远程访问前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网…...

普通话考试相关(一文读懂)

文章目录: 一:相关常识 1.考试报名时间 2.报名地方 费用 证件 3.考试流程 4.普通话等级说明 二:题型 三:技巧 1.前三题 2.命题说话 四:普通话考试题库 1.在线题库 2.下载题库 一:相关常识 …...

深度学习动物识别 - 卷积神经网络 机器视觉 图像识别 计算机竞赛

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…...

【Redisson】基于自定义注解的Redisson分布式锁实现

前言 在项目中,经常需要使用Redisson分布式锁来保证并发操作的安全性。在未引入基于注解的分布式锁之前,我们需要手动编写获取锁、判断锁、释放锁的逻辑,导致代码重复且冗长。为了简化这一过程,我们引入了基于注解的分布式锁&…...

QT中样式表常见属性与颜色的设置与应用

常见样式表属性 在Qt中的样式表(QSS)中,有一些特定的英文单词和关键字用于指定不同的样式属性。以下是常见的一些英文单词和关键字: 颜色(Colors): color: 文本颜色 background-color: 背景颜色 border-color: 边框颜色 字体(Fonts): font: 字体 font-family: 字体…...

OpenCvSharp从入门到实践-(02)图像处理的基本操作

目录 图像处理的基础操作 1、读取图像 1.1、读取当前目录下的图像 2、显示图像 2.1、Cv2.ImShow 用于显示图像。 2.2、Cv2.WaitKey方法用于等待用户按下键盘上按键的时间。 2.3、Cv2.DestroyAllWindows方法用于销毁所有正在显示图像的窗口。 2.4实例1-显示图像 2.4实例…...

Spring Boot 升级3.x 指南

Spring Boot 升级3.x 指南 1. 升级思路 先创建一个parent项目&#xff0c;打包类型为pom&#xff0c;继承自spring boot的parent项目 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId&…...

使用支付宝的沙箱环境在本地配置模拟支付并发布至公网调试

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问9. 结语 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙…...

python-opencv划痕检测

python-opencv划痕检测 这次实验&#xff0c;我们将对如下图片进行划痕检测&#xff0c;其实这个比较有难度&#xff0c;因为清晰度太差了。 我们做法如下&#xff1a; &#xff08;1&#xff09;读取图像为灰度图像&#xff0c;进行自适应直方图均衡化处理&#xff0c;增强图…...

微服务学习|Gateway网关:网关作用、快速入门、路由断言工厂、路由过滤器配置、全局过滤器、过滤器执行顺序、跨域问题处理

为什么需要网关 网关功能: 1.身份认证和权限校验 2.服务路由、负载均衡 3.请求限流 网关的技术实现 在SpringCloud中网关的实现包括两种:gateway、zuul Zuul是基于Servlet的实现&#xff0c;属于阻塞式编程。而SprinaCloudGateway则是基于Spring5中提供的WebFlux&#xf…...

七、通过libfdk_aac编解码器实现aac音频和pcm的编解码

前言 测试环境&#xff1a; ffmpeg的4.3.2自行编译版本windows环境qt5.12 AAC编码是MP3格式的后继产品&#xff0c;通常在相同的比特率下可以获得比MP3更高的声音质量&#xff0c;是iPhone、iPod、iPad、iTunes的标准音频格式。 AAC相较于MP3的改进包含&#xff1a; 更多的采…...

spring 是如何开启事务的, 核心原理是什么

文章目录 spring 是如何开启事务的核心原理1 基于注解开启事务2 基于代码来开启事务 spring 是如何开启事务的 核心原理 Spring事务管理的实现有许多细节&#xff0c;如果对整个接口框架有个大体了解会非常有利于我们理解事务&#xff0c;下面通过讲解Spring的事务接口来了解…...

头歌——操作系统实训总结

死锁 1、系统出现死锁时一定同时保持了四个必要条件&#xff0c;对资源采用按序分配算法后可破坏的条件是&#xff08;A&#xff09;。 A、循环等待条件B、互斥条件C、占有并等待条件D、不可抢占条件 2、资源的静态分配算法在解决死锁问题中是用于&#xff08;B&#xff09;。 …...

Django自动生成docs接口文档

1.创建Django项目 python manage.py startproject django20252.创建子应用 python manage.py startapp api3.安装依赖包 pip install coreapi4.创建urls.py from django.contrib import admin from django.urls import path, include from rest_framework import routers f…...

Mock 数据

1. Mock 数据的方式 2. json-server 实现 Mock 数据 项目中安装json-server npm i -D json-server准备一个json文件添加启动命令 //package.json"scripts": {"start": "craco start","build": "craco build","test&q…...

(三)C语言之for语句概述

&#xff08;三&#xff09;C语言之for语句概述 一、使用for语句实现打印华氏温度与摄氏温度转换二、for语句概述三、练习 一、使用for语句实现打印华氏温度与摄氏温度转换 #include <stdio.h> /*当华氏温度为 0,20,40,...300时&#xff0c;打印出华氏温度与摄氏温度对照…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...