Layer2区块链扩容方案(1)——总述
写在前面
这篇文章作为一个简单介绍,很多技术只是大致提及或者引用,之后会在详细学习后逐项解释。
补充知识
在了解扩容方案之前,我们最好了解一些相关的知识概念
EVM
“EVM” 是“Ethereum Virtual Machine”(以太坊虚拟机)的缩写。
EVM是什么?
-
EVM是由成千上万台计算机(节点)组成的一台云计算机,每台计算机上运行一个软件,该软件基本上只是计算智能合约交易的输出
-
EVM这台虚拟机一般用来处理Defi交易(EVM是专门为了处理Defi交易设计的),可以读取编译过的智能合约。如果两条链均适用EVM,那么他们之间进行的资产转移和交互就比较方便,而这种转移的合约一般使用的是Solidity语言编写的(cardona和solana是用rust语言编写的,这是区块链开发的另一种常见语言)
-
EVM和正常的计算机一样,读的是ByteCode(0 1组成的机器码);开发人员一般使用的Solidity书写智能合约,这种合约需要通过编译器(比如常见remix)编译后才能被EVM读懂。除了这两种语言,再讲一下Opcode(操作码),类似于CPU读的汇编代码,操作码是一种开发人员不写、EVM不读的代码;但是我们可以借助这个概念理解汽油费的计算方式,常说的汽油费就是 每个操作*该操作所需的费用最后求和得到的。
EVM的运行
-
EVM处理交易时,每个交易依次运行,不会同时执行
-
完成一笔交易,称作EVM的状态被更新了
-
EVM持有状态与数据集合,交易前和交易后的状态都被记录(可以借此实现回滚),而这些交易的列表组成了区块链
PoS权益证明
关于Pos的一些内容,我们在以太坊的文章中谈到过,这里简单的提一下。PoS,即Proof of Staking通常指使用代币质押来获得出块权的方案。
运行流程
-
区块提议:在 PoS 网络中,验证者(或烘焙者、出块者)会在获得区块生成权利时,提议一个新区块。这个过程通常是随机的,系统会根据验证者的质押数量、网络的共识算法等因素来确定哪个验证者可以提议一个新区块。
-
区块验证:提议的区块需要经过其他验证者的验证,以确保区块中的交易和数据是有效的,并符合网络协议的规则。这一步骤是为了防止恶意行为和保证区块的正确性。
-
区块确认:经过验证的区块会被添加到区块链中,成为新区块链的一部分。验证者会根据网络的共识规则获得一定的奖励,作为他们参与区块生成和验证的回报。
-
奖励发放:生成和验证区块的验证者会收到区块奖励,这通常包括新生成的代币和交易手续费。
优势
-
在PoS中,质押一定代币的节点才有出块权(或者说是验证交易的权力),这样使得能源得到节约以及使得区块链被破坏的风险降低(本质上是增加了造假者的代价)
-
PoS实现了“No one runs with no reward”,使得大家参与区块链的成本降低(不会无缘无故的浪费电力)
-
使得去中心化程度加深,一定程度上降低了矿场矿池对于算力垄断而达到的危害区块链的风险(相交于PoW而言)
选择验证者(矿工)的规则
-
往往是质押金额多的节点更优先得到出块权
-
同时,引入了随机数选择器的方法
质押者的风险与奖励
风险
-
质押的Staking中的代币在质押期无法参与交易
-
对于没有审核交易经验的人,往往需要雇佣技术人员来验证,这就需要承担验证错误带来的质押金丢失的风险(这是疏忽、和恶意节点的故意破坏动机不同),以及支付一定数额的佣金
-
不良行为一旦被发现,就会扣除所有押金
-
验证者的奖励发放有一定延时:
-
区块生成时:验证者在成功生成一个新区块后,通常会获得该区块的奖励。这包括区块奖励(通常是新生成的代币)以及交易手续费。
-
奖励周期:在一些PoS系统中,奖励可能不是即时发放的,而是在一定的奖励周期后集中发放。例如,奖励可能会按照预定的时间间隔(如每周、每月)进行发放。
-
结算期:某些PoS网络还可能设置一个结算期或延迟期,以确保奖励的准确性和避免潜在的欺诈行为。在此期间,奖励会暂时被锁定,直到结算完成。
-
奖励
下面举的是常见代币的方式,至于奖励的细节可以看一下以太坊的文章
-
Tezos代币:6%(每年) 实际收益大约4.6%
-
Cardano代币:4-5%(每年)
-
Algo代币:8-10%(每年)
-
Eth:4-7%(每年)
缺点
没有原始资产(coin)的节点可能无法参与
总述
区块链扩容受到 Vitalik
提出的不可能三角的限制,不可能三角是指区块链系统设计无法同时兼顾可扩展性,去中心化和安全性,三者只能取其二。这是一个很让人失望的结论,但我们必须知道,一切事物都有自己的边界,公链不应该做所有的事情,公链应该做它该做的事情:“公链是以最高效率达成共识的工具,能够以最低成本来构建信任”。作为共识的工具,信任的引擎,公链不应该为了可扩展性放弃去中心化与安全性。
拓展的常见思路(方案)
方案一:拓展基础层(Layer1)
方案二:将工作外包给新层(Layer2)
下面是详细的拓展层表格信息:
Layer | 内容 | 层 |
---|---|---|
layer 2:链下扩展 | 可编程 | 应用层 |
堆栈脚本 算法 智能合约 | 合约层 | |
layer 1:链上扩展 | 分配机制 发行机制 | 激励层 |
PoA Raft PoW PoS | 共识层 | |
P2P网络 传播机制 验证机制 | 网络层 | |
区块数据 链式结构 时间戳哈希函数 Merkle树 非对称加密 | 数据层 | |
layer0:第0层 | OSI模型中传输层与网络层 |
在底层区块链( Layer1
)上构建一个扩展层( Layer2
), Layer1
来保证安全和去中心化,绝对可靠、可信;它能做到全球共识,并作为“加密法院”,通过智能合约设计的规则进行仲裁,以经济激励的形式将信任传递到 Layer2
上,而 Layer2
追求极致的性能,它只能做到局部共识,但是能够满足各类商业场景的需求。
这篇文章要简要介绍的是Layer2的拓展方案
Layer2方案
很喜欢有人对Layer2的一个例比:Layer2的拓展方案就像是公路上的车,客车、货车、轿车、摩托车都可以运行,都有发动机这一机动车的特性;但是,针对特定的运输任务,往往只选择某一种特殊的车辆,比如运送大型货物用货车、单人驾驶一般使用轿车和摩托车......
这就像Layer2的拓展方案,常见的Layer2拓展方案有以下五种:Rollup(打包)、sidechain(副链)、Plasma(子链)、channel(交易合并),下面我将逐条介绍。
Layer2的拓展,不是通过代码直接影响主链的状态,而是允许网络通过他们拓展外部因素或工具
Rollup
rollup很形象的一种解释就是“打包”,比如你想发送几封信给到同一个地点,往往可以将这几封信打包到一个大信封里面,而不是分别发出,这和Rollup的原理不谋而合;再比如为了解决一道填空题,它可能有很多步骤和过程,但是这些都在演草纸上进行,只是将最终的答案写在答题卡上。Rollup是在以太坊之外执行交易的方案,之后将交易的最终数据发布到主链上
也就是,将一系列交易汇总起来,最终以一个数据的形式汇总到区块链上。
Rollup总述
-
Rollup 本质上是一条独立的区块链
-
和以太坊一样,Rollup 协议也使用 “虚拟机” 来执行智能合约代码。Rollup 的虚拟机独立于以太坊自己的虚拟机(EVM)运行,但是由以太坊上的智能合约管理;这种联系可以让 Rollup 和以太坊之间进行通信。
-
Rollup 负责执行事务并处理数据,以太坊负责接收并存储结果
-
不同于以太坊的区块是由多数节点认可来实现其合法性的,监控 Rollup 状态的一方可以将 “断言” 发送至以太坊,来说明交易是如何处理的;以太坊将决定是否接受这个断言,无论这个断言是否获得了 Rollup 上多数参与方的支持在 Rollup 上,实际只有一方负责处理交易和生成区块,这样的出块方式具有中心化的特性
ZkRollup
zkRollup
就是基于零知识证明的二层扩容方案(layer2
)zkRollup
的原理一句话就可以讲清楚:链下进行复杂的计算和证明的生成,链上进行证明的校验并存储部分数据保证数据可用性。zkRollup
数据可用性可以让任何人都能根据链上存储的交易数据,还原出账户的全局状态,从而消除由于数据可用性带来的安全风险。
工作原理
zkRollup
在链下利用Merkle tree
存储账户状态,由Operator
收集用户的交易,交易收集完成后Operator
会执行每个交易(校验余额,校验nonce,校验签名,执行状态转换),当交易执行完成后会产生一个新的Merkle tree Root
,为了证明链下状态转移是正确的,Operator
会在交易执行完成后生成一个零知识证明的proof
。
下图表示Operator
工作过程,黄色的表示用户发送的交易,绿色的表示Operator
中维护的merkle tree
,Operator
执行交易后本地的merkle tree root
会由prev state root
转换成post state root
,图中蓝色的表示Operator
生成证明账户状态转移有效的零知识证明。
Operator
把prev state root
,post state root
,交易数据和proof
证明提交至链上合约,合约校验proof
通过后会将来新的状态写入到链上,合约不需要单独校验每笔交易的合法性,只需要校验proof
是否有效,降低了链上gas
消耗,其中交易数据是存储在较便宜的位置CALLDATA
上。链下每一次的状态转变都需要提供零知识证明,由主链上的合约进行验证,只有验证通过才能更改状态。即每一次状态转变都严格依赖密码学证明。
zkRollup
生成的证明大小(很小),验证时间(很快基本上是常数),不会随着交易数量的增长而变大,所以zkRollup
可以极大地提高TPS。影响zkRollup
链上性能的只有链上CALLDATA
存储数据的成本,随着以太坊Istanbul
升级,CALLDATA
使用成本降为原来的1/4
,zkRollup
的性能则获得4
倍提升,TPS
可达到近2000
左右。
上链的数据中prve state root
,post state root
与proof
基本上是不会随着交易增长变化的,只有上图中黄色交易部分会随着交易增长变大,所以为了能在一个区块链中容纳更多的交易,需要对上链的交易进行压缩。zkRollup
使用merkle tree
来记录地址,这样地址就可以表示成merkle tree
的索引值,地址数据的大小就从原本的20 bytes
减少到3 bytes
,在以太坊上金额用32
个字节256
位的大整型来表示,这里压缩到6
个字节,货币最小单位从wei
变成Mwei=10^6 wei
,手续费压缩到1
个字节,nonce
压缩到2
个字节,nonce
的范围0~65535
,也就是说一个账户最多可以发送65535
笔交易,交易的签名直接删除了,不出现交易中,因为每笔交易的合法性在链下都通过零知识证明的电路约束校验过了。
(关于工作原理的简要介绍来自登链社区)
OptimisticRollup
发展历史
增强比特币可扩展性的最早举措之一是侧链。侧链是与父链共同运行的区块链,但具备不同的特点:出块时间更短、区块大小更大、智能合约的表达性更强等。然而,普通的侧链有个致命的缺点:如果一条侧链上的绝大多数矿工/验证者都是不诚实的,用户资金就会被盗。这些年来,有很多技术都在尝试增强侧链的安全性,来保证在绝大多数参与者不诚实的情况下,用户资金也不会被盗(这被称为信任最小化的双向锚定)。更早一点的例子有合并挖矿(merged mining)、影子链(shadow chain),之后又出现了 Plasma 和 ZK rollup。有趣的是,在 ORU 出现之前,一个类似的方案是分片机制下的延迟状态执行(我们很快会讲到这点!)。这些研究的集大成者就是我们如今所知的 Optimistic Rollup。2019 年 6 月,《最小可行合并共识》首次阐述了这一技术。从那时起,以太坊社区就开始大力支持 ORU,将其作为以太坊式智能合约执行的可扩展性方案。(该段落引自登链社区)
执行过程
-
聚合者将 rollup 上的交易收集起来,打包进 rollup 区块,并将该 rollup 区块连同保证金(我们很快就会解释为什么需要保证金)一起发送到以太坊(或另一条类似以太坊的区块链,上面运行着具有大量状态的智能合约)上的智能合约中。这个 rollup 区块不会被翻译或执行——智能合约只记录区块哈希,并追踪所有 rollup 区块的哈希。rollup 区块本身不存储在智能合约内,但是所有人都可以在以太坊的历史交易中找到它们。
-
rollup 区块包含一个状态根,即,该 rollup 区块的状态树的根。如果该状态根是无效的,则任何人都可以在挑战期内使用欺诈证明来证明它是无效的。这可能是因为这个 rollup 区块中有一笔交易是无效的,或者因为状态根是无效的。如果一个 rollup 区块被证明是无效的,合约就会将 rollup 链回滚,这个无效区块后面的所有的 rollup 区块都会变成孤块。一旦欺诈证明成功,保证金中的一部分会支付给证明者,剩余部分则销毁。
-
如果直到挑战期结束都没有人提交欺诈证明,合约会敲定 rollup 区块,允许聚合者取回保证金。用户将款项从 rollup 链上取回到主链上时,需要在 rollup 链上发起取款请求,只有当合约敲定该 rollup 区块后,款项才能取回。
缺点
-
在默认情况下,由于与以太坊上的智能合约交互本身存在延迟,欺诈证明的挑战期会很长(长达数周),还会因此导致提款延迟。客户端执行可以大幅缩短挑战期。但是,我们只需要让流动性提供者通过原子交换来提供提款服务,并收取少量费用,就可以轻松解决延迟问题。实际上,这是一种新的 DeFi 元件:流动性提供者可以通过提供服务,利用其流动性来赚取收益。
-
ORU 的吞吐量以以太坊的数据可得性吞吐量为上限。在这种情况下,我们可以将 ORU 视为伪分片。多个 ORU 可以在同一个数据可得性层上并行运行。幸运的是,数据可得性相比执行更容易扩展。LazyLedger 等项目经过专门优化,可以提供具备高度可扩展性的通用数据可得性层,让所有 rollup 项目都能充分发挥其潜力。
sidechain
sidechain借助主链数据,使用自己的EVM进行交易的处理,最后将其拥有的数据同步给主链。Sidechain使用的方案以安全性为代价换取速度。Sidechain里面的有趣的地方有“双重挖矿”和”双向锚定“,双向锚定结合一个代币交换项目来理解。在同专栏的另一篇文章中以Polygon跨链桥(MATIC网络)作为例子进行讲解。
Plasma
Plasma即子链方案,就是一条链的子链通过Plasma网络,将自己的重要消息通知到主链上。
Plasma
之所以不能称为主流的扩容方案,在于Plasma
的数据并没有提交到链上,所以在Plasma
上退出一笔资产的周期会长达一周左右(争议期),如果在争议期间没有人提交欺诈证明,那么资产才可以安全退出到主链。(这里不做详细介绍,等我学习差不多之后再写一篇文章介绍)
channel
我对于channel的理解为“多笔交易化作一笔交易”,就是将主链上的资产转换为虚拟币,在所有交易完成后结算虚拟币并等比例换回主链资产。channel的典型案例是lighting network(闪电网络),我们下面就以其为例进行讲解。值得注意的是,channel没有自己的EVM,因此无法运行合约,只能用来处理交易。
闪电网络
通俗理解,闪电网络的支付方式可以理解为“欠条版比特币”,即用户将BTC存在一个多签钱包中,创建一个支付通道并进行互相的交易,如果用户想要回比特币,就可以将自己现有在这个网络中的资产换成BTC。
相关文章:
Layer2区块链扩容方案(1)——总述
写在前面 这篇文章作为一个简单介绍,很多技术只是大致提及或者引用,之后会在详细学习后逐项解释。 补充知识 在了解扩容方案之前,我们最好了解一些相关的知识概念 EVM “EVM” 是“Ethereum Virtual Machine”(以太坊虚拟机&…...
AWS监控工具,监控性能指标
执行AWS监视是为了跟踪在AWS环境中主动运行的应用程序工作负载和资源,AWS监视器跟踪各种AWS云指标,以帮助提高在其上运行的应用程序的整体性能。 借助阈值突破警报系统,AWS应用程序监控在识别性能瓶颈来源方面起着至关重要的作用,…...
义务外贸wordpress独立站主题
健身器材wordpress网站模板 跑步机、椭圆机、划船机、动感单车、健身车、深蹲架、龙门架、健身器材wordpress网站模板。 https://www.jianzhanpress.com/?p4251 农业机械wordpress网站模板 植保机械、畜牧养殖机械、农机配件、土壤耕整机械、农业机械wordpress网站模板。 …...
初等数论精解【4】
文章目录 算术基本定理基础理论整数运算规则1. 加法性质2. 减法性质3. 乘法性质4. 除法性质5. 其他性质 整数运算的性质整数构成域吗 参考文献 算术基本定理 基础 任何一个大于1的整数可以被分解为素因数的连乘积。 a p 1 p 2 . . . . p n ≥ 1 ap_1\times p_2....\times…...
MongoDB教程(二十二):MongoDB固定集合
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、固定集…...
20240724----idea的Java环境卸载与安装
1.删除旧有的jdk https://blog.csdn.net/weixin_42168713/article/details/112162099 (补充:我把用户变量和java有关的都删了) 2.下载新的jdk百度网盘链接 链接:https://pan.baidu.com/s/1gkuLoxBuRAtIB1IzUTmfyQ 提取码…...
C语言 ——— 函数指针数组的讲解及其用法
目录 前言 函数指针数组的定义 函数指针数组的使用 前言 数组是存放一组相同类型数据的存储空间 关于指针数组的知识请见:C语言 ——— 指针数组 & 指针数组模拟二维整型数组-CSDN博客 那么要将多个函数的地址存储到数组中,这个数组该如何定义…...
鸿蒙仓颉语言【cryptocj 库】(介绍与SHA、MD5、HMAC摘要算法)
cryptocj 库 介绍 cryptocj 是一个安全的密码库,包括常用的密码算法、常用的密钥生成和签名验证。 该库是对 C 语言的 openSSL 封装的仓颉加密算法 1 提供SHA、MD5、HMAC摘要算法。 前置条件:NA 场景: OHOS, Linuxÿ…...
设计App的后端接口分类以及环境依赖包详情
目录 App的后端接口分类 1. 用户登录与注册 2. 设备初始化 3. 广告与推广 4. 应用配置与功能 5. 支付系统 6. 内容分发 7. 资源下载 8. 视频内容 9. 用户行为分析 10. 安全与合规 设计建议 基于Easyswoole,可以在系统中引入需要的一些常见依赖包&#…...
接入百度文心一言API教程
然后,编辑文章。点击AI识别摘要,然后保存即可 COREAIPOWER设置 暂时只支持经典编辑器.古腾堡编辑器等几个版本后支持.在比期间,你可以自己写点摘要 摘要内容 AL识别摘要 清空 若有收获,就点个赞吧 接入文心一言 现在百度文心一言&…...
classfinal太强了,再也不怕被反编译了
这段时间在辛辛苦苦的编写一个算法程序,担心部署到客户服务器,客户反编译jar包,破解程序,那努力就白费了! 在网上查询,发现个好东东,classfinal可以加密jar包,防止反编译࿰…...
DP-适配器模式代码重新理解
package com.designpatterns.adapter;/*** 定义鸭子接口*/ public interface Duck {/*** 定义鸭子呱呱叫(quack)*/public void quack();public void fly(); }package com.designpatterns.adapter;/*** 实现一个绿头鸭*/ public class MallarDuck implements Duck{Overridepubl…...
minio安装小计一则
安装minio并且使用api方式对文件进行操作 本文使用docker安装 docker pull minio/minio docker pull minio/mc (mc为minio文件运行命令行工具) 使用如下命令运行Minio服务器容器: windwos powershell运行命令 docker run -p 9000:9000…...
# Redis 入门到精通(九)-- 主从复制(1)
Redis 入门到精通(九)-- 主从复制(1) 一、redis 主从复制 – 主从复制简介 1、互联网“三高”架构 高并发高性能高可用 2、你的“Redis”是否高可用? 1)单机 redis 的风险与问题 问题1.机器故障 现…...
SpringBoot整合ElasticSearch的elasticsearch-java出现jakarta.json.spi.JsonProvider报错问题
一、原因 报错内容如下 org.springframework.beans.factory.BeanCreationException: Error creating bean with name esClient defined in class path resource [com/elasticsearch/config/ElasticSearchConfig.class]: Bean instantiation via factory method failed; nes…...
git 操作汇总【迭代更新中】
文章目录 0x1初始化操作0x11 生成公钥0x12 配置账号和邮箱 0x20x21 拉取代码0x22 推送代码0x23 设置远端分支 0x30x31 提交mr 0x40x41 子模块0x42 子模块添加 0x1初始化操作 0x11 生成公钥 ssh-keygen0x12 配置账号和邮箱 git config --global user.name username git confi…...
看 Unity 组件的源码 —— ILSpy
ILSpy 是开源的 .NET 程序集浏览器和解编译器。 下载 ILSpy ILSpy Github 地址:icsharpcode/ILSpy: .NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform! (github.com) 它有 Release 包可以下载 也提供 IDE 的…...
Axivion Suite 7.8现已发布
现已实现100%覆盖MISRA规则,并加入了高级功能来提高代码分析能力。 我们很高兴地宣布Axivion Suite 7.8发布。全新版本的Axivion Suite对编译器、配置、分析、仪表板 (WebUI)和IDE插件的架构验证和静态代码分析功能均进行了升级。 100%覆盖所有可测试的MISRA规则 …...
从零开始!JupyterNotebook的安装教程
安装 Anaconda 1、下载 Anaconda: 访问 Anaconda 官方网站 (https://www.anaconda.com/products/distribution/) 下载适合您操作系统的 Anaconda 发行版。 2、安装 Anaconda: Windows:运行下载的安装程序,选择“Just Me”…...
使用kali进行端口扫描
目录 一、使用nping工具向目标主机的指定端口发送自定义数据包 二、使用Nmap工具进行端口扫描 三、使用Zenmap工具进行扫描 一、使用nping工具向目标主机的指定端口发送自定义数据包 nping工具允许用户产生各种网络数据包(TCP,UDP,ICMP&am…...
C#使用Clipper2进行多边形合并、相交、相减、异或的示例
Clipper2库介绍 开源库介绍: Clipper2在Github上的地址:https://github.com/AngusJohnson/Clipper2 Clipper2库对简单和复杂多边形执行交集(Intersection)、并集(Union)、差分(Difference&…...
Spring-Aop源码解析(二)
书接上文,上文说到,specificInterceptors 不为空则执行createProxy方法创建代理对象,即下图的createProxy方法开始执行,生成代理对象,生成代理对象有两种方式,JDK和CGLIB。 createAopProxy就是决定使用哪…...
antdesgin table 组件下载成excel
文章目录 发现宝藏一、需求二、报错 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 一、需求 原组件如下,需要添加下载功能 import React, { useState } from rea…...
MongoDB - 聚合阶段 $group 的使用
文章目录 1. 构造测试数据1. 示例 12. 示例23. 示例34. 示例45. 示例5 2. 构造测试数据1. 示例12. 示例23. 示例3 在 MongoDB 中,$group 是聚合管道中的一个阶段,用于根据指定的条件对文档进行分组。 {$group: {_id: <expression>, // 分组的依据…...
Flutter 插件之 easy_refresh(下拉刷新、上拉加载)
今天给大家较少一下日常开发中最常见的一个功能,就是 下拉刷新、上拉加载,这个在我们使用分页功能是最常见的。 此前我我也写了一篇关于 下拉刷新、上拉加载。 Flutter 下拉刷新、上拉加载flutter_easyrefresh的使用https://blog.csdn.net/WangQingLei0307/article/details/…...
DVWA的安装和使用
背景介绍 DVWA是Damn Vulnerable Web Application的缩写,是一个用于安全脆弱性检测的开源Web应用。它旨在为安全专业人员提供一个合法的测试环境,帮助他们测试自己的专业技能和工具,同时也帮助web开发者更好地理解web应用安全防范的过程。DV…...
CSS相关记录
文章目录 backgroundposition文字displayflexjustify-contentalign-itemsflex-directionflex-wrap gridimportant transformtranslate(位移)scale(缩放)rotate(旋转)origin (旋转中心点)skew (倾斜 ) borde…...
Fedora40安装telnet-server启用telnet服务
Fedora40安装telnet-server启用telnet服务 安装 telnet-server sudo yum install telnet-server或 sudo dnf install telnet-server启用服务 fedora40 或 CentosStream9 不能用 yum或dnf安装xinetd, telnet-server 的服务名为: telnet.socket 启用 telnet.socket.service …...
Unity3D结合AI教育大模型 开发AI教师 AI外教 AI英语教师案例
自2022年底ChatGPT引爆全球之后,大模型技术便迎来了一段崭新的快速发展期,由其在GPT4.0发布后,AI与教育领域结合产品研发、已成为教育AI科技竞争的新高地、未来产业的新赛道、经济发展的新引擎和新产品的诞生地。 据不完全统计,目…...
lua 游戏架构 之 SceneLoad场景加载(一)
设计一个为BaseSceneLoad class,用于处理场景加载的相关操作 ,主要作用是提供了一个通用的场景加载框架,使得子类可以按照统一的接口进行场景加载操作。子类需要实现这些方法,以便在加载场景时能够正确地处理场景加载的各个阶段。…...
【linux深入剖析】命名管道 | 匿名管道与命名管道的区别 | system V共享内存
🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. 命名管道2. 创建命名管…...
Vite 常用插件配置:自动导入+自动注册组件+动态创建图标+设置组件名
创建 Vue3Vite 项目 创建 Vue3 项目 $ pnpm create vuelatest通过脚手架选择开启以下功能 ✔ Project name: … <your-project-name> ✔ Add TypeScript? … No / Yes ✔ Add JSX Support? … No / Yes ✔ Add Vue Router for Single Page Application development?…...
(leetcode学习)236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖…...
Zabbix监控系统:zabbix服务部署+基于Proxy分布式部署+zabbix主动与被动监控模式
一、Zabbix概述 1.1 简介 zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数,保证服务器系统的安全运营,提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix…...
【Vue实战教程】之 Vue Router 路由详解
Vue Router路由 1 路由基础 1.1 什么是路由 用Vue.js创建的项目是单页面应用,如果想要在项目中模拟出来类似于页面跳转的效果,就要使用路由。其实,我们不能只从字面的意思来理解路由,从字面上来看,很容易把路由联想…...
测试用例接口开发实战
测试用例接口开发实战 前言 在上一集,我们也大概完成了对Jmeter的二次开发的Demo版本的了解,我们接下来就要基于这个Demo来将Jmeter压测进行平台化。 那么这一集,我们讲一讲测试用例接口开发实战。 StressCaseController 我们的Controll…...
C#中压缩文件夹,及其内容
压缩包格式,本文主要用于说明如何使用代码 文件或文件夹压缩为 zip压缩包及其解压操作, 下面分两个版本进行实现 1.简单版本 bool DoCompressDirectoryInfo(string folderPath){try{var zipFilePath $"{folderPath}.zip";var directoryInfo …...
机器学习 | 回归算法原理——多项式回归
Hi,大家好,我是半亩花海。接着上次的最速下降法(梯度下降法)继续更新《白话机器学习的数学》这本书的学习笔记,在此分享多项式回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目,…...
力扣224【基本计算器】
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 1 < s.length < 3 * 105 s 由数字、‘’、‘-’、‘(’、‘)’、和 ’ ’ 组成 s 表示一个有效的…...
【Linux】HTTP 协议
目录 1. URL2. HTTP 协议2.1. HTTP 请求2.2. HTTP 响应 1. URL URL 表示着是统一资源定位符(Uniform Resource Locator), 就是 web 地址,俗称“网址”; 每个有效的 URL 可以通过互联网访问唯一的资源, 是互联网上标准资源的地址; URL 的主要由四个部分组成: sche…...
@Builder注释导致@RequestBody的前端json反序列化失败,HTTP400
项目里发生了一个bug,就是前端请求一个接口时候,报了HTTP 400 Bad Request 通常来说这个问题是前后端的参数没对齐,比如前端传了个String,但后端对应的是Integer。 所以我就排查了半天,结果没发现啥错误,…...
网络学习|如何理解服务的端口号
文章目录 1. 端口号的定义2. 端口号的分类3. 端口号的用途4. 注意事项5. 示例图解 后端面试中可能遇到的端口相关问题及答案1. 什么是端口号?为什么需要端口号?2. 知名端口(Well-Known Ports)有哪些,举例说明ÿ…...
《0基础》学习Python——第十八讲__爬虫/<1>
一、什么是爬虫 爬虫是一种网络数据抓取的技术。通过编写程序(通常使用Python),爬虫可以自动化地访问网页,解析网页内容并提取出所需的数据。爬虫可以用于各种用途,如搜索引擎的索引,数据分析和挖掘&#x…...
NFTScan 浏览器现已支持 .mint 域名搜索功能!
近日,NFT 数据基础设施 NFTScan 浏览器现已支持用户输入 .mint 域名进行 Mint Blockchain 网络钱包地址的搜索查询, NFTScan 用户能够轻松地使用域名追踪 NFT 交易,为 NFT 钱包地址相关的搜索查询功能增加透明度和便利性。 NFTScan explorer…...
Git基本原理讲解、常见命令、Git版本回退、Git抛弃本地分支拉取仓库最新分支
借此机会写篇博客汇总一下自己去公司实习之后遇到的一些常见关于Git的操作。 Git基本认识 Git把数据看作是对小型文件系统的一组快照,每次提交更新,或在Git中保存项目状态时,Git主要对当时的全部文件制作一个快照并保存这个快照的索引。同时…...
前端网页打开PC端本地的应用程序实现方案
最近开发有一个需求,网页端有个入口需要跳转三维大屏,而这个大屏是一个exe应用程序。产品需要点击这个入口,并打开这个应用程序。这个就类似于百度网盘网页跳转到PC端应用程序中。 这里我们采用添加自定义协议的方式打开该应用程序。一开始可…...
遇到not allow unquoted fieldName怎么办
前言 Exception in thread "main" com.alibaba.fastjson2.JSONException: not allow unquoted fieldName, offset 2, character , line 1, column 3, fastjson-version 2.0.25 { "data":null, "code":200, "msg":"成功"…...
IDEA安装并使用通义灵码
IDEA安装并使用通义灵码 通义灵码介绍安装通义灵码 通义灵码介绍 在数字革命的前沿,阿里云技术团队匠心独运,倾力打造“通义灵码”——一个融合尖端科技的智能编码助手,旨在革新软件工程的未来。 实时代码扩展 通义灵码具备深度理解代码脉络的…...
<数据集>AffectNet表情识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:29752张 标注数量(xml文件个数):29752 标注数量(txt文件个数):29752 标注类别数:7 标注类别名称:[anger,contempt,disgust,fear,happy,neutral,sad,surprise] 序号类…...
ThinkPHP对接易联云打印
引入composer包 composer require yly-openapi/yly-openapi-sdk <?phpnamespace app\common\library;use app\admin\model\yp\Order; use App\Api\PrintService; use App\Config\YlyConfig; use App\Oauth\YlyOauthClient; use think\Cache; use think\Config;class Yly {…...