反序列化漏洞1
一、PHP类与对象
1. 类
- 概念理解: 类是共享相同结构和行为的对象的集合,可以理解为特征的提取。例如将耳朵长、尾巴短、红眼睛、吃胡萝卜、蹦跳行走的动物特征抽象为"兔子"类。
- 代码结构:
- 使用class关键字定义类
- 类名遵循大驼峰命名法
- 包含成员变量(属性)和方法(行为)
- 成员组成:
- 属性: 描述对象的特征,如$var1、$var2
- 方法: 定义对象的行为,如myfunc()函数
- 抽象特性: 类是特征的抽象集合,不是具体实例
2. 对象
- 实例关系: 对象是类的具体实例,如"兔子类"的具体实例可以是"小白兔"
- 创建方式: 使用new关键字实例化对象
- 实际案例:
- $baidu = new Site; 创建网站类的百度实例
- $kitty = new Cat; 创建猫类的Kitty实例
- $benz = new Car; 创建汽车类的奔驰实例
- 面向对象原则: PHP遵循"一切皆对象"的面向对象编程思想
二、代码实例
- 类定义:
- 实例化过程:
- $obj = new ClassDemo(); 创建类实例
- $obj->echoString(); 调用对象方法
- 执行结果: 输出成员变量$var的字符串值
- 关键语法:
- public 访问修饰符
- $this 指代当前对象实例
- -> 对象操作符
三、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
PHP类与对象 | 类为共享结构和行为的对象集合(如Rabbit类抽象兔子特征);对象是类的实例(如new创建Baidu网站实例) | 类(抽象)vs对象(具体实例) | ⭐⭐ |
PHP序列化与反序列化 | 序列化函数使用、数据格式转换意义 | serialize()与unserialize()的安全风险 | ⭐⭐⭐ |
反序列化漏洞原理 | 恶意数据触发对象注入,破坏程序逻辑 | 魔术方法(如__wakeup())的利用 | ⭐⭐⭐⭐ |
CTF题目实战分析 | 外部网站漏洞挖掘与利用方法 | 输入点检测、POP链构造 | ⭐⭐⭐⭐ |
CMS漏洞案例(tCMS) | 实际漏洞复现与成因分析 | 未过滤用户输入导致对象注入 | ⭐⭐⭐⭐ |
漏洞修复与防御 | 输入验证、禁用危险函数、使用安全库 | __wakeup()方法的安全实现 | ⭐⭐⭐ |
一、PHP的magic函数
1. 函数作用
- 定义:魔术方法是以双下划线(__)开头的特殊方法,当对对象执行特定操作时会覆盖PHP的默认行为
- 数量:PHP中共有17个魔术方法,包括__construct()、__destruct()等
- 命名规范:PHP保留所有以__开头的方法名称,不建议自定义此类方法名
- 生命周期方法:
- __construct():对象创建时调用(通过new或反序列化)
- __destruct():对象销毁时调用(如脚本执行结束)
- 类型转换方法:
- __toString():对象被当作字符串使用时调用(如echo输出或字符串拼接)
- 序列化相关:
- __sleep():对象被序列化前调用
- __wakeup():对象被反序列化后调用
- __serialize():PHP7.4新增,替代__sleep()
- __unserialize():PHP7.4新增,替代__wakeup()
- 访问控制方法:
- __call():调用不可访问方法时触发
- __callStatic():静态调用不可访问方法时触发
- __get():读取不可访问属性时触发
- __set():写入不可访问属性时触发
- __isset():对不可访问属性调用isset()或empty()时触发
- __unset():对不可访问属性使用unset()时触发
- 其他方法:
- __invoke():将对象作为函数调用时触发
- __clone():对象克隆时调用
- __debugInfo():var_dump()对象时调用
- 访问限制:除__construct()、__destruct()和__clone()外,所有魔术方法必须声明为public
- 类型声明:PHP8.0起,魔术方法的类型声明必须与文档描述一致
2. 例题:magic函数案例使用
- 实现原理:
- 自动触发:魔术方法无需显式调用,满足条件时自动执行
- 生命周期控制:通过预定义方法实现对对象生命周期的统一管理
- 代码复用:避免在每个对象中重复编写相同逻辑
- 设计目的:
- 统一控制点:提供对象生命周期关键节点的标准控制接口
- 减少重复代码:集中处理对象创建、使用和销毁的通用逻辑
- 扩展性:允许开发者在不修改核心代码的情况下扩展对象行为
- 使用场景:
- 资源管理:在__construct中初始化资源,在__destruct中释放资源
- 调试跟踪:通过魔术方法记录对象操作日志
- 动态属性:使用__get/__set实现动态属性访问
- 方法重载:通过__call实现方法重载功能
- 注意事项:
- 性能影响:魔术方法调用会增加额外开销
- 命名冲突:避免自定义__开头的方法名
- 版本兼容:注意不同PHP版本对魔术方法的支持差异
二、知识小结
知识点 | 核心内容 | 关键特性/易混淆点 | 应用场景 |
__construct() | 对象创建时自动调用 | 通过new或反序列化触发 | 对象初始化、资源分配 |
__destruct() | 对象销毁时自动调用 | 程序结束或对象显式销毁时触发 | 资源释放、清理操作 |
__toString() | 对象被当作字符串使用时调用 | echo输出或字符串拼接时触发 | 对象字符串化表示 |
__sleep() | 对象序列化前执行 | 与serialize()相关 | 选择性序列化属性 |
__wakeup() | 对象反序列化后执行 | 与unserialize()相关 | 反序列化后初始化 |
__call() | 访问不可访问方法时触发 | 包含方法名和参数数组 | 动态方法处理 |
__callStatic() | 静态上下文访问不可访问方法时触发 | 静态方法调用拦截 | 静态方法重载 |
__get() | 读取不可访问属性时触发 | 属性访问拦截 | 动态属性处理 |
__set() | 写入不可访问属性时触发 | 属性赋值拦截 | 属性访问控制 |
__isset() | 对不可访问属性调用isset()或empty()时触发 | 属性存在性检查拦截 | 动态属性验证 |
__unset() | 对不可访问属性调用unset()时触发 | 属性删除拦截 | 属性删除控制 |
__invoke() | 对象被当作函数调用时触发 | 使对象可调用 | 函数式编程接口 |
__clone() | 对象克隆时触发 | 通过clone关键字调用 | 深拷贝控制 |
魔术方法特点 | 自动触发机制 | 以双下划线__开头 | 对象生命周期控制点 |
设计目的 | 统一对象行为控制 | 减少重复代码 | 提供预置控制点 |
一、PHP序列化和反序列化
1. 序列化
1)序列化与反序列化概述
- 序列化: 将对象转换成一个可存储的字符串,便于存储或传递PHP的值,同时不丢失其类型和结构。
- 反序列化: 将已序列化的字符串变回PHP的值。
- 魔术方法:
- _serialize(): 在序列化之前执行,返回一个代表对象序列化形式的关联数组。
- _unserialize(): 在反序列化时执行,用于恢复对象的属性。
- 注意:
- 如果类中同时定义了_serialize()和_sleep(),则只有_serialize()会被调用。
- 如果对象实现了Serializable接口,则接口的serialize()方法会被忽略,类中的serialize()方法会被调用。
2)serialize() 函数
- 功能: 产生一个可存储的值的表示,返回一个包含表示value的字节流的字符串。
- 处理类型: 可处理除了resource之外的任何类型,包括包含指向其自身引用的数组。
- 对象序列化:
- 在序列化对象时,PHP会尝试调用对象的_sleep()方法(如果存在_serialize()则忽略_sleep()),允许对象在被序列化之前做清除操作。
- 示例:
number=32;number = 32; number=32;
str = 'wuya';
bool=true;bool = true; bool=true;
null = NULL;
arr=array(′aa′=>1,′bbbb′=>9);arr = array('aa' => 1, 'bbbb' => 9); arr=array(′aa′=>1,′bbbb′=>9);
obj = new SerialType(data: 'somestr', pass: true);
var_dump(serialize(
number));//string(5)"i:32;"vardump(serialize(number)); // string(5) "i:32;" var_dump(serialize(number));//string(5)"i:32;"vardump(serialize(
str)); // string(11) "s:4:"wuya";"
var_dump(serialize(
bool));//string(4)"b:1;"vardump(serialize(bool)); // string(4) "b:1;" var_dump(serialize(bool));//string(4)"b:1;"vardump(serialize(
null)); // string(2) "N;"
var_dump(serialize(
arr));//string(34)"a:2:s:2:"aa";i:1;s:4:"bbbb";i:9;"vardump(serialize(arr)); // string(34) "a:2:{s:2:"aa";i:1;s:4:"bbbb";i:9;}" var_dump(serialize(arr));//string(34)"a:2:s:2:"aa";i:1;s:4:"bbbb";i:9;"vardump(serialize(
obj)); // string(75) "O:10:"SerialType":2:{s:4:"data";s:7:"somestr";s:16:"SerialTypepass";b:1;}"
###### 3)序列化结果解析 - **整数**: 以`i:`开头,后跟整数值,如`i:32;`。 - **字符串**: 以`s:`开头,后跟字符串长度和字符串内容,如`s:4:"wuya";`。 - **布尔值**: `b:1;`表示true,`b:0;`表示false。 - **空值**: 用`N;`表示。 - **数组**: 以`a:`开头,后跟元素个数和元素内容,如`a:2:{s:2:"aa";i:1;s:4:"bbbb";i:9;}`。 - **对象**: 以`O:`开头,后跟类名长度、类名、元素个数和元素内容,如`O:10:"SerialType":2: - **注意**: - 对象序列化时,私有成员变量名会拼接类名,如`s:16:"SerialTypepass";`。 - 常量不会被序列化。 ###### 4)反序列化 - **功能**: 将序列化的字符串恢复成PHP的值。 - **魔术方法**: - `_unserialize()`: 在反序列化时执行,用于恢复对象的属性。 - 如果类中同时定义了`_unserialize()`和`_wakeup()`,则只有`_unserialize()`会生效。###### 5)序列化与反序列化的应用 - **存储**: 可以将序列化后的字符串存储在文件、数据库、Redis等存储系统中。 - **传输**: 便于在网络中传输复杂的数据结构。##### 2. 其他序列化格式 <timestamp>574000</timestamp> ###### 1)序列化格式种类 - **json字符串**: 使用$json_encode$方法,常用于数据传输,如JAVA框架和消息中间件。 - **xml字符串**: 使用$wddx_serialize_value$方法,早年流行于web service数据交换。 - **二进制格式字节数组**: 也是一种序列化方式。 ###### 2)序列化示例 - **示例对象**: `JsonClass`类,包含字符串成员变量`word`和数组成员变量`prop`。 - **json序列化**: 使用`json_encode`方法,输出为json字符串。 - **xml序列化**: 使用`wddx_serialize_value`方法,输出为xml字符串。###### 3)序列化输出 - **json输出**: `{"word": "hello wuya", "prop": {"name": "wuya", "age": 31, "motto": "Apple keep doctor"}}` - **xml输出**: 包含`wddxPacket`、`header`、`data`、`struct`等标签,详细描述了对象的结构和内容。###### 4)XML格式化 - **格式化工具**: 可使用在线XML格式化工具查看XML结构,如[BEJSON] ###### 5)序列化与反序列化 - **反序列化**: 使用相应的方法(如`json_decode`、`wddx_deserialize`)可将序列化的字符串还原为对象。###### 6)敏感字段处理 - **敏感字段**: 如密码等,不需要序列化。 - **处理方法**: 重写`_sleep`方法,返回一个数组,包含需要序列化的变量名,排除敏感字段。###### 7)_sleep方法示例 - **示例代码**: `User`类重写`_sleep`方法,排除`password`字段。 - **序列化结果**: 序列化字符串中不包含`password`字段。###### 8)序列化应用 - **应用场景**: 将对象保存为字符串,存储在文件、数据库或通过网络传输,再在需要的地方还原使用。##### 3. 反序列化 <timestamp>851000</timestamp> ###### 1)反序列化例子 <timestamp>891000</timestamp>- **反序列化函数**: 使用 `unserialize()` 函数可以将已序列化的字符串还原成 PHP 的值或对象。 - **示例代码**: ```php class User {public$username;public$nickname;private$password;public function __construct($username,$nickname,$password) { $this->username =$username; $this->nickname =$nickname; $this->password =$password;} } // 序列化对象 $user = new User("hackerwuya", "wuya", "password123"); $serializedUser = serialize($user); echo$serializedUser; // 反序列化对象 $unserializedUser = unserialize($serializedUser); var_dump($unserializedUser);
- 注意事项:
- 如果反序列化的字符串格式不正确,unserialize() 将返回 FALSE。
- 如果反序列化的对象类不存在,将得到一个 __PHP_Incomplete_Class 对象,并且无法调用未定义类的方法。
- Magic 方法:
- _sleep(): 在对象序列化之前调用,可以用于清理对象。
- _wakeup(): 在对象反序列化之后调用,可以用于重新初始化对象。
- 反序列化后的对象方法调用: 反序列化后的对象可以调用其定义的方法,如 echoString()。
- 篡改序列化字符串: 反序列化过程中可以篡改序列化字符串中的值,但需注意保持格式正确。
- 类不存在时的处理:
- 如果反序列化的类不存在,PHP 将返回一个 __PHP_Incomplete_Class 对象。
- 尝试调用未定义类的方法将导致致命错误。
- 反序列化注意事项:
- 如果传递的字符串不可序列化,unserialize() 返回 FALSE。
- 如果对象类未定义,反序列化得到的对象是 __PHP_Incomplete_Class。
- 格式错误处理: 如果序列化字符串格式错误,unserialize() 将无法正确解析并返回 FALSE。
4. 序列化和反序列化的作用
1)序列化和反序列化的概念
- 序列化: 对象和字符串之间的转换过程,将对象转换为字符串,以便进行传输或存储。
- 反序列化: 将序列化后的字符串转换回对象的过程。
- 注意:
- 如果传递的字符串不可以序列化,则返回FALSE。
- 如果对象没有预定义,反序列化得到的对象是
PHP_Incomplete_ClassPHP\_Incomplete\_ClassPHP_Incomplete_Class
。
2)序列化和反序列化的作用
- 传输对象: 序列化可以将对象转换为字符串,方便在网络中传输或存储到文件中,然后在需要的地方进行反序列化,恢复成对象。
- 用作缓存: 序列化后的对象可以存储到Cookie或Session中,作为缓存数据。在需要时,通过反序列化可以快速恢复对象状态。
- 配合magic方法: 在反序列化时,可以自动触发magic方法(如__wakeup()),进行一些初始化或清理工作。
3)序列化和反序列化与magic函数的关联
- magic函数: 在PHP中,magic函数是指一些以双下划线(__)开头的方法,它们在特定情况下会自动被调用。
- 关联: 反序列化过程中,如果对象类中定义了__wakeup()等magic方法,这些方法会在反序列化时自动被调用,可以用于执行一些初始化操作或恢复对象状态。
5. 反序列化与Magic函数
1)序列化和反序列化例题
- _unserialize()与_wakeup()的关系
- 关系: 如果类中同时定义了_unserialize()和_wakeup()两个魔术方法,则只有_unserialize()方法会生效,_wakeup()方法会被忽略。
- 版本: 此特性自PHP7.4.0起可用。
- _serialize()与_sleep()的关系
- 关系: 如果类中同时定义了_serialize()和_sleep()两个魔术方法,则只有_serialize()方法会被调用,_sleep()方法会被忽略。
- 接口: 如果对象实现了Serializable接口,接口的serialize()方法会被忽略,作为代替类中的_serialize()方法会被调用。
- _unserialize()的用途
- 用途: _unserialize()用于定义对象序列化友好的任意表示,数组的元素可能对应对象的属性,但这并不是必须的。
- 触发: 在反序列化时,如果存在_unserialize()魔术方法,则会自动调用此方法,并传递从_serialize()返回的恢复数组。
- 示例代码
- 代码示例:
this−>dsn=this->dsn =this−>dsn=
dsn;
this−>username=this->username =this−>username=
username;
this−>password=this->password =this−>password=
password;
this->connect(); } public function __serialize() { echo "_serialize\n"; } public function __unserialize(
data) {
echo "_unserialize\n";
}
public function __wakeup() {
echo "_wakeup\n";
}
}
- **测试**: 通过创建对象并调用unserialize()方法,观察_serialize()、_unserialize()和_wakeup()的触发情况。 ###### 2)版本影响与测试 - 版本差异 - **版本差异**: _unserialize()方法自PHP7.4.0起可用,在低于此版本的PHP中,反序列化时会调用_wakeup()方法。- **测试方法**: 通过在不同PHP版本下运行相同的测试代码,观察_unserialize()和_wakeup()的调用情况。 - 测试示例 - **测试代码**: ```php $obj1 = new UnSerializeTest(); $obj2 = unserialize('0:15:"UnSerializeTest":1:{s:3:"var";s:15:"hello wuyaziabc";}'); $obj2->echoString();
- 结果分析: 在PHP7.4.0及以上版本,反序列化时会调用_unserialize()方法;在低于此版本的PHP中,会调用_wakeup()方法。
3)PHP版本管理
- PHP Study工具
- 工具介绍: PHP Study是一个本地的集成工具,可以方便地下载和安装不同版本的PHP。
- 版本管理: 通过在PHP Study中添加不同版本的PHP,可以方便地在不同项目中使用不同版本的PHP进行开发和调试。
- 版本配置
- 配置方法: 在项目的配置中指定使用的PHP版本路径,即可使用该版本的PHP进行运行和调试。
- 注意事项: 确保指定的PHP版本路径正确,且该版本的PHP已正确安装和配置。
二、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
PHP序列化和反序列化 | PHP对象存活于内存时可访问属性和方法,消亡后则不可访问;序列化是将对象转换成字符串形式以便存储和传输,反序列化是将字符串恢复成对象。 | 序列化和反序列化的概念、方法、应用场景。 | ★★★ |
序列化方法 | 使用serialize()方法将对象转换成字符串,可存储于文件、数据库、Redis等。 | serialize()方法的使用,不同数据类型序列化后的格式。 | ★★★★ |
反序列化方法 | 使用unserialize()方法将字符串恢复成对象。 | unserialize()方法的使用,反序列化后的对象状态。 | ★★★ |
序列化格式解读 | 整数、字符串、布尔值、空值、数组、对象的序列化格式。 | 各种数据类型序列化后的字符串格式,特别是对象和数组的复杂格式。 | ★★★★☆ |
序列化注意事项 | 对象序列化时不包括方法和常量,只包括类名、属性和值。 | 方法和常量不被序列化,私有成员变量序列化时包含类名。 | ★★★ |
其他序列化格式 | JSON、XML、二进制等序列化格式。 | JSON和XML序列化的方法和应用场景。 | ★★ |
防止敏感信息序列化 | 重写sleep方法,返回需要序列化的属性数组,排除敏感信息。 | sleep方法的重写,防止敏感信息被序列化。 | ★★★★ |
反序列化注意事项 | 反序列化时类不存在会报错,但仍可返回对象;字符串格式错误会返回false。 | 类不存在时的反序列化结果,字符串格式错误的处理。 | ★★★★ |
相关文章:
反序列化漏洞1
一、PHP类与对象 1. 类 概念理解: 类是共享相同结构和行为的对象的集合,可以理解为特征的提取。例如将耳朵长、尾巴短、红眼睛、吃胡萝卜、蹦跳行走的动物特征抽象为"兔子"类。代码结构: 使用class关键字定义类类名遵循大驼峰命名法包含成员变量(属性)和…...
正则表达式三剑客之——awk命令
目录 一.什么是awk 二.awk的语法格式 1.选项 2. 模式(Pattern) 3. 操作(Action) 4. 输入文件(file) 5.总结 三.awk的工作原理 1. 逐行扫描输入 2. 匹配模式 1.正则表达式: 2.逻辑表…...
施磊老师基于muduo网络库的集群聊天服务器(七)
文章目录 数据表字符集问题支持中文和英文**为什么使用 utf8mb4?** 推荐 查看整个表, 再单独修改 客户端群组功能创建群组添加群组群组聊天接收在线群组消息接收离线群组消息补充服务器事件处理器补充服务器查询群组列表问题解决测试 目前报错总结目前为止最恶心的错…...
多模态(3):实战 GPT-4o 视频理解
最近,OpenAI 团队的 GPT-4o 模型,在多模态方面的能力有了大幅提升,这次我们就使用 GPT-4o 完成一个视频理解的实战。 1. 环境搭建 1.1 安装 FFmpeg 做视频处理,我们需要用到 FFmpeg 这款功能强大的开源多媒体处理工具。FFmpeg…...
基于python实现一个二维图片的路径规划问题
一、场景 基于如下的一个楼层平面图,假设有几个预置的点(实际项目中可能是动态的点,比如找车位,找工位),做路径规划,并画在平面图上 二、方案 1.准备平面室内图 可以自己用QGIS/cad等其他方式…...
云服务器centos 安装hadoop集群
百度 搜索 云服务器centos 安装hadoop 创建Hadoop用户 sudo useradd hadoop -m -s /bin/bash sudo passwd hadoop 123456 下载Hadoop wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz 解压并移动Hadoop到指定目录 tar …...
【k8s】sidecar边车容器
一、Sidecar 模式简介 Sidecar 模式是一种常见的微服务架构设计模式。它通过将附加功能或服务与主应用程序部署在同一容器或主机上,从而实现对主应用程序的增强和扩展。Sidecar 的名称来源于摩托车的边车,它与摩托车紧密相连,为主车提供额外…...
Web漏洞--XSS之订单系统和Shell箱子
本文主要内容 手法 XSS平台使用 XSS工具使用 XSS结合其他漏洞 XSS具体使用场景 某订单系统XSS盲打_平台 某Shell箱子系统XSS盲打_工具 [1]订单系统经典案例 第一个简易攻击流程(订单系统):通过平台完成XSS跨站之后&a…...
# 构建词汇表:自然语言处理中的关键步骤
构建词汇表:自然语言处理中的关键步骤 在自然语言处理(NLP)任务中,词汇表(Vocabulary)是文本数据预处理的核心组件之一。它将文本中的单词或字符映射为数值索引,从而让计算机能够理解和处理语言…...
新!在 podman-machine-default 中安装 CUDA、cuDNN、Anaconda、PyTorch 等并验证安装
#工作记录 一、前言 在 Windows 系统开发环境中,Podman Desktop 凭借强大的容器管理与 WSL-Linux 子系统集成能力备受开发者关注。 其中,podman-machine-default 是 Podman Desktop 安装后自带的默认 WSL-Fedora 子系统,支持与显卡通信&am…...
python_BeautifulSoup提取html中的信息
目录 描述: 过程: step one 下载html网页到本地 step two 提取html信息 list_con soup.select(.list-con) [0] li_list list_con.find_all(li) a li.find(span).find(a) title a.get(title) url a.get(href) span li.find(span).find(spa…...
pcd2pgm的launch文件实现
1.新建工作空间和克隆代码 mkdir -p pcd2pgm_launch/src && cd pcd2pgm_launch/src git clone https://github.com/Hinson-A/pcd2pgm_package 2. 编译 cd .. catkin_make -j4 3.修改launch 在launch文件目录下,可以用gedit 打开launch文件,…...
Vue里面elementUi-aside 和el-main不垂直排列
先说解决方法 main.js少导包 import element-ui/lib/theme-chalk/index.css; //加入此行即可 问题复现 排查了一个小时终于找出来问题了,建议导包去看官方的文档,作者就是因为看了别人的导包流程导致的问题 导包官网地址Element UI导包快速入门...
论文阅读:2024 ACL ArtPrompt: ASCII Art-based Jailbreak Attacks against Aligned LLMs
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Artprompt: Ascii art-based jailbreak attacks against aligned llms https://www.doubao.com/chat/3846685176618754 https://arxiv.org/pdf/2402.11753 https://github…...
项目maven版本不一致 导致无法下载
路程:打开一个新项目发现,maven加载不了 报错: Error running ‘dataManage [clean]’ No valid Maven installation found. Either set the home directory in the configuration dialog or set the M2_HOME environment variable on your s…...
论文阅读:2024 NeurIPS Group Robust Preference Optimization in Reward-free RLHF
Group Robust Preference Optimization in Reward-free RLHF https://www.doubao.com/chat/3870738843518978 https://arxiv.org/pdf/2405.20304 速览 研究动机 传统RLHF忽视群体偏好差异,导致模型对少数群体表现不佳,需提升群体鲁棒性。研究问题 如…...
数据可视化平台产品介绍及功能特色
数据可视化平台是一款适用于高校教学和各领域企业的零门槛可视化工具,能够解决高校数据分析与可视化类课程教学、实训问题。平台通过浏览器即可访问,无需安装客户端。平台内置公式编辑器与指标构建器,学生可通过四则运算、分组聚合等方式衍生…...
MySQL索引优化、SQL分析与运行原理 - Java架构师面试实战
MySQL索引优化、SQL分析与运行原理 - Java架构师面试实战 第一轮提问 面试官:马架构,请问您对MySQL的B树索引有什么理解? 马架构:B树是一种平衡多路查找树,所有的数据节点都存储在叶子节点上。相比于B树,…...
C++学习:六个月从基础到就业——STL:函数对象与适配器
C学习:六个月从基础到就业——STL:函数对象与适配器 本文是我C学习之旅系列的第二十九篇技术文章,也是第二阶段"C进阶特性"的第八篇,主要介绍C STL中的函数对象与适配器。查看完整系列目录了解更多内容。 引言 在前面的…...
Linux基础篇、第四章_02磁盘及分区管理fdisk 和 gdisk
题目:Linux 磁盘及分区管理 版本号: 1.0,0 作者: 老王要学习 日期: 2025.04.25 适用环境: Centos7 文档说明 本教程适用于 Centos7 环境,详细介绍 Linux 磁盘及分区管理操作。包含虚拟机添加磁盘的关机与开机添加方法、MBR 和 GPT 两种分区方式特点、…...
火山云的市场竞争
火山云是字节跳动旗下的云计算服务,对吧?那它的竞争对手应该包括国内外的大型云服务提供商。首先,国际市场上,像AWS、Azure、Google Cloud这些巨头肯定是大头。国内的话,阿里云、腾讯云、华为云这些应该都是主要的竞争…...
创建型设计模式之:简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式
创建型设计模式之:简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式 (一)简单工厂模式 简单工厂模式将对象的实例化过程封装到一个工厂类中,根据输入的条件创建不同类型的对象。 角色划分: 抽象产品…...
【Linux内核设计与实现】第三章——进程管理01
文章目录 1. 引言2. 进程&线程——概念3. 进程控制块/进程描述符(PCB)4. 进程内核栈(Kernel Stack)4.1. 进程内核栈的定义4.2. thread_info 体系结构相关进程描述4.3. 定位进程描述符(task_struct)和内核栈以及内核栈指针的问题 5. 进程 IDÿ…...
正大模型视角下的市场结构判断逻辑
正大模型视角下的市场结构判断逻辑 在多数交易策略中,结构识别往往先于方向判断。以正大的数据研判风格为例,其核心逻辑是:价格行为不能孤立解读,必须结合时间与成交效率来判断当前结构的有效性。 例如,一个上涨过程&…...
4.25学习——文件上传之00截断
继昨天学习的基础文件上传内容,进一步学习文件上传的绕过方式 00截断绕过 原理:00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作…...
黑马Redis(三)黑马点评项目
优惠卷秒杀 一、全局唯一ID 基于Redis实现全局唯一ID的策略: Component RequiredArgsConstructor public class RedisIdWorker {private static final Long BEGIN_TIMESTAMP1713916800L;private static final int COUNT_BITS 32;Resourceprivate final StringRed…...
dedecms织梦arclist标签noflag属性过滤多个参数
织梦dedecms系统arclist标签noflag属性默认是只能过滤一个参数,比如过滤推荐是noflagc,过滤有图片的文章是noflagc,在模板制作过程中,有时候我们为了seo和避免重复,需要过滤多个参数。今天小编就来跟大家讲讲织梦dedec…...
Jira、PingCode、Redmine等18款缺陷管理工具对比评测
本文主要介绍了以下:1. PingCode; 2. Worktile; 3. Jira; 4. Bugzilla; 5. TAPD; 6. 码云; 7. Redmine; 8. Trac; 9. 蓝鲸智云; 10. 阿里云效等等18款缺陷管理工具。 在现代软件开发和项目管理中,缺陷管理工具扮演着至关重要的角色。随着企业对软件质量的…...
京东以图搜图(拍立淘)API接口返回参数详解
京东以图搜图(拍立淘)API接口的返回参数通常以结构化JSON格式呈现,涵盖商品基础信息、相似度评分、库存状态及扩展字段,以下为关键参数详解及使用建议: 一、核心返回参数解析 状态标识类 status:请求状态…...
LSTM+KNN - 多元数据异常检测 !
大家好!我是我不是小 upper~ 今天想和大家分享一个超实用的案例:如何通过 LSTM 与 KNN 实现多元数据异常检测。 想象一下,在工厂的智能化监控场景中,各类传感器实时采集着温度、湿度、压力等海量数据。我们的目标,就是从中精准识别出设备潜在故障等异常情况。 LSTM 作为时…...
OpenHarmony之电源管理子系统公共事件定义
OpenHarmony之电源管理子系统公共事件定义 电源管理子系统面向应用发布如下系统公共事件,应用如需订阅系统公共事件,请参考公共事件接口文档。 COMMON_EVENT_BATTERY_CHANGED 表示电池充电状态、电平和其他信息发生变化的公共事件的动作。 值&#x…...
angular 实现可编辑可选择复制的表格
这个实现的核心就是ag-grid 当然有类似的库就不必多说,React, Vue和纯h5类似。简单贴一下代码 1.首先是h5部分,就一个id为supply-chain-material-grid-table的div,记住要设置高度 <div class"dki-supply-chain-page-body">…...
组织用户数统计实现
# 完整的组织用户数统计实现 完整的组织用户数统计实现,包括模拟SQL查询、完整的Java代码实现以及详细解释。 ## 1. 模拟SQL查询 假设我们有一个组织表(organization)和用户表(user),以下是模拟查询SQL: sql -- 获取各组织及其用户数量&a…...
天机学堂day10作业,完善兑换优惠券功能
UserCouponServiceImpl /*** 兑换码兑换优惠券* param code*/TransactionalOverridepublic void exchangeCoupon(String code) {//1、校验code是否为空if (StringUtils.isBlank(code)) {throw new BadRequestException("非法参数!");}//2、解析兑换码&…...
Python编程的真谛:超越语法,理解编程本质
你是否也曾陷入这样的误区:学了无数的 Python 语法、刷了几十套题,写起代码却仍然卡顿、举步维艰?这时候你才发现,真正阻碍进步的,从不是语法,而是你对“编程本质”的理解。 如果你只是死记硬背Python的语…...
C语言 函数补充
目录 static和extern函数 1.static和extern函数 static和extern都是C语言中的关键字 static 是 静态的 的意思,可以用来: - 修饰局部变量- 修饰全局变量- 修饰函数 extern 是用来声明外部符号的。 在讲解 static 和 extern 之前再讲一下: 作用域和生命周期。 …...
【AI图像创作变现】04实操路径—插图/绘本/创意图集
引言 如果说头像是“一个角色的起点”,那么插图、绘本和图集就是“这个角色能走多远”。相比于头像这种单图任务,插图类创作更强调批量性、叙事性与风格统一性,它既可以承载故事,也可以构成一套完整的内容产品结构。 这类任务特…...
Lesar: 面向 Lustre/Scade 语言的形式化模型检查工具
在《同步反应式系统》的第一课中,介绍了同步数据流语言 Lustre 生态中的形式化模型检查器 Lesar 的用法。Lesar 可对 lustre v4 语言以及 Scade 语言中部分数据流核心特性进行模型检查。 Lesar 介绍 Lesar 是 Verimag 研发维护的形式化方法模型检查工具。该工具的理…...
告别 “幻觉” 回答:RAG 中知识库与生成模型的 7 种对齐策略
一、引言 大语言模型(LLM)在文本生成领域展现出惊人能力,但 “幻觉” 问题(生成虚构或偏离事实的内容)始终是落地应用的核心挑战。检索增强生成(RAG)通过将外部知识库与 LLM 结合,形…...
【Web应用服务器_Tomcat】一、Tomcat基础与核心功能详解
在 Java Web 应用开发领域,Apache Tomcat 是一座不可或缺的基石。作为一款开源、轻量级的 Servlet 容器和 Web 服务器,Tomcat 以其稳定可靠、易于部署和高度可定制性,被广泛应用于各类 Web 应用的部署与运行。 一、Tomcat 简介 Tomcat 是…...
Cesium实现地形可视域分析
Cesium实现可视化分析 一、地形可视域主要实现技术(Ray + 地形碰撞检测) Cesium 本身的 Ray 类可以用来执行非常精确的射线检测,我们可以结合地形高度(sample)来逐点检测光线是否与 terrain 相交,从而判断是否可见。 1.1 优势 实时判断每条射线是否被 terrain 遮挡地形…...
Java—— 常见API介绍 第五期
JDK8以后新增的时间相关类 Date类ZoneId:时区Instant:时间戳ZoneDateTime:带时区的时间 日期格式化类 SimpleDateFormat DateTimeFormatter:用于时间的格式化和解析 日历类 Calendar LocalDate:年、月、日LocalTime…...
ViewPager FragmentPagerAdapter在系统杀死应用后重建时UI不刷新的问题
解决方案 通过重写getItemId方法,返回Fragment的hashCode: Override public long getItemId(int position) {/*** 恢复状态重建时,新的 Fragment 不刷新UI。* 原因:instantiateItem 中通过 mFragmentManager.findFragmentByTag(…...
第3讲、大模型如何理解和表示单词:词嵌入向量原理详解
1. 引言 大型语言模型(Large Language Models,简称LLM)如GPT-4、Claude和LLaMA等近年来取得了突破性进展,能够生成流畅自然的文本、回答复杂问题、甚至编写代码。但这些模型究竟是如何理解人类语言的?它们如何表示和处…...
关于STM32f1新建工程
创建文件夹 首先创建一个存放工程的文件夹,建议建立在D,E盘 新建工程 在kiel5里面 找到刚刚建立的文件夹,然后在此文件夹里面新建一个文件夹用来存放本次工程,文件夹可以根据工程内容所编写,然后给自己工程也就是…...
Linux:进程间通信---匿名管道
文章目录 1. 进程间通信1.1 什么是进程间通信?1.2 为什么进程要进行进程间通信?1.3 怎么实现进程间通信? 2. 匿名管道2.1 匿名管道的原理2.2 匿名管道的系统接口2.3 匿名管道的使用2.4 匿名管道的运用场景 序:在上一篇文章中我们知…...
python代做推荐系统深度学习知识图谱c#代码代编神经网络算法创新
以下是针对推荐系统、深度学习、知识图谱和神经网络算法创新的代码框架及开发建议,适用于C#和Python的跨语言协作项目。以下内容分为几个部分,涵盖技术选型、代码示例和创新方向。 1. 推荐系统(Python C#) Python部分࿰…...
【动手学大模型开发】VSCode 连接远程服务器
Visual Studio Code(VSCode)是一款由微软开发的免费、开源的现代化代码编辑器。它以其轻量级、高性能和广泛的编程语言支持而受到开发者的青睐。VSCode 的核心特点包括: 跨平台:支持 Windows、macOS 和 Linux 操作系统。扩展市场…...
PostgreSQL 漏洞信息详解
PostgreSQL 漏洞信息详解 PostgreSQL 作为一款开源关系型数据库,其安全漏洞会被社区及时发现和修复。以下是 PostgreSQL 漏洞相关的重要信息和资源。 一、主要漏洞信息来源 1. 官方安全公告 PostgreSQL 安全信息页面:https://www.postgresql.org/sup…...
华为L410上制作内网镜像模板:在客户端配置模板内容
华为L410上制作内网镜像模板:在客户端配置模板内容 在本教程中,我们将继续在华为L410上配置内网镜像模板,具体介绍如何在客户端设置以便于在首次开机时自动安装软件。我们将主要使用WeChat作为示例。 1. 制作镜像模板,开启 rc.l…...