当前位置: 首页 > news >正文

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.4 模型部署与定期评估

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

  • 10.4 模型部署与定期评估
    • 10.4.1 模型部署架构设计
      • 1.1 模型存储方案
      • 1.2 实时预测接口
    • 10.4.2 定期评估体系构建
      • 2.1 评估指标体系
      • 2.2 自动化评估流程
      • 2.3 模型衰退预警
    • 10.4.3 模型迭代优化策略
      • 3.1 增量训练机制
      • 3.2 模型版本控制
      • 3.3 影子测试机制
    • 10.4.4 生产环境监控体系
      • 4.1 数据库性能监控
      • 4.2 模型服务监控
      • 4.3 异常报警机制
    • 10.4.5 案例实践:某银行风控模型部署
      • 5.1 实施效果
      • 5.2 经验总结
    • 10.4.6 未来演进方向

10.4 模型部署与定期评估

在这里插入图片描述

10.4.1 模型部署架构设计

1.1 模型存储方案

采用PostgreSQL的jsonb类型存储模型元数据,同时使用pg_largeobject存储序列化后的模型文件。

  • 创建模型版本管理表:
-- 启用必要扩展(JSONB是PostgreSQL 9.4+核心类型,若提示不存在需检查版本)
-- 检查PostgreSQL版本(需≥9.4)
SELECT version();-- 若因权限问题未启用JSONB(罕见情况),执行以下语句(需超级用户权限)
CREATE EXTENSION IF NOT EXISTS pg_jsonb;  -- 注意:实际JSONB无需单独扩展,此为兼容旧环境示例-- 创建模型版本管理表(修正JSONB类型支持)
-- 若表是新建的,直接定义为bytea(推荐)
CREATE TABLE IF NOT EXISTS model_registry (model_id SERIAL PRIMARY KEY,model_name VARCHAR(50) NOT NULL,model_version VARCHAR(20) NOT NULL,trained_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,parameters JSONB,  -- 存储超参数metrics JSONB,     -- 存储评估指标model_file BYTEA   -- 直接存储序列化后的模型字节流
);-- 验证JSONB类型是否可用(执行以下查询应返回类型信息)
SELECT typname FROM pg_type WHERE typname = 'jsonb';

在这里插入图片描述

通过Python脚本将训练好的随机森林模型序列化并存储:

import pickle
import psycopg2
from psycopg2.extras import Json# 训练模型(示例)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100)
# 假设已准备好训练数据(需用户实际填充)
# model.fit(X_train, y_train)# 序列化模型为字节流
with open('model.pkl', 'wb') as f:pickle.dump(model, f)# 读取模型文件内容(字节流)
with open('model.pkl', 'rb') as f:model_bytes = f.read()# 存储到PostgreSQL(改用bytea类型存储)
conn = psycopg2.connect("dbname=postgres user=postgres")
cur = conn.cursor()# 插入模型元数据及二进制内容(修正表结构需配合修改)
cur.execute("""INSERT INTO model_registry (model_name, model_version, parameters, metrics, model_file)VALUES (%s, %s, %s, %s, %s)
""", ('credit_risk_model', 'v1.0', Json(model.get_params()),Json({'accuracy': 0.92}),model_bytes  # 直接存储字节流到bytea字段
))conn.commit()
conn.close()

1.2 实时预测接口

通过PostgreSQL的存储过程实现实时评分计算。以下为简化版存储过程:

CREATE OR REPLACE FUNCTION predict_credit_risk(p_age INT,p_credit_rating VARCHAR,p_loan_amount DECIMAL,p_loan_term INT
) RETURNS NUMERIC AS $$
DECLAREmodel OID;prediction NUMERIC;
BEGIN-- 获取最新模型OIDSELECT model_file INTO modelFROM model_registryORDER BY trained_at DESCLIMIT 1;-- 加载模型并预测CREATE TEMP TABLE temp_features ASSELECT p_age, p_credit_rating, p_loan_amount, p_loan_term;-- 这里需要实际的特征工程逻辑,此处为示意WITH features AS (SELECT age,CASE WHEN credit_rating = '优秀' THEN 4WHEN credit_rating = '良好' THEN 3WHEN credit_rating = '中等' THEN 2ELSE 1 END AS credit_score,loan_amount,loan_termFROM temp_features)SELECT model.predict(features.*) INTO prediction;  -- 假设存在扩展支持模型预测RETURN prediction;
END;
$$ LANGUAGE plpgsql;

10.4.2 定期评估体系构建

2.1 评估指标体系

指标名称计算公式业务含义
准确率(TP + TN) / (TP + TN + FP + FN)预测正确的样本占比
召回率TP / (TP + FN)实际违约客户中被正确识别的比例
精确率TP / (TP + FP)预测为违约的客户中实际违约的比例
F1值2 * (精确率 * 召回率) / (精确率 + 召回率)精确率和召回率的调和平均
AUC-ROC计算ROC曲线下面积综合衡量模型在不同阈值下的分类能力
KS值max(TPR - FPR)区分好坏客户的最大能力值
  • KS值
    • KS 值(Kolmogorov-Smirnov Value)
    • KS 值是金融风控领域用于评估模型区分好坏客户能力的关键指标,源于统计学中的Kolmogorov-Smirnov 检验,核心思想是衡量两个分布的最大差异。
    • 物理意义:
      • 通过模型预测概率对客户排序后,找到一个阈值,使该阈值下好客户累计占比与坏客户累计占比的差距最大,这个最大差距即为 KS 值。
      • 值越大,模型区分好坏客户的能力越强
    • KS 值的评估标准
      在这里插入图片描述
    • 如连续 3 期逾期视为违约,is_default=1

2.2 自动化评估流程

通过pg_cron实现每日评估任务:

-- 创建评估函数
CREATE OR REPLACE FUNCTION evaluate_model() RETURNS VOID AS $$
DECLAREmodel_id INT;accuracy NUMERIC;recall NUMERIC;-- 新增临时变量存储混淆矩阵值v_tp INT;v_fp INT;v_fn INT;v_tn INT;
BEGIN-- 获取最新模型IDSELECT model_id INTO model_idFROM model_registryORDER BY trained_at DESCLIMIT 1;-- 执行评估(显式获取混淆矩阵值)WITH test_data AS (SELECT la.application_id,-- 假设从还款记录推导实际违约状态(连续3期逾期视为违约)MAX(CASE WHEN rr.is_overdue THEN 1 ELSE 0 END) OVER (PARTITION BY la.application_id ORDER BY rr.repayment_date ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) AS actual_defaultFROM loan_application laLEFT JOIN repayment_record rr ON la.application_id = rr.application_idWHERE la.application_date >= CURRENT_DATE - INTERVAL '30 days'),predictions AS (SELECT td.application_id,td.actual_default,predict_credit_risk(ci.age, ci.credit_rating, la.loan_amount, la.loan_term) AS predicted_probFROM test_data tdJOIN loan_application la ON td.application_id = la.application_idJOIN customer_info ci ON la.customer_id = ci.customer_id),confusion_matrix AS (SELECT SUM(CASE WHEN actual_default = 1 AND predicted_prob > 0.5 THEN 1 ELSE 0 END) AS tp,SUM(CASE WHEN actual_default = 0 AND predicted_prob > 0.5 THEN 1 ELSE 0 END) AS fp,SUM(CASE WHEN actual_default = 1 AND predicted_prob <= 0.5 THEN 1 ELSE 0 END) AS fn,SUM(CASE WHEN actual_default = 0 AND predicted_prob <= 0.5 THEN 1 ELSE 0 END) AS tnFROM predictions)-- 显式将混淆矩阵值存入临时变量SELECT tp, fp, fn, tn INTO v_tp, v_fp, v_fn, v_tnFROM confusion_matrix;-- 计算指标(避免直接引用CTE列名)accuracy := (v_tp + v_tn)::NUMERIC / NULLIF(v_tp + v_tn + v_fp + v_fn, 0);recall := v_tp::NUMERIC / NULLIF(v_tp + v_fn, 0);-- 更新模型元数据(添加NULL保护)UPDATE model_registrySET metrics = metrics || jsonb_build_object('accuracy', COALESCE(accuracy, 0),'recall', COALESCE(recall, 0))WHERE model_id = model_id;
END;
$$ LANGUAGE plpgsql;-- 以超级用户身份执行(需数据库管理员权限)
-- 1. 安装pg_cron扩展(不同系统安装方式不同,以下为示例)
--    - Ubuntu/Debian: sudo apt-get install postgresql-16-pg-cron
--    - RedHat/CentOS: sudo yum install pg_cron16
--    - 源码安装: 参考https://github.com/citusdata/pg_cron-- 2. 配置PostgreSQL加载pg_cron(修改postgresql.conf)
--    shared_preload_libraries = 'pg_cron'  # 添加此行
--    然后重启PostgreSQL服务:sudo systemctl restart postgresql-- 3. 在目标数据库中创建扩展(需连接到目标数据库)
CREATE EXTENSION IF NOT EXISTS pg_cron;-- 4. 验证扩展是否安装成功(应返回cron模式)
SELECT nspname FROM pg_namespace WHERE nspname = 'cron';
-- 调度每日评估任务
SELECT cron.schedule('daily_model_evaluation','0 2 * * *',  -- 每天凌晨2点执行'SELECT evaluate_model();'
);

2.3 模型衰退预警

建立模型性能监控视图:

CREATE OR REPLACE VIEW model_performance AS
SELECT model_id,model_version,trained_at,metrics->>'accuracy' AS accuracy,metrics->>'recall' AS recall,metrics->>'f1' AS f1_score,metrics->>'auc_roc' AS auc_roc,CASE WHEN (metrics->>'accuracy')::NUMERIC < 0.8 THEN '红色'WHEN (metrics->>'accuracy')::NUMERIC < 0.85 THEN '黄色'ELSE '绿色'END AS status
FROM model_registry;
  • 通过Grafana展示模型性能趋势

10.4.3 模型迭代优化策略

3.1 增量训练机制

当新数据达到一定阈值时触发增量训练:

-- 触发器函数(保持逻辑不变)
CREATE OR REPLACE FUNCTION trigger_incremental_training() 
RETURNS TRIGGER AS $$
BEGIN-- 当过去7天新数据超过1000条时触发通知IF (SELECT COUNT(*) FROM loan_application WHERE application_date >= CURRENT_DATE - INTERVAL '7 days') > 1000 THENPERFORM pg_notify('model_training_channel', 'New data available');END IF;RETURN NEW;  -- AFTER INSERT触发器返回NEW
END;
$$ LANGUAGE plpgsql;-- 修正触发器创建语法(关键:使用PROCEDURE而非FUNCTION)
CREATE TRIGGER loan_application_insert_trigger
AFTER INSERT ON loan_application
FOR EACH ROW
EXECUTE PROCEDURE trigger_incremental_training();  -- 旧版本必须用PROCEDURE

3.2 模型版本控制

采用model_version字段实现版本管理,每次训练生成新的版本号。通过以下查询比较不同版本性能:

SELECT model_version,metrics->>'accuracy' AS accuracy,metrics->>'recall' AS recall,metrics->>'f1' AS f1_score
FROM model_registry
ORDER BY trained_at DESC;

在这里插入图片描述

3.3 影子测试机制

在生产环境中并行运行新旧模型,对比预测结果:

CREATE TABLE shadow_test_results (application_id INT PRIMARY KEY,old_model_prediction NUMERIC,new_model_prediction NUMERIC,comparison_result BOOLEAN
);CREATE OR REPLACE FUNCTION shadow_test() RETURNS VOID AS $$
BEGININSERT INTO shadow_test_results (application_id, old_model_prediction, new_model_prediction)SELECT la.application_id,predict_credit_risk(la.age, ci.credit_rating, la.loan_amount, la.loan_term) AS old_pred,predict_credit_risk_v2(la.age, ci.credit_rating, la.loan_amount, la.loan_term) AS new_predFROM loan_application laJOIN customer_info ci ON la.customer_id = ci.customer_idWHERE NOT EXISTS (SELECT 1 FROM shadow_test_results WHERE application_id = la.application_id)LIMIT 1000;UPDATE shadow_test_resultsSET comparison_result = (old_model_prediction > 0.5) = (new_model_prediction > 0.5);
END;
$$ LANGUAGE plpgsql;

10.4.4 生产环境监控体系

4.1 数据库性能监控

通过Prometheus采集PostgreSQL指标,重点监控:

  • pg_stat_activity:查询执行状态
  • pg_stat_statements:慢查询分析
  • pg_cron.job_run_details:定时任务执行情况

4.2 模型服务监控

建立模型服务健康检查端点

CREATE OR REPLACE FUNCTION model_service_healthcheck() RETURNS JSONB AS $$
DECLAREstatus JSONB;
BEGINSELECT jsonb_build_object('model_version', (SELECT model_version FROM model_registry ORDER BY trained_at DESC LIMIT 1),'last_evaluation', (SELECT MAX(trained_at) FROM model_registry),'prediction_latency', (SELECT AVG(query_time) FROM pg_stat_statements WHERE query LIKE '%predict_credit_risk%')) INTO status;RETURN status;
END;
$$ LANGUAGE plpgsql;

在这里插入图片描述

4.3 异常报警机制

结合Zabbix实现多级报警:

    1. 黄色预警:准确率下降超过5%
    1. 橙色预警:预测延迟超过500ms
    1. 红色预警:模型服务中断超过10分钟
      在这里插入图片描述

报警SQL示例:

-- 重新定义触发器函数(基于基表model_registry的更新)
CREATE OR REPLACE FUNCTION send_alert() 
RETURNS TRIGGER AS $$
DECLAREnew_status TEXT;
BEGIN-- 计算新状态(与视图model_performance的status逻辑一致)new_status := CASE WHEN (NEW.metrics->>'accuracy')::NUMERIC < 0.8 THEN '红色'WHEN (NEW.metrics->>'accuracy')::NUMERIC < 0.85 THEN '黄色'ELSE '绿色'END;-- 仅当状态变为红色时触发通知IF new_status = '红色' THENPERFORM pg_notify('alert_channel', '模型服务中断!最新版本:' || NEW.model_version || ',准确率:' || (NEW.metrics->>'accuracy'));END IF;RETURN NEW;
END;
$$ LANGUAGE plpgsql;-- 在基表model_registry上创建触发器(替代视图触发器)
CREATE TRIGGER model_registry_alert_trigger
AFTER UPDATE OF metrics ON model_registry  -- 仅当metrics字段更新时触发
FOR EACH ROW
EXECUTE PROCEDURE send_alert();
CREATE OR REPLACE VIEW model_performance AS
SELECT model_id,model_version,trained_at,metrics->>'accuracy' AS accuracy,metrics->>'recall' AS recall,metrics->>'f1' AS f1_score,metrics->>'auc_roc' AS auc_roc,CASE WHEN (metrics->>'accuracy')::NUMERIC < 0.8 THEN '红色'WHEN (metrics->>'accuracy')::NUMERIC < 0.85 THEN '黄色'ELSE '绿色'END AS status
FROM model_registry;

10.4.5 案例实践:某银行风控模型部署

5.1 实施效果

指标部署前部署后提升幅度
审批效率24小时5分钟288倍
违约率3.2%2.1%34.4%
模型更新周期6个月1周24倍
监控覆盖率60%95%58.3%

5.2 经验总结

    1. 模型冷启动:初始训练采用历史3年数据,特征工程包含56个维度
    1. 版本回滚:通过model_registry表快速回退至前3个版本
    1. 合规审计:所有模型变更记录自动生成审计日志
    1. 性能优化
    • 预测存储过程执行时间从800ms优化至120ms
    • 使用pg_prewarm预加载常用模型文件
    • 建立预测结果缓存表,命中率达75%

10.4.6 未来演进方向

    1. 联邦学习跨机构联合建模,保护数据隐私
    1. 在线学习:实时反馈机制,动态调整模型参数
    1. 可解释性增强
    • SHAP值可视化特征重要性
    • LIME局部解释模型决策
    1. AIOps集成
    • 自动调参(Hyperopt+PostgreSQL)
    • 异常检测(Isolation Forest)

通过以上体系化建设,实现了从模型部署到生产运维的全生命周期管理,确保风控模型在金融场景中的长期有效性和稳定性。

相关文章:

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.4 模型部署与定期评估

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 10.4 模型部署与定期评估10.4.1 模型部署架构设计1.1 模型存储方案1.2 实时预测接口 10.4.2 定期评估体系构建2.1 评估指标体系2.2 自动化评估流程2.3 模型衰退预警 10.4.3 …...

构建可信数据空间需要突破技术、规则和生态三大关键

构建可信数据空间需要突破技术、规则和生态三大关键&#xff1a;技术上要解决"可用不可见"的隐私计算难题&#xff0c;规则上要建立动态确权和跨境流动的治理框架&#xff0c;生态上要形成多方协同的标准体系。他强调&#xff0c;只有实现技术可控、规则可信、生态协…...

阳光学院【2020下】计算机网络原理-A卷-试卷-期末考试试卷

一、单选题&#xff08;共25分&#xff0c;每空1分&#xff09; 1.ICMP协议工作在TCP/IP参考模型的 ( ) A.主机-网络 B.网络互联层 C.传输层 D.应用层 2.下列关于交换技术的说法中&#xff0c;错误的是 ( ) A.电路交换适用于突发式通信 B.报文交换不能满足实时通信 C.报文…...

python: union()函数用法

在 Python 中&#xff0c;union() 是集合&#xff08;set&#xff09;类型的内置方法&#xff0c;用于返回两个或多个集合的并集&#xff08;即所有元素的合集&#xff0c;自动去重&#xff09;。以下是它的用法详解&#xff1a; 1. 基本语法 python 复制 下载 set.union(*…...

docker部署WeDataSphere开源大数据平台

GitHub&#xff1a;https://github.com/WeBankFinTech/WeDataSphere **WDS容器化版本是由Docker构建的一个能够让用户在半小时内完成所有组件安装部署并使用的镜像包。**无需再去部署Hadoop等基础组件&#xff0c;也不需要部署WDS的各功能组件&#xff0c;即可让您快速体验 WD…...

【计算机视觉】OpenCV项目实战:基于face_recognition库的实时人脸识别系统深度解析

基于face_recognition库的实时人脸识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 人脸检测模块2.2 特征编码2.3 相似度计算 3. 实战部署指南3.1 环境配置3.2 数据准备3.3 实时识别流程 4. 常见问题与解决方案4.1 dlib安装失败4.2 人脸检测性能差4.3 误识别率高 5. 关键…...

uni-app学习笔记五-vue3响应式基础

一.使用ref定义响应式变量 在组合式 API 中&#xff0c;推荐使用 ref() 函数来声明响应式状态&#xff0c;ref() 接收参数&#xff0c;并将其包裹在一个带有 .value 属性的 ref 对象中返回 示例代码&#xff1a; <template> <view>{{ num1 }}</view><vi…...

阿克曼-幻宇机器人系列教程2- 机器人交互实践(Topic)

在上一篇文章中&#xff0c;我们介绍了两种登录机器人的方式&#xff0c;接下来我们介绍登录机器人之后&#xff0c;我们如何通过topic操作命令实现与机器人的交互。 1. 启动 & 获取topic 在一个终端登录树莓派后&#xff0c;执行下列命令运行机器人 roslaunch huanyu_r…...

Windows系统事件查看器管理单元不可用

报错&#xff1a;Windows系统事件查看器管理单元不可用 现象原因&#xff1a;为误触关闭管理单元或者该模块卡死 解决办法&#xff1a;重启Windows server服务&#xff0c;若不行&#xff0c;则重启服务器即可...

milvus+flask山寨《从零构建向量数据库》第7章case2

继续流水账完这本书&#xff0c;这个案例是打造文字形式的个人知识库雏形。 create_context_db: # Milvus Setup Arguments COLLECTION_NAME text_content_search DIMENSION 2048 MILVUS_HOST "localhost" MILVUS_PORT "19530"# Inference Arguments…...

前端如何应对精确数字运算?用BigNumber.js解决JavaScript原生Number类型在处理大数或高精度计算时的局限性

目录 前端如何应对精确数字运算&#xff1f;用BigNumber.js解决JavaScript原生Number类型在处理大数或高精度计算时的局限性 一、BigNumber.js介绍 1、什么是 BigNumber.js&#xff1f; 2、作用领域 3、核心特性 二、安装配置与基础用法 1、引入 BigNumber.js 2、配置 …...

多目应用:三目相机在汽车智能驾驶领域的应用与技术创新

随着汽车智能驾驶技术不断完善&#xff0c;智能汽车也不断加速向全民普惠迈进&#xff0c;其中智驾“眼睛”三目视觉方案凭借低成本、高精度、强适配性成为众多汽车品牌关注的焦点。三目相机在汽车智能驾驶领域的创新应用&#xff0c;主要依托其多视角覆盖、高动态范围&#xf…...

webpack重构优化

好的&#xff0c;以下是一个关于如何通过重构 Webpack 构建策略来优化性能的示例。这个过程包括分析现有构建策略的问题、优化策略的制定以及具体的代码实现。 --- ### 项目背景 在参与公司的性能专项优化过程中&#xff0c;我发现现有的 Webpack 构建策略存在一些问题&#…...

MySQL 8.0 OCP(1Z0-908)英文题库(31-40)

目录 第31题题目分析正确答案 第32题题目分析正确答案 第33题题目分析正确答案&#xff1a; 第34题题目解析正确答案 第35题题目分析正确答案 第36题题目分析正确答案 第37题题目分析正确答案 第38题题目分析正确答案 第39题题目分析正确答案 第40题题目分析正确答案 第31题 Y…...

aardio - 虚表 —— vlistEx.listbar2 多层菜单演示

在 近我者赤 修改版的基础上&#xff0c;做了些许优化。 请升级到最新版本。 import win.ui; import godking.vlistEx.listbar2; import fonts.fontAwesome; /*DSG{{*/ mainForm win.form(text"多层折叠菜单";right1233;bottom713) mainForm.add({ custom{cls"…...

22.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--增加公共代码

在拆分服务之前&#xff0c;我们需要先提取一些公共代码。本篇将重点新增日志记录、异常处理以及Redis的通用代码。这些组件将被整合到一个共享类库中&#xff0c;便于在微服务架构中高效复用。 Tip&#xff1a;在后续的教程中我们会穿插多篇提取公共代码的文章&#xff0c;帮助…...

EasyOps®5月热力焕新:三大核心模块重构效能边界

在应用系统管理中&#xff0c;我们将管理对象从「服务实例」优化为「部署实例」&#xff0c;这一改变旨在提升管理效率与数据展示清晰度。 此前&#xff0c;系统以 “IP Port” 组合定义服务实例。当同一 IP 下启用多个进程或端口时&#xff0c;会产生多个服务实例。比如一台…...

基于深度学习的工业OCR数字识别系统架构解析

一、项目场景 春晖数字识别视觉检测系统专注于工业自动化生产监控、设备运行数据记录等关键领域。系统通过高精度OCR算法&#xff0c;能够实时识别设备上显示的关键数据&#xff08;如温度、压力、计数等&#xff09;&#xff0c;并定时存储至Excel文件中。这些数据对于生产过…...

R语言绘图 | 渐变火山图

客户要求绘制类似文章中的这种颜色渐变火山图&#xff0c;感觉挺好看的。网上找了一圈&#xff0c;发现有别人已经实现的类似代码&#xff0c;拿来修改后即可使用&#xff0c;这里做下记录&#xff0c;以便后期查找。 简单实现 library(tidyverse)library(ggrepel)library(ggf…...

Go语言——docker-compose部署etcd以及go使用其服务注册

一、docker-compsoe.yml文件如下 version: "3.5"services:etcd:hostname: etcdimage: bitnami/etcd:latestdeploy:replicas: 1restart_policy:condition: on-failureprivileged: truevolumes:# 持久化 etcd 数据到宿主机- "/app/apisix/etcd/data:/bitnami/etc…...

Tomcat的调优

目录 一. JVM 1.1 JVM的组成 1.2 运行时数据区域的组成 二. 垃圾回收 2.1 如何确认垃圾 1. 引用计数法 2. 根搜索算法 2.2 垃圾回收基本算法 1. 标记-清除算法&#xff08;Mark-Sweep&#xff09; 2. 标记-压缩算法&#xff08;Mark-Compact&#xff09; 3. 复制算法…...

Tomcat和Nginx的主要区别

1、功能定位 Nginx&#xff1a;核心是高并发HTTP服务器和反向代理服务器&#xff0c;擅长处理静态资源&#xff08;如HTML、图片&#xff09;和负载均衡。Tomcat&#xff1a;是Java应用服务器&#xff0c;主要用于运行动态内容&#xff08;如JSP、Servlet&#xff09;&#xf…...

Python训练营打卡——DAY24(2025.5.13)

目录 一、元组 1. 通俗解释 2. 元组的特点 3. 元组的创建 4. 元组的常见用法 二、可迭代对象 1. 定义 2. 示例 3. 通俗解释 三、OS 模块 1. 通俗解释 2. 目录树 四、作业 1. 准备工作 2. 实战代码示例​ 3. 重要概念解析 一、元组 是什么​​&#xff1a;一种…...

【TDengine源码阅读】DLL_EXPORT

2025年5月13日&#xff0c;周二清晨 #ifdef WINDOWS #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT #endif为啥Linux和MacOS平台时宏为空&#xff0c;难道Linux和mac不用定义导出函数吗&#xff1f; 这段代码是一个跨平台的宏定义&#xff0c;用于处理不…...

电子科技浪潮下的华秋电子:慕尼黑上海电子展精彩回顾

为期3天的2025慕尼黑上海电子展&#xff08;electronica China 2025&#xff09;于17日在上海新国际博览中心落下帷幕。 展会那规模&#xff0c;真不是吹的&#xff01;本届展会汇聚了1,794家国内外行业知名品牌企业的展商来 “摆摊”&#xff0c;展览面积大得像个超级大迷宫&…...

TDengine编译成功后的bin目录下的文件的作用

2025年5月13日&#xff0c;周二清晨 以下是TDengine工具集中各工具的功能说明&#xff1a; 核心工具 taosd • TDengine的核心服务进程&#xff0c;负责数据存储、查询和集群管理。 taos • 命令行客户端工具&#xff0c;用于连接TDengine服务器并执行SQL操作。 taosBenchma…...

spark sql基本操作

Spark SQL 是 Apache Spark 的一个模块&#xff0c;用于处理结构化数据。它允许用户使用标准的 SQL 语法来查询数据&#xff0c;并且可以无缝地与 Spark 的其他功能&#xff08;如 DataFrame、Dataset 和 RDD&#xff09;结合使用。以下是 Spark SQL 的基本使用方法和一些常见操…...

采购流程规范化如何实现?日事清流程自动化助力需求、采购、财务高效协作

采购审批流程全靠人推进&#xff0c;内耗严重&#xff0c;效率低下&#xff1f; 花重金上了OA&#xff0c;结果功能有局限、不灵活&#xff1f; 问题出在哪里&#xff1f;是我们的要求太多、太苛刻吗&#xff1f;NO&#xff01; 流程名称&#xff1a; 采购审批管理 流程功能…...

影刀RPA开发-CSS选择器介绍

影刀RPA网页自动化开发&#xff0c;很多时候需要我们查看页面源码&#xff0c;查找相关的元素属性&#xff0c;这就需要我们有必要了解CSS选择器。本文做了些简单的介绍。希望对大家有帮助&#xff01; 1. CSS选择器概述 1.1 定义与作用 CSS选择器是CSS&#xff08;层叠样式…...

DeepSeek、B(不是百度)AT、科大讯飞靠什么坐上中国Ai牌桌?

在国产AI舞台上&#xff0c;DeepSeek、阿里、字节、腾讯、讯飞群雄逐鹿&#xff0c;好不热闹。 这场堪称“军备竞赛”的激烈角逐&#xff0c;绝非简单的市场竞争&#xff0c;而是一场关乎技术、创新与未来布局的深度博弈。在竞赛中&#xff0c;五大模型各显神通&#xff0c;以…...

MySQL全局优化

目录 1 硬件层面优化 1.1 CPU优化 1.2 内存优化 1.3 存储优化 1.4 网络优化 2 系统配置优化 2.1 操作系统配置 2.2 MySQL服务配置 3 库表结构优化 4 SQL及索引优化 mysql可以从四个层面考虑优化&#xff0c;分别是 硬件系统配置库表结构SQL及索引 从成本和优化效果来看&#xf…...

【github】主页显示star和fork

数据收集&#xff1a;定期&#xff08;例如每天&#xff09;获取你所有仓库的 Star 和 Fork 总数。数据存储&#xff1a;将收集到的数据&#xff08;时间戳、总 Star 数、总 Fork 数&#xff09;存储起来。图表生成&#xff1a;根据存储的数据生成变化曲线图&#xff08;通常是…...

网站遭受扫描攻击,大量爬虫应对策略

网站的日志里突然有很多访问路径不存在的&#xff0c;有些ip地址也是国外的&#xff0c;而且访问是在深夜且次数非常频繁紧密。判定就是不怀好意的扫描网站寻找漏洞。也有些是爬虫&#xff0c;且是国外的爬虫&#xff0c;有的也是不知道的爬虫爬取网站。网站的真实流量不多&…...

【 Redis | 实战篇 秒杀实现 】

目录 前言&#xff1a; 1.全局ID生成器 2.秒杀优惠券 2.1.秒杀优惠券的基本实现 2.2.超卖问题 2.3.解决超卖问题的方案 2.4.基于乐观锁来解决超卖问题 3.秒杀一人一单 3.1.秒杀一人一单的基本实现 3.2.单机模式下的线程安全问题 3.3.集群模式下的线程安全问题 前言&…...

手搓传染病模型(SEIARW)

在传染病传播的研究中&#xff0c;水传播途径是一个重要的考量因素。SEAIRW 模型&#xff08;易感者 S - 暴露者 E - 感染者 I - 无症状感染者 A - 康复者 R - 水中病原体 W&#xff09;综合考虑了人与人接触传播以及水传播的双重机制&#xff0c;为分析此类传染病提供了全面的…...

【C++】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希

【C】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希 在日常开发中&#xff0c;无论是数据结构优化、缓存设计&#xff0c;还是分布式架构搭建&#xff0c;unordered_map、布隆过滤器和一致性哈希都是绕不开的关键工具。它们高效、轻量&#xff0c;在性能与扩展性方面…...

第五天——贪心算法——射气球

1.题目 有一些球形气球贴在一个表示 XY 平面的平坦墙壁上。气球用一个二维整数数组 points 表示&#xff0c;其中 points[i] [xstart, xend] 表示第 i 个气球的水平直径范围从 xstart 到 xend。你并不知道这些气球的具体 y 坐标。 可以从 x 轴上的不同位置垂直向上&#xff0…...

麦肯锡110页PPT企业组织效能提升调研与诊断分析指南

“战略清晰、团队拼命、资源充足&#xff0c;但业绩就是卡在瓶颈期上不去……”这是许多中国企业面临的真实困境。表面看似健康的企业&#xff0c;往往隐藏着“组织亚健康”问题——跨部门扯皮、人才流失、决策迟缓、市场反应滞后……麦肯锡最新研究揭示&#xff1a;组织健康度…...

BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(上)

文章目录 引言一、多源BFS的概述二、应用场景三、算法步骤四、代码实现五、代码解释六、总结 引言 在浩渺的图论宇宙中&#xff0c;图的每一条边、每一个节点都是故事的组成部分。每当我们站在一个复杂的迷宫前&#xff0c;开始感受它的深邃时&#xff0c;我们往往不再局限于从…...

理解 C# 中的各类指针

前言 变量可以理解成是一块内存位置的别名&#xff0c;访问变量也就是访问对应内存中的数据。 指针是一种特殊的变量&#xff0c;它存储了一个内存地址&#xff0c;这个内存地址代表了另一块内存的位置。 指针指向的可以是一个变量、一个数组元素、一个对象实例、一块非托管内存…...

MySQL 事务(二)

文章目录 事务隔离性理论理解隔离性隔离级别 事务隔离级别的设置和查看事务隔离级别读未提交读提交&#xff08;不可重复读&#xff09; 事务隔离性理论 理解隔离性 MySQL服务可能会同时被多个客户端进程(线程)访问&#xff0c;访问的方式以事务方式进行一个事务可能由多条SQL…...

【HarmonyOS】ArkTS开发应用的横竖屏切换

文章目录 1、简介2、静态 — 横竖屏切换2.1、效果2.2、实现原理2.3、module.json5 源码 3、动态 — 横竖屏切换3.1、应用随系统旋转切换横竖屏3.2、setPreferredOrientation 原理配置3.3、锁定旋转的情况下&#xff0c;手动设置横屏状态 1、简介 在完成全屏网页嵌套应用开发后…...

Linux中find命令用法核心要点提炼

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; 以下是针对Linux中find命令用法的核心要点提炼&#xff1a; 基础语法结构 find [路径] [选项] [操作]路径&#xff1a;查找目录&#xff08;.表当前目录&#xff0c;/表根目录&#xff09;…...

专栏项目框架介绍

项目整体实现框图 如下图所示&#xff0c;是该项目的整体框图&#xff0c;项目的功能概括为&#xff1a;PC端下发数据文件&#xff0c;FPGA板卡接收数据文件&#xff0c;缓存至DDR中&#xff0c;待数据文件发送完毕&#xff0c;循环读取DDR有效写区域数据&#xff0c;将DDR数据…...

WSL 安装 Debian 12 后,Linux 如何安装 vim ?

在 WSL 的 Debian 12 中安装 Vim 非常简单&#xff0c;只需使用 apt 包管理器即可。以下是详细步骤&#xff1a; 1. 更新软件包列表 首先打开终端&#xff0c;确保系统包列表是最新的&#xff1a; sudo apt update2. 安装 Vim 直接通过 apt 安装 Vim&#xff1a; sudo apt …...

【SpringBoot】从零开始全面解析Spring MVC (一)

本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍Spring MVC相关知识. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子…...

C++—特殊类设计设计模式

目录 C—特殊类设计&设计模式1.设计模式2.特殊类设计2.1设计一个无法被拷贝的类2.2设计一个只能在堆上创建对象的类2.3设计一个只能在栈上创建对象的类2.4设计一个类&#xff0c;无法被继承2.5设计一个类。这个类只能创建一个对象【单例模式】2.5.1懒汉模式实现2.5.2饿汉模…...

初入OpenCV

OpenCV简介 OpenCV是一个开源的跨平台计算机视觉库&#xff0c;它实现了图像处理和计算机视觉方面的很多通用算法。 应用场景&#xff1a; 目标识别&#xff1a;人脸、车辆、车牌、动物&#xff1b; 自动驾驶&#xff1b;医学影像分析&#xff1b; 视频内容理解分析&#xff…...

霍夫圆变换全面解析(OpenCV)

文章目录 一、霍夫圆变换基础1.1 霍夫圆变换概述1.2 圆的数学表达与参数化 二、霍夫圆变换算法实现2.1 标准霍夫圆变换算法流程2.2 参数空间的表示与优化 三、关键参数解析3.1 OpenCV中的HoughCircles参数3.2 参数调优策略 四、Python与OpenCV实现参考4.1 基本实现代码4.2 改进…...

互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-4

互联网大厂Java求职面试&#xff1a;优惠券服务架构设计与AI增强实践-4 场景设定 面试官&#xff1a;某互联网大厂技术总监&#xff0c;拥有超过10年大型互联网企业一线技术管理经验&#xff0c;擅长分布式架构、微服务治理、云原生等领域。 候选人&#xff1a;郑薪苦&#…...