区块链技术与应用 - 学习笔记2【密码学基础】
大家好,我是比特桃。本系列笔记只专注于探讨研究区块链技术原理,不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划,在“加快数字发展 建设数字中国”篇章中,区块链被列为“十四五”七大数字经济重点产业之一,迎来创新发展新机遇。
经科技部批复,国家区块链技术创新中心落地北京中关村国家自主创新示范区,并于2023年5月10日正式投入运行。
目录
区块链技术与应用 - 学习笔记1【引言】
(系列笔记更新中……更新完后将统一整合目录)
本文主要阐述加密学的相关内容,CryptoCurrency 本身其实并不加密。只是为了在分布式计算过程中,保障每个计算节点的权益。也为了满足区块链上数据不可篡改的特性,所以会使用密码学相关的内容来保障数据链的安全。
一、密码学基础
在中本聪撰写的《比特币:一种点对点的电子现金系统》中,就对密码学在区块链交易系统中的作用有着很好的诠释:用户的账户或者资产在区块链上就是使用密码学中数字签名算法的公钥进行表示的,可以这样说:拥有这个公钥对应私钥的人就对相应的账户或资产拥有控制权;当要将数字资产发送给下一个拥有者时,就需要使用对应私钥对整个交易进行数字签名,区块链的其他使用者通过公钥验证数字签名的合法性,从而可以确认该次转账是否经过资产所有者授权。
又比如在以太坊中的智能合约的地址就是SHA3哈希算法生成的,甚至就连合约状态存储的时候也用到SHA3散列算法,可以这样说密码学知识已经渗透到了区块链的方方面面。本文不会深入挖掘各个算法的具体的实现,只要理解在区块链系统中我们面临哪些问题,利用密码学的知识又是如何解决这些问题的即可。
从区块链整体框架来看,通过本文可以了解到如何在节点间建立一个安全的物理连接,保证节点间数据可信的传输,这也是区块链信任机器最基本的基石,同时也为后面涉及密码学相关的技术作为铺垫。
想象一下,如果我们不采用任何技术手段,在一条不加密的网络链路上传输信息可能会面临哪些问题呢?
- 窃听风险:黑客可能监听双方的通信链路,偷听双方的通信内容。
- 篡改风险:黑客可以随意修改双方的通信内容,双方无法正确的传递消息。
- 冒充风险:黑客可以冒充任意一个人的身份参与通信。
可以看到如果在一条不加密的网络上通信是无法保证信息的可靠传输的,在此基础上建立的应用也就没有可信之说。
为了解决上面的三个问题,我们就需要一套密码体系。
1.1 基本元素
通常一个密码体系由一个五元组组成,这个五元组的构成如下;
- 明文M:原始数据,待加密的数据;
- 密文C:对明文M进行一定变换或伪装后的输出;
- 密钥K:加密或解密中所使用的专门工具;
- 加密E:将明文M,通过密钥K变换得到密文C的过程;
- 解密D:将密文还原成明文M的过程;
一个密码系统的构建就是基于这个五元组{ M,C,K,E,D },无论是比特币,还是以太坊千亿美元市值的数字货币都是基于这个密码体系,甚至整个区块链系统都是基于这个密码体系展开。
需要特别注意的是并非所有的加密算法的安全性都可以从数学上得到证明,目前公认的高强度的加密算法和实现往往经过长时间各方面充分的实践和论证后,才被大家所认可,但是也绝非代表其不存在漏洞。因此自行设计和发明未经大规模验证的加密算法是一种不太明智的行为,即使不公开算法的加密过程,也很容易遭到破解,无法在安全性上得到保障。
实际上,密码学实现的安全往往是通过算法所依赖的数学问题来提供的,而非通过对算法实现的过程来进行保密的。
1.2 对称加密
对称加密是指进行明文到密文加密时采用的密钥和密文到明文解密时使的密钥是相同的。
对称加密算法的优点是加密速度快,保密强度高,适用于对大量数据进行加密的过程。但是由于双方都使用相同的密钥K,密钥的传输和管理就是一个很大的问题,如果传输过程
不安全可靠,密钥就无法传递,只能通过其它方法传递,比如邮件,电话,短信等方式,可是这些通信方式是否可靠还待商榷。为了解决这个问题一般需要借助迪菲-赫尔曼秘钥交换(Elliptic Curve Diffie–Hellman key Exchange)协议来完成密钥分发。
由于每一对发送方和接收方都需要使用一个密钥,在区块链这种需要大规模通信的网络中会产生大量的密钥,也会增加用户管理密钥的负担。
代表算法:DES,AES;
1.3 非对称加密
非对称加密是指进行明文到密文加密和密文到明文解密时使用不同的密钥,非对称加密在使用前首先要生成公私钥对,一个用于加密,一个用于解密,其中用于加密的密钥可以公开,称之为公钥(Public Key),用于解密的密钥需要严格保存不能公开,称之为私钥(Private Key)。
非对称加密解决了对称密钥传输难的问题,降低了密钥管理的难度,通信双方不需要通过建立一个安全的信道来进行密钥的交换,但是又引入了新的问题。
非对称加密算法的加解密速度慢于对称加密,不适合大量数据的加解密,性能比较差,同时因为公钥公开,如果有人用公钥加密数据发送给我,是无法判断发送者是谁的;
代表算法:RSA,椭圆曲线算法;
1.4 混合加密
混合加密同时使用了对称加密和非对称加密方法,对称加密的一个很大问题是通信双方如何将密钥传输给对方,为了安全,一般采用带外传输,也就是说如果加密通信是在网络中,那么密钥的传输就需要通过其他途径,如邮件,短信,即使如此也很难保证密钥传输的安全性。非对称加解密的最大优点是事先不需要传输密钥,但是速度慢,因此实际应用中,通常采用混合密码体制。
1.5 消息摘要
消息摘要就是采用单向哈希(Hash)函数将需要加密的明文“提取摘要”生成一串固定长度的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文提取摘要生成的密文其结果总是不同的,但是同样的明文产生的摘要是一致的。由于生成摘要的明文是没有任何限制的,但是得到的摘要却是定长的,必然就会导致有一些明文会产生相同的摘要,这种现象被称为”碰撞“。为了避免这种情况的产生哈希函数必须具备很好的抗碰撞性,意味着在现有的计算资源(包括时间、空间、资金等)下,找到一个碰撞是不可行的。
摘要算法就是产生信息摘要算法,它有一个特性,就是在输入信息中如果发生细微的改变,比如给变了二进制的一位,都可以改变散列值中每个比特的特性,导致最后的输出结果大相径庭,所以它对于检测消息或者密钥等信息对象中的任何微小的变化非常有用。可以归纳出消息摘要如下的四个特点;
- 输入长度是任意的,输出是固定的;
- 对每一个给定的输入,计算输出是很容易的;
- 给定H,找到两个不同的输入,输出同一个值在计算上不可行;
- 给定H和一个消息x,找到另一个不同的消息y,使它们散列到同一个值在计算上不可行;
常见的散列算法:MD5、SHA、SHA-256、SHA-512;
在本文中,经常会看到SHA-256算法,这个也是在比特币,以太坊中大量使用的摘要算法,SHA-256算法对任意的输入产生定长的32byte,256位的输出,为了更方便的展示,一般都会采用Hex
编码的方式来对结果进行编码。
以123为例,计算SHA-256后用Hex编码得到的结果是a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3。
哈希算法并不是一种加密算法,不能用于对信息的保护。但是哈希算法常用于对口令的保存上。例如用户登录网站需要通过用户名和密码来进行验证,如果网站后台直接保存了口令的明文,一旦发生了数据泄露后果就不堪设想。因为大多数用户都倾向于在多个网站使用相同的密码。利用哈希的特性,网站可以保存用户口令的哈希值,这样比较口令最终的哈希值即可,如果一致则证明口令是正确的。即使发生了数据泄露也很难根据单向哈希值推算出原始口令。
但是有时候由于用户口令的强度太低,只使用一些简单的字符串,比如123456等,攻击者可以通过对这些口令提前计算哈希,得到口令和哈希值的一种映射关系来达到破解的目的。为此了更多的提高安全性,网站一般会通过加盐(salt)的方式来计算哈希,不直接保存用户哈希而是通过口令加上一段随机字符(即“盐”)再计算哈希值,这样通过把哈希值和盐分开保存可以极大的提高安全性。
1.6 数字证书
数字证书是一种权威的电子证明,由权威公正的第三方认证机构(CA)签发,用来证明公开密钥拥有者的身份,其中包含了公钥信息、拥有者身份信息、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误,广泛用于涉及需要身份认证和数据安全的领域,简单来说就是证明这个公钥被谁拥有。
数字证书主要用来保证信息保密、身份确认、不可否认性、数据完整性,最为常见的格式是X.509
。
1.7 数字签名
在现实世界中,文件上手书签名已经长期被用为原作者的证明,或用来表示同意文件所列的条款。签名不可辩驳的事实是:
- 签名是不可伪造的,签名是签名者慎重签在文件上的证明。
- 签名是可信的。签名使文件的接受者相信文件已由签名者慎重签名。
- 签名是不可再用的。签名是文件的一部分,不择手段的人不能把签名移到不同的文件 上。
- 签名文件是不可能改变的。文件签名后,不能改变。
- 签名不能否认,签名和文件是一个物理事件,签名者以后不能宣布他或她没签名。
在实际上,上述叙述没有一个完全是真的。签名能被伪造,签名能从一张纸上剽窃来并移动另一处,签名后文件能坡改变。然而,因为欺骗的困难和俭测的出现,所以我们仍愿与这些问题一同生活。
要想在计算机上签名,有很多问题。首先,比特流容易拷贝。即使人的签名是难以伪造(例 如手写,签名的图形图像),但把一个文件的有效签名移动到另一个文件中是容易的。这种签名毫无意义。第二,签名后,仍容易修改文件,并不留下任何修改的痕迹。
数字签名(英语:Digital Signature,又称公钥数字签名)是一种功能类似写在纸上的普通签名、但是使用了公钥加密领域的技术,以用于鉴别数字信息的方法。一套数字签名通常会定义两种互补的运算,一个用于签名,另一个用于验证。通常来说用私钥签名,签名后的消息表示签名人对该消息的内容负责,公钥用来验证签名的正确性。数字签名使用了消息摘要和非对称加密技术,可以保证接受者能够核实发送者对消息的签名,发送者事后不能抵赖对消息的签名,接受者不能篡改报文内容和伪造对报文的签名。
举一个例子说明下整个过程,假设Alice向Bob发送一条消息,Alice首先对消息生成了一个消息摘要,生成完成后对该消息用私钥进行签名附带在消息的最后,然后将消息和签名发送给了Bob,Bob收到消息后用同样的算法生成消息摘要,然后拿Alice的公钥验证这个消息摘要,验证通过则表明消息确实是Alice发来的。Alice的公钥可以放在网站上让大家获得,或者发邮件等方式告知大家。
通过数字签名可以确保两点;
- 确认信息是由签名者发送;
- 确认信息从签发到接受没有被修改过,包括传输中的中间人修改。
数字签名的过程:
- 发送方要发送消息运用散列函数(MD5、SHA-1等)形成消息摘要;
- 发送方用自己的私钥对消息摘要进行加密,形成数字签名;
- 发送方将数字签名附加在消息后发送给接收方;
- 接受方用发送方的公钥对签名信息进行解密,得到消息摘要;
- 接收方以相同的散列函数对接收到的消息进行散列,也得到一份消息摘要;
- 接收方比较两个消息摘要,如果完全一致,说明数据没有被篡改,签名真实有效;否则拒绝该签名。
1)多重签名
多重签名(Multi Signature)是数字签名的一个重要应用方式,通常用于多个参与者对某个消息,文件和资产同时拥有签名权或者支付权的场景。比如在生活中一份文件有时需要多个部门联合签字后方可生效。根据签名顺序的不同,又将多重签名分为了两类,有序多重签名和广播多重签名,对于第一种多重签名方式来说,签名者多次签名是有一定的串行顺序的,而第二种方式则没有限制。 当数字资产需要经过多重签名确认后才能转移会极大的提高资产的安全性,恶意攻击者需要获得至少一个私钥才能盗用这些资产,同时也降低了用户无疑间泄露私钥所带来的风险和损失,因此多重签名在比特币脚本和以太坊智能合约中都有广泛的应用。
2)群签名
群签名(group signature)是由1991年,Chaum 和 Heyst首次提出群签名的概念,即某个群组内一个成员可以代表群组进行匿名的签名,签名可以证明来自于该群组,却无法确定来自于群组中的哪一个具体成员。群签名方案的关键是“群管理员”,它负责添加群成员,并能够在发生争议时揭示签名者身份。在一些群签名的设计方案中,添加成员和撤销签名匿名性的责任被分开,并分别赋予给群管理员和撤销管理员,但无论如何所有方案都应该满足基本的安全性要求。
3)环签名
环签名(ring signature)是由三位密码学家Ron Rivest,Adi Shamir和Yael Tauman在2001年首次提出的。在环签名中,签名者首先会选定一个临时的签名者集合,集合中包括签名者自身。然后签名者利用自己的私钥和集合中其他人的公钥就可以独立的产生签名,无需其他设置。签名者集合中的其他成员可能并不知道自己以及被包含在最终的集合签名集合中。环形签名的安全属性之一是,确定使用哪个组成员的密钥来生成签名应该在计算上不可行。环签名类似于组签名但在两个关键方面有所不同:第一,无法撤消单个签名的匿名性;第二,任何用户组都可以用作一个组。
4)盲签名
盲签名(blind signature)是在1982年由David Chaum提出的。签名者在无法看到原始内容的前提下对消息进行签名。盲签名可以实现对所签内容的保护,防止签名者看到原始的内容;另一方面盲签名还可以实现防止追踪,签名者无法将内容和签名结果进行对应。
二、BTC 的秘密
学习了上面这么多加密学的基础,终于来说到重点了。我们 BTC 其实主要用到了两个部分:
2.1 哈希
Hash(哈希)学过数据结构的同学应该了解Hash table,它其实就是将一个数据经过哈希运算后,可以得到一个的数值所映射代表。BTC 所使用的 Hash 算法 SHA-256(secure hash algorithm)满足了如下三个特性:
- Collision resistance 哈希碰撞
即:X ≠ Y ,H(X) ≠ H(Y)
通过鸽笼原理我们知道,如果不同的内容可以得到相同的 Hash 结果,那么我们称这个 Hash 函数是不满足可碰撞的。
区块链的上的数据被哈希加密后就成为了 digest,用来防止被篡改。
有一些哈希函数是没有办法做到 Collision resistance 的,有些可以。e.g. MD5,已经被破解。
- Hiding 不可逆
如果给定 Hash(X)、Hash(),无法反推出 X 则成为是不可逆的。通过这种不可逆的 Hash 函数,用来满足其数字的安全。
当然这也是一个很理想的情况,实际为了防止被人猜到,可以使用 H(X + nonce)
- puzzle friendly 没有投机取巧可言
在比特币系统中,还需要第三个性质Puzzle friendly,工作即是最好的证明。该性质要求哈希值计算事先不可预测,仅仅根据输入很难预测出输出。
BTC 在开拓一个新的区块的时候会有一个 Target 值,而这个值会经过这样的运算:H(block header) ≤ target。也就是说谁能第一个算出来就可以拿到这个区块的 BTC 奖励,所以只能不断的去尝试也就是我们常听到的挖K。所谓的挖K就是去尝试组合各种不同的数去做 Hash 运算,得到的结果和H(block header)对比。如果不对继续变数算,如果对了就代表暴力破解出了 Target ,算是挖K成功。
我们需要一个哈希值,存在于某一个范围内,只能通过不停运算查找出来。该性质保证了比特币系统中,只能通过“挖K”获得比特币。也就是说,该性质保证了工作量证明(POW)机制。
如果你算出来了就可以告诉周围小伙伴了,因为是Hash运算,即:Difficult to solve, but easy to verify. 所以很快大家就承认你就是这个区块的主人,你可以得到这个奖励。
2.2 签名
在 BTC 的世界里,万物皆是一等公民。包括开账户本身,只需要一个公钥和私钥即可(非对称加密)。
用户在区块链上发布一个交易,用私钥签名,大家用公钥查看,判定是否是同一个人。
这种非对称加密算法满足:A good source of randomness,用来防止暴力破解。所以很难通过生成大量的公私钥对来获取他人私钥。
相关文章:
区块链技术与应用 - 学习笔记2【密码学基础】
大家好,我是比特桃。本系列笔记只专注于探讨研究区块链技术原理,不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划,在“加快数字发展 建设数字中国”篇章中,区块链被列为“十四五”七大数字经济重点产业之一&#…...
制作Linux发行版安装镜像:复刻centos镜像安装ISO
制作Linux发行版安装镜像:复刻centos镜像安装ISO 我们平时经常下载Linux各个发行版,下载ISO,安装使用。那么ISO到底是如何制作的?安装过程是什么原理? 近来打算讲镜像制作的过程、原理,通过一个专栏分享一…...
【复习socket】每天40min,我们一起用70天稳扎稳打学完《JavaEE初阶》——29/70 第二十九天
专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点★✔ 蓝色文字表示:思路以及想法★✔ 如果大家觉得有帮助的话,感谢大家帮忙 点…...
postgresql-常用数学函数
postgresql-常用数学函数 案例 案例 --求余 1 select 5%2 as t; --绝对值 17.4 select abs(-17.4) as t2; -- 大于等于最小整数 -42 select ceil(-42.8) as t3; -- 小于等于的最大整数 42 select floor(42.3) as t4; -- 四舍五入 44 select round(43.6) as t5; -- 向零取整 12…...
Docker实战技巧(一):常用命令与最佳实践
一、原理 1、Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,它能直接访问物理设备,会给每一台虚拟机分配内存、CPU、网络、磁盘等资源,也可以确保虚拟机对应的硬…...
使用CUDA计算GPU的理论显存带宽
文章目录 一、显存带宽和理论显存带宽1. 显存带宽2. 理论显存带宽1)计算公式2)举例 二、利用CUDA计算理论显存带宽 一、显存带宽和理论显存带宽 1. 显存带宽 显存带宽是指显存和GPU计算单元之间的数据传输速率。 显存带宽越大,意味着数据传…...
npm install依赖冲突解决办法
今天npm的时候发现报错,原来是依赖冲突了 npm后面加上这个指令就可以顺利的安装依赖了。问题主因就是不同开发用了不同版本node导致依赖版本不同,出现了成功冲突,这是段指令;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但…...
植物大战僵尸各种僵尸攻略
前言 此文章为“植物大战僵尸”专栏中的009刊(2023年9月第八刊),欢迎订阅。版权所有。 注意: 1.本博客适用于pvz无名版; 2.pvz指植物大战僵尸(Plants VS Zonbies); 3.本文以耗费低做标准&am…...
Scrum敏捷开发企业实战培训
课程简介 Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程,面向研发管理者、项目经理、产品经理、研发团队等,旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏…...
uniapp 下拉框数据回显的问题
问题 : 现在是下拉框数据回显不了, 绑定的v-model 原因 : uniui 下拉框数据绑定要是 value text 这种格式的 解决办法: 将获取到的后端数据 转换为 需要的格式 ,再进行绑定 下拉框的数据 遍历...
使用php 获取时间今天、明天、昨天时间戳的详解
使用php获取时间今、明天、昨天时间戳 <?php echo "今天:".date("Y-m-d").""; echo "昨天:".date("Y-m-d",strtotime("-1 day")), ""; echo "明天:".date("Y-m-d&qu…...
IIS解析漏洞复现
文章目录 漏洞复现总结 漏洞复现 打开虚拟机,在C:\inetpub\wwwroot\8000_test目录下放一个phpinfo.php文件: 在服务器管理器中打开IIS管理器,选择处理映射程序: 点击添加模块映射: 配置映射模板,php文件…...
生活随笔-吐槽篇
前言 😘个人主页:曲终酣兴晚^R的小书屋🥱 😕作者介绍:一个莽莽撞撞的🐻 💖专栏介绍:日常生活&往事回忆 😶🌫️每日金句:被人暖一下就高热&…...
vscode debug python launch.json添加args不起作用
问题 为了带入参数调试python 程序,按照网上搜到的教程配置了lauch.json文件,文件中添加了"args": [“model” “0” “path”] {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: h…...
信息化发展23
加密解密 1 、加密技术包括两个元素: 算法和密钥。 2 、发信者将明文数据加密成密文, 然后将密文数据送入网络传输或存入计算机文件, 而且只给合法收信者分配密钥。合法收信者接收到密文后, 实行与加密变换相逆的变换,…...
FlinkCDC 菜鸟教程-文章目录
系列文章目录 背景篇 环境篇 准备一台已经安装了 Docker 的 Linux 或者 MacOS 电脑。准备教程所需要的组件版本对应关系安装环境检查 工具篇 flinkkibana 概念篇 Docker 介 绍Docker Compose 介 绍Kibana介 绍 实践篇 演示: Mysql CDC 导入 Elasticsearch 启动服务准备…...
从零开始-与大语言模型对话学技术-gradio篇(4)
前言 本文介绍「星火杯」认知大模型场景创新赛中的落选项目- AI命理分析系统,属于个人娱乐练手。总结提炼了往期文章精华并发掘出新的知识。 包括本地部署版本和Web在线版本,两种打包方式基于 半自动化使用.bat手动打包迁移python项目 如何把 Gradio …...
OpenCV项目实战(1)— 如何去截取视频中的帧
前言:Hello大家好,我是小哥谈。针对一段视频,如何去截取视频中的帧呢?本节课就给大家介绍两种方式,一种方式是按一定间隔来截取视频帧,另一种方式是截取视频的所有帧。希望大家学习之后能够有所收获&#x…...
「程序员必须掌握的算法」动态规划「上篇」
动态规划详解 动态规划 (Dynamic Programming) 是一种算法思想,用于解决一些复杂的问题。本文将介绍动态规划的分类、概念和经典例题讲解。 动态规划的分类 动态规划可以分为以下两种类型: 0/1背包问题:该问题是动态规划的一种基本类型。…...
什么是Linux
什么是Linux? 不知道大家是什么时候开始接触Linux,我记得我是大三的时候,那时候通过国嵌、韦东山的教学视频,跟着搭bootloader,修改内核,制作根文件系统,一步步,视频真的很简单&…...
学习笔记|定时器|STC中断|定时器时间计算|STC32G单片机视频开发教程(冲哥)|第十一集:定时器的作用和意义
文章目录 1.定时器的作用和意义定时器中断定时器是定时器和计数器的统称。 2.STC32G单片机定时器使用原理2.1 先设置功能为定时器/计数器(本质都是加法计数器)2.2、在定时器模式下,设置不分频或者12分频∶Tips:选择不分频还是12分频2.3、定时器的工作模式…...
第28节-PhotoShop基础课程-图层操作
文章目录 前言1.像素图层2.删除 Delete3.合并 Ctrl E4.盖印 Ctrl Shift Alt5.图层顺序-拖动就可以6.编组-Ctrl G 管理图层-分类存放7.锁定图层-背景图层8.不透明度9.查找图层 2.智能图层1.能保持图片放大缩小(Ctrl T)的时候不丢失分辨率2.和滤镜配合使…...
CGAL 闵可夫斯基和(Minkowski Sums)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设给定两个集合 A , B ∈ R d A,B∈R^d A,B...
Layui快速入门之第二节布局容器(固定宽度与完整宽度)
目录 一:固定宽度 二: 完整宽度 一:固定宽度 将栅格放入一个带有 class"layui-container" 的特定容器中,以便在小屏幕以上的设备中固定宽度,让列可控(两侧有留白效果) <!--固定宽度(两侧有留白效果)--&…...
异地容灾系统和数据仓库中数据同步的设计软件的功能模型
( 1)初始同步模块 该模块主要是在表进行初始同步时使用的;它能够根据实际需要生成物化视图 及其索引的创建语句,并完成表的初始同步。如果没有特别的要求,则调用普通初 始同步子模块进行目的端表的初始同步ÿ…...
分布式调度 Elastic-job
分布式调度 Elastic-job 1.概述 1.1什么是任务调度 我们可以思考一下下面业务场景的解决方案: 某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算…...
第 2 章 线性表(学生健康登记表实现)
1. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #define INFEASI…...
第三周晨考自测(3.0)
1.获取元素的偏移量 offsetLeft和offsetTop 分别获取的是元素元素左边的偏移量和上边的偏移量 语法:元素对象.offsetLeft /元素对象.offsetTop 返回值:就是该元素对应的偏移量,是一个具体的数字 offsetLeft:该元素相对于参考…...
C++ 结构体
前文 C中的结构体是一种非常有用的数据类型,它允许我们将不同的变量组合在一起,形成一个自定义的数据结构。 结构体在C中的应用非常广泛,它可以用来表示和管理各种实体、对象或数据的属性。比如,在一个学生管理系统中,…...
如何使用聊天GPT自定义说明
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 OpenAI ChatGPT正在席卷全球。一周又一周,更新不断提高您可以使用这种最先进的语言模型做什么的标准。 在这里,我们深入研究了OpenAI最近在ChatGPT自定义指令上发布的公告。此功能最初以测试版…...
音乐设计网站推荐/免费网站推广优化
deepin Linux Deepin 是一个基于 DEB 包管理的一个独立操作系统,和那些 Ubuntu(下个大版本是基于debian开发) 的衍生版仅仅只是换主题、调整ISO预置的软件包不同。Linux Deepin 在大量吸纳 Debian/Ubuntu 仓库的软件包之外,构建了更大的 Deep…...
武汉品牌网站建设公司哪家好/seo全网优化指南
let arr [{a:1},{a:2},{a:3},{a:4},{a:5}];// 1.while循环 let sum 0; let num 1; while(num < 1){ if (num 5) { num; continue // containue必须写在后面,否则会进入死循环,因为在while中continue之后,是执行条件判断 // break // 支持break …...
武汉建设局网站/企业官网
/*** 该示例展示了创建不同样式的 GeoODLine*/ var app new THING.App(); app.background [0, 0, 0]THING.Utils.dynamicLoad(https://www.thingjs.com/uearth/uearth.min.js, function () {// 创建一个地图var map app.create({type: Map,attribution: Google,style: {nigh…...
建设网站比较好的公司/一个新手怎么去运营淘宝店铺
android开发中利用handler制作一个打地鼠小游戏发布时间:2020-11-25 15:21:11来源:亿速云阅读:136作者:Leah这期内容当中小编将会给大家带来有关android开发中利用handler制作一个打地鼠小游戏,文章内容丰富且以专业的…...
网站建设案例咨询/网站seo站外优化
创建服务器连接 exec sp_addlinkedserver 连接名(自定义), , SQLOLEDB , IP地址 exec sp_addlinkedsrvlogin 连接名(自定义), false ,null, 用户名, 密码 删除连接 exec sp_dropserver 连接名 , droplogins通过这种方式就可以查询其他服务器上sqlserver中的数据表,当然,…...
网站如何后台管理/有域名后如何建网站
随着工作的深入,越发发现需要系统的重新梳理Oracle SQL相关知识,这里新开篇幅,力求做到言简意赅。 1.SQL简介 SQL:Structured Query Language,结构化查询语句。 结构化查询语句,有时也被称为第四代语言。…...