自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(4199)
  • 资源 (308)
  • 收藏
  • 关注

原创 【系统架构设计师】数据库系统 ⑤ ( 数据库设计过程 - 逻辑设计 | ER 图 转为 关系模式 | 实体 转 关系模式 | 联系 转 关系模式 - 并入实体、独立关系 )

一、逻辑结构设计1、数据库设计过程2、逻辑结构设计 简介二、ER 图 转为 关系模式1、ER 图 转为 关系模式 概述2、实体 转 关系模式三、联系 转 关系模式1、并入实体1:1 ( 一对一 ) 联系 转为关系模式1:N ( 一对多 ) 联系 转为关系模式2、独立关系M:N ( 多对多 ) 联系 转为关系模式特别注意 - 独立关系模式 ( 新建独立表 ) 适用于所有联系转换四、软考考点1、关系模式个数计算 - 三元多对多联系2、数据库表分析

2025-03-31 10:33:41 2296 14

原创 【系统架构设计师】数据库系统 ④ ( 关系模型 | 数据模型 三要素 | 数据模型 种类 | 关系模型 的 表示形式 | 关系模型相关概念 | 完整性约束 | 触发器 )

一、数据模型1、数据模型 三要素2、数据模型 种类二、关系模型1、关系模型 的 表示形式2、关系模型 的 相关概念3、关系模型 的 完整性约束4、关系模型 触发器

2025-03-28 23:15:00 824 3

原创 【系统架构设计师】数据库系统 ③ ( 数据库设计过程 | 概念结构设计 | ER 图 简介 | 概念设计阶段 工作拆分 )

一、数据库设计过程 概述二、ER 图 简介1、ER 图 概念2、ER 图 示例3、ER 图 关系类型① 一对一 ( 1:1 ) 关系② 一对多 ( 1:n ) 关系③ 多对多 ( n:n ) 关系三、概念设计阶段 工作拆分

2025-03-27 22:45:00 1211 4

原创 【系统架构设计师】数据库系统 ② ( 分布式数据库 | 分布式数据库 特点 | 分布式数据库 分层模式 | 两阶段提交协议 - 2PC 协议 )

一、分布式数据库1、集中式数据库 与 分布式数据库2、分布式数据库 特点① 数据独立性② 集中 与 自治 共享结合 的 控制结构③ 数据冗余④ 全局一致性、可串行性、可恢复性3、分布式 数据库管理系统 组成4、分布式数据库 的 透明性二、分布式数据库 分层模式1、集中式数据库 分层模式2、分布式数据库 分层模式 简介3、分布式数据库 分层模式 作用三、分布式数据库 事务管理1、两阶段提交协议 - 2PC 协议2、2PC 协议 参与者3、2PC 协议 参与者① 阶段一 : 准

2025-03-26 11:04:36 5840 6

原创 【系统架构设计师】数据库系统 ① ( 数据库系统 软考 知识点概述 | 数据库模式 | 三级模式 | 两层映射关系 | 关系表 的 三种类型 - 基本表、查询表、视图表 )

一、数据库系统 软考 知识点概述二、数据库模式1、数据库系统 三级模式2、数据库系统 两层映射关系三、关系表1、关系表 的 三种类型 - 基本表、查询表、视图表2、关系表 的 三种类型 对比3、数据库视图 的 优缺点4、物化视图

2025-03-21 23:47:43 799 4

原创 【系统架构设计师】操作系统 - 特殊操作系统 ③ ( 微内核操作系统 | 单体内核 操作系统 | 内核态 | 用户态 | 单体内核 与 微内核 对比 )

一、微内核操作系统1、单体内核 操作系统2、微内核操作系统 引入3、微内核操作系统 概念4、微内核操作系统 案例二、单体内核 与 微内核 对比1、功能对比2、单体内核 优缺点3、微内核 优缺点

2025-03-19 22:45:00 943 4

原创 【系统架构设计师】操作系统 - 特殊操作系统 ② ( 实时操作系统 RTOS | 多任务调度算法 | 抢占式优先级调度算法 | 时间片轮转调度算法 | 常见的 RTOS )

一、实时操作系统 RTOS1、实时操作系统 概念2、实时操作系统 特点3、实时操作系统 分类4、实时性能指标二、多任务调度算法1、多任务调度算法 简介2、优先级调度算法3、抢占式优先级调度算法4、时间片轮转调度算法5、最晚截止期调度算法6、最早截止期调度算法三、常见的 实时操作系统 RTOS1、常见的 实时操作系统 RTOS 列举2、常见的 实时操作系统 RTOS 对比

2025-03-19 20:15:00 1085 1

原创 【系统架构设计师】操作系统 - 特殊操作系统 ① ( 嵌入式操作系统 | 嵌入式系统 组成层级 | 嵌入式系统 核心要素 | 嵌入式系统 特点 | 交叉开发环境 | 低功耗设计 )

一、嵌入式系统1、嵌入式系统 组成层级2、嵌入式系统 核心要素3、嵌入式系统 特点4、硬件抽象层二、嵌入式操作系统1、嵌入式操作系统 特点2、交叉开发环境三、低功耗设计1、硬件低功耗设计2、软件低功耗设计

2025-03-18 23:15:00 697 3

原创 【系统架构设计师】操作系统 - 文件管理 ③ ( 树形目录结构 | 文件属性 | 绝对路径 与 相对路径 )

一、树形目录结构1、树形目录结构 概念简介2、树形目录结构 组成3、文件属性4、树形目录结构 示例二、绝对路径 与 相对路径1、绝对路径2、相对路径3、绝对路径 与 相对路径 对比

2025-03-17 23:45:00 1513 1

原创 【系统架构设计师】操作系统 - 文件管理 ② ( 位示图 | 空闲区域 管理 | 位号 | 字号 )

一、空闲区域 管理1、空闲区域分配2、空闲区域 管理方式 简介二、位示图 简介1、位示图 表示2、位示图 字号3、位示图 位号4、位示图 中 比特位 分组管理三、位示图 考点1、计算磁盘 位示图 的大小2、位示图 位置计算

2025-03-17 23:15:00 845

原创 【系统架构设计师】操作系统 - 文件管理 ① ( 索引文件结构 | 直接索引方式 | 间接索引方式 | 一级间接索引方式 | 二级间接索引方式 | 三级间接索引方式 )

一、索引文件结构 简介1、索引文件结构 原理2、索引文件结构 关键部件3、索引结构的操作流程二、索引方式 简介1、索引结点2、直接索引 和 间接索引3、直接索引方式4、一级间接索引方式5、二级间接索引方式6、三级间接索引方式三、软考考点1、不同索引方式指向对象2、不同索引方式访问磁盘次数分析3、文件逻辑位置计算① 连续 逻辑位置② 一级间接索引 计算③ 二级间接索引 计算④ 三级间接索引 计算4、文件长度计算四、软考案例

2025-03-12 17:30:44 1255 15

原创 【AI 大模型】RAG 检索增强生成 ⑧ ( 文本相似度排序 | Bi-Encoder 双编码器 | Cross-Encoder 交叉编码器 )

一、文本相似度排序1、向量数据库查询弊端2、二次排序的必要性2、相似度排序模型 3、Bi-Encoder 双编码器4、Cross-Encoder 交叉编码器5、结合使用6、Bi-Encoder 双编码器 与 Cross-Encoder 交叉编码器 对比二、Bi-Encoder 双编码器 用法实例三、Cross-Encoder 交叉编码器 用法实例1、Cross-Encoder 交叉编码器 实现原理4、Cross-Encoder 交叉编码器 代码示例

2025-03-10 16:30:49 11611 21

原创 【错误记录】CrossEncoder 从 Hugging Face 模型库中下载模型报错 ( ConnectionError: (ProtocolError(‘Connection aborted )

一、报错信息二、问题分析1、查看本地模型缓存2、使用 Python 代码测试网络3、终极解决方案 - 手动下载模型三、解决方案1、网络问题 - 清除代理2、问题解决后成功执行

2025-03-10 10:29:09 1083 4

原创 【系统架构设计师】操作系统 - 进程管理 ⑤ ( 进程死锁 | 死锁 四大条件 | 死锁资源数计算 )

一、进程 死锁1、死锁 概念2、死锁 案例 ( 重点 )3、死锁 四大条件4、解除死锁 - 破坏 死锁 四大条件5、解除死锁 - 有序分配6、解除死锁 - 银行家算法二、软考考点1、死锁资源数计算 案例2、死锁资源数计算公式 13、死锁资源数计算公式 24、鸽巢原理

2025-03-07 23:45:00 1405 8

原创 【AI 大模型】RAG 检索增强生成 ⑦ ( 本地部署向量模型 | Sentence Transformers 工具库 | 从 Hugging Face 模型库 中查找模型 | BGE 模型 )

一、Sentence Transformers 工具库1、Sentence Transformers 概念2、Sentence Transformer 特点二、本地部署向量模型1、安装 Sentence Transformers2、本地运行向量模型 - Sentence Transformer 示例3、查看本地部署的向量模型三、从 Hugging Face 模型库 中查找模型1、查询模型2、查询文本向量模型3、筛选适合中文的 文本向量模型4、BAAI 与 BGE 模型四、使用 BAA

2025-03-07 03:15:00 5998 15

原创 【错误记录】Hugging Face 模型库下载模型报错 ( huggingface_hub 函数库使用 configure_hf 函数 报错 | 更新到最新版本 | 使用旧版本兼容方法设置镜像源 )

一、错误记录二、问题分析三、解决方案1、升级 huggingface_hub 函数库2、使用旧版本 huggingface_hub 函数库兼容写法

2025-03-05 01:15:00 1111 5

原创 【错误记录】本地部署大模型 从 Hugging Face 的模型库下载模型报错 ( OSError: We couldn‘t connect to ‘https://huggingface.co‘ )

OSError: We couldn't connect to 'https://huggingface.co' to load this file, couldn't find it in the cached files and it looks like sentence-transformers/all-MiniLM-L6-v2 is not the path to a directory containing a file named config.json.Checkout your inte

2025-03-04 19:53:13 1234 3

原创 【AI 大模型】RAG 检索增强生成 ⑥ ( 使用 向量数据库 作为 RAG 知识库 完整实现 )

一、本地知识库 搭建1、大模型弊端2、向量数据库 -> 本地知识库二、RAG 检索增强生成 三阶段1、RAG 三阶段简介2、RAG 三阶段 流程图3、检索 Retrieval - 向量相似度匹配4、增强 Augmented - 知识库信息注入5、生成 Generation - 大模型整合输出三、完整代码示例1、生成本地知识库代码示例2、生成本地知识库执行结果3、RAG 服务实现① 检索 Retrieval 模块② 增强 Augmented 模块③ 生成 Generation

2025-03-04 00:10:46 8821 16

原创 【错误记录】安装 向量数据库 chromadb 报错 ( ValueError: check_hostname requires server_hostname )

File "D:\001_Develop\022_Python\Python39\lib\ssl.py", line 997, in _create raise ValueError("check_hostname requires server_hostname")ValueError: check_hostname requires server_hostname

2025-03-03 14:51:41 876 2

原创 【AI 大模型】RAG 检索增强生成 ⑤ ( 向量数据库 | 向量数据库 索引结构和搜索算法 | 常见 向量数据库 对比 | 安装并使用 向量数据库 chromadb 案例 )

一、向量数据库1、向量数据库引入2、向量数据库简介3、向量数据库 索引结构和搜索算法4、向量数据库 应用场景5、传统数据库 与 向量数据库 对比二、常见 向量数据库 对比三、向量数据库 案例1、安装 向量数据库 chromadb2、核心要点 解析① 创建数据库实例② 创建数据库表③ 向 向量数据库表 中 插入文本向量④ 从 向量数据库表 中查询 相似数据3、完整代码示例

2025-03-02 10:56:36 2769 11

原创 【错误记录】安装 向量数据库 chromadb 报错 ( Cargo, the Rust package manager, is not installed or is not on PATH. )

Cargo, the Rust package manager, is not installed or is not on PATH. This package requires Rust and Cargo to compile extensions. Install it through the system's package manager or via https://rustup.rs/ Checking for Rust toolchain....

2025-03-01 18:21:02 1176 3

原创 【系统架构设计师】操作系统 - 进程管理 ④ ( 前驱图 与 PV 操作 | 前驱图概念 | 前驱图与PV操作结合 | 前驱图表示形式 | 前驱图涉及的并行操作分析 )

一、前驱图 与 PV 操作1、前驱图概念2、前驱图示例3、前驱图 的 PV 操作 - 简单版本4、前驱图 的 PV 操作 - 复杂版本5、前驱图 有向边 对应的 PV 操作二、软考考点1、前驱图表示形式2、并行操作分析① 并行操作分析② 直接制约关系分析③ 间接制约关系分析3、前驱图 与 PV 操作结合考察

2025-02-24 23:30:00 367 4

原创 【JT/T 808协议】808 协议开发笔记 ② ( 终端注册 | 终端注册应答 | 字符编码转换网站 )

一、消息头 数据1、消息头拼接2、消息 ID 字段3、消息体属性 字段4、终端手机号 字段5、终端流水号 字段二、消息体 数据三、校验码计算四、最终计算结果五、终端注册应答1、分解终端应答数据2、终端应答 消息体 数据

2025-02-22 23:15:00 6131 10

原创 【错误记录】Kotlin 开发 TCP 客户端接收不到服务端数据 ( InputStream#readBytes 函数只适合读取一次性数据 / 不适合读取持续数据 )

InputStream # readBytes() 函数 只适合读取一次性关闭的流(如文件) , 不适用于持续 TCP 连接 ;将 InputStream # readBytes() 替换 为 基于缓冲区的循环读取 的方式 ;

2025-02-22 22:45:00 385 3

原创 【JT/T 808协议】808 协议开发笔记 ① ( JT/T 808 协议简介 | 协议数据分析 | 连接建立与断开 与 终端的注册和鉴权 | Java 代码参考 )

一、协议简介1、JT/T 808 协议简介2、JT/T 808 协议应用场景二、协议数据分析1、数据类型2、数据消息结构3、标志位4、消息头① 消息体属性格式② 消息包封装项③ 消息流水号④ 总结5、消息体6、校验码三、连接建立与断开 与 终端的注册和鉴权1、连接建立与断开2、心跳包案例3、终端注册与注销4、终端鉴权四、Java 代码参考1、常见的消息类型2、工具类3、消息头封装类4、拼接数据封装类

2025-02-21 22:14:44 1642 3

原创 【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后返回处理二、悬浮窗 前台服务和通知1、前台服务 启动 悬浮窗 的必要性① 保持悬浮窗存活② 悬浮窗的要求③ 悬浮窗版本兼容2、其它类型服务简介① 前台服务② WorkManager 服务③ JobScheduler 服务④ AlarmManager 服务三、前台服务 创建 通知 和 悬浮窗1、启动前台服务2、前台服务通知3、创建浮动窗口四、完整代码示例

2025-02-20 10:37:58 11875 16

原创 【错误记录】Android 悬浮窗开发报错 ( Context.startForegroundService() did not then call Service.startForeground )

android.app.ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{d586da8 u0 hsl.floatingwindow/.FloatingWindowService}

2025-02-20 10:29:18 1361 3

原创 【错误记录】Android Studio 配置 GitHub 账号 ( GitHub 生成 Token 并到 Settings / Version Control / GitHub 中配置账号 )

GitHub 生成 Token 并到 Settings / Version Control / GitHub 中配置账号

2025-02-19 02:15:00 418 4

原创 【系统架构设计师】操作系统 - 进程管理 ③ ( ☆ 重点考点 | 进程的同步与互斥 | PV 信号量操作 | PV 操作 互斥模型 案例说明 | 同步模型 - 生产者消费者模型 )

一、进程的同步与互斥1、进程互斥2、进程同步3、进程同步与互斥对比4、临界资源和临界区二、PV 信号量操作1、信号量2、PV 操作3、PV 操作 互斥模型 案例说明4、信号量 S 取值范围5、同步模型 - 生产者消费者模型三、软考考点 - PV 操作

2025-02-18 23:45:00 813 2

原创 【错误记录】DevEco Studio 模拟器启动失败 ( 错误 : 未开启Hyper-V , 运行模拟器需要开启Hyper-V虚拟化支持 , 查看处理指导 )

错误 : 未开启Hyper-V , 运行模拟器需要开启Hyper-V虚拟化支持 , 查看处理指导一、错误记录二、解决方案1、查看CPU 是否支持虚拟化2、启用 Hyper-V3、启动模拟器成功4、创建最小资源消耗的模拟器5、在模拟器中运行程序

2025-02-18 03:15:00 1010 2

原创 【错误记录】Windows 中 DevEco Studio 真机调试无法连接设备 ( 低版本的 HarmonyOS 4.2.0 华为手机无法在 DevEco Studio 5.0.2 上真机调试 )

低版本的 HarmonyOS 4.2.0 华为手机 无法在 最新版的 DevEco Studio 5.0.2 上 进行 真机调试 ; 手机版本必须达到 HarmonyOS 5.0.0 以上才行 ;

2025-02-17 12:37:37 6859 13

原创 【HarmonyOS】Windows 平台安装 DevEco Studio 5.0.2 Release 开发环境 ( 2025年02月17日 更新 | 下载软件 | 安装软件 | 创建并运行应用 )

一、文档版本说明1、HUAWEI DevEco Studio 开发环境简介2、开发工具说明二、安装 DevEco Studio 5.0.1 Release1、下载软件2、安装软件3、首次软件4、创建并运行 Hello World 程序5、登录华为账号

2025-02-17 10:52:27 1396 1

原创 【系统架构设计师】操作系统 - 进程管理 ② ( 进程状态 | 三态模型 | 五态模型 | 进程状态 划分依据 | PCB 程序控制块 的 组织方式 )

一、进程状态1、进程状态模型2、CPU 资源 和 非 CPU 资源二、基本进程状态模型 - 三态模型1、基本进程状态模型2、进程状态 划分依据 ( 重点 )3、阻塞态 不能转为 运行态4、就绪态 不能转为 阻塞态5、CPU 时间片资源三、扩展进程状态模型 - 五态模型1、五态模型 与 挂起挂起 状态 关联的是 内存资源哪些进程会被挂起2、五态模型 与 三态模型 的对应关系四、软考考点分析 ☆1、PCB 程序控制块 的 组织方式2、案例分析

2025-02-13 22:15:00 2022 3

原创 【AI 大模型】RAG 检索增强生成 ④ ( 向量相似度计算 | 余弦距离 | 欧式距离 | OpenAI 文本向量模型 | 手动实现的 余弦相似度 和 欧氏距离 函数计算 )

一、向量相似度计算二、余弦距离1、余弦距离 概念2、余弦距离 特点3、余弦距离 适用场景4、余弦距离 代码示例三、欧式距离1、欧式距离 概念2、欧式距离 特点3、欧式距离 适用场景4、欧式距离 代码示例四、OpenAI 文本向量模型1、OpenAI 的 text-embedding-ada-002 文本向量模型2、使用 Scikit-learn 机器学习库中的函数计算文本向量距离五、手动实现的 余弦相似度 和 欧氏距离 函数计算1、余弦距离计算2、欧式距离计算

2025-02-12 22:55:28 3701 22

原创 【系统架构设计师】操作系统 - 进程管理 ① ( 进程概念 | 进程组成 | 进程 与 程序 | 进程 与 线程 | 线程 可共享的资源 - ☆考点 )

一、进程管理1、进程概念2、进程组成3、进程 与 程序4、进程 与 线程二、线程 可共享的资源 - ☆考点

2025-02-11 10:42:15 1237 3

原创 【系统架构设计师】操作系统 ④ ( 存储管理 | 段页式存储 | 段页式存储中的 段表 和 页表 维护 | 段页式存储 的 地址构造 | 段页式存储 逻辑地址 -> 物理地址 转换过程 )

一、段页式存储1、段页式存储 简介2、段页式存储 优缺点二、段页式存储中的 段表 和 页表 维护1、段表(Segment Table)的维护2、段表(Segment Table)案例3、页表(Page Table)的维护三、段页式存储 的 地址构造 ( 非重点考点 仅做参考 )1、段页式存储 逻辑地址 构造2、段页式存储 逻辑地址 -> 物理地址 转换过程3、案例分析

2025-02-10 23:09:14 952 3

原创 【系统架构设计师】操作系统 ③ ( 存储管理 | 页式存储弊端 - 段式存储引入 | 段式存储 | 段表 | 段表结构 | 逻辑地址 的 合法段地址判断 )

一、页式存储弊端 - 段式存储引入1、页式存储弊端 - 内存碎片2、页式存储弊端 - 逻辑结构不匹配3、段式存储引入二、段式存储 简介1、段式存储2、段表3、段表 结构4、段内地址 / 段内偏移三、逻辑地址 的 合法段地址1、合法 段地址 判断2、合法 段地址 判断 - 案例

2025-02-10 10:32:52 836 5

原创 【GitHub】GitHub 2FA 双因素认证 ( 使用 Microsoft Authenticator 应用进行二次验证 )

一、GitHub 的 2FA 双因素认证二、使用 Microsoft Authenticator 应用进行二次验证1、TOTP 应用2、下载 Microsoft Authenticator 应用3、安装使用 Authenticator 应用三、恢复码重要性

2025-02-07 23:15:00 1601 7

原创 【AI 大模型】DeepSeek 大模型简介 ( DeepSeek-R1 和 DeepSeek-V3 大模型 | Python 调用 DeepSeek API | 本地部署 DeepSeek )

一、DeepSeek 大模型1、DeepSeek-R1 和 DeepSeek-V3 大模型DeepSeek-V3 大模型DeepSeek-R1 大模型大模型调用2、DeepSeek 官网访问 DeepSeek-R1 和 DeepSeek-V3 大模型3、DeepSeek 大模型参数4、DeepSeek 蒸馏模型本地部署硬件需求二、DeepSeek 开发者平台1、开放平台地址2、申请 API Key3、Python 调用 DeepSeek API三、本地部署 DeepSeek 大模型

2025-02-06 14:29:08 15901 15

原创 【AI 大模型】百度千帆大模型 ① ( 开发者注册 | 开发文档 和 视频教程 | 模型广场 | 体验中心 | 在线推理 | Python SDK 简单调用 )

一、百度智能云 开发者注册1、实名认证2、开通模型服务二、开发文档 和 视频教程1、视频教程2、开发文档三、模型广场四、体验中心五、在线推理六、Python SDK 简单调用1、参考文档2、开发环境准备3、安装 SDK4、拷贝示例代码5、查找 Access Key 和 Secret Key6、执行结果

2025-02-06 11:22:13 1029 3

【JT/T 808协议】808 协议开发笔记 ① 博客资源

【JT/T 808协议】808 协议开发笔记 ① ( JT/T 808 协议简介 | 协议数据分析 | 连接建立与断开 与 终端的注册和鉴权 | Java 代码参考 ) 博客地址 : https://blog.youkuaiyun.com/shulianghan/article/detail 一、协议简介 1、JT/T 808 协议简介 2、JT/T 808 协议应用场景 二、协议数据分析 1、数据类型 2、数据消息结构 3、标志位 4、消息头 ① 消息体属性格式 ② 消息包封装项 ③ 消息流水号 ④ 总结 5、消息体 6、校验码 三、连接建立与断开 与 终端的注册和鉴权 1、连接建立与断开 2、心跳包案例 3、终端注册与注销 4、终端鉴权 四、Java 代码参考 1、常见的消息类型 2、工具类 3、消息头封装类 4、拼接数据封装类

2025-02-21

AndroidAndroid 悬浮窗开发

【Android】Android 悬浮窗开发

2025-02-18

FFmpegH.264 格式分析 ② ( 网络抽象层单元 NALU - NALU 功能结构 - VCL 视频编码层 - NAL 网络提取层 - H.264 封装模式 - annexb 模式 )

一、网络抽象层单元 - NALU ( Network Abstraction Layer Unit ) 1、NALU 简介 2、NALU 常见的数据类型 3、NALU 传输注意事项 4、NALU 功能结构 ① 视频编码层 ② 网络提取层 ③ NALU 的 VCL 和 NAL 对应的 nal_unit_type 类型 5、NALU 数据结构 ① Start Code 起始标志位 ② NALU Header 头 ③ NALU Payload 载荷 二、H.264 封装模式 - annexb模式 / MP4 模式 1、Annex B 模式 2、MP4 模式 3、Annex B 和 MP4 模式的对比 三、将 MP4 模式 转为 Annex B 模式

2025-01-07

【Android UI】SurfaceView中使用 Canvas 绘制可缩放大图

【Android UI】SurfaceView中使用 Canvas 绘制可缩放大图 ( 拖动和缩放相关的变量 | Canvas 绘图函数 | 手势识别 多点触控流程 | 拖动图片 | 缩放图片 ) 博客链接:https://blog.youkuaiyun.com/shulianghan/article/details/143950948 一、需求分析 和 核心要点 说明 1、需求说明 2、核心要点 - 拖动和缩放相关的变量 3、核心要点 - Canvas 绘图函数 4、核心要点 - 手势识别 多点触控流程 5、核心要点 - 拖动图片 6、核心要点 - 缩放图片 二、完整代码示例 1、环境说明 2、SurfaceView 完整代码 3、运行结果

2024-11-21

FFmpegSDL 音视频开发 ⑦ ( 播放 PCM 音频数据 )

【FFmpeg】SDL 音视频开发 ⑦ ( 播放 PCM 音频数据 | 提取 PCM 格式数据 | 设置音频参数 | 打开音频设备 | 设置播放回调函数 | 播放音频数据 | 关闭音频设备 ) 博客地址 : https://hanshuliang.blog.youkuaiyun.com/article/details/141950997 一、PCM 格式简介 1、PCM 简介 2、PCM 参数 3、声音频率 ( 注意与采样率区分 ) 4、使用 ffmpeg 获取 PCM 格式数据 5、使用 ffplay 播放 PCM 格式数据 二、SDL 播放 PCM 流程 1、初始化 SDL 2、设置音频参数 3、打开音频设备 4、设置播放回调函数 5、播放音频数据 6、关闭音频设备 7、SDL 播放 PCM 音频数据的 关键步骤 代码示例 三、完整代码示例 1、完整代码示例 2、执行结果

2024-09-10

FFmpegSDL 音视频开发 ⑥ ( SDL 播放 YUV 视频 )

【FFmpeg】SDL 音视频开发 ⑥ ( SDL 播放 YUV 视频 | YUV 4:2:0 采样 | YUV420P 格式介绍 | 获取 YUV 视频文件 | 读取并加载 YUV 画面数据 ) 博客地址:https://blog.youkuaiyun.com/shulianghan/article/details/141900912 一、SDL 播放 YUV 视频 1、YUV 4:2:0 采样 2、YUV420P 格式介绍 3、获取 YUV 视频文件 4、读取 YUV 画面数据 5、加载 YUV 视频数据 二、完整代码示例 1、代码示例 2、执行效果

2024-09-05

【AI 大模型】函数调用 Function Calling ② ( 函数调用 引入 - 函数调用开发流程 - 代码示例 )

【AI 大模型】函数调用 Function Calling ② ( Plugins、Actions 扩展 | 函数调用 Function Calling 引入 | 函数调用开发流程 | 代码示例 ) https://hanshuliang.blog.youkuaiyun.com/article/details/140380268 博客代码示例 一、Plugins、Actions 扩展 1、GPT 大模型缺陷 - 引入 Plugins、Actions 扩展 2、Plugins 插件 3、Plugins 插件开发流程 4、Plugins 插件弊端 - Actions 引入 5、Actions 简介 二、ChatGPT 的平替 - Coze、Dify 三、函数调用 Function Calling 引入 四、函数调用开发流程 1、调用 OpenAI 的接口 2、函数定义 3、大模型回调 4、本地代码逻辑 5、第二次大模型调用 五、函数调用代码示例

2024-07-20

【AI 大模型】OpenAI 接口调用 ① ( PyCharm 中开发 Python 程序调用 OpenAI 接口 )

【AI 大模型】OpenAI 接口调用 ① ( 安装 openai 软件包 | 查看 openai 软件包版本 | PyCharm 中开发 Python 程序调用 OpenAI 接口 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139922167 博客源码快照 一、安装 Python SDK 二、安装 OpenAI Python SDK 1、安装 openai 软件包 2、查看 openai 软件包版本 3、openai 接口参考文档 三、PyCharm 中开发 Python 程序调用 OpenAI 接口 1、PyCharm 创建 Python 项目 2、购买 API Key 3、API Key 配置用法 4、中转 API 与 直联 API 使用注意事项 5、Python 代码示例

2024-06-24

FFmpegSDL 音视频开发 ④ ( SDL 多线程 / 创建线程 / 等待线程执行完毕 )

【FFmpeg】SDL 音视频开发 ④ ( SDL 多线程 | SDL_Thread 结构体 | SDL_CreateThread 函数创建线程 | SDL_WaitThread 函数等待线程执行 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139760886 博客源码快照 一、SDL 多线程简介 1、SDL 多线程引入 2、SDL_Thread 多线程模型 二、SDL 多线程相关函数 1、SDL 创建线程 - SDL_CreateThread 函数 2、SDL 等待线程执行完毕 - SDL_WaitThread 函数 三、SDL 线程代码示例 - 创建并等待线程执行完毕 1、代码示例 2、执行结果

2024-06-18

FFmpegSDL 音视频开发 ③ ( SDL 事件处理 )

【FFmpeg】SDL 音视频开发 ③ ( SDL 事件处理 | SDL_Event 数据结构分析 | 事件处理流程 | SDL 事件获取函数 | SDL_WaitEvent 函数 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139669401 博客源码快照 一、SDL 事件处理简介 1、SDL 事件处理引入 2、SDL 事件处理步骤 二、SDL 事件数据结构分析 1、SDL_Event 事件 - union 联合体 2、SDL_Event 事件处理流程 三、SDL 事件函数 1、SDL_PollEvent 函数 2、SDL_WaitEvent 函数 四、完整代码示例 1、代码示例 2、执行结果

2024-06-14

算法Graham 凸包扫描算法 ( 凸包概念 - 常用的凸包算法 - 角排序 - 叉积 - Python 代码示例 )

【算法】Graham 凸包扫描算法 ( 凸包概念 | 常用的凸包算法 | 角排序 | 叉积 | Python 代码示例 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139651095 博客源码快照 一、Graham 凸包扫描算法 1、凸包概念 2、常用的凸包算法 3、Graham 凸包扫描算法 二、Graham 算法前置知识点 1、角排序 2、叉积 3、算法过程分析 三、代码示例 1、完整代码示例 2、执行结果

2024-06-13

FFmpegSDL 音视频开发 ②

【FFmpeg】SDL 音视频开发 ② https://hanshuliang.blog.youkuaiyun.com/article/details/139592113 博客源码快照

2024-06-11

FFmpegSDL 音视频开发 ① ( SDL 窗口绘制 )

【FFmpeg】SDL 音视频开发 ① ( SDL 窗口绘制 | SDL 视频显示函数 | SDL_Window 窗口 | SDL_Renderer 渲染器 | SDL_Texture 纹理 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139528565 博客源码快照 一、SDL 视频显示函数 1、SDL_Init 函数 2、SDL_Quit 函数 3、SDL_CreateWindow 函数 4、SDL_CreateRenderer 函数 5、SDL_CreateTexture 函数 6、窗口 / 渲染器 / 纹理 关联 二、SDL 窗口绘制 - 代码示例 1、SDL 窗口绘制代码 2、执行结果

2024-06-07

FFmpegSDL 开发环境搭建

【FFmpeg】SDL 开发环境搭建 ( SDL 简介 | 下载 SDL 开发库 | 拷贝动态库到 C:\Windows\SysWOW64 目录 | 将 SDL 开发库配置到 Qt 项目 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139516815 博客源码快照 一、SDL 简介 1、SDL 简介 2、SDL 相关网站 二、SDL 开发环境搭建 1、下载 SDL 开发库 2、SDL 开发库内容解析 3、拷贝动态库到 C:\Windows\SysWOW64 目录 4、创建 Qt 项目 5、将 SDL 开发库配置到 Qt 项目 6、SDL 窗口示例

2024-06-07

【OpenHarmony】ArkTS 语法基础 ⑥ ( ArkTS 状态管理 - @Link 装饰器 )

【OpenHarmony】ArkTS 语法基础 ⑥ ( ArkTS 状态管理 | @Link 装饰器 | 子组件定义使用 @Link 变量 | 父容器中定义 @State 变量并绑定子组件变量 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139466799 博客源码快照 一、ArkTS 状态管理 - @Link 装饰器 1、@Link 装饰器 2、子组件定义 @Link 变量 3、子组件中使用 @Link 变量 4、父容器中定义 @State 变量 6、父容器中绑定 @State 变量和 @Link 变量 二、完整代码示例 1、自定义组件代码 2、父容器组件代码 3、执行结果

2024-06-05

【OpenHarmony】ArkTS 语法基础 ⑤ ( ArkTS 状态管理 / @State 装饰器定义状态数据 )

【OpenHarmony】ArkTS 语法基础 ⑤ ( ArkTS 状态管理 | @State 装饰器定义状态数据 | 使用状态数据渲染组件 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139452711 博客源码快照 一、ArkTS 状态管理 - @State 装饰器 1、@State 装饰器定义状态数据 2、@State 装饰器定义状态数据 - 示例分析 3、使用 @State 装饰器定义的状态数据渲染组件 - 示例分析 二、完整代码示例 1、完整自定义组件代码示例 2、展示效果

2024-06-05

【OpenHarmony】ArkTS 语法基础 ④ ( ArkTS UI 渲染控制 - 条件渲染 - 循环渲染 )

【OpenHarmony】ArkTS 语法基础 ④ ( ArkTS UI 渲染控制 | if else 条件渲染 | ForEach 循环渲染 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139441781 博客源码快照 一、ArkTS UI 渲染控制 1、if else 条件渲染 2、ForEach 循环渲染 二、完整代码示例 1、自定义组件代码 2、主界面代码 3、执行结果

2024-06-04

【OpenHarmony】ArkTS 语法基础 ③ ( 自定义组件生命周期回调函数 - 页面生命周期回调函数 )

【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139424435 博客源码快照 一、ArkTS @Component 自定义组件生命周期 1、自定义组件生命周期 2、aboutToAppear 函数执行时机和作用 3、aboutToDisappear 函数执行时机和作用 4、代码示例 二、ArkTS @Entry 页面生命周期 1、@Entry 页面生命周期 2、onBackPress 和 onPageHide 回调函数无关联 三、代码示例 - @Entry 页面生命周期 + @Component 自定义组件生命周期 1、代码示例 - @Component 自定义组件生命周期 2、代码示例 - @Entry 页面生命周期 3、进入页面后的效果 4、屏幕熄灭 4、屏幕点亮 5、按下 Home 键 6、Home 键返回 7、回退键退出应用

2024-06-04

【OpenHarmony】 ArkTS 语法基础 ② ( ArkTS 自定义组件 )

【OpenHarmony】ArkTS 语法基础 ② ( ArkTS 自定义组件 | 自定义可导入组件 - export 声明模块 | 导入自定义组件 - import 导入组件 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139407374 博客源码快照 一、ArkTS 自定义组件 1、@Component 装饰器 2、自定义组件语法 3、将自定义组件设置为页面入口 二、ArkTS 使用外部自定义组件 1、自定义可导入组件 - export 声明模块 2、导入自定义组件 - import 导入组件

2024-06-03

Windows 10 平台 FFmpeg 开发环境搭建 博客资源

【FFmpeg】Windows 10 平台 FFmpeg 开发环境搭建 ④ ( FFmpeg 开发库内容说明 | 创建并配置 FFmpeg 项目 | 拷贝 DLL 动态库到 SysWOW64 目录 ) https://hanshuliang.blog.youkuaiyun.com/article/details/139172564 博客资源 一、FFmpeg 开发库 1、FFmpeg 开发库编译 2、FFmpeg 开发库内容说明 二、创建并配置 FFmpeg 项目 1、拷贝 dll 动态库到 C:\Windows\SysWOW64 目录 - 必须操作 特别关注 2、创建 Qt 项目 - C 语言程序 3、配置 FFmpeg 开发库 - C 语言项目 4、创建并配置 FFmpeg 开发库 - C++ 项目

2024-05-24

FFmpegFilter 过滤器 ⑥ ( 九宫格画面拼接 ) 博客资源

【FFmpeg】Filter 过滤器 ⑥ ( 九宫格画面拼接 ) 博客资源 博客地址 : https://hanshuliang.blog.youkuaiyun.com/article/details/139008847

2024-05-17

【移动端网页布局】Flex 弹性布局案例 ③

【移动端网页布局】Flex 弹性布局案例 ③

2024-03-06

GIF录屏工具-Gif123-GifCam-LICEcap

GIF录屏工具-Gif123-GifCam-LICEcap

2024-03-04

Java 语言中的 properties 配置文件使用

【Java 语言】读取 properties 配置文件 ( Java 语言中的 properties 配置文件 | 使用 properties 配置文件 ) https://hanshuliang.blog.youkuaiyun.com/article/details/134435350 博客源码

2023-11-16

JetpackNavigation 导航组件 ④ ( Fragment 跳转中使用 safe args 安全传递参数 )

https://hanshuliang.blog.youkuaiyun.com/article/details/131406972 博客源码快照 一、页面跳转间的传统的数据传递方式 1、传统的数据传递方式 - Bundle 传递数据 1、Navigation 组件中的 Bundle 数据传递 2、传统数据传递实现步骤 3、FragmentA 完整代码示例 4、FragmentB 完整代码示例 5、执行结果 2、使用 Bundle 传递数据安全性差 二、页面跳转间的传统的数据传递方式 1、导入插件依赖 2、使用插件 3、在 navigation_graph.xml 中定义要传递的 argument 参数信息 4、重新编译生成参数传递相关代码 5、调用 FragmentBArgs 类生成参数 Bundle 6、FragmentA 中获取参数 三、两种传参方式的完整代码示例 1、Gradle 构建脚本 I、根目录下 settings.gradle 构建脚本 II、根目录下 build.gradle 构建脚本 III、Module 目录下 build.gradle 构建脚本 2、res 资源配置

2023-08-25

可运行的 Android 版本的 ijkplayer 2023年 8 月 14 日调试完毕

运行环境 : 2021.3.1 Dolphin , Android Gradle 插件版本号 3.2.0 , Gradle 版本号 gradle-4.6-all.zip 【ijkplayer】编译 Android 版本的 ijkplayer ⑦ ( 使用 AS 打开源码 | 重新设置 AGP 和 Gradle 版本号 | 设置依赖仓库 | 设置依赖 | 编译运行 ) 原文链接:https://blog.youkuaiyun.com/shulianghan/article/details/132274142 一、Android Studio 打开编译后的 ijkplayer 源码 二、重新设置 Android Gradle 插件版本号和 Gradle 构建工具版本号 三、设置依赖仓库 1、取消 jcenter 仓库 2、添加 google 和 mavenCentral 仓库 3、添加阿里云仓库 四、取消 jcenter 上传相关插件 五、设置编译工具版本号 六、取消 productFlavors 七、设置 build.gradle 中的依赖为 implementation 依赖 八、编译应用

2023-08-14

hadoop-3.3.4.tar.gz + winutils 安装环境

【开发环境】安装 Hadoop 运行环境 ( 下载 Hadoop | 解压 Hadoop | 设置 Hadoop 环境变量 | 配置 Hadoop 环境脚本 | 安装 winutils ) https://hanshuliang.blog.youkuaiyun.com/article/details/132045605 一、下载 Hadoop 二、解压 Hadoop 三、设置 Hadoop 环境变量 四、配置 Hadoop 环境脚本 五、安装 winutils 六、重启电脑 七、验证 Hadoop 安装效果

2023-08-03

JetpackNavigation 导航组件 ③ ( 为 Navigation Graph 添加跳转动画 )

【Jetpack】Navigation 导航组件 ③ ( 为 Navigation Graph 添加跳转动画 ) 博客源码快照 博客地址 : https://hanshuliang.blog.youkuaiyun.com/article/details/131405392 一、为 Navigation Graph 添加跳转动画 1、进入 Navigation Graph 配置的 Design 模式 2、选中 action 跳转 3、为 action 跳转设置 enterAnim 进入动画 4、为 action 跳转设置 exitAnim 退出动画 5、通过代码为 action 跳转设置进入 / 退出动画

2023-06-26

JetpackNavigation 导航组件 ②

【Jetpack】Navigation 导航组件 ② ( Navigation 核心要点说明 | 创建 Navigation Graph | 创建 NavHostFragment | 完整代码示例 ) https://hanshuliang.blog.youkuaiyun.com/article/details/131299078

2023-06-21

DB Browser for SQLite 数据库查看工具

DB Browser for SQLite 数据库查看工具

2023-06-14

ViewModel + LiveData + DataBinding 综合使用示例

【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 ) 博客地址 : https://hanshuliang.blog.youkuaiyun.com/article/details/130401679 一、ViewModel + LiveData + DataBinding 核心要点 1、ViewModel 使用要点 2、LiveData 使用要点 3、DataBinding 使用要点 二、ViewModel + LiveData + DataBinding 代码示例 1、ViewModel + LiveData 代码 2、build.gradle 构建脚本 - 启用 DataBinding 3、DataBinding 布局文件 - 配置 ViewModel 类 4、Activity 系统组件代码 - 加载 DataBinding 布局 / 布局配置 ViewModel 对象 / 设置 LiveData 观察者 5、执行结果

2023-04-27

BaseObservable 实现数据模型 Model 与视图 View 双向绑定

BaseObservable 实现数据模型 Model 与视图 View 双向绑定

2023-04-18

DataBinding 架构组件 ④

【Jetpack】DataBinding 架构组件 ④ ( 使用 @BindingAdapter 注解为布局组件绑定自定义逻辑 | 网络图片加载 | 本地图片加载 ) https://blog.youkuaiyun.com/shulianghan/article/details/130043460 一、@BindingAdapter 注解 1、注解简介 2、使用 @BindingAdapter 注解为布局组件绑定自定义逻辑 二、使用 @BindingAdapter 注解绑定加载网络图片静态方法 三、使用 @BindingAdapter 注解绑定加载本地图片静态方法 四、使用 @BindingAdapter 注解绑定加载网络图片或本地图片静态方法 五、完整代码示例 1、build.gradle 构建脚本 2、AndroidManifest.xml 清单文件 3、DataBinding 布局文件 4、BindingAdapter 注解类 5、MainActivity 组件 6、执行结果

2023-04-18

DataBinding 架构组件 ③

【Jetpack】DataBinding 架构组件 ③ ( 使用 include 导入二级界面布局 | 二级页面绑定数据模型 ) https://hanshuliang.blog.youkuaiyun.com/article/details/129899735 一、使用 include 导入二级界面布局 二、二级页面绑定数据模型 1、将二级界面布局转为 DataBinding 布局 2、在主布局中为二级界面布局传递数据模型 三、核心代码示例 1、主布局 2、子布局 3、Java 代码 4、执行结果

2023-04-04

DataBinding 架构组件 ② - DataBinding 布局中使用 import 标签导入 Java、Kotlin 类

【Jetpack】DataBinding 架构组件 ② ( 字符串拼接函数 | 绑定点击事件函数 | DataBinding 布局中使用 import 标签导入 Java、Kotlin 类 ) https://hanshuliang.blog.youkuaiyun.com/article/details/129773150 一、字符串拼接函数 二、绑定点击事件函数 三、DataBinding 布局中使用 import 标签导入 Java、Kotlin 类 1、DataBinding 布局中使用 import 标签导入 Java 类 2、DataBinding 布局中使用 import 标签导入 Kotlin 类 四、完整代码示例 1、数据类 2、导入的 Java 类 3、导入的 Kotlin 类 4、DataBinding 布局文件 5、Activity 组件类

2023-03-26

DataBinding 架构组件

【Jetpack】DataBinding 架构组件 ( 数据绑定技术简介 | Android 中的 DataBinding 数据绑定 | 启动数据绑定 | 定义数据类 | 布局文件转换 ) https://hanshuliang.blog.youkuaiyun.com/article/details/129762717 博客源码快照 一、数据绑定技术简介 二、Android 中的 DataBinding 数据绑定技术 三、Android 中的 DataBinding 代码示例 1、build.gradle 构建脚本 - 启动数据绑定 2、定义数据类 3、布局文件转换 4、Activity 组件设置数据绑定布局和数据 5、显示效果 ———————————————— 版权声明:本文为优快云博主「韩曙亮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/shulianghan/article/details/129762717

2023-03-25

JetpackLiveData 架构组件

【Jetpack】LiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 ) https://hanshuliang.blog.youkuaiyun.com/article/details/129411132 博客源码示例 一、LiveData 简介 二、LiveData 使用方法 三、ViewModel + LiveData 简单示例 1、ViewModel + LiveData 代码 2、Activity 组件代码 3、运行效果展示 四、ViewModel + LiveData + Fragment 通信示例 1、ViewModel + LiveData 代码 2、Activity 组件代码 Activity 代码 布局文件 3、Fragment 代码 第一个 Fragment 代码 第一个 Fragment 布局文件 第二个 Fragment 代码 第二个 Fragment 布局文件 4、运行效果展示

2023-03-12

JetpackViewModel 架构组件 博客源码

【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 ) https://hanshuliang.blog.youkuaiyun.com/article/details/129374914 一、Activity 遇到的问题 二、视图 View 和 数据模型 Model 三、ViewModel 架构组件作用 四、ViewModel 代码示例 1、ViewModel 视图模型 2、Activity 组件 3、UI 布局文件 4、运行效果 五、ViewModel 生命周期 六、ViewModel 使用注意事项 ———————————————— 版权声明:本文为优快云博主「韩曙亮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/shulianghan/article/details/129374914

2023-03-07

博客资料 -JetpackLifeCycle 架构组件

【Jetpack】Lifecycle 架构组件 ( 系统组件与普通组件解耦 | Lifecycle 解耦系统组件与普通组件 | 解耦服务组件与普通组件 | 监听应用程序生命周期 ) https://hanshuliang.blog.youkuaiyun.com/article/details/129291874 一、系统组件与普通组件解耦 二、Lifecycle 解耦 Activity 系统组件与 UI 组件 1、传统实现方式 ① Activity 系统组件 ② 布局文件 ③ 执行效果 2、LifeCycle 实现方式 ① 自定义 UI 组件 ② Activity 系统组件 ③ 布局组件 ④ 执行效果 三、LifecycleService 解耦 Service 与 UI 组件 1、构建脚本导入依赖 2、Android Studio 中搜索并添加依赖 3、布局文件属性排序 4、代码实现 ① LifecycleService 组件 ② LifecycleObserver 业务逻辑 ③ AndroidManifest.xml 清单文件 ④ Activity 系统组件

2023-03-03

使用 Jedis 操作 Redis 数据库 博客代码示例

【Redis】使用 Jedis 操作 Redis 数据库 ② ( Jedis API 规律 | Redis 命令与 Jedis 函数名称基本一致 | Jedis API 使用示例 ) https://hanshuliang.blog.youkuaiyun.com/article/details/129128393 博客代码示例

2023-02-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除