智能合约
06-智能合约
0 啥是智能合约?
定义
智能合约,又称加密合约,在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。
角色
-
区块链网络可视为一个分布式存储服务,因为它存储了所有交易和智能合约的状态 -
智能合约还是基于存储服务之上的计算,即运行在区块链上的代码程序。

特点
智能合约,即先前设定好的代码数字协议,在不可更改和公共监督情景下,去运行一个合约,违反合约的一方将付出事先约定好的代价,自动执行(无需借助外部力量)。
智能合约是公平的,第三方无法干预。
功能
智能合约不仅以与传统合约相同方式定义协议的规则和处罚,还可自动强制执行这些义务。
它通过接受信息作为输入,通过规则为输入赋值,在合约中列出并执行这些合约条款。
实例
设想人寿保险,智能合约在保单持有人去世后,向指定受益人支付利益。
合约可以对在线死亡登记表进行实时检查以确定支付时间,智能合约是可靠的,自动的。
架构地位
核心数据和核心业务逻辑运行在区块链上,保证去中心化与上层业务系统进行衔接,提供用户界面或业务集成:

意义
区块链智能合约:从数据可信上升到业务可信。
1 假如没有智能合约?
区块链网络将仅作为一个分布式存储服务。区块链主要功能将会是记录和保存数据,而不会自动执行任何逻辑或业务规则。
没有智能合约的区块链网络的特点和局限:
1.1 特点
-
去中心化存储:区块链仍提供去中心化的数据存储功能,保证数据的完整性和防篡改性 -
数据透明性:所有节点可访问相同数据,确保信息公开透明 -
安全性:通过共识机制和密码学技术,确保数据安全性和不可篡改性
1.2 局限
-
缺乏自动化处理:无法在链上执行自动化的业务逻辑。如不能在特定条件下自动触发资金转移或更新数据 -
手动操作:所有业务逻辑和操作需要依赖链下的系统或人工操作,增加操作复杂性和潜在错误 -
有限的应用场景:仅能用于简单的数据记录和查询,无法支持复杂的去中心化应用(dApps)
1.3 假如没有智能合约的区块链网络的典型使用场景
-
数据记录:例如,公证和时间戳服务,用于证明某个数据在某个时间点已经存在。 -
审计跟踪:用于保存和跟踪记录的变更历史,确保记录的完整性和不可篡改性。 -
简单交易:例如,比特币的早期应用,仅支持简单的转账功能,而没有复杂的业务逻辑。
1.4 实例
若一个区块链网络没有智能合约,其工作流程可能:
-
数据写入:用户通过客户端,将数据写入区块链 -
数据存储:区块链网络通过共识机制将数据记录在区块中,并存储在各节点的账本中 -
数据查询:用户或应用程序可查询区块链中的数据,但不能执行任何业务逻辑
如Alice向区块链提交一笔交易,记录她向Bob转账1个单位货币。区块链网络会验证并记录这笔交易,确保其不可篡改。但若无智能合约,无法在特定条件下自动执行转账或其他逻辑操作,所有业务流程要在链下由用户或第三方系统手动处理。
综上,无智能合约的区块链网络在功能上受限,只能提供基础的分布式存储和数据记录功能,无法支持复杂的自动化业务逻辑和去中心化应用。
所以,智能合约
1.5 有啥用?
在区块链社会里,大家共同维护一个区块链账本,所有交易数据无法篡改、不可伪造,还能减少人工对账的出错概率和人力成本。 随智能合约普及,我们也会变得更佛系。面对潜在的纠纷,无需自己出马,一切代码说了算。
如乘飞机买延误险,理赔就变得简单多了:
-
投保乘客信息、航班延误险和航班实时动态均以智能合约的形式存储在区块链上 -
一旦航班延符合赔付标准,赔偿款将自动划账到投保乘客账户,保单处理十分高效 -
你也不需要跟工作人员费口舌、争论计赔时间等问题
智能合约是以太坊区块链上指定地址的代码和数据集合,智能合约能直接相互发送消息,同时也能执行图灵完备计算。
智能合约是建立在以太坊虚拟机字节码基础之上的。
一般不会直接编写字节码,而是使用像 Solidity 这样的以太坊高级语言。
Solidity 是可以用来编写以太坊智能合约的高级语言,它和js很像。
推荐使用 Solidity 语言,其使用的人比较多,意味着更好的生态,能找到更多的资源,有问题也更容易找到答案。
2 重要性
2.1 经济活动可编程
代码即法律,表达现实世界的经济活动,满足条件自动触发的电子合约
2.2 现实事物可映射
智能提供丰富的数据结构,完成复杂的现实事物的标识和时序变化
2.3 区块链2.0的标志
区块链2.0通常指的是在比特币之后出现的区块链技术,其核心特征是支持智能合约(Smart Contracts)。智能合约是一种自动执行的合约,其中的条款和条件直接编码到代码中,无需第三方介入即可执行。
以太坊,HLFabric等都是建立在智能合约的基础上。
3 智能合约框架

3.1 广域网的状态一致性
-
不同节点得到一致执行结果 -
不同硬件环境得到一致的资源消耗
3.2 合约开发语言多样性
适应不同开发者的开发习惯
支持不同的合约语言:
-
C++ -
GO -
JAVA -
Solidity
支持不同的合约类型:
-
WASM 合约 -
Native 合约 -
EVM 合约
合约语言/运行时相容矩阵:

-
环境准备 -
合约编写 -
合约编译 -
部署调用
3.3 合约执行的高性能
支撑真实落地场景的业务体量
3.4 不同业务场景的可扩展性
-
公开网络和联盟网络的虚拟机需求 -
兼容已有的区块链生态
4 WASM智能合约字节码
将智能合约编译成WebAssembly字节码格式,以便在区块链环境中高效、安全地执行。WASM(WebAssembly)是一种高效、可移植的低级字节码格式,最初是为在浏览器中高效运行而设计的,但由于其安全性、跨平台兼容性和高效性,逐渐在区块链和智能合约领域中获得广泛应用。
4.1 优点
字节码预编译AOT,实现高性能
硬件无关中间码,生成本地指令 编译执行 V.S 解释执行
WASM字节码经过优化,可以接近本地执行速度,确保智能合约的高效执行。
资源限制及审计
-
设置资源限制,超限制自动退出 -
多纬度资源统计:CPU,内存,磁盘
安全性保障
-
内存越界检查 -
限制系统资源访问,类似web沙盒环境。WASM运行在沙盒环境中,隔离了智能合约执行和底层系统,减少了安全漏洞。 -
超资源自动退出保护机制,防恶意攻击

可移植性
WASM字节码可以在任何支持WASM的环境中执行,增加了智能合约的跨链兼容性
多语言支持
开发者可用多种编程语言(如Rust、C++、Go等)编写智能合约,然后编译成WASM字节码
4.2 工作流程
-
编写合约:开发者使用高层语言(如Rust)编写智能合约。 -
编译成WASM字节码:使用编译工具将智能合约编译成WASM字节码。 -
部署:将编译后的WASM字节码部署到区块链网络上。 -
执行:当调用智能合约时,区块链节点将加载并执行WASM字节码。

4.3 例子
1. 编写智能合约(Rust)
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}
2. 编译为WASM字节码
使用Rust工具链和wasm-pack
将代码编译为WASM字节码:
wasm-pack build --target web
编译后生成的WASM字节码文件可以部署到支持WASM的区块链平台。
3. 部署和调用
将生成的WASM字节码文件部署到区块链上,然后通过交易调用合约函数。例如,调用add
函数并传递参数a
和b
。
4.4 未来
WASM智能合约在区块链领域具有广阔的前景:
-
跨链互操作性:由于WASM的可移植性,未来不同区块链平台之间可以更方便地共享和执行智能合约。 -
更高性能:WASM的高效执行能力使得区块链平台可以支持更复杂和计算密集的应用。 -
更安全的合约执行:WASM沙盒环境提供了更好的安全性,减少了智能合约中的潜在漏洞。
5 Gas 计费原理-控制流图分析

Gas 计费是区块链平台(如以太坊)用来防止资源滥用和激励资源使用优化的机制。智能合约执行过程中每一步操作都会消耗一定量的Gas,用户需要为这些操作支付费用。Gas 费用通常以加密货币(例如以太币)支付。
Gas 计费原理
-
初始Gas分配:在交易开始前,用户需要指定一个Gas上限(即最大愿意支付的Gas量)和Gas价格(每单位Gas愿意支付的费用)。在交易执行时,这个Gas上限会被锁定,确保不会超过用户设定的最大Gas量。
-
操作计费:智能合约执行过程中,每个操作指令(如算术运算、存储操作、合约调用等)都有预定义的Gas消耗。虚拟机(如以太坊的EVM)会根据操作指令的类型和数量逐步扣除Gas。
-
Gas不足处理:如果执行过程中Gas消耗超过了用户设定的Gas上限,交易会被强制中止并回滚,但已经消耗的Gas不会退还。
-
剩余Gas退还:如果交易执行完毕且未耗尽所有的Gas,上限中未用尽的部分会退还给用户。
控制流图分析
控制流图(CFG)是用来表示程序所有可能执行路径的图结构,节点表示基本块(basic blocks),边表示控制流(control flow)。在智能合约中,CFG可以帮助分析程序的Gas消耗情况。
示例智能合约控制流图
假设有一个简单的智能合约,伪代码如下:
function foo(x) {
if (x > 10) {
y = x * 2;
} else {
y = x + 10;
}
return y;
}
其控制流图如下所示:
[Start]|v[Entry: x > 10]/ \/ \v v
[y = x * 2] [y = x + 10]\ /\ /v v[Return y]
Gas 计费过程
-
进入合约:Gas 消耗包括调用合约的基础费用和传递参数的费用。
-
条件判断:根据条件判断的复杂度,会消耗一定量的Gas。
-
分支执行:
-
若 x > 10
,执行y = x * 2
,算术运算消耗Gas。 -
若 x <= 10
,执行y = x + 10
,算术运算消耗Gas。
-
-
返回结果:返回结果的过程会消耗Gas。
通过控制流图,可以直观地分析不同路径上的Gas消耗情况,并优化智能合约代码以减少Gas使用。例如,在上述示例中,可以通过合并相似的计算路径来减少条件判断的复杂度。
Gas 计费优化
-
减少存储操作:存储操作(如写入合约存储)是最昂贵的操作之一,尽量减少写操作可以显著降低Gas消耗。 -
优化计算:避免不必要的复杂计算,使用低Gas消耗的操作替代高Gas消耗的操作。 -
减少条件判断:减少条件分支的复杂度和数量,优化控制流路径。 -
合约重用:通过模块化设计,重用常见操作,减少重复代码带来的额外Gas消耗。
总结
Gas计费是区块链智能合约执行中的重要机制,通过控制流图分析,可以帮助理解和优化智能合约的Gas消耗。结合具体操作和优化策略,可以有效地降低智能合约的执行成本,提高运行效率。
6 合约执行事务流程

从用户发起交易请求到交易完成被区块链网络记录:
-
用户发起交易请求:
-
用户通过钱包或DApp(去中心化应用)向区块链网络提交一笔交易请求。 -
交易请求中包含调用的智能合约地址、函数名、参数、Gas上限和Gas价格等信息。
-
-
交易广播:
-
用户的交易请求通过节点被广播到整个区块链网络。 -
所有全节点都会接收到这笔交易请求。
-
-
交易验证:
-
节点对交易请求进行验证,包括签名验证、Nonce验证(防止重放攻击)和检查用户账户是否有足够的余额支付Gas费用。 -
验证通过的交易被放入交易池中等待打包。
-
-
矿工打包交易:
-
矿工节点从交易池中选取若干交易进行打包。 -
选取策略通常优先选择Gas价格较高的交易,以获得更多的手续费收入。
-
-
交易执行:
-
矿工节点在虚拟机(如以太坊的EVM)中执行交易。 -
虚拟机按顺序执行交易中的每一条指令,并逐步扣除Gas。 -
若交易中的Gas不足,交易会被中止并回滚,但已经消耗的Gas不会退还。
-
-
智能合约调用:
-
在交易执行过程中,合约函数被调用,执行相应的逻辑。 -
合约调用过程中可能会涉及状态修改、事件触发、调用其他合约等操作。 -
执行结束后,结果(包括状态变更、返回值等)被记录下来。
-
-
交易结果打包:
-
矿工将交易执行结果和状态变更打包成一个新的区块。 -
新区块包含区块头(包含区块号、时间戳、前一区块哈希等信息)和交易列表。
-
-
区块广播:
-
新区块通过P2P网络广播给其他节点。 -
其他节点收到新块后,对区块和其中的交易进行验证。
-
-
共识算法:
-
区块链网络使用共识算法(如PoW、PoS等)对新块进行共识验证。 -
验证通过后,区块被添加到区块链上,交易被正式确认。
-
-
客户端确认:
-
客户端通过监听交易或区块事件,确认交易已上链。 -
用户可以查询交易状态,查看交易是否成功、Gas消耗情况等。
-
流程关键点
-
Gas机制:交易执行过程中每一步操作都会消耗一定量的Gas,防止资源滥用。 -
交易验证:确保交易的合法性,包括签名验证和账户余额检查。 -
共识机制:通过共识算法保证区块链的去中心化和安全性。 -
状态变更:合约调用过程中会涉及状态变更,必须确保状态变更的一致性和不可篡改性。
7 合约并发执行原理

通过允许多个智能合约交易并行处理,可以显著提高系统的吞吐量和响应速度。
-
交易分类:
-
首先,将待处理的交易按照涉及的账户或智能合约进行分类。不同账户或合约的交易可以并发执行,而相同账户或合约的交易则需要按顺序执行以避免冲突。
-
-
依赖关系检测:
-
通过依赖关系检测算法,确定交易之间的依赖关系。依赖关系指的是交易之间存在数据读写冲突的情况。 -
例如,交易A需要读取交易B写入的数据,则A依赖于B,需要等待B执行完毕才能执行A。
-
-
构建依赖图:
-
根据依赖关系构建一个依赖图(DAG,Directed Acyclic Graph),其中每个节点代表一个交易,边表示依赖关系。 -
DAG图确保了并发执行的正确性,即交易的执行顺序符合依赖关系。
-
-
并发执行引擎:
-
使用并发执行引擎对交易进行调度和执行。引擎根据DAG图中的依赖关系,选择可以并行执行的交易集。 -
同时满足无依赖关系的交易可以并行执行,依赖关系中的交易按顺序执行。
-
-
状态隔离:
-
每个交易在执行过程中操作的状态(如账户余额、合约存储等)在隔离的环境中进行,以确保并行执行时不会互相影响。 -
使用沙盒技术或事务管理机制实现状态隔离,保证数据的一致性和隔离性。
-
-
结果合并:
-
所有交易执行完毕后,将各个交易的执行结果(状态变更、事件触发等)合并到全局状态中。 -
确保最终的全局状态一致性,即所有交易的结果都正确应用到区块链上。
-
-
共识与确认:
-
并发执行完成后,交易结果进入共识阶段,由区块链网络通过共识算法进行验证和确认。 -
确认通过的交易结果被持久化到区块链中,完成整个并发执行流程。
-
流程关键点
-
并发调度:通过依赖图调度交易执行,确保无依赖关系的交易可以并发执行。 -
状态隔离:使用沙盒或事务管理技术,确保并行执行时的状态隔离和数据一致性。 -
依赖检测:检测交易之间的读写依赖关系,构建依赖图以指导并发执行。
并发执行的优势
-
提高吞吐量:并发执行可以显著提高区块链网络的交易处理能力,增加每秒交易处理数量(TPS)。 -
缩短确认时间:并发执行减少了交易等待时间,缩短了交易确认所需的时间,提高了用户体验。 -
优化资源利用:并发执行可以更高效地利用节点的计算资源,提高区块链系统的整体性能。
挑战与解决方案
-
数据冲突:需要有效的依赖关系检测和冲突解决机制,避免并发执行时的数据冲突。 -
隔离与一致性:确保并发执行环境中的状态隔离和最终的一致性,保证数据的准确性和可靠性。 -
复杂性管理:并发执行引擎的设计和实现较为复杂,需要处理多种并发场景和异常情况。
通过上述原理和流程,可以有效地实现智能合约的并发执行,提高区块链系统的性能和可扩展性。
获取更多干货内容,记得关注我哦。
本文由 mdnice 多平台发布
相关文章:

智能合约
06-智能合约 0 啥是智能合约? 定义 智能合约,又称加密合约,在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。 角色 区块链网络可视为一个分布式存储服务,因为它存储了所有交易和智能合约的状态 智能合约还…...

SQL面试题——拼多多SQL面试题 求连续段的起始位置和结束位置
拼多多SQL面试题 求连续段的起始位置和结束位置 今天的题目来自拼多多,我们先看一下题目描述 有一张表ids记录了id,id不重复,但是会存在间断,求出连续段的开始位置和结束位置 +---+ | id| +---+ | 1| | 2| | 3| | 5| | 6| | 8| | 10| | 12| | 13| | 14| | 15| +--…...

玩《三角洲行动》遇到游戏运行故障是什么原因?游戏运行故障要怎么解决?预防游戏运行故障问题出现
《三角洲行动》游戏运行故障解析与解决方案:原因、解决与预防 在畅游《三角洲行动》这款充满挑战与激情的游戏时,玩家可能会遭遇各种游戏运行故障,如卡顿、闪退、无法启动等问题。我将结合自己丰富的经验和知识,为大家深入剖析《…...

基于灰色神经网络的订单需求预测
灰色神经网络(Grey Neural Network, GNN) 是将灰色系统理论与人工神经网络相结合的一种模型,旨在处理不完全信息和小样本问题。灰色神经网络利用灰色系统的预测优势和神经网络的学习能力,能够在信息不完整或数据不充分的情况下实现…...

记录学习《手动学习深度学习》这本书的笔记(三)
这两天看完了第六章:卷积神经网络,巧的是最近上的专业选修课刚讲完卷积神经网络,什么卷积层池化层听得云里雾里的,这一章正好帮我讲解了基础的知识。 第六章:卷积神经网络 6.1 从全连接层到卷积 在之前的学习中&…...

JS中递归函数的理解及展开运算符在递归种的运用理解
<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>递归函数</title> </head> <body> <script>const list ["你好", "吃饭了吗",["好",[[&qu…...

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换
接触人工智能的学习三个月了,每天与各种安装包作斗争,缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装,是时候总结一下踩过的坑和积累的经验了。 以一个典型的…...

提高身份证 OCR 识别 API 接口的准确性的方法
身份证OCR识别API接口能够快速、准确地识别并提取身份证上的文字信息,包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限等关键内容,将其转化为计算机可处理的结构化数据,从而实现身份证信息的自动化录入和处理࿰…...

PHP面向对象
在 PHP 中,面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它使用“对象”来组织和设计代码。对象是类的实例,类是定义对象特征和行为的蓝图。面向对象编程的主要目标是提高代码的可重…...

Tomcat新手成长之路:安装部署优化全解析(下)
接上篇《Tomcat新手成长之路:安装部署优化全解析(上)》: link 文章目录 7.应用部署7.1.上下文7.2.启动时进行部署7.3.动态应用部署 8.Tomcat 类加载机制8.1.简介8.2.类加载器定义8.3.XML解析器和 Java 9.JMS监控9.1.简介9.2.启用 JMX 远程监…...

GPT 1到4代的演进笔记
1. GPT-1 标题是 Improving Language Understanding by Generative Pre-Training. 发表于 2018.02, 比 bert(发布于 2018.10) 早了半年. 1.1 动机 困难:NLU 任务是多样的, 有 {textual entailment, question answering, semantic similarity assessment, document classifica…...

vitepress组件库文档项目 markdown语法大全(修正版)
#上次总结的 有些语法是用在markdown文档中的 使用到vitepress项目中有些语法可能有出入 于是我再总结一版 vitepress项目中的markdown语法大全 在阅读本章节之前,请确保你已经对 Markdown 有所了解。如果你还不了解 Markdown ,请先学习一些Markdown 教…...

Vue3技术开发,使用纯CSS3动手制作一个3D环绕的相册展示效果,支持传入任意图片.3D轮播相册的组件
主要讲述封装一个3D轮播相册的组件,效果图如下,仅仅传入一个图片的数组即可,效果如下: 使用Vue3技术开发,支持传入任意张数的图片。 使用方法 <template><Swiper :list"list" /> </templat…...

LeetCode 力扣 热题 100道(十五)搜索插入位置(C++)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 代码如下所示: class Solution { public:int searchIns…...

【035】基于51单片机俄罗斯方块游戏机【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统LCD12864液晶显示按键控制。 1、设计采用STC89C52、AT89C52、AT89S52作为主控芯片,采用LCD12864液晶作为显示,大屏显示就是刺激; 2、游戏设置十个关卡,每个关卡累计99分即可进入下…...

NAT traversal 原理 | TCP / UDP/ P2P
注:本文为 “NAT traversal ”相关的几篇文章合辑。 未整理去重。 NAT 穿越技术原理 Li_yy123 于 2020-12-08 18:54:26 发布 一、NAT 由来 为了解决全球公有 IPv4 的稀缺,提出了 NAT 技术。NAT 是 Network Address Translation 网络地址转换的缩写。 …...

如何成长为一名工程技术经理
https://medium.com/srivatsan-sridharan/how-to-grow-as-an-engineering-manager-687cad0bcac7 作为一名工程技术经理,你可能已经积累了丰富的团队管理经验,并展示了出色的项目管理、优先级管理和员工指导能力。然而,尽管如此,你…...

GEE开发之下载海拔、坡度、坡向数据
GEE开发之加载海拔、坡度、坡向数据 方法一:加载elevation、slope、aspect和hillshade数据方法二:加载elevation、slope、aspect数据 前言:根据矢量图加载海拔、坡度、坡向和山体阴影。 方法一:加载elevation、slope、aspect和hil…...

gozero项目迁移与新服务器环境配置,包含服务器安装包括go版本,Nginx,项目配置包括Mysql,redis,rabbit,域名
迁移 **GoZero** 项目到新服务器并配置相关环境涉及多个步骤。以下是一个系统化的指南,涵盖服务器环境安装、数据库和缓存配置、项目部署以及域名绑定。 ### 步骤概述 1. **服务器环境配置** - 安装 Go 语言环境 - 安装 Nginx - 安装 MySQL 和 Redis -…...

Scala正则表达式全面教程
一、正则表达式概述 正则表达式(Regular Expression,简称RegEx)是一种用于字符串搜索和操作的强大工具,它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在Scala中,正则表达式通过scala.util.matching.…...

伺服电机为什么会变慢?
在现代工业自动化和控制系统中,伺服电机因其高效性和精确的控制能力而被广泛应用于各类机器和设备。然而,在实际使用中,有时用户会发现伺服电机的运行速度出现了下降的现象。这一变化不仅会影响生产效率,还可能对设备的安全性和可…...

61 基于单片机的小车雷达避障及阈值可调
所有仿真详情导航: PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机,采用超声波传感器检测距离,通过LCD1602显示屏显示,三个按键,第一个按键是…...

微信小程序之手机归属地查询
微信小程序之手机归属地查询 需求描述 API申请和小程序设置 API申请 第一步:完整账号注册 我们需要来到如下网站,注册账号:万维易源 第二步:账号注册完成以后,点击右上角的控制台信息。 第三步:在控制…...

ElementUI 问题清单
1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为,给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…...

DVWA靶场——XSS(Stored)
一,Stored XSS 漏洞详解 存储型跨站脚本攻击(Stored XSS,或称为 Persistent XSS) 是一种常见的跨站脚本攻击(XSS)类型,它通过将恶意脚本(通常是 JavaScript 代码)直接存储…...

Spring框架中的Bean是线程安全的吗?
概述 在Java开发中,Spring框架是一个广泛使用的轻量级控制反转(IoC)和面向切面(AOP)容器框架。它简化了企业级应用的开发,提供了丰富的功能,如依赖注入、事务管理、消息传递等。在Spring框架中…...

uniapp远程摄像头流界面上显示
用到的插件:dplayer、hls dplayer官网:dplayer dplayer官网npm安装的是最新版本(1.27.1),真机运行异常了,可以安装历史版本 dplayer历史版本 远程摄像头视频流格式:m3u8 可以用来测试的视频流&a…...

elasticSearch(一):elasticSearch介绍
一、搜索引擎 搜索引擎的核心目的是帮助用户以最小的成本才海量数据中找到最想要的结果。糟糕的搜索引擎往往会所问非所答,用户查了半天也得不到自己想要的,好的搜索引擎往往第一页就是用户最想要的结果。而目前判断搜索引擎好坏一般是从召回率、精确率…...

基于 RWKV 的视觉语言模型 VisualRWKV 被 COLING 2025 接收!
基于 RWKV 的视觉语言模型 VisualRWKV 被 COLING 2025 接收! COLING,国际计算语言学会议(International Conference on Computational Linguistics),是自然语言处理和计算语言学领域的顶级国际会议(CCF 推…...

输出九九乘法表:JAVA
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 输出九九乘法表。 具体的输出格式见样例,其中每一项乘法的结果需要占据2个字符宽度,不同的乘法结果之间用1个空格间隔。 举例: 1*4_4_2*4_8_3*412_4*416 上…...