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

CTFSHOW-WEB入门-PHP特性89-100

  1. 题目:web 89
    1. 题目:
    2. 解题思路:这道题目涉及了两个函数:preg_match()和intval()简要介绍一下两个函数
      1. preg_match()用于对字符串进行正则表达式的匹配,但是在传入字符串的时候确实会抛出一个 Warning 错误,但它不会导致整个 PHP 脚本终止。可以利用这个绕过第一个if语句
      2. intval()用于将字符串转化为整数,特殊情况:传入数组的话会判断里面有没有元素,有则返回1,没有返回0,可以利用这个绕过第二个if语句
    3. 于是payload为?num[]=a
    4. 知识点:preg_match() intval()传入数组特性
  2. 题目:web 90
    1. 题目:
    2. 解题思路:简要分析代码,get一个num参数,如果这个变量不是‘4476’,并且在经过intval()函数处理之后,结果等于4476就输出flag
      1. 这里的intval()函数,在处理字符串时,如果字符串以数字开头,则会先转化为数字,后面如果有其他非数字内容则会忽略,即:将第一个非数字(加减号除外)前的内容转换为数字: 例如:intval(‘dsa1’)=0 intval(‘12dfjkhjkdf111’)=12 因此payload为?num=4476djfj
      2. 可以使用不同的数字类型的数据,如浮点数 num=4476.0
      3. 另解:由于intval()函数可以有多个参数 intval( v a r , var, var,base) 这里的base表示进制,
        1. base可取:0 —八进制 0x —十六进制 0b --二进制 不填默认十进制
        2. 因此 num=010574或num=0x117c 也可以得到flag
      4. 前面添加+号,intval(‘+4476’) 会转换为4476
    3. 知识点:intval() 转换特性
  3. 题目:web 91
    1. 题目:
    2. 解题思路:代码的解释:get一个cmd参数,要通过第一个正则表达式成功,第二个失败,才会输出flag:分析一下两个表达式:
      1. 首先看看区别,第二个比第一个少了个m修饰,表示多行模式匹配,第二个单行匹配, 中间//之间的是要匹配的内容, ^表示匹配字符串开始, $表示字符串结尾, i表示不区分大小写,也就是php Php PHP这样的都可以匹配, 由于第一个有m,那就说明是匹配的是每一行的开头和结尾,有一行满足即可而不是字符串的开头和结尾 所以ccc%0aphp也可以得到flag
      2. 因此可以让他通过第一个,通过包含换行符,这里首先尝试了 PHP\nphp发现不行于是再利用换行符的url编码试试: PHP%0aphp:成功
    3. 知识点:preg_match()多行匹配
  4. 题目:web 92
    1. 题目:
    2. 解题思路:之前解释过intval(还有第二个参数base表示进制),这里0表示八进制,于是进行转换:num=010574得到flag:看了别人的解法了解到还可以利用intval()函数对于科学计数法的处理机制题:由于这里$num==4476这里的比较:
      1. 这里进行的是字符串与整数的比较:
        1. 在PHP中,字符串与整数比较时,字符串会尝试被转换为整数
        2. 如果 $num 字符串以数字开头,它会被转换为那个数字;否则,转换为0
        3. 因此,如果 $num 是 “4476”(或任何以4476开头的字符串),这个条件为假
        4. 但如果 $num 是像 “4476abc” 这样的值,它仍然会被视为不等于4476(因为转换停止在第一个非数字字符)
      2. intval(4476e2)的处理,这样会当作科学记数法处理,但是如果后面添加了进制,那么就会出现: 因此可以利用这一点 构造 num=4476e2 也可以得到结果
    3. 知识点:intval()函数特性
  5. 题目:web 93
    1. 题目:
    2. 解题思路:寓上一题类似,多加限制,不能输入字母,也就是不能使用二进制0b和十六进制0x但对之前的payload无影响:num=010574
    3. 知识点:intval()特性
  6. 题目:web 94
    1. 题目:
    2. 解题思路:分析题目 可以知道:这里判断num是否值和类型和4476相同,然后判断是否含有字母,并且判断0的位置,如果不含0或者0在开头第一个位置,均不可,最后再判断intval处理后是否等于4476,因此构造payload:num中要 有0,但是不能再第一位,于是可以 加个+ :num=+10574:也可利用浮点数绕过 num=4476.0:另解:通过空白符(换行符、制表符、空格等)也可以绕过第一个字符不为0,但是又包含0的限制
    3. 知识点:strpos()函数
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
参数说明
$haystack: 要搜索的字符串(母字符串)。
$needle: 需要查找的字符或字符串(子字符串)。
$offset: 可选参数。指定开始搜索的位置。如果为负数,则从字符串末尾开始。
返回值
返回 needle 在 haystack 中首次出现的位置(从 0 开始计数)。
如果未找到 needle,则返回 false
  1. 题目:web 95
    1. 题目:
    2. 解题思路:比上一个题目多了一个点号的过滤,就不能使用小数绕过,可以使用空白符或者+号进行绕过:使用空格:使用+号:
  2. 题目:web 96
    1. 题目:
    2. 解题思路:看起来flag在flag.php 内,现在就是要想办法查看flag.php 的内容,而这里直接是完全过滤了flag.php,由于是当前目录,可以使用./flag.php来代替表达
    3. 知识点:linux下当前目录的表示
  3. 题目:web 97
    1. 题目:
    2. 解题思路:分析代码,这里是一个MD5的强类型比较,可以使用fastcoll工具来获得符合要求的字符串:这里通过抓包上传,hackbar会出现问题:得到结果
    3. 知识点:强类型比较绕过
  4. 题目:web 98
    1. 题目:
    2. 解题思路:看到题目代码,还是有点小懵逼,后来认真看了一会,发现他是这样一个逻辑:包含文件flag.php,后面是一连串的四个三木运算符,XXX?语句1:语句2 意思是XXX条件如果成立,返回语句1的结果,否则返回语句2的结果。那么第一句的意思就是:判断全局变量 G E T 对应的数组是否为空,不为空的话,将 _GET 对应的数组是否为空,不为空的话,将 GET对应的数组是否为空,不为空的话,将_POST全局变量对应的数组的地址赋给 G E T , 也就是让两个数组指向同一个地址,如果为空的话,就返回 f l a g 这个字符串,但是不进行赋值操作,后两句同样的道理,只不过是判断有没有 g e t 到一个名 f l a g 的变量,并且值为 f l a g ,由于我们最终目标是获取 _GET,也就是让两个数组指向同一个地址,如果为空的话,就返回flag这个字符串,但是不进行赋值操作,后两句同样的道理,只不过是判断有没有get到一个名flag的变量,并且值为flag,由于我们最终目标是获取 GET,也就是让两个数组指向同一个地址,如果为空的话,就返回flag这个字符串,但是不进行赋值操作,后两句同样的道理,只不过是判断有没有get到一个名flag的变量,并且值为flag,由于我们最终目标是获取flag,于是,我们就得让 G E T 的全局数组里面有 H T T P F L A G 这个参数,并且等于 f l a g ,于是我们 g e t 一个 H T T P F L A G = f l a g ,既然 _GET的全局数组里面有HTTP_FLAG这个参数,并且等于flag,于是我们get一个HTTP_FLAG=flag,既然 GET的全局数组里面有HTTPFLAG这个参数,并且等于flag,于是我们get一个HTTPFLAG=flag,既然_GET数组不为空,那么就会执行KaTeX parse error: Expected 'EOF', got '&' at position 6: _GET=&̲_POST这个语句,也就是让两者执行同一块地址,于是我们也要post一个HTTP_FLAG,值为flag,得到结果:
    3. 知识点:超级全局数组
1. $_GET
定义: 用于收集通过 URL 查询字符串传递的数据。通常在HTTP GET请求中使用。
使用场景: 当你在表单中指定了 method="get",或者在 URL 中直接传递查询参数时。
示例:
// URL: http://example.com/page.php?name=John&age=25
echo $_GET['name']; // 输出: John
echo $_GET['age'];  // 输出: 25
2. $_POST
定义: 用于收集通过 HTTP POST 方法发送的数据。一般在表单提交时使用。
使用场景: 当表单的数据通过 method="post" 发送时。
示例:
// 表单数据提交
// <form method="post"><input type="text" name="username"></form>
echo $_POST['username']; // 输出用户提交的用户名
3. $_REQUEST
定义: 包含 $_GET$_POST$_COOKIE 的内容,提供了一种访问不同请求类型数据的简便方法。
使用场景: 当不确定数据来自哪里时,可以使用 $_REQUEST。
示例:
echo $_REQUEST['name']; // 如果存在同名字段,从 GET, POST 和 COOKIE 中返回
4. $_COOKIE
定义: 用于访问 HTTP cookies 的数据。
使用场景: 当服务器或者客户端设置 cookies 时。
示例:
// 假设设置了 cookie: setcookie("user", "John");
echo $_COOKIE['user']; // 输出: John
5. $_SESSION
定义: 存储用户会话数据。必须在使用前开启会话(使用 session_start())。
使用场景: 当用户需要在多个页面之间保持状态时(如登录状态)。
示例:
session_start();
$_SESSION['username'] = 'John';
echo $_SESSION['username']; // 输出: John
6. $_SERVER
定义: 包含关于服务器环境的信息和客户端请求的信息。
使用场景: 用于获取服务器信息(如请求头、脚本路径、访问的URL等)。
示例:
echo $_SERVER['HTTP_USER_AGENT']; // 输出: 客户端的用户代理字符串
echo $_SERVER['REQUEST_METHOD'];    // 输出: GET 或 POST
7. $_FILES
定义: 用于通过 HTTP POST 方法上传的文件信息。
使用场景: 当表单中包含文件上传字段时。
示例:
// <input type="file" name="uploaded_file">
if ($_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK) {echo $_FILES['uploaded_file']['name']; // 输出上传文件的名称
}
  1. 题目:web 99
    1. 题目:
    2. 解题思路:先分析代码,首先通过allow获取一个空数组,后来将其产生的随机数添加到数组中去,这段代码包含一个 <font style="color:rgb(251, 71, 135);">for</font> 循环,从 <font style="color:rgb(251, 71, 135);">36</font> 开始到 <font style="color:rgb(251, 71, 135);">0x36d</font>(即 877 的十六进制表示)。在每次循环中,使用 <font style="color:rgb(251, 71, 135);">rand(1, $i)</font> 生成一个在 <font style="color:rgb(251, 71, 135);">1</font><font style="color:rgb(251, 71, 135);">$i</font> 之间的随机整数,并将其推入 <font style="color:rgb(251, 71, 135);">$allow</font> 数组中。这个过程将填充 <font style="color:rgb(251, 71, 135);">$allow</font> 数组,以包含多个随机数。具体会填充多少个随机数取决于循环的执行次数(即 <font style="color:rgb(251, 71, 135);">0x36d - 36 = 841</font> 次)。
    3. 然后,检查 GET 请求中是否存在名为 <font style="color:rgb(251, 71, 135);">n</font> 的参数,并且该参数的值是否在 <font style="color:rgb(251, 71, 135);">$allow</font> 数组中。<font style="color:rgb(251, 71, 135);">isset($_GET['n'])</font> 确定 <font style="color:rgb(251, 71, 135);">'n'</font> 参数是否存在,<font style="color:rgb(251, 71, 135);">in_array($_GET['n'], $allow)</font> 确定这个参数的值是否在之前填充的 <font style="color:rgb(251, 71, 135);">$allow</font> 数组中。如果这两个条件成立:<font style="color:rgb(251, 71, 135);">file_put_contents($_GET['n'], $_POST['content']);</font><font style="color:rgb(251, 71, 135);">$_POST['content']</font> 的内容写入一个由 <font style="color:rgb(251, 71, 135);">n</font> 参数指定的文件。这里in_array()函数有一个漏洞,如果不设置第三个参数,那么,这里进行的就是弱类型比较,eg:<font style="color:rgba(0, 0, 0, 0.88);">1.php==1</font>显示为true,那么这里就可以讲一段PHP代码写入文件,文件名选择可以满足条件的1-877均可,这里选择出现频率高的,比如1,2这样的,这里选择2:并且写入php木马,访问让其执行发现flag的位置进行访问:得到flag
    4. 知识点:in_array()函数特性,不设置第三个参数时进行弱类型比较
  2. 题目:web 100
    1. 题目:
    2. 解题思路:我们知道,flag的信息在类ctfshow里面,于是,就想办法查看这个类的信息,刚好,有一个这个类的对象可以利用。这里主要是考查了_<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">v</font>_<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">0=</font>_<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">isnumeric</font>_<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">(</font><font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">v1) and is_numeric(</font><font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">v2)andisnumeric(</font>_<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">v</font>_<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">2)</font>_<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">andisnumeric</font>_<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">(</font><font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(240, 231, 255);">v3);</font>这一句的执行顺序__ 首先先给v0变量赋值,相当于是v0只和v1有关,
PHP 中,赋值操作符 = 的优先级低于逻辑操作符 and。
这意味着在没有括号的情况下,表达式中的逻辑运算会先于赋值运算执行。
例子分析
考虑以下代码:
$v0 = true and false;
在这种情况下,表达式实际上等同于:
($v0 = true) and false;
这意味着 true 被赋值给 $v0,然后执行逻辑运算 and false,但 $v0 的值已经是 true 了。
因此,最终 $v0 的值为 true
    1. 于是只需要v1是数字,v2没有分号,v3含有分号,就可以执行eval函数,从而获取到相应信息,eval里面的参数可以通过命令拼接的方法进行执行:因此  v1=1&v2=var_dump($ctfshow)/*&v3=*/;![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738754522408-b52ff8e3-c653-4718-9aa5-49c727d40944.png)
3. 知识点:var_dump<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(242, 247, 255);">可以得到该对象的详细信息,包括对象的类型、属性、属性的值以及属性的可见性(public、protected、private)。 </font><font style="color:rgba(0, 0, 0, 0.88);">  </font>

相关文章:

CTFSHOW-WEB入门-PHP特性89-100

题目&#xff1a;web 89 题目&#xff1a;解题思路&#xff1a;这道题目涉及了两个函数&#xff1a;preg_match&#xff08;&#xff09;和intval&#xff08;&#xff09;简要介绍一下两个函数 preg_match&#xff08;&#xff09;用于对字符串进行正则表达式的匹配&#xff0…...

[250204] Mistral Small 3:小巧、快速、强大 | asdf 0.16.0 发布:Golang 重写带来性能飞跃

目录 Mistral AI 发布开源模型 Mistral Small 3&#xff1a;小巧、快速、强大asdf 0.16.0 版本发布&#xff1a;Golang 重写带来性能飞跃&#xff01; Mistral AI 发布开源模型 Mistral Small 3&#xff1a;小巧、快速、强大 法国人工智能初创公司 Mistral AI 发布了最新的开源…...

PySpark学习笔记5-SparkSQL

sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java&#xff0c;Scala&#xff0c;python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…...

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …...

Python爬虫:1药城店铺爬虫(完整代码)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…...

代码随想录算法训练营打卡第55天:并查集相关问题;

Java并查集的模板 //并查集模板 class DisJoint{private int[] father;public DisJoint(int N) {father new int[N];for (int i 0; i < N; i){father[i] i;}}public int find(int n) {return n father[n] ? n : (father[n] find(father[n]));}public void join (int …...

K8S学习笔记-------1.安装部署K8S集群环境

1.修改为root权限 #sudo su 2.修改主机名 #hostnamectl set-hostname k8s-master01 3.查看网络地址 sudo nano /etc/netplan/01-netcfg.yaml4.使网络配置修改生效 sudo netplan apply5.修改UUID&#xff08;某些虚拟机系统&#xff0c;需要设置才能生成UUID&#xff09;#…...

云原生周刊:K8s引领潮流

开源项目推荐 KWOK KWOK&#xff08;Kubernetes WithOut Kubelet&#xff09;是一个开源项目&#xff0c;旨在提供一个轻量级的 K8s 集群模拟环境&#xff0c;允许用户在不依赖真实节点的情况下&#xff0c;本地模拟整个 K8s 集群。它通过模拟 Kubelet 和其他集群组件的行为&…...

C_位运算符及其在单片机寄存器的操作

C语言的位运算符用于直接操作二进制位&#xff0c;本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。 一、位运算符的简单说明 1、按位与运算符&#xff08;&&#xff09; 功能&#xff1a;按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制…...

【算法篇】贪心算法

目录 贪心算法 贪心算法实际应用 一&#xff0c;零钱找回问题 二&#xff0c;活动选择问题 三&#xff0c;分数背包问题 将数组和减半的最小操作次数 最大数 贪心算法 贪心算法&#xff0c;是一种在每一步选择中都采取当前状态下的最优策略&#xff0c;期望得到全局最优…...

Selenium 浏览器操作与使用技巧——详细解析(Java版)

目录 一、浏览器及窗口操作 二、键盘与鼠标操作 三、勾选复选框 四、多层框架/窗口定位 五、操作下拉框 六、上传文件操作 七、处理弹窗与 alert 八、处理动态元素 九、使用 Selenium 进行网站监控 前言 Selenium 是一款非常强大的 Web 自动化测试工具&#xff0c;能够…...

ioDraw桌面版 v3.4.0发布!AI文生图,AI图生图,手绘风格一键转换!

流程图功能升级 AI 文生图&#xff1a; 用户现在能输入文字描述&#xff0c;让软件自动生成对应的流程图画面&#xff0c;减少了手动绘图的工作量&#xff0c;提高创作效率&#xff0c;比如输入 “项目开发流程”&#xff0c;软件可能就会生成包含需求分析、设计、开发、测试…...

深入理解Node.js_架构与最佳实践

1. 引言 1.1 什么是Node.js Node.js简介:Node.js是一个基于Chrome V8引擎的JavaScript运行时,用于构建快速、可扩展的网络应用。Node.js的历史背景和发展:Node.js最初由Ryan Dahl在2009年发布,旨在解决I/O密集型应用的性能问题。随着时间的推移,Node.js社区不断壮大,提供…...

安装和卸载RabbitMQ

我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/SUWXdDb0UoCV86xP6b3c7qtMn6b 使用Ubuntu环境进行安装 一、安装Erlang 在安装RabbitMQ之前,我们需要先安装Erlang,RabbitMQ需要Erlang的语言支持 #安装Erlang sudo apt-get install erlang 在安装的过程中,会弹出一段信息,此…...

第27节课:安全审计与防御—构建坚固的网络安全防线

目录 安全审计工具与流程安全审计工具NessusNmapBurp Suite 安全审计流程规划与准备信息收集漏洞扫描分析与评估报告与建议 安全防御策略网络层防御应用层防御数据层防御安全管理 结语 在当今数字化时代&#xff0c;网络安全已成为企业和个人不可忽视的重要议题。随着网络攻击手…...

【蓝桥杯】日志统计

日志统计&#xff08;编程题&#xff09;https://dashoj.com/d/lqbproblem/p/53https://dashoj.com/d/lqbproblem/p/53https://dashoj.com/d/lqbproblem/p/53 题目 日志统计(编程题) 讲解 这个讲解感觉比较通俗易懂。 蓝桥杯2018年省赛B组08&#xff08;c/c&#xff09;日…...

23.Word:小王-制作公司战略规划文档❗【5】

目录 NO1.2.3.4 NO5.6​ NO7.8.9​ NO10.11​ NO12​ NO13.14 NO1.2.3.4 布局→页面设置对话框→纸张&#xff1a;纸张大小&#xff1a;宽度/高度→页边距&#xff1a;上下左右→版式&#xff1a;页眉页脚→文档网格&#xff1a;勾选只指定行网格✔→ 每页&#xff1a;…...

基于单片机的智能安全插座(论文+源码)

1 系统整体方案设计 本课题基于单片机的智能安全插座设计&#xff0c;以STM32嵌入式单片机为主体&#xff0c;将计算机技术和检测技术有机结合&#xff0c;设计一款电量参数采集装置&#xff0c;实现电压、电流信号的数据采集任务&#xff0c;电压、电流和功率在上位机的显示任…...

2025年人工智能技术:Prompt与Agent的发展趋势与机遇

文章目录 一、Prompt与Agent的定义与区别(一)定义(二)区别二、2025年Prompt与Agent的应用场景(一)Prompt的应用场景(二)Agent的应用场景三、2025年Prompt与Agent的适合群体(一)Prompt适合的群体(二)Agent适合的群体四、2025年Prompt与Agent的发展机遇(一)Prompt的…...

vue2-v-if和v-for的优先级

vue2-v-if和v-for的优先级 1.v-if和v-for的作用 v-if是条件渲染&#xff0c;只有条件表达式true的情况下&#xff0c;才会渲染v-for是基于一个数组来渲染一个列表&#xff0c;在v-for的时候&#xff0c;保证给每个元素添加独一无二的key值&#xff0c;便于diff算法进行优化 …...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...