Apache防盗链、网页压缩、网页缓存
目录
网页压缩
类型
示例
动态添加模块操作步骤
重装Apache操作步骤
网页缓存
示例
操作步骤
隐藏版本信息
操作步骤
Apache防盗链
定义
原理
配置防盗链实验环境
实验环境
本地图片盗链示例
操作步骤
防盗链示例
操作步骤
网页压缩
网站的访问速度是由多个因素所共同决定的,这些因素包括应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是 Apache本身的响应速度。可以使用网页压缩提升应用程序的速度。更重要的是,它完全不需要任何的成本,只不过是会让服务器 CPU 占用率稍微提升一两个百分点或者更少。
类型
- gzip
- 压缩效率高,对CPU占用较大
- deflate
- 压缩效率没有gzip高,对CPU占用小
示例
通过deflate模块实现网页压缩
在已经通过源码包安装过Apache的情况下,如果还保留着源码包,可以重新配置、编译、安装,重装Apache的操作不会影响以前的参数
或者在上一次安装时配置过动态加载模块的功能,就可以利用apxs的工具去不用重装动态添加模块
动态添加模块操作步骤
在不用重装Apache的情况下动态添加deflate模块
cd到Apache HTTP服务器用于存放与过滤器相关的模块代码
使用apxs工具进行操作
- -i:安装模块。将编译后的模块安装到 Apache 服务器中。
- -c:编译模块。将源代码文件(这里是mod_deflate.c)编译成共享对象文件(.so文件)。
- -a:自动激活模块。编译并安装模块后,立即启用它,不需要手动编辑配置文件。
最后使用apachectl命令配合管道和grep查看是否成功加载了deflate模块
[root@localhost filters]# cd /root/httpd-2.4.25/modules/filters/
[root@localhost filters]# apxs -i -c -a mod_deflate.c
[root@localhost filters]# apachectl -t -D DUMP_MODULES | grep deflatedeflate_module (shared)
在httpd的配置文件启用mod_deflate模块
[root@localhost filters]# vim /usr/local/httpd/conf/httpd.conf
在末行模式下搜索:/deflate
LoadModule deflate_module modules/mod_deflate.so # 去掉开头注释
<IfModule mod_deflate.c># 对指定的类型应用deflat进行压缩(文本、样式表、图像)AddOutputFilterByType DEFLATE text/html text/css text/jpg text/png text/gifDeflateCompressionLevel 9 # 指定了压缩级别为9,表示最高级别的压缩(压缩比最高,但消耗CPU资源较多)SetOutputFilter DEFLATE # 指定默认的输出过滤器为deflate进行输出内容的压缩
</IfModule>
重装Apache操作步骤
使用直接重装Apache的方式添加deflate模块
先使用apachectl -t -D DUMP_MODULES | grep deflate命令查看当前Apache有没有deflate模块
如果Apache是开启状态,要使用systemctl stop httpd关闭服务
进入源码包解压目录,指定安装目录,开启一些功能,网页压缩用到的就是deflate模块
./configure处理完后,使用make && make install命令编译并安装
[root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[root@localhost httpd-2.4.25]# make && make install
使用ll命令查询deflate模块有没有被启用,可以看到mod_deflate.so文件是存在的
[root@localhost httpd-2.4.25]# ll /usr/local/httpd/modules/mod_deflate.so
-rwxr-xr-x 1 root root 53096 7月 10 20:43 /usr/local/httpd/modules/mod_deflate.so
但是使用apachectl -t -D DUMP_MODULES | grep deflate命令就查询不到,那是因为在Apache的配置文件中并没有启用
编辑httpd的主配置文件,在大概143行左右,可以看到有很多LoadModule语句,我们就在这些LoadModule下面添加新的模块加载语句
在模块加载语句的第二部分,可以使用绝对路径也可以使用相对路径,因为在安装Apache时,通过./configure脚本定义了prefix(前缀)规则,所以在Apache的配置文件里想要指定某一个文件的路径,前缀路径可以省去
IfModule标签用于条件地加载模块配置,它的作用是检查当前的 Apache 环境中是否加载了指定的模块,只有当模块加载后,包裹在 IfModule 标签内的配置指令才会生效。
[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.confLoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c> # 只有当 mod_deflate 模块加载时才会执行下面的配置DeflateCompressionLevel 6 # 压缩级别,数字越大压缩比就越大SetOutputFilter DEFLATE # 启用deflate模块# 告诉服务器对哪些文件进行压缩,如果是已经压缩过的,就不再压缩AddOutputFilterByType DEFLATE text/html text/plain text/xml text/csstext/javascript application/x-javascript application/javascript application/jsonSetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-varySetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-varySetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-varyAddOutputFilterByType DEFLATE text/*AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascriptAddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
</IfModule>
保存并退出,可以使用httpd -t来检测配置文件中是否有语法错误,如果提示Syntax OK,说明没有错误
因为需要httpd重新加载修改后的配置文件,使新添加的配置生效,所以重启服务
此时在浏览器中访问Web服务器,按下键盘上的F12打开开发人员工具,选中Web服务器的ip地址,在响应标头中可以看到压缩技术是gzip
实验结束
网页缓存
网页缓存是将一部分经常不会改变和变动很少的页面缓存起来,下次浏览器再次访问这些页面时,不需要再次去下载这些页面,从而提高了用户的访问速度。Apache的mod_expires模块会自动生成页面头部信息中的Expires标签和Cache-Control 标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
示例
实现网页缓存
操作步骤
打开httpd主配置文件,开启expires模块并添加,重启服务
[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
在末行模式搜索:/expires_module
将前面的注释去掉,开启expires模块
LoadModule expires_module modules/mod_expires.so
<IfModule mod_expires.c>ExpiresActive On # 开启缓存功能ExpiresDefault "access plus 60 seconds" # 缓存时间设置为60秒
</IfModule>检测语法正确性,重启服务[root@localhost httpd-2.4.25]# httpd -t
Syntax OK
[root@localhost httpd-2.4.25]# systemctl restart httpd
重启服务后,来到浏览器访问Web服务器,可以看到响应头的信息中多了两行信息
隐藏版本信息
软件的漏洞信息和特定版本是相关的,因此版本号对于攻击者来说是很有用的,在浏览器中的开发人员工具,响应标头中的server项,可以看到Apache的版本信息
如果网络攻击者得到Apache的版本信息,就会有针对性的进行攻击,给网站造成损失。所以在实际的生产环境中要隐藏Apache的版本号,减少攻击风险。
操作步骤
[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
在末行模式下搜索:/httpd-default
将Include语句前的注释去掉,表示包含Include语句后面指定的文件在当前文件中(相当于把指定文件的内容复制粘贴到当前文件的当前Include语句的位置)
# Various default settings
Include conf/extra/httpd-default.conf
保存并退出,打开httpd.default文件
[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/extra/httpd-default.conf
在第55行就可以设置隐藏版本信息,这里改为Prod
ServerTokens Prod
可以看到注释里提供了选项:Set to one of: Full | OS | Minor | Minimal | Major | Prod
选项 | 说明 |
ServerTokens Full | 返回最详细的服务器信息,包括操作系统类型和编译的模块列表。 例如:Apache/2.4.41 (Unix) OpenSSL/1.1.1d PHP/7.3.11 |
ServerTokens OS | 只返回操作系统类型。 例如:Apache/2.4.41 (Unix) |
ServerTokens Minor | 返回主版本号和次版本号。 例如:Apache/2.4 |
ServerTokens Minimal | 返回主版本号。 例如:Apache/2 |
ServerTokens Major | 只返回主版本号。 例如:Apache/2 |
ServerTokens Prod | 返回最少的信息,只显示 Apache,省略版本号。 例如:Apache |
保存并退出,重启服务。访问Web服务器
可以看到版本信息只显示了一个Apache
Apache防盗链
Apache防盗链(Hotlinking)是一种保护措施,意思是阻止其他网站或未经授权的第三方直接链接到您网站上的图片、视频、音频或其他资源的行为。
当某个网站直接使用您网站上的资源时,他们实际上是在消耗您的带宽和服务器资源,而且可能未经您许可。
定义
- 防盗链是指通过服务器配置,禁止外部网站或者未授权的第三方直接使用您网站上的资源链接。如果有人尝试在其网页中直接使用您的资源链接,访问者在该网页上就会看到无法加载资源的问题,或者显示代替内容。
原理
- HTTP Referer检查:服务器通过检查HTTP请求中的Referer头部来判断资源请求的来源。如果发现Referer并不是您允许的来源(比如您自己的网站),服务器可以拒绝提供资源或者返回替代内容。
- Rewrite规则:使用Apache的Rewrite规则可以重写请求,检查Referer头部,然后根据设置决定是提供资源还是拒绝请求。
配置防盗链实验环境
主机名 | 域名 | IP地址 | 操作系统 | 主要软件及版本 |
apache1 | www.e1.com | 192.168.10.101 | CentOS7.9 | httpd-2.4.25.tar.gz |
apache2 | www.e2.com | 192.168.10.201 | CentOS7.9 | httpd-2.4.25.tar.gz 或 yum安装 |
客户端 | Windows 10 | 浏览器 |
实验环境
将第一台服务器直接克隆一个或者直接用yum -y install httpd安装httpd,并修改IP地址为192.168.10.102
修改两台服务器的主机名
101主机
[root@localhost ~]# hostname apache1
[root@localhost ~]# bash
[root@apache1 ~]#
201主机
[root@localhost ~]# hostname apache2
[root@localhost ~]# bash
[root@apache2 ~]#
修改两个Web服务器的hosts文件,使其都能解析对应域名
按照下方同样的步骤修改201主机
[root@apache1 ~]# vim /etc/hosts
在hosts文件末尾追加
192.168.10.101 www.e1.com
192.168.10.201 www.e2.com
对于Win10客户端主机的hosts文件,在C:\Windows\System32\drivers\etc下,双击hosts文件使用记事本打开
关闭两个Web服务器的防火墙和内核安全机制,开启httpd服务,在客户端主机试试能不能访问两个Web服务器
在两个Web服务器操作
[root@apache1 ~]# systemctl start httpd
[root@apache1 ~]# setenforce 0
本地图片盗链示例
101主机是我的站点,需要盗取201主机Web服务器上的图片
也就是www.e1.com盗取www.e2.com的图片链接
操作步骤
来到201主机
进入httpd存放网页文件的目录,拖入一张图片,编辑index.html文件,
[root@apache2 ~]# cd /usr/local/httpd/htdocs/
在该目录下从宿主机拖入一张图片
[root@apache2 htdocs]# vim index.html
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>标题</title>
</head>
<body><h1>原图网站</h1><img src="logo.jpg" /> # 如果图片文件是在网页文件同一目录下,可以不用加路径
</body>
</html>
保存并退出,此时在宿主机使用浏览器访问www.e2.com可以看到网页中有了图片
如果要盗取其他网站的图片,需要有该图片的链接,在浏览器中右键图片,选择复制图像连接
来到101主机
在101Web服务器的首页上添加图片的链接
[root@apache1 ~]# cd /var/www/html # 使用yum安装httpd的存放网页文件的目录
[root@apache1 html]# vim index.html
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>标题</title>
</head>
<body><h1>盗图网站</h1><img src="http://www.e2.com/logo.jpg" />
</body>
</html>
保存并退出,来到客户端Win10主机访问两个网址www.e1.com和www.e2.com
使用F12打开开发人员工具,在网络中可以看到www.e2.com的请求URL和图片链接都是www.e2.com自己的
而www.e1.com的请求URL是www.e1.com,但图片请求是www.e2.com主机的IP + 图片链接
至此就实现了简单本地图片盗链
防盗链示例
如果有其他主机盗取201主机的图片链接,就只显示固定的图片,而不是对方想要盗用的图片
操作步骤
在提供原图的201主机(www.e2.com)的htdocs目录下再导入一张图片(error.jpg),用于防盗链实验
然后编辑httpd的配置文件,启用rewrite模块(地址重写),rewrite的目的是如果有人请求我的logo.jpg,就把请求重定向给error.jpg
有了地址重写的功能,就可以对请求进行审核判断,如果请求是www.e2.com作为前缀的,就允许访问,如果请求的前缀不是www.e2.com,就不允许访问该图片
[root@apache2 htdocs]# vim /usr/local/httpd/conf/httpd.conf
在末行模式下搜索:/rewrite
LoadModule rewrite_module modules/mod_rewrite.so # 将开头注释去掉,启用rewrite模块在末行模式下搜索:/htdocs
在<Directory "/usr/local/httpd/htdocs">标签内往下翻
找到AllowOverride参数的行,修改内容为下方内容AllowOverride NoneRewriteEngine OnRewriteCond %{HTTP_REFERER} !^http://e2.com$ [NC]RewriteCond %{HTTP_REFERER} !^http://e2.com/.*$ [NC]RewriteCond %{HTTP_REFERER} !^http://www.e2.com$ [NC]RewriteCond %{HTTP_REFERER} !^http://www.e2.com/.*$ [NC]RewriteRule .*\.(gif|jpg|swf)$ http://www.e2.com/error.png
参数 | 说明 |
AllowOverride ALL | 允许在 .htaccess 文件中使用 RewriteEngine 和其他重写规则。 ALL:允许所有类型的重写指令被 .htaccess 文件中的规则覆盖。 None:禁止在该目录中使用 .htaccess 文件来覆盖服务器配置 |
RewriteEngine On | 启用重写功能,这是开启重写规则的第一步 |
RewriteCond | 定义重写条件 |
%{HTTP_REFERER} | 是Apache内置的一个变量,该变量可以获取到用户访问时请求报文头部信息里的URL 匹配请求中的 Referer 值 |
!^http://www.e2.com/.*$ | 该URL下的任意一个文件(.*:匹配单个或多个任意字符) 表示不匹配以 http://www.e2.com/ 开头的字符串并以任意单个或多个字符结尾 |
[NC] | 过滤时不区分大小写 |
RewriteRule | 定义重写规则 |
.*\.(gif|jpg|swf)$ http://www.e2.com/error.png | 当前面的重写条件匹配时,如果请求的 URL 以 .gif、.jpg 或 .swf 结尾 则将请求重定向到 http://www.e2.com/error.png .*:匹配任意数量的任意字符 \.:被转义符转义的点,这里就是单纯的点的意思 |
保存并退出,重启服务。
最后来到客户端主机(Win10)测试,避免图片被浏览器缓存,所以使用Ctrl + Shift + Delete快捷键清理浏览器缓存
然后访问www.e2.com,一切正常
访问www.e1.com,盗取的图片链接变成了重定向的error.png图片
相关文章:

Apache防盗链、网页压缩、网页缓存
目录 网页压缩 类型 示例 动态添加模块操作步骤 重装Apache操作步骤 网页缓存 示例 操作步骤 隐藏版本信息 操作步骤 Apache防盗链 定义 原理 配置防盗链实验环境 实验环境 本地图片盗链示例 操作步骤 防盗链示例 操作步骤 网页压缩 网站的访问速度是由多个…...
LocalAI - 笔记
1.localAI https://localai.io/ 2 使用笔记本电脑搭建本地LLMs大模型环境 使用笔记本电脑搭建本地LLMs大模型环境 - 大模型知识库|大模型训练|开箱即用的企业大模型应用平台|智能体开发|53AI 3LocalAI视频 【LocalAI】(3):超级简单&…...
Windows图形界面(GUI)-SDK-C/C++ - 编辑框(edit)
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 编辑框(edit) 控件样式 创建控件 初始控件 消息处理 示例代码 编辑框(edit) 控件样式 编辑框(Edit Control)是Windows中最常用的控件之一,用于接收用户…...

区块链学习05-web3中solidity和move语言
Solidity 和 Move 语言的比较:Web3 开发中的两种选择 Solidity 和 Move 都是用于开发区块链平台智能合约的编程语言。它们具有一些相似之处,但也存在一些关键差异。 相似之处: Solidity 和 Move 都是图灵完备语言,这意味着它们可以表达计算…...
web滚动页面到指定位置
方法:scrollTo(x-coord,y-coord) 方法是Web API中Element接口的一部分,但它主要用于Window对象或可滚动的元素(如具有overflow属性为auto或scroll的<div>)。此方法用于将窗口滚动到文档中的特定位置,或者将某个元…...
操作系统真象还原:实现文件写入
14.7 实现文件写入 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 本节要实现的 sys_write 是系统调用 write 的内核实现,咱们之前的 write 是个简易版,它是为了临时完成输出打印的功能,不支持文件描述符。如今要让…...

FastAPI 学习之路(四十九)WebSockets(五)修复接口测试中的问题
其实代码没有问题,但是我们忽略了一个问题,就是在正常的开发中,肯定是遇到过这样的情况,我们频繁的有客户端链接,断开连接,需要统一的管理这些链接,那么应该如何管理呢。其实可以声明一个类去管…...

STM32智能楼宇照明系统教程
目录 引言环境准备智能楼宇照明系统基础代码实现:实现智能楼宇照明系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:楼宇照明管理与优化问题解决方案与优化收尾与总结 1. 引言 智能楼宇照明系…...
【C语言】原码、反码、补码详解 -《码上有道 ! 》
目录 原码、反码、补码详解及其在C语言中的应用一、原码(Sign-Magnitude)1.1 定义与表示1.2 历史来源与作用1.3 示例1.4 C语言示例1.5 代码运行结果 二、反码(Ones Complement)2.1 定义与表示2.2 历史来源与作用2.3 示例2.4 C语言…...
C++找到错误的具体信息
fprintf(stderr, "Errno: %d, Error message: %s\n", errno, strerror(errno));为什么不用printf来打印输出? 使用 fprintf(stderr, …),将错误消息输出到标准错误流 stderr。这种做法是为了将错误信息输出到一个专门用于记录错误的流中&…...
Windows 安装Zookeeper
安装 下载地址:Apache ZooKeeper 我下载的版本:zookeeper-3.4.12 下载后,解压 配置 1、 在D:\zookeeper-3.4.12文件夹中创建一个“data”文件夹和“log”文件夹 2、 复制zoo_sample.cfg,改名:zoo.cfg 修改zoo.c…...

从人工巡检到智能预警:视频AI智能监控技术在水库/河湖/水利防汛抗洪中的应用
一、背景需求分析 近日,我国多省市遭遇连日暴雨,导致水库、湖泊、河道等水域水位暴涨,城市内涝频发。随着夏季汛期的到来,降雨天气频繁,水利安全管理面临严峻挑战。为保障水库安全、预防和减少洪涝灾害,采…...

【轻松拿捏 】Java-static关键字(面试)
Java-static关键字 1. 定义和基本概念 回答要点: 示例回答: 2. static 变量 回答要点: 示例回答: 代码示例: 3. static方法 回答要点: 示例回答: 代码示例: 4. static 代…...
【阶乘】个人练习-Leetcode-LCP 22. 黑白方格画
题目链接:https://leetcode.cn/problems/ccw6C7/description/ 题目大意:给出一块白方格面积为n*n,给出一个数字k,每一次操作可以把方格的某一整行或者某一整列涂黑,求使得黑色格子数字为k的【最终图案】的个数。 思路…...

十七、【文本编辑器(三)】图像坐标变换
目录 一、缩放功能 二、旋转功能 三、镜像功能 四、QMatrix简单介绍 一、缩放功能 (1)在头文件中添加 “protected slots:" 变量: void ShowZoomln( ); (2)在 createActionso函数的最后添力口事件关联&…...

生活中生智慧
【 圣人多过 小人无过 】 觉得自己做得不够才能做得更好,互相成全;反求诸己是致良知的第一步;有苦难才能超越自己,开胸怀和智慧;不浪费任何一次困苦,危机中寻找智慧,成长自己。 把困苦当作当下…...

2024第18届中国西部(成都)教育装备展12月14日举办
2025中国国际工业气体设备技术及应用展览会 2025 China International Industrial Gas Equipment Technology and Application Exhibition 时间:2025年3月18-20日 地点:北京全国农业展览馆(新馆) 展览前言 随着需求市场的持续…...

Webpack看这篇就够了
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

基于京东电商蓝牙耳机产品评论数据的情感分析与文本分析
摘要 随着电子商务的迅速发展,了解用户对产品的意见和情感倾向对企业至关重要。本研究旨在利用Python大数据技术对电商产品评论进行情感分析和主题建模,为企业提供有价值的市场洞察。 通过爬虫获取电商评论数据,使用pandas清洗和预处理数据&a…...

【Linux网络】poll{初识poll / poll接口 / poll vs select / poll开发多客户端echo服务器}
文章目录 1.初识pollpoll与select的主要联系与区别poll的原理poll的优点poll的缺点poll vs select 2.poll开发多客户端echo服务器封装套接字接口Makefile主函数日志服务聊天服务器 1.初识poll poll是Linux系统中的一个系统调用,它用于监控多个文件描述符(…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...