21. LangChain金融领域:合同审查与风险预警自动化
引言:当AI成为24小时不眠的法律顾问
2025年某商业银行的智能合同系统,将百万级合同审查时间从平均3周缩短至9分钟,风险条款识别准确率达98.7%。本文将基于LangChain的金融法律框架,详解如何构建合规、精准、可追溯的智能风控体系。
一、金融合同AI核心能力矩阵
1.1 关键指标要求
能力维度 | 行业标准 | 实现方案 |
---|---|---|
条款识别 | >95%准确率 | BiLSTM+CRF混合模型 |
风险量化 | 误差<2% | 蒙特卡洛模拟+LLM解释 |
版本比对 | 差异点100%覆盖 | 基于AST的语义解析 |
合规检查 | 实时更新法规 | 法律知识图谱嵌入 |
追溯审计 | 全链路可解释 | LangSmith+区块链存证 |
1.2 系统架构全景
二、四步构建智能审查系统
2.1 金融条款语义理解
from langchain_community.document_loaders import PyPDFLoaderfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.runnables import RunnableParallel, RunnableLambdafrom langchain_core.output_parsers import StrOutputParserfrom langchain_neo4j import Neo4jGraphfrom langchain_ollama import ChatOllamaclass ClauseProcessor:def __init__(self):self.risk_keywords = ["担保", "违约", "赎回", "抵押"]def extract_clauses(self, text):"""模拟条款提取(实际应用应使用NER模型)"""clauses = []for line in text.split('\n'):if any(keyword in line for keyword in self.risk_keywords):clauses.append(line.strip())return clauses
2.2 动态风险量化模型
class RiskQuantifier:def __init__(self):self.factor_weights = {"担保条款": 0.6,"交叉违约": 0.8,"提前赎回": 0.4}def calculate_risk(self, clause_type, text):"""模拟风险量化"""severity = self.factor_weights.get(clause_type, 0.5)return {"var_95": f"${int(10000 * severity)}","stress_test": f"${int(20000 * severity)}","risk_score": min(10, int(severity * 10))}
2.3 实时合规检查
class ComplianceChecker:def __init__(self):self.graph = Neo4jGraph(url="bolt://localhost:7687",username="neo4j",password="password")def check_violations(self, clause_text):"""查询Neo4j获取合规数据"""query = """MATCH (c:Clause)-[r:VIOLATES]->(reg:Regulation)WHERE c.text CONTAINS $textOPTIONAL MATCH (c)-[:HAS_AMENDMENT]->(fix:Amendment)RETURN reg.name as regulation, r.severity as severity,fix.description as amendment"""records = self.graph.query(query, {"text": clause_text})return [dict(record) for record in records]
2.4 可审计报告生成
report_prompt = ChatPromptTemplate.from_template("""作为金融合规专家,请基于以下分析生成报告:### 关键风险条款{risk_clauses}### 合规性分析{compliance_results}### 风险量化{risk_analysis}### 整改建议{amendments}格式要求:1. 使用🔴(高风险)/🟡(中风险)/🟢(低风险)标注风险等级2. 引用具体法条:{laws}3. 当前综合风险值:{risk_value}/10""")# ----------------- 整合全流程 -----------------def analyze_contract(pdf_path):# 初始化组件processor = ClauseProcessor()risk_model = RiskQuantifier()compliance = ComplianceChecker()# 1. 加载PDFloader = PyPDFLoader(pdf_path)pages = loader.load()full_text = "\n".join([p.page_content for p in pages])# 2. 提取条款clauses = processor.extract_clauses(full_text)# 3. 并行处理每个条款analysis_results = []for clause in clauses[:5]: # 限制处理前5个条款# 识别条款类型clause_type = "担保条款" if "担保" in clause else "交叉违约" if "违约" in clause else "其他条款"# 风险量化risk = risk_model.calculate_risk(clause_type, clause)# 合规检查violations = compliance.check_violations(clause)analysis_results.append({"text": clause,"type": clause_type,"risk": risk,"violations": violations,"amendments": [v.get("amendment") for v in violations if v.get("amendment")]})# 4. 生成报告report_chain = (RunnableParallel({"risk_clauses": lambda x: "\n".join(f"{'🔴' if item['risk']['risk_score'] > 7 else '🟡' if item['risk']['risk_score'] > 4 else '🟢'} {item['text']}"for item in x),"compliance_results": lambda x: "\n\n".join(f"条款:{item['text']}\n"f"状态:{'❌违规' if item['violations'] else '✅合规'}\n"f"依据:{', '.join(set(v['regulation'] for v in item['violations']))}"for item in x),"risk_analysis": lambda x: ("| 指标 | 值 |\n""|--------------|-------------|\n" +"\n".join(f"| {item['type']:11} | "f"VaR: {item['risk']['var_95']} "f"Stress: {item['risk']['stress_test']} |"for item in x)),"amendments": lambda x: "\n".join(f"{i + 1}. {item}"for i, item in enumerate({amend for result in xfor amend in result['amendments']if amend})),"laws": lambda x: ", ".join({reg for result in xfor reg in [v['regulation'] for v in result['violations']]}),"risk_value": lambda x: str(max((item['risk']['risk_score'] for item in x if 'risk' in item and 'risk_score' in item['risk']),default=0 # 如果所有条款都没有风险评分,默认设为0))})| report_prompt| ChatOllama(model="deepseek-r1")| StrOutputParser())return report_chain.invoke(analysis_results)# ----------------- 测试执行 -----------------if __name__ == "__main__":# 创建测试PDFfrom reportlab.pdfgen import canvasfrom reportlab.lib.pagesizes import A4pdf_path = "test_contract.pdf"c = canvas.Canvas(pdf_path, pagesize=A4)# 设置中文字体(需系统支持)from reportlab.pdfbase import pdfmetricsfrom reportlab.pdfbase.ttfonts import TTFontpdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf')) # 使用宋体c.setFont('SimSun', 12)c.drawString(100, 700, "担保条款:抵押率不得超过70%")c.drawString(100, 680, "交叉违约条款:关联方违约将触发本协议违约")c.save()# 执行分析report = analyze_contract(pdf_path)print(report)
输出为:
### 金融合规性分析报告 #### 关键风险条款分析 1. **担保条款** - **抵押率不得超过70%** 现状:违规 原因:违反Basel III规定(引用:Basel III) - **保证金要求** (新增指标,未明确现状,建议增加保证金以降低风险) 2. **交叉违约条款** - **关联方违约将触发本协议违约** 现状:违规 原因:违反银监发[2020]12号文件规定 ---#### 风险量化分析 | 指标 | VaR | Stress Test ||--------------|------------|---------------|| 抵押率 | VaR: $6,000 | Stress: $12,000 || 保证金 | VaR: $X | Stress: $Y |*注:VaR和压力测试结果需根据具体数据补充,表格中$X和$Y为建议的保证金金额。*---#### 综合风险评估 - **担保条款风险**:高风险(70%抵押率违规) - **交叉违约条款风险**:高风险(关联方违约触发协议违约违规) - **总体风险等级**:8/10 ---#### 整改建议 1. 将抵押率降低至60%,同时增加保证金比例,以满足Basel III要求并降低风险。 2. 强化对关联方的监控机制,避免交叉违约的发生(引用银监发[2020]12号)。 此建议需结合具体业务场景和客户关系进行调整,并定期评估风险状况。
2.5 Neo4j安装及测试数据
docker安装
docker run \--name neo4j-finance \-p 7474:7474 -p 7687:7687 \-e NEO4J_AUTH=neo4j/password \-e NEO4J_PLUGINS='["apoc"]' \-v neo4j_data:/data \neo4j
在Neo4j浏览器中执行以下Cypher语句
// 清理现有数据MATCH (n) DETACH DELETE n;// 创建监管法规节点CREATE (basel3:Regulation {name: "Basel III", jurisdiction: "Global"}),(cbrc:Regulation {name: "银监发[2020]12号", jurisdiction: "China"});// 创建条款节点CREATE(clause1:Clause {text: "担保条款:抵押率不得超过70%", type: "担保条款"}),(clause2:Clause {text: "交叉违约条款:关联方违约将触发本协议违约", type: "交叉违约"});// 建立违规关系MATCH (c:Clause {text: "担保条款:抵押率不得超过70%"})MATCH (r:Regulation {name: "Basel III"})CREATE (c)-[v:VIOLATES {severity: 5}]->(r);MATCH (c:Clause {text: "交叉违约条款:关联方违约将触发本协议违约"})MATCH (r:Regulation {name: "银监发[2020]12号"})CREATE (c)-[v:VIOLATES {severity: 3}]->(r);// 添加补救措施CREATE (fix1:Amendment {description: "将抵押率降低至60%并增加保证金", applicable_to: "担保条款"});MATCH (c:Clause {text: "担保条款:抵押率不得超过70%"})MATCH (f:Amendment {applicable_to: "担保条款"})CREATE (c)-[:HAS_AMENDMENT]->(f);
三、银行级案例:贷款合同审查
3.1 工作流优化对比
步骤 | 传统人工耗时 | AI系统耗时 |
---|---|---|
合同解析 | 2.5小时 | 47秒 |
风险识别 | 3天 | 2.8分钟 |
合规检查 | 1周 | 实时 |
报告生成 | 8小时 | 1.2分钟 |
3.2 风险预警看板
四、避坑指南:金融AI七大陷阱
-
条款误判:将"非担保"识别为担保 → 增加否定词检测规则
-
法规滞后:未更新最新监管要求 → 每日自动同步法规库
-
模型偏见:过度偏好某类条款 → 引入公平性测试集
-
解释缺失:黑箱决策引发诉讼 → 保存推理过程证据链
-
数据泄漏:合同内容外泄 → 企业级加密+私有化部署
-
过度依赖:AI遗漏特殊条款 → 设置人工复核节点
-
跨境合规:违反数据主权法 → 本地化部署+数据隔离
下期预告
《医疗健康:病历摘要与问诊助手开发》
-
揭秘:如何让AI理解"主诉现病史"的医学内涵?
-
实战:构建符合HIPAA标准的智能问诊系统
-
陷阱:诊断建议的合规边界
金融AI不是简单的条款识别器,而是风险与收益的精密天平。记住:优秀的系统,既要像律师般严谨,又要像数学家般精确!
相关文章:
21. LangChain金融领域:合同审查与风险预警自动化
引言:当AI成为24小时不眠的法律顾问 2025年某商业银行的智能合同系统,将百万级合同审查时间从平均3周缩短至9分钟,风险条款识别准确率达98.7%。本文将基于LangChain的金融法律框架,详解如何构建合规、精准、可追溯的智能风控体系…...
7D-AI系列:模型微调之mlx-lm
大模型的出现,导致信息量太大,只有静心动手操作,才能得到真理。 文章目录 环境要求安装示例mlx-lm微调工具参数准备数据集下载模型微调模型合并模型验证结果验证微调前的模型验证微调后的模型 环境要求 macbook pro m系列芯片mlx环境已安装 …...
数据可视化:php+echarts实现数据可视化(包含echart安装引入)
一、实现效果 实现动态时间,多列柱状图,单列柱状图,普通表格,表格动画等效果 二、实现 1、动态时间显示 通过php获取当前时间 设置计时器来动态显示时间秒数 <!-- 时间动画 --> <script>// 动态更新时间中的秒数function updateTime() {const now = new D…...
《Python星球日记》 第47天:聚类与KMeans
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、聚类与…...
linux(centos)联网情况下部署
nginx部署 1.linux(centos)联网情况下部署 1.下载nginx所需依赖 # 安装开发工具组(若未安装) sudo yum groupinstall "Development Tools"# 安装 OpenSSL 开发包 sudo yum install openssl-devel# 安装 PCRE 开发包 sudo yum install pcre-…...
Kubernetes生产级资源管理实战:从QoS策略到OOM防御体系
一、资源限制的本质:不是成本控制,而是稳定性保障 当集群中某个节点的内存耗尽时,Kubernetes会像冷酷的交通警察一样,根据Pod的"优先级证件"(QoS类别)决定哪些Pod需要被驱逐。这种机制直接关系到…...
gcc的使用
gcc 是 GNU Compiler Collection(GNU 编译器套件)的缩写,是 GNU 项目开发的编程语言编译器集合,支持多种编程语言(如 C、C、Objective-C、Fortran、Ada 等)。以下是关于 gcc 的核心信息: 1. 主要…...
聊一聊Qwen3思考模式实现以及背后原理探讨
Qwen3思考模式切换实现 硬开关 我们先通过官方的示例代码来体验一下,如何实现在思考模式和非思考模式之间切换 通过tokenizer.apply_chat_template的enable_thinking参数来实现 默认情况下,Qwen3 启用了思考功能,类似于 QwQ-32B。这意味着…...
spark行动算子
在 Apache Spark 中,行动算子(Action)用于触发对 RDD 的实际计算,并将结果返回给驱动程序(Driver)或保存到外部存储系统中。与转换算子(Transformation)不同,行动算子会立…...
电商双十一美妆数据分析(代码)
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import jieba # 数据读取 df pd.read_csv(双十一_淘宝美妆数据.csv) # 数据清洗 # 处理重复值 data df.drop_duplicates(inplaceFalse) data data.reset_index(in…...
STM32裸机开发问题汇总
一、代码编写 1. keil中某个文件无法修改 keil中某个文件无法修改,不能输入_keil5 h文件无法修改-CSDN博客 2.编译报错declaration may not appear after executable statement in block STM32常见错误error: #268: declaration may not appear after executabl…...
C语言复习笔记--自定义类型
今天我们来复习一下自定义类型.自定义类型大概分为结构体,枚举,联合体,数组这几种.数组在之前就介绍过.今天我们来看下其他三种. 结构体 首先来看结构体. 结构体类型的声明 之前在操作符的地方简单认识过结构体.下面我们回顾一下. 结构体回顾 结构是⼀些值的集合,这…...
做 iOS 调试时,我尝试了 5 款抓包工具
日常做开发的人,特别是和客户端接口打交道的同学,应该对“抓包”这件事不陌生。 调试登录流程、分析接口格式、排查错误返回、分析网络性能、甚至研究第三方 App 的数据通信……说到底,都绕不开“抓 HTTPS 包”这一步。 而这一步࿰…...
html css js网页制作成品——HTML+CSS珠海网页设计网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
FID和IS的区别
📊 生成模型评估:你选 IS 还是 FID? 在评估 GAN、Diffusion 等图像生成模型时,两个最常被提到的指标是: 🔹IS (Inception Score) 🔹FID (Frchet Inception Distance) 🧠 Inception…...
前端三大件--HTML
引言 在互联网的世界里,每一个绚丽多彩的网页背后,都离不开 HTML 的支撑。HTML(Hyper Text Markup Language,超文本标记语言)作为网页开发的基础语言,就像是搭建高楼大厦的砖块,是所有 Web 开发…...
Node.js 的 child_process 模块详解
Node.js 的 child_process 模块提供了创建子进程的能力,使 Node.js 应用能够执行系统命令、运行其他程序或脚本。这个模块非常强大,可以帮助我们实现很多复杂的功能。 1. exec - 执行 shell 命令 exec 方法用于执行 shell 命令,并缓冲任何产生的输出。 特点 创建 shell 来…...
日常知识点之随手问题整理(虚函数 虚函数表 继承的使用场景)
新来的同事提到一个虚函数解耦头文件的问题,就想起来对虚函数进行一些回顾。 他的问题是,通过纯虚函数,如何实现不包含头文件即可真正调用到子类的实际接口。 》这里肯定是不合理的,需要一个中间管理类,对纯虚函数和相…...
【软件设计师:数据结构】2.数据结构基础(二)
一、树 树是n(n≥0)个结点的有限集合,n=0时称为空树,在任一非空树中 ● 有且仅有一个称为根的结点。 ● 其余的结点可分为m(m≥0)个互不相交的子集T1,T2…,Tm,其中每个子集本身又是一棵树,并称其为根结点的子树。 1、树的基本概念 ● 双亲和孩子 ● 兄弟:具有相同双…...
Python训练营打卡——DAY18(2025.5.7)
目录 一、基于聚类进一步推断类型 1. 聚类分析 2. 簇的总结与定义 二、作业 1. 聚类分析 2. 簇的总结与定义 3. 模型效果提升 一、基于聚类进一步推断类型 选用昨天kmeans得到的效果进行聚类,进而推断出每个簇的实际含义。 1. 聚类分析 # 先运行之前预处理…...
初学Python爬虫
文章目录 前言一、 爬虫的初识1.1 什么是爬虫1.2 爬虫的核心1.3 爬虫的用途1.4 爬虫分类1.5 爬虫带来的风险1.6. 反爬手段1.7 爬虫网络请求1.8 爬虫基本流程 二、urllib库初识2.1 http和https协议2.2 编码解码的使用2.3 urllib的基本使用2.4 一个类型六个方法2.5 下载网页数据2…...
【CSS】Grid 的 auto-fill 和 auto-fit 内容自适应
CSS Grid 的 auto-fill 和 auto-fit /* 父元素 */ .grid {display: grid;/* 定义「网格容器」里有多少列,以及每列的宽度 *//* repeat 是个「重复函数」,表示后面的模式会被重复多次 *//* auto-fit 是一个特殊值,自动根据容器宽度ÿ…...
绕线机的制作与研究
绕线机的制作与研究 摘要 本文详细阐述了绕线机的制作过程,涵盖从设计规划到实际制作的各个环节。通过对绕线机工作原理的深入分析,确定了关键技术参数,并依此完成机械结构与控制系统的设计。在制作阶段,运用多种加工工艺完成零件制造与设备组装。经测试,自制绕线机性能…...
引用的使用
引用的语法 作用:起别名 引用的本质是指针常量 数据类型 &别名原名; 引用必须要初始化 引用一旦初始化,不能修改 不能返回局部变量的引用 引用做形参 #include<iostream> #include<string> using namespace std; //通过引用…...
css animation 动画属性
animation // 要绑定的关键帧规则名称 animation-name: slidein;// 定义动画完成一个周期所需的时间,秒或毫秒 animation-duration: 3s;// 定义动画速度曲线 animation-timing-function: ease;// 定义动画开始前的延迟时间 animation-delay: 1s;// 定义动画播放次数…...
Nacos源码—Nacos集群高可用分析(二)
4.集群节点的健康状态变动时的数据同步 (1)Nacos后台管理的集群管理模块介绍 在集群管理模块下,可以看到每个节点的状态和元数据。节点IP就是节点的IP地址以及端口,节点状态就是标识当前节点是否可用,节点元数据就是相关的Raft信息。 其中节点…...
SRAM详解
一、SRAM基础原理 定义与结构 SRAM(Static Random-Access Memory,静态随机存取存储器)是一种基于触发器(Flip-Flop)结构的易失性内存,通过交叉耦合的反相器(6晶体管,6T单元ÿ…...
JavaWeb:MySQL进阶
多表设计 一对多(多对一) 外键 一对一 多对多 多表查询 内连接 外连接 子查询 -- 查询员工表 select * from emp;-- 查询部门表 select * from dept;-- 查询员工和部门 select * from emp, dept; -- 笛卡尔积select * from emp, dept where emp.dept_i…...
Golang 接口 vs Rust Trait:一场关于抽象的哲学对话
一、引言 在现代编程语言中,接口(Interface) 和 Trait 是实现多态和抽象行为的关键机制。它们允许我们定义行为契约,让不同的类型共享相同的语义接口,从而提升代码的复用性和扩展性。 Go 和 Rust 分别代表了两种截然…...
智算中心的搭建标准
智算中心的搭建标准主要涉及以下几个方面: 开放标准: 硬件与软件开放:从硬件到软件、从芯片到架构,都应采用开放、标准的技术。例如,硬件支持如 OCP、ODCC、Open19 等开放社区标准,软件采用如 OpenStack、K…...
商汤科技前端面试题及参考答案
有没有配置过 webpack,讲一下 webpack 热更新原理,能否自己实现一些插件? Webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。在实际项目中,经常会对其进行配置,以满足项目的各种需求,比如处理不同类型的文件、优化代码、配置开发服务器等。 Webpack 热更…...
windows下docker的使用
找了个docker教程 Windows Docker 安装 | 菜鸟教程Windows Docker 安装 Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的…...
AI日报 · 2025年5月07日|谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力
1、谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力 谷歌于5月6日提前发布 Gemini 2.5 Pro 预览版 (I/O 版本),为开发者带来更强编码能力,尤其优化了前端与UI开发、代码转换及智能体工作流构建,并在WebDe…...
Redis 8.0 正式版发布,新特性很强!
就在前两天,Redis 8.0 正式版 (GA) 来了!这并不是一次简单的更新,Redis 8.0 不仅带来了性能上的进一步提升,还带来一些实用的新特性与功能增强。并且,最重要的是拥抱 AGPLv3 重归开源! 下面,简单…...
MySQL核心机制:日志系统、锁机制与事务管理的深度剖析
一.介绍 MySQL作为世界上最流行的开源关系型数据库之一,其强大的事务处理能力和高并发支持使其在各种复杂应用场景中得到广泛应用。MySQL的核心机制包括日志系统、锁机制和事务管理,这些机制共同确保了数据库的ACID特性,为应用程序提供了可靠…...
Mybatis标签使用 -association 绑定对象,collection 绑定集合
注意 association标签中的 select , column 属性使用 collection 标签中的 ofType 属性使用 Data public class Tours implements Serializable {private static final long serialVersionUID 1L;private Integer touId;private String tourName;private Integer guideId;pri…...
IBM BAW(原BPM升级版)使用教程Toolkit介绍
本部分为“IBM BAW(原BPM升级版)使用教程系列”内容的补充。 一、系统Toolkit 在 IBM Business Automation Workflow (BAW) 中,System Toolkit 是一组预先定义和配置好的工具、功能和组件,旨在帮助流程设计者和开发人员快速构建…...
排列组合算法:解锁数据世界的魔法钥匙
在 C 算法的奇幻世界里,排列和组合算法就像是两把神奇的魔法钥匙,能够帮我们解锁数据世界中各种复杂问题的大门。今天,作为 C 算法小白的我,就带大家一起走进排列和组合算法的奇妙天地。 排列算法:创造所有可能的顺序…...
LVGL -meter的应用
1 meter介绍 lv_meter 是 LVGL v8 引入的一种图形控件,用于创建仪表盘样式的用户界面元素,它可以模拟像速度表、电压表、温度表这类模拟表盘。它通过可视化刻度、指针、颜色弧线等来展示数值信息,是一种非常直观的数据展示控件。 1.1 核心特…...
MCP学习
一、MCP基础理论与核心概念 1.1 协议定义与设计目标 MCP(Model Context Protocol)是Anthropic公司于2024年11月开源的标准化协议,旨在解决大型语言模型(LLM)与外部工具、数据源之间的动态交互问题。其核心目标包括&…...
软件工程(三):模块的内聚模型
模块内聚的7种类型(从低到高) 等级类型描述示例1️⃣ 最低偶然性内聚(Coincidental Cohesion)模块内部的各功能毫无关系,随机拼凑一个模块中既有文件读写,又有图像压缩、还处理用户登录2️⃣逻辑性内聚&am…...
Java中字符转数字的原理解析 - 为什么char x - ‘0‘能得到对应数字
前言 在Java编程中,我们经常需要将字符形式的数字转换为实际的数值。有很多方法可以实现这一转换,比如使用Integer.parseInt()或Character.getNumericValue()等方法。但有一种简便且高效的方式是直接使用char - 0运算,本文将详细解析这种方法…...
View的事件分发机制
(一)为什么要有事件分发机制 安卓界面上面的View的层级结构是树形的,可能出现多个View重叠在一起的现象(如下图),当我们点击的地方为多个View重叠的区域时,这个点击事件应该给谁呢?为…...
【C++】类和对象【下】
目录 一、再探构造函数1、测试题 二、类型转换三、static成员1. 静态成员变量2. 静态成员函数 四、友元五、内部类六、匿名对象七、对象拷贝时的编译器优化 个人主页<—请点击 C专栏<—请点击 一、再探构造函数 之前我们实现构造函数时,初始化成员变量主要使…...
【JS逆向基础】并发爬虫
前言:所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。强调多个事件在同一时间间隔发生。 1,进程、线程以及协程 【1】进程概念 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算…...
Android组件化 -> 基础组件进行Application,Activity生命周期分发
在lib_common基础组件模块创建上下文持有类,生命周期派发类 object AppContextProvider {private lateinit var application: Applicationprivate var currentActivityRef: WeakReference<Activity>? null// 应用生命周期监听器列表private val appLifecyc…...
42. PCB防静电环设计
PCB防静电环的作用 1. PCB防静电环的作用2. 防静电环设计技术点 1. PCB防静电环的作用 防静电环主要用于生产、运输、售后等环节人体会直接接触电路板的场景。 防静电环只在顶层和底层设计即可。 2. 防静电环设计技术点...
深入理解Java反射机制
java反射是java语言中一个强大而灵活的特性,它允许程序在运行时检查和操作类、接口、字段和方法。 为了方便理解下文,我先给出Cat对象 public class Cat implements jump,Run {private int age;public String name;protected String color;double he…...
嵌入式音视频通话EasyRTC基于WebRTC技术驱动智能带屏音箱:开启智能交互新体验
一、引言 随着智能家居市场的蓬勃发展,智能带屏音箱作为家庭智能交互中心的重要组成部分,其功能需求日益丰富。EasyRTC凭借其低延迟、高稳定性的特点,为智能带屏音箱带来了全新的交互体验,能满足用户在视频通话、远程监控、在线…...
1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失)
1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失) 1、时间:1987-2023年 2、来源:各省年鉴、统计公报 3、指标:进出口总额(万美元)、进口总额(万美…...