【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.2 数据类型转换(CAST函数/自定义函数)
👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路
文章大纲
- PostgreSQL数据分析实战:数据清洗之数据类型转换(CAST函数/自定义函数)
- 4.2 数据类型转换:让数据「格式正确,类型对号」
- 4.2.1 数据类型混乱的典型场景
- 4.2.2 基础转换工具:CAST函数与类型转换语法
- 1. 显式转换:`CAST(expression AS type)` 或 `expression::type`
- 2. 隐式转换:PostgreSQL自动执行的类型转换`(需谨慎!)`
- 核心数据类型转换矩阵
- 4.2.3 复杂场景处理:自定义函数(UDF)突破转换限制
- 案例1:清洗含货币符号的金额字段
- 案例2:统一布尔值表示('Y'/'N'/'1'/'0'转BOOLEAN)
- 案例3:安全转换含错误数据的字段
- 4.2.4 实战:用户信息表数据类型清洗全流程
- 4.2.5 高级技巧与性能优化
- 1. 批量转换性能优化
- 2. 自定义函数优化策略
- 3. 类型转换错误处理最佳实践
- 总结:数据类型转换的「道」与「术」
- 核心价值
- 技术选择策略
- 实施步骤建议
PostgreSQL数据分析实战:数据清洗之数据类型转换(CAST函数/自定义函数)
在数据清洗过程中,数据类型不匹配是最常见的问题之一。
- 例如,从CSV文件导入的数值型数据可能被错误存储为字符串,日志系统生成的时间戳包含非标准格式,或者跨系统对接时出现布尔值表示不一致(如’Y’/'N’与TRUE/FALSE混杂)。
- 这些问题会导致计算错误(如字符串无法参与数值运算)、索引失效、业务逻辑错误等后果。
- 本文将深入解析PostgreSQL中数据类型转换的核心技术——
CAST
函数与自定义函数,结合真实数据案例演示复杂场景下的转换技巧。
4.2 数据类型转换:让数据「格式正确,类型对号」
4.2.1 数据类型混乱的典型场景
在实际业务数据中,类型不匹配问题通常表现为:
-
- 跨系统数据集成:
- 前端表单提交的年龄字段为字符串类型(如
'25'
),但数据库期望INTEGER
- 财务系统导出的金额包含货币符号(如
'$199.99'
),需转换为NUMERIC
-
- 历史数据兼容:
- 旧系统遗留的日期存储为
TEXT
类型(如'2024-05-01'
),新业务需要DATE
类型进行时间运算 布尔值以多种形式存在
('是'
/'否'
、1
/0
、TRUE
/FALSE
混合)
-
- 日志与埋点数据:
- 用户行为日志中的时间戳为Unix时间戳(整数型),需转换为
TIMESTAMP
- 设备传感器数据中的温度值存储为
VARCHAR
(如'25.5℃'
),需提取数值部分
以用户信息表user_profiles
为例,原始数据存在以下类型问题:
user_id | age | registration_date | is_premium | balance |
---|---|---|---|---|
1001 | ‘28’ | 20240501 | Y | $100.50 |
1002 | 35 | ‘2024-05-02’ | 1 | 50 |
1003 | ‘abc’ | 2024/05/03 | FALSE | 200.0 |
这些数据若直接用于分析,会导致:
- 年龄字段无法正确计算平均值(包含非数字字符串)
- 日期字段无法进行
BETWEEN
查询 - 布尔值无法用于条件过滤(
Y
/1
/FALSE
混合)
4.2.2 基础转换工具:CAST函数与类型转换语法
PostgreSQL提供两种类型转换方式:
1. 显式转换:CAST(expression AS type)
或 expression::type
-- 字符串转整数
SELECT '28'::INTEGER; -- 28SELECT CAST('2024-05-01' AS DATE); -- 2024-05-01-- 布尔值转换(注意:非标准值会报错)
SELECT 'Y'::BOOLEAN; -- 报错,需使用自定义逻辑处理
2. 隐式转换:PostgreSQL自动执行的类型转换(需谨慎!)
-- 字符串自动转为NUMERIC进行计算
SELECT '100.5' + 50; -- 150.5(隐式转换为NUMERIC)-- 危险案例:非数字字符串隐式转换会报错
SELECT 'abc' + 10; -- ERROR: invalid input syntax for type numeric: "abc"
核心数据类型转换矩阵
目标类型 | 可转换的源类型示例 | 转换函数/语法 | 注意事项 |
---|---|---|---|
INTEGER | ‘123’, 123.9, TRUE(1), ‘0b101’ | ::INT, CAST AS INTEGER | 小数会截断,非数字字符串报错 |
NUMERIC(10,2) | ‘$123.45’, ‘1,000.50’(需预处理) | 先去除符号,再转换 | 逗号需替换为小数点 |
DATE | ‘2024-05-01’, ‘05/01/2024’(需格式匹配) | TO_DATE(expression, format) | 格式不匹配时返回NULL(需结合TRY_CAST) |
BOOLEAN | ‘TRUE’, ‘1’, ‘Y’(非标准值需处理) | 自定义函数或CASE WHEN | 仅’f’/‘t’/‘0’/‘1’/‘false’/'true’可直接转换 |
JSONB | ‘{“name”:“Alice”,“age”:30}’ | ::JSONB | 严格校验JSON格式,无效数据报错 |
4.2.3 复杂场景处理:自定义函数(UDF)突破转换限制
当CAST
函数无法处理非标准格式(如包含单位、特殊符号的数据)时,需通过自定义函数实现灵活转换。
案例1:清洗含货币符号的金额字段
- 需求:将
'$1,000.50'
转换为NUMERIC(10,2)
CREATE OR REPLACE FUNCTION clean_currency(currency_str TEXT)
RETURNS NUMERIC AS $$
BEGIN-- 去除所有非数字和小数点字符(保留一个小数点)RETURN TRIM(TRAILING '.' FROM REGEXP_REPLACE(currency_str, '[^0-9.]', '', 'g'))::NUMERIC;-- 处理异常:若转换失败返回NULLEXCEPTION WHEN others THEN RETURN NULL;
END;
$$ LANGUAGE plpgsql;-- 使用示例
SELECT balance, clean_currency(balance) AS cleaned_balance
FROM user_profiles;
balance | cleaned_balance |
---|---|
$100.50 | 100.50 |
50 | 50.00 |
200.0 | 200.00 |
案例2:统一布尔值表示(‘Y’/‘N’/‘1’/'0’转BOOLEAN)
CREATE FUNCTION str_to_boolean(flag TEXT)
RETURNS BOOLEAN AS $$
BEGINRETURN CASE WHEN flag IN ('Y', '1', 'Yes', 'TRUE') THEN TRUE WHEN flag IN ('N', '0', 'No', 'FALSE') THEN FALSE ELSE NULL -- 未知值处理为NULLEND;
END;
$$ LANGUAGE plpgsql;-- 批量转换
UPDATE user_profiles
SET is_premium = str_to_boolean(is_premium);
案例3:安全转换含错误数据的字段
当数据中存在无法转换的值(如'abc'
转整数),使用TRY_CAST
(PostgreSQL 11+)或自定义错误处理逻辑:
-- TRY_CAST安全转换(失败返回NULL)
SELECT TRY_CAST(age AS INTEGER) AS safe_age
FROM user_profiles;-- 等效自定义函数(兼容旧版本)
CREATE FUNCTION safe_cast_int(input_str TEXT)
RETURNS INTEGER AS $$
BEGINRETURN input_str::INTEGER;EXCEPTION WHEN invalid_text_representation THEN RETURN NULL;
END;
$$ LANGUAGE plpgsql;
try_cast 自定义函数-示例
CREATE OR REPLACE FUNCTION try_cast(input_val ANYELEMENT, -- 输入值(任意类型)target_type TEXT -- 目标类型(如 'INTEGER' 'DATE') ) RETURNS ANYELEMENT AS $$ DECLAREresult ANYELEMENT; BEGIN-- 使用动态 SQL 执行转换EXECUTE format('SELECT $1::%s', target_type)INTO resultUSING input_val;RETURN result; EXCEPTIONWHEN others THEN -- 捕获所有转换错误RETURN NULL; END; $$ LANGUAGE plpgsql;
- 查询PG所有函数
SELECTproname AS "函数名",pg_catalog.pg_get_function_arguments(oid) AS "参数列表",prorettype::regtype AS "返回类型",CASE WHEN pronamespace = 'pg_catalog'::regnamespace THEN '内置函数' ELSE '用户函数' END AS "函数类型" FROMpg_catalog.pg_proc ORDER BY"函数类型", "函数名";
- 查询PG所有函数
4.2.4 实战:用户信息表数据类型清洗全流程
针对user_profiles
表的清洗需求:
-
age
字段:字符串转整数,非数字值设为NULL
-
registration_date
:不同格式字符串转DATE
(支持YYYYMMDD
、YYYY-MM-DD
、YYYY/MM/DD
)
-
is_premium
:统一为BOOLEAN
类型
-
balance
:去除货币符号,转为NUMERIC(10,2)
-
步骤1:创建清洗后的数据表
CREATE TABLE cleaned_profiles (user_id INTEGER PRIMARY KEY,age INTEGER,registration_date DATE,is_premium BOOLEAN,balance NUMERIC(10,2)
);
- 步骤2:编写转换逻辑
INSERT INTO cleaned_profiles (user_id, age, registration_date, is_premium, balance)
SELECT user_id,safe_cast_int(age) AS age, -- 使用自定义安全转换函数CASE WHEN registration_date ~ '\d{8}' THEN TO_DATE(registration_date, 'YYYYMMDD') -- 处理20240501WHEN registration_date ~ '\d{4}-\d{2}-\d{2}' THEN registration_date::DATE -- 处理2024-05-02WHEN registration_date ~ '\d{4}/\d{2}/\d{2}' THEN TO_DATE(registration_date, 'YYYY/MM/DD') -- 处理2024/05/03ELSE NULL -- 格式不匹配设为NULLEND AS registration_date,str_to_boolean(is_premium) AS is_premium,clean_currency(balance) AS balance
FROM user_profiles;
- 步骤3:验证清洗结果
-- 检查转换失败的记录
SELECT * FROM cleaned_profiles WHERE age IS NULL OR registration_date IS NULL;-- 统计各字段数据类型一致性
SELECT COUNT(*) FILTER (WHERE age IS NULL) AS invalid_age_count,COUNT(*) FILTER (WHERE registration_date IS NULL) AS invalid_date_count
FROM cleaned_profiles;
4.2.5 高级技巧与性能优化
1. 批量转换性能优化
- 对大表使用
SET work_mem = '64MB'
增加临时内存 - 避免在
SELECT
中重复调用转换函数,使用CTE缓存中间结果!!!
:WITH converted_data AS (SELECT user_id, safe_cast_int(age) AS age FROM user_profiles )SELECT * FROM converted_data WHERE age > 30;
2. 自定义函数优化策略
- 使用
IMMUTABLE
声明不变函数(允许SQL优化器缓存结果):CREATE FUNCTION clean_currency(...) RETURNS NUMERIC IMMUTABLE ...
对高频调用的函数,考虑使用C语言扩展
(如pg_catalog
中的内置函数)
3. 类型转换错误处理最佳实践
场景 | 处理方法 | 示例代码 |
---|---|---|
允许部分数据转换失败 | 使用COALESCE 设置默认值 | COALESCE(TRY_CAST(age AS INT), 0) |
严格校验数据合法性 | 结合CHECK 约束 | ALTER TABLE ADD CHECK (age >= 0) |
记录转换错误日志 | 创建错误日志表 | INSERT INTO error_log VALUES (user_id, 'AGE_CONVERSION_FAILED') |
总结:数据类型转换的「道」与「术」
核心价值
- 正确性:确保
数值计算、时间运算、逻辑判断基于正确的数据类型
- 一致性:消除多源数据的类型差异,为后续分析提供统一的数据基础
- 健壮性:通过自定义函数处理异常数据,避免脏数据导致的系统崩溃
技术选择策略
场景 | 推荐工具 | 优势 | 局限性 |
---|---|---|---|
标准格式转换 | CAST /:: | 简单高效,内置支持 | 仅处理规范数据 |
非标准格式清洗 | 自定义函数 | 灵活处理复杂逻辑 | 需编写代码,影响性能(若未优化) |
批量安全转换 | TRY_CAST | 失败返回NULL,避免中断 | PostgreSQL 11+才支持 |
跨类型复杂转换 | 正则表达式+函数组合 | 处理含干扰字符的数据 | 正则性能依赖模式复杂度 |
实施步骤建议
-
- 数据探查:使用
SELECT DISTINCT
分析目标字段的所有值类型分布
- 数据探查:使用
-
- 分类处理:将数据分为
「可直接转换」「需预处理转换」「完全无效」三类
- 分类处理:将数据分为
-
- 分层清洗:先处理明显错误(如
'abc'
转数值),再处理格式差异(如日期格式)
- 分层清洗:先处理明显错误(如
-
- 持续验证:建立自动化校验脚本,定期检查转换后的数据类型一致性
- 通过合理运用
CAST
函数的简洁性与自定义函数的灵活性
,我们能够在PostgreSQL中构建健壮的数据类型转换体系。- 无论是简单的字符串转整数,还是复杂的多模式日期解析,关键在于结合业务场景选择合适的工具,并通过错误处理机制保障数据清洗的可靠性。
- 当数据类型正确无误时,后续的数据分析与可视化才能真正发挥价值,让数据成为驱动业务的核心资产。
如果在实际项目中遇到特殊的数据类型转换需求(如二进制数据转图片、XML/JSON深度解析),欢迎提供具体案例,我们可以共同设计高效的转换方案
。
- 以上内容系统讲解了PostgreSQL数据类型转换的核心技术。
- 你在处理具体业务数据时,是否遇到过需要结合正则表达式或复杂业务逻辑的转换场景?欢迎分享具体问题,我们可以进一步探讨优化方案。
相关文章:
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.2 数据类型转换(CAST函数/自定义函数)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:数据清洗之数据类型转换(CAST函数/自定义函数)4.2 数据类型转换:让数据「格式正确,类型对…...
docker:制作镜像+上传镜像+拉取镜像
1.dockerfile制作镜像 示例内容: 1.创建一个index.js的文件 console.log("hello world")2.在相同目录下创建名为dockerfile的文件 FROM node:alpine COPY index.js /index.js CMD node /index.js3.构建镜像 docker build -t minterra/hello-docker . …...
信息系统监理师第二版教材模拟题第三组(含解析)
信息系统监理师模拟题第三组(30题) 监理基础理论 信息系统工程监理的性质是( ) A. 服务性、独立性、公正性、科学性 B. 强制性、营利性、行政性、技术性 C. 临时性、从属性、随意性、主观性 D. 单一性、封闭性、被动性、保守性答案:A 解析:监理具有服务性、独立性、公正…...
潮乎盲盒商城系统全开源多级分销推广海报奖品兑换试玩概率OSS云存储多端源码
一、源码描述 这是一套潮乎盲盒商城源码,仿小叮当盲盒商城,后端Laravel框架前端uniappvue,前后端数据库分离,支持四端同步数据(H5小程序等),测试环境: php7.4,mysql5.6,…...
文章记单词 | 第64篇(六级)
一,单词释义 residence [ˈrezɪdəns] n. 住宅;居住;住所;居住期fling [flɪŋ] v. (用力地)扔,掷,抛;猛动(身体或身体部位);急冲&a…...
数据同步实战篇
文章目录 数据同步实战篇1. mysql数据同步1.1 mysql集群部署1.2 数据同步1.2.1 同步复制1.2.2 异步复制1.2.3 半同步复制 2. redis数据同步2.1 redis集群部署2.2 数据同步 3. mq数据同步3.1 mq集群部署3.2 数据同步 4. es数据同步4.1 es集群部署4.2 数据同步 数据同步实战篇 数…...
具身系列——Double DQN算法实现CartPole游戏(强化学习)
完整代码参考: rl/ddqn_cartpole.py 陈先生/ailib - Gitee.com 部分训练得分: Model saved to ./output/best_model.pth New best model saved with average reward: 9.6 Episode: 0 | Train Reward: 25.0 | Epsilon: 0.995 | Best Eval Avg: 9.6…...
以下是在 Ubuntu 上的几款PDF 阅读器,涵盖轻量级、功能丰富和特色工具:
默认工具:Evince(GNOME 文档查看器) 特点:Ubuntu 预装,轻量快速,支持基本标注和书签。 安装:已预装,或手动安装: sudo apt install evince功能全面:Okular&…...
有关水下图像增强的论文
4.21 TEBCF:Real-World Underwater Image Texture Enhancement Model Based on Blurriness and Color Fusion 基于模糊和颜色融合的现实水下图像纹理增强模型 2022年的一篇文章,基于传统方法,基于不同的色彩方法构建了两个新的融合输入。一…...
Raycaster光线投射
Raycaster光线投射 3D虚拟工厂在线体验 描述 光线投射Raycaster,用于进行raycasting(光线投射)。 光线投射用于进行鼠标拾取(在三维空间中计算出鼠标移过了什么物体)。 构造器 Raycaster( origin : Vector3, dire…...
javaEE——单例模式
目录 前言1.概念2. 实现3. 比较和改进总结 前言 本篇文章来介绍单例模式,并讲述在保证线程安全的前提下,单例模式的写法。 1.概念 单例模式是一种设计模式,可以说是写代码的一种模板,如果在一些固定的场景下按照设计模式进行写…...
WSL在D盘安装Ubuntu
目录 前提条件步骤一:查看可用的Linux发行版步骤二:安装Ubuntu 22.04步骤三:导出已安装的Ubuntu到D盘步骤四:注销当前Ubuntu安装步骤五:在D盘导入Ubuntu启动Ubuntu 前提条件 Windows 10或Windows 11系统已启用WSL功能…...
Java并发编程-多线程基础(三)
文章目录 线程间通信线程间通信的核心问题volatile 关键字1. 核心特性2. 使用限制3. 示例 synchronized 关键字1. 核心特性2. 示例 volatile 与 synchronized 的对比Volatile 和 Synchronized 最佳实践 线程间通信 线程间通信的核心问题 多个线程通过共享内存实现信息交换&am…...
React--》掌握react构建拖拽交互的技巧
在这篇文章中将深入探讨如何使用react-dnd,从基础的拖拽操作到更复杂的自定义功能带你一步步走向实现流畅、可控且用户友好的拖拽体验,无论你是刚接触拖拽功能的初学者还是想要精细化拖拽交互的经验开发者,都能从中找到适合自己的灵感和解决方案。 目录 …...
【Qt】常用的类与数据类型
目录 一、Qt常见基本数据类型 二、Qt 字符串类应用 2.1 操作字符串 2.2 查询字符串 三、QMap 类&QHash 类&QVector 类 3.1 QMap 类 3.2 QHash 类 3.3 QVector 类 四、QList 类&QLinkedList 类 4.1 QList 类 4.2 QLinkedList 类 4.3 STL 风格迭代器遍历…...
React实现B站评论Demo
该Demo涉及的技术点 useState函数(数据驱动视图)子组件的封装条件判断回调函数的封装 1、评论数据 {"list": [{"rpid": 3,"user": {"uid": "13258165","avatar": "http://toutiao.…...
从实列中学习linux shell12 通过Shell脚本来优化MySQL数据库性能,特别是慢SQL跟踪和索引优化
在Shell脚本中优化MySQL数据库性能,特别是慢SQL跟踪和索引优化 可以通过以下步骤实现。以下是一个结构化的解决方案,包含示例代码和详细说明: 1. 启用慢查询日志 目标:动态启用慢查询日志并配置参数,收集慢SQL数据。…...
ES6入门---第三单元 模块一:类、继承
补充: prototype 属性使您有能力向对象添加属性和方法。 object.prototype.namevalue <script>function Person(name, age){this.name name;this.age age;}/* Person.prototype.showName function(){return 名字为: ${this.name};};Person.prototype.showA…...
CSS 变量与原生动态主题实现
CSS 变量与原生动态主题实现 CSS 变量基础 CSS 变量(自定义属性)是 CSS 语言的一项强大功能,允许我们在样式表中定义和重用值。与 SCSS 或 LESS 等预处理器中的变量不同,CSS 变量在运行时计算,这意味着它们可以动态更…...
Ubuntu 安装 Docker
安装 Docker 1. 卸载旧版本(如果有) sudo apt-get remove docker docker-engine docker.io containerd runc 2. 更新 APT 包的索引 sudo apt-get update 3. 安装依赖包 sudo apt-get install -y \ca-certificates \curl \gnupg \lsb-release4. 添加…...
SpringMVC——第三章:获取请求数据
假设有这样一个请求:http://localhost:8080/springmvc/register?namezhangsan&password123&emailzhangsanpowernode.com 在SpringMVC中应该如何获取请求提交的数据呢? 在SpringMVC中又应该如何获取请求头信息呢? 在SpringMVC中又应…...
动静态库【Linux操作系统】
文章目录 动静态库制作静态库如何把第三方库安装在Linux系统中,如何使用第3方库方案一:为什么我们之前使用gcc/g编译C/C标准库的时候不用加选项-l xxx呢?方案二:方案三: 为什么不同平台的库不一样呢?动态库…...
Day 4:牛客周赛Round 91
好久没写了,问题还蛮多的。听说这次是苯环哥哥出题 F题 小苯的因子查询 思路 考虑求因子个数,用质因数分解;奇数因子只需要去掉质数为2的情况,用除法。 这里有个比较妙的细节是,提前处理出数字x的最小质因数࿰…...
drawDB:打造高效数据库设计流程
drawDB:打造高效数据库设计流程 drawDB 简介资源链接 核心功能详解1. 直观的实体关系图设计2. SQL 脚本生成3. SQL 导入功能4. 本地化存储与分享功能5. 自定义主题与外观 安装和使用教程本地开发环境搭建构建生产版本Docker 部署基本使用方法 应用场景和实际价值适用…...
【心海资源】子比主题新增注册与会员用户展示功能模块及实现方法
内容改写: 本次分享的是子比主题顶部展示注册用户与会员信息的功能模块及其实现方式。 你可以通过两种方式启用该功能: 直接在后台进入“外观 → 小工具”启用该展示模块,操作简便;也可将提供的代码覆盖至子比主题目录中&#…...
gitblit安装教程,搭建一个属于自己的Git版本仓库
本章教程,主要记录如何在Windows服务器上利用gitblit搭建GIT私有化仓库。 一、gitblit简介 官网地址:https://www.gitblit.com/ Gitblit 是一个开源的纯 Java 技术栈,用于管理、查看和服务Git仓库。 它主要设计为一款面向希望托管集中式仓库的小型工作组的工具。 二、基础环…...
2023年第十四届蓝桥杯省赛B组Java题解【简洁易懂】
2023年第十四届蓝桥杯省赛B组Java题解 题型概览与整体分析 题目编号题目名称题型难度核心知识点通过率(预估)A阶乘求和结果填空★☆☆模运算、数学规律95%B幸运数字结果填空★★☆进制转换、数位和计算80%C数组分割编程题★★☆组合数学、奇偶性分析65…...
Javase 基础加强 —— 01 异常
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 课程安排…...
iview 表单验证问题 Select 已经选择 还是弹验证提示
问题:iview 的 Select 下拉框的时候,数据验证必填,明明选择了数据,却一直提示验证不能通过 html代码: <Form ref"FormData" :model"FormData" :rules"ruleValidate" :label-width&qu…...
OrCAD中离图连接器、端口及网络标签的作用范围与选择指南
一、OrCAD主要连接元素概述 在OrCAD Capture原理图设计环境中,有三种主要的网络连接元素:离图连接器(Off-Page Connector)、端口(Port)和网络标签(Net Alias)。理解它们的作用范围和使用场景对设计清晰、可维护的原理图至关重要。 PS: 电源和…...
dpm_sysfs_add
这段代码是 Linux 内核中**设备电源管理(PM)子系统**与 **sysfs 文件系统**交互的核心实现,主要功能是为设备创建电源管理相关的 sysfs 属性文件。以下从五个关键维度进行深度解析: --- ### 一、功能架构全景 mermaid graph TD …...
【AI论文】Phi-4-reasoning技术报告
摘要:我们引入了Phi-4-reasoning,这是一种拥有140亿参数的推理模型,在复杂的推理任务中表现出了强大的性能。 通过监督式微调Phi-4,在精心策划的“可教”提示集上进行训练,这些提示集是根据复杂性和多样性的适当水平选…...
Android ART运行时无缝替换Dalvik虚拟机的过程分析
目录 一,概述 二,dex文件优化 一,概述 Android 4.4发布了一个ART运行时,准备用来替换掉之前一直使用的Dalvik虚拟机,希望籍此解决饱受诟病的性能问题。老罗不打算分析ART的实现原理,只是很有兴趣知道ART是如何无缝替换掉原来的Dalvik虚拟机…...
node.js为什么产生?
从官网得知介绍如下 https://nodejs.org/zh-cn/learn/getting-started/introduction-to-nodejs Node.js是一个开源和跨平台的JavaScript运行时环境。 Node.js在浏览器之外运行V8 JavaScript引擎,这是Google Chrome的核心。这使得Node.js具有很高的性能。 Node.js应…...
智能工厂边缘计算:从数据采集到实时决策
智能工厂边缘计算:从数据采集到实时决策 引言 在智能制造场景中,传统云计算架构面临三大核心挑战:平均200ms的网络延迟无法满足实时控制需求,90%的工业数据未被有效利用,以及每月高达15TB的数据传输成本。边缘计算技术通过将计算能力下沉到数据源头,正在构建"端-边…...
个人健康中枢的多元化AI网络革新与精准健康路径探析
引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…...
前端面试宝典---性能优化
一、加载优化 1. 第三方模块放在CDN 例如 leaflet通过cdn引入,这样就不会占用打包体积了 2. prefetch 预加载 例如,之后马上有个场景需要一个图片,我们就可以通过link 的 prefetch 对资源进行预先加载 再例如,我们公司是无网络开…...
【Springboot进阶】springboot+mybatis+jsqlparser实现数据权限控制
文章目录 SpringBoot JSqlParser MyBatis 数据权限实现方案一、环境准备1. 添加依赖 二、用户上下文管理1. 用户上下文持有类 三、数据权限拦截器实现1. MyBatis拦截器核心类 四、Spring Security集成1. 用户信息注入 五、配置项示例application.yml 六、使用示例1. 业务查询…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.3 窗口函数与高级聚合(ROW_NUMBER()/RANK()/SUM() OVER())
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL窗口函数与高级聚合:从排序到动态分析的全场景应用1. 窗口函数核心概念解析1.1 窗口函数语法结构1.2 核心组成要素2. 排名窗口函数深度解析2.1 ROW_NUMBER():唯一顺序排名示例演示2.2 `RANK…...
python全自动爬取m3u8网页视频(各类网站都通用)
当前人工智能,大语言模型的火热,使得python这门编程语言的使用越来越广泛。最近也开始学习了python,发现它在自动化方面的确有得天独厚的优势。python的简单易用,丰富的开源库,完善的生态,使得它有可能成为…...
C++负载均衡远程调用学习之上报功能与存储线程池
目录 1. Lars-reportV0.1 report模块介绍 2.Lars-reporterV0.1 reporter项目目录构建 3.Lars-ReporterV0.1 数据表和proto协议环境搭建 4.Lars-ReporterV0.1上报请求业务处理 5.Lars-ReporterV0.1上报请求模块的测试 6.Lars-ReporterV0.2开辟存储线程池-网络存储分离 1. L…...
今天python练习题
目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 不要害怕失败,失败可能成为我们前进的动力! 二、练习题 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9组成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…...
【leetcode100】最长递增子序列
1、题目描述 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 …...
R绘图|3分钟复现瑞士“苏黎世大学”Nature全球地图——基于R包ggplot2+sf等
一、引言 本文我们复现苏黎世大学团队Franois Keck等在Nature最新文章“The global human impact on biodiversity”中的全球地图。 之前的图纸是在平面坐标系里面进行绘制,本次我们在罗宾逊投影中进行绘制。整体代码逻辑非常简单,就是采样点坐标系的转换…...
百度系列产品学习
1.react-bmapgl封装逻辑 Map 分析react-bmapgl库中Map组件的封装流程,并以mermaid图展示。首先分析Map组件的核心实现,包括生命周期方法和子组件渲染逻辑。然后研究WrapperHOC和Component基类的封装模式,理解事件绑定和属性处理的通用逻辑。…...
高等数学第三章---微分中值定理与导数的应用(3.4~3.5)
3.4 函数的单调性与曲线的凹凸性 一、函数的单调性 1. 函数单调性定义回顾 设函数 f ( x ) f(x) f(x) 的定义域为 D D D,区间 I ⊆ D I \subseteq D I⊆D。 如果对任意 x 1 , x 2 ∈ I x_1, x_2 \in I x1,x2∈I,当 x 1 < x 2 x_1 < x…...
idea结合CopilotChat进行样式调整实践
一、前言: 本文主要分享在前端开发中借助AI能力调整样式,提高开发效率 对应视频【idea结合CopilotChat进行样式调整实践-哔哩哔哩】 二、实践: 2-1、现状确认: 表格上方新增了button、swtich、select组件,需要调整…...
668SJBH报刊发行系统
1 前言 随着我国信息产业的迅猛发展,手工管理方式已不适应社务管理的要求,报社的日常管理正面临着信息化的挑战,采用计算机管理以提高服务质量和管理水平势在必行。发行管理是社务管理的一个重要组成部分,是报社和客户联系的纽带…...
格式化字符串漏洞
原理 在c中,printf函数在打印输出变量时通常不是直接输出,而是用一个占位符如%s printf("the number is %d\n",a);//通常用 printf(a);//而不是直接输出 虽然直接输出也没有太大的问题,但如果用格式化输出,没有给后面…...
如何查看电脑IP地址和归属地:全面指南
在数字化时代,了解自己电脑的IP地址和归属地信息变得越来越重要。无论是进行网络故障排查、远程办公设置,还是出于网络安全考虑,掌握这些基本信息都很有必要。本文将详细介绍如何查看电脑的公网IP、内网IP以及归属地信息,并提供常…...