【跟小嘉学习区块链】一、区块链基础知识与关键技术解析

news2024/11/18 3:26:38

系列文章目录

【跟小嘉学习区块链】一、区块链基础知识与关键技术解析

文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 一、区块链基础
    • 1.1、区块链的来龙去脉
      • 1.1.1、区块链技术起源
      • 1.1.2、核心技术发展脉络
    • 1.2、比特币产生的背景与现状
      • 1.2.1、现行货币体系存在的问题
      • 1.2.2、数字货币的概念
      • 1.2.3、设计数字货币的问题核心问题:防伪和双花问题
      • 1.2.3、比特网络
      • 1.2.4、防伪方案:公钥、密钥和比特币地址
      • 1.2.5、记账方案:UTXO(Unspend Transaction Output)
        • 1.2.5.1、传统的记账方案:基于账号的记账方式(Account based)
        • 1.2.5.2、UTXO(Unspend Transaction Output):未花费的交易输出
      • 1.2.6、区块结构
        • 1.2.6.1、宏观结构
        • 1.2.6.2、微观结构
        • 1.2.6.3、Merkle树
      • 1.2.7、挖矿原理
        • 1.2.7.1、区块的产生流程
        • 1.2.7.2、工作量证明机制(Pow, Poor of Work)
        • 1.2.7.3、挖矿原理:Pow过程
      • 1.2.8、比特币存在问题
    • 1.3、区块链概念与产业现状
      • 1.3.1、区块链技术演进
        • 1.3.1.1、区块链技术演进
        • 1.3.1.2、联盟链
        • 1.3.1.3、区块链产品
        • 1.3.1.4、区块链的三种形态
      • 1.3.2、区块链概念与特征
        • 1.3.2.1、区块链定义
        • 1.3.2.2、区块链的三大特征
        • 1.3.2.3、智能合约
      • 1.3.3、区块链关键技术
        • 1.3.3.1、区块链技术架构
        • 1.3.3.2、共识层
      • 1.3.4、了解区块链产业现状
        • 1.3.4.1、市场容量估算
        • 1.3.4.2、发展态势
        • 1.3.4.3、区块链产业生态图谱
        • 1.3.4.4、区块链技术社区
        • 1.3.4.5、国内区块链组织
  • 总结

前言

本系列章节主要讲解区块链原理以及开发区块链应用;


一、区块链基础

1.1、区块链的来龙去脉

1.1.1、区块链技术起源

  • 分布式系统:弱中心化是区块链思想的核心;
  • P2P网络:为区块链提供了网络层基础架构
  • 共识算法:区块链技术 的核心,实现了数据的一致存储;
  • 密码学:为区块链数据的传输和访问安全性、完整性和无法抵赖性提供了技术支撑
  • 分布式数据库:区块链的物理载体
  • 智能合约:为区块链应用提供了无限可能
  • 电子现金 将近20多年的解决方案研发基础

1.1.2、核心技术发展脉络

  • 1982年Lamport提出了拜占庭将军问题(Byzantine Generals Problem),这是分布式计算领域的问题,是把建立具有容错性的分布式系统,即在一个存在故障节点和错误信息的分布式系统中保证正常节点不死,保持信息传递的一致性,对于这个问题的解答在理论上和实际上都具有很高的价值;
  • 1985年提出的椭圆曲线密码学(Elliptic curve cryptography,ECC),第一次将椭圆曲线用于密码学中,为区块链的安全性提供了保障;
  • 1990年出现的eCash实现了一个不可追溯的密码学网络支付系统;
  • 1990年Lamport针对自己在1982年提出的拜占庭将军问题,给出了一个解决方案,即Paxos算法,Paxos共识算法能在分布式系统中达成高容错性的全网一致性。
  • 1991年出现的时间戳技术可以保证数位文件的安全;
  • 1992年基于ECC提出了性能更好的椭圆曲线数位签章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA)
  • 1997年发明了hashcash算法,在此之后出现了工作量证明(Proof of Work,POW)的共识算法,其借鉴的就是hashcash算法,依赖散列函数的不可逆性达到容易被验证,但是很难被破解的特性,POW是公有链中最常见的共识算法,包括比特币在内的区块链系统都是基于这种算法。
  • 1998年发表匿名的分布式电子现金系统B-money引入了工作量证明机制;
  • 2005年提出了可重复使用的工作量证明机制(Randomized Proof of Work,RPOW);
  • 2008年中本聪发表《比特币:一种点对点的电子现金系统》比特币;

1.2、比特币产生的背景与现状

先有的比特币系统,再有的区块链理论,所以我们先来了解比特币的产生背景,以及比特币的现状。那么为什么第一个区块链系统会是以数字货币的形式出现呢?为什么比特币会获得成功?

1.2.1、现行货币体系存在的问题

  1. 政府信用担保发行(货币滥发会引起通货膨胀和贬值);
  2. 银行体系提供金融服务(金融危机);

金融危机频繁出现导致人们对政府不信任,加速了以电子货币寻求解决方案的步伐。比特币的诞生正值全球金融危机,人们对政府和银行对于货币的管理能力十分失望。

2008年,中本聪(Satoshi Nakamoto),发表了《比特币:一种点对点的电子现金系统》,比特币系统作为一种去中心化的系统,不受任何政府控制,发行总量恒定,总共将发行2100万个比特币,目前已经生成1600多万,目前总市场规模在1400+亿美元左右;

2009年1月3日,中本聪创造第一个区块,即创世区块。泰晤士报头版标题《TheTimes 03/Jan/2009 Chancellor on brink of secondbailout for banks》,这一句话被写在创始区块之中被永久保留下来。

比特币的出现也是一个比较神秘的事件,到目前为止,中本聪是谁仍然是一个谜,有人说他是日本人,有人说他是美国人,也有人说他是外星人,也有人说他不是一个人。

比特币系统是迄今为止最成功的区块链应用,10年来没有出现过任何一次服务暂停,任何交易均可被追溯,但是交易者地址是可公开的,但是身份却是匿名的;

1.2.2、数字货币的概念

比特币是第一种数字货币,那么究竟什么样的货币才是数字货币呢?无现金系统是否是数字货币?

在当前国内金融环境中,无现金交易已经十分普及,包括支付宝、微信支付等支付手段,包括传统的银行卡刷卡,这些都是无现金支付。

一般来说,我们现在提到我们现在提到的数字货币都是密码货币,这里提到的支付宝、微信支付或者银行卡可以认为是电子货币,本质上还是对应法币,和数字货币有本质的区别。

电子货币民间数字货币
定价方式以主权货币计价以其自身价值计价
价值属性受到货币政策影响由供需决定(在中国被视为大宗商品)
发行央行算法
记账多个账本(需要对账确保数据一致性,在复杂商业活动中会是很大的工作量)单个账本(数据一致性由区块链平台底层保证,减少工作量和出差错的可能)
流通信息流和资金流分离信息流和资金流合一
具体案例微信支付、支付宝钱包等比特币

1.2.3、设计数字货币的问题核心问题:防伪和双花问题

这两个问题其实也是其他的货币系统所要解决的问题,只是在不同的货币系统中有不同的解决方案和解决难度。

  • 防伪:主要是身份的真实性、载体的真实性;在传统的银行系统中,你的交易要通过各种识别是你本人,然后进行交易,并在店里消费的时候,需要校验现金货币的真实性。
  • 双花(Double spending):所谓双花就是双重支付,如果同一笔钱(数字货币)被重复支付两次,可以被拷贝复制的问题;

在传统的货币系统中,都是存在中心化的记账机构,你需要证明你是账户的所有者,银行在一笔交易完成前会冻结这笔资金,确保不会被重复使用。

但是在区块链的世界里,并不存在这样的中心化记账机构,所有的数据是通过全部节点共同维护的,在这种条件下解决防伪和双花问题面临的难度会比传统环境中更加高,更加复杂。

1.2.3、比特网络

比特币网络
比特币区块链网络,我们可以看到网络是有不同的节点组成的,每个节点可以简单理解成是安装了比特币客户端软件的计算机,我们平常使用的计算机也可以安装软件后作为节点加入挖矿,但是很少有人这样做,这样做很难挖到比特币,即使挖到了币了也不够电费,专业的需要专门的挖矿机器来参与才有可能有利可图。

  • 矿工:以挖坑为目的的参与比特币网络的是矿工
  • 普通用户:参与比特币转账和支付,不参与挖矿的为普通用户

1.2.4、防伪方案:公钥、密钥和比特币地址

防伪方案主要是解决发送到区块链网络中的消息可信性的问题,这里主要使用到了密码学里面的非对称加密算法。

  • 私钥:私有的密钥,只有持有者本人知道,不对外公开(256位随机数字),唯一证明使用其拥有比特币的凭证,如果不小心遗失了这个私钥,那么这个私钥对应的比特币就永远也找不回来了。
  • 公钥:对外发布的,任何人都可以获得,通过椭圆曲线乘法可以从私钥计算得到公钥;
  • 地址:可公开的精简字符串

1.2.5、记账方案:UTXO(Unspend Transaction Output)

1.2.5.1、传统的记账方案:基于账号的记账方式(Account based)

比特币的记账方案与传统的金融系统的记账方案不太一样,传统的金融系统是基于账户进行记账的,用户首选需要在银行里开一个账户,资金的转入转出都是跟账户关联,在进行查询的也是会使用账户进行查询余额、转账记录等历史交易。

现在银行、信用卡、证券交易系统、互联网第三方支付系统,其核心都是基于账户(account based)的设计,由关系数据库支撑。

1.2.5.2、UTXO(Unspend Transaction Output):未花费的交易输出

在比特币系统中,比特币的区块链账本里面记录的是一笔又一笔的交易。记账方案为UTXO(未花费过的交易输出),每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。 一般来说,每笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是UTXO。

UTXO(Unspend Transaction Output)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念,交易构成了一组链式结构,所有的合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。
UTXO
比特币交易遵守如下几个规则

  1. 除了coinbase交易之外,所有的资金来源都必须来自前面某个或几个交易的UTXO,就像接水管一样,一个接一个,资金就在交易之间流动起来了;
  2. 任何一笔交易的交易输入总量必须等于交易输出总量,等式两边必须配平;

我们在比特币钱包中所看到的账户余额,实际上是钱包通过扫描区块链并聚会所有属于该用户的UTXO计算得来的。

UTXO记录方式的优点

  • 可追溯,可以方便的查询到比特币的来龙去脉
  • 用户不会在银行随便开很多账户,在比特币的世界里,用户会开很多账户, 很多时候,账户只使用一次就被抛弃,所以在比特币系统存在很多废弃的账户,如果要使用账户作为查询的入口,那么每个节点都要保存所有账户的信息,会消耗的非常大的存储空间,非常不经济,而且没有必要;

1.2.6、区块结构

1.2.6.1、宏观结构

区块链底层都是以链式的方式进行存储,一个接着一个区块,每个区块都会指向前一个区块,这也是区块链名字的由来。在比特币系统里大概每10分钟就会产生一个区块,新生成的区块会被挂到链条的最后。
宏观结构
在图上,我们可以看到区块4之后产生了两个区块,都是指向区块4,这个就叫做分叉,基于POW共识算法的区块链系统都会发生这种事情,简单的说,分叉是不同的节点分别产生了新的区块引起的,具体的细节,在我们学习了POW原理的时候,才能理解。

1.2.6.2、微观结构

围观结构
每个区块由两部分组成:区块头和区块(block),区块体比较简单,内容是交易数据的列表,区块头包含版本信息、随机数(跟区块产生有关)、前一个区块Hash、时间戳、Merkle值(记录了所有交易的hash)。

我们都知道区块链有一个很重要的特性:**不可篡改性,**如果你修改了某个区块的哪怕一个bit的值都会导致这个区块的Hash值与原来完全不同。

1.2.6.3、Merkle树

Markle树
按照中本聪的原文,SPV(支付验证)会在区块链查找交易(为了验证支付),并且需要连接到一个全节点来检索必要的数据,这个机制允许在运行一个全节点的情况下有多个轻钱包,为了实现PSV,是需要有一个方式来检查是否一个区块包含了某笔交易,而无需下载整个区块,这就是Markle树所要完成的事情。

从根节点形成的过程可以看出根节点的hash值综合了所有叶子的节点的hash,也就是说任何一个叶子节点的交易记录被改动任何一个bit都会导致根节点的hash完全不同。所以知道了根节点的所有hash值之后,就可以验证了这笔交易是否为这个区块所包含的交易。

在比特币的网络里不是每个节点都有能力存储完整的区块链数据,受限于存储空间的限制,有些节点只下载了区块头,利用Merkle树的性质也可以验证交易的真实性。

1.2.7、挖矿原理

1.2.7.1、区块的产生流程

区块产生流程
首先在区块链比特币网络里,用户在持续发起交易发送到各个节点,每个节点收到交易后会把记录存放在自己的Memory pool中,在验证了交易记录的真实性之后,节点就会尝试把这些记录打包成一个新的区块,如果打包能成功,节点就会这个打包结果(也就是新的区块)发送给其他节点,其他节点在收到新的区块,其他节点也会进行验证,如果确认没有问题,就会把这个区块加入到区块链中,并且已经打包到新区块中的交易从自己的Memory pool中剔除。

对于打包成功的节点来说,他就是挖出了新的区块,能够获得一定数额的比特币的奖励。

1.2.7.2、工作量证明机制(Pow, Poor of Work)

挖矿原理:Pow
整个共识算法的核心,整个共识算法的核心是哈希函数在进行计算,函数的输入是区块头的一些值(包括markle值、时间戳、随机数等),输出的是一个固定长度的数值,但是并不是每一个输出都是一个正确的解(正确的解有一个固定的范围,要求前面几位都是0,0的数量越多,求解的难度就越大,每多一个0,计算的难度翻倍)。究竟有几个0是动态调整的,如果比特币网络算力不断的增加,0的个数也会随之变多,最终达到大概每十分求出一个解的频率。

在这个哈希函数,只有随机数是变化的,所以挖矿的过程就是不断变化随机数的值来求得哈希函数结果,直到最终算出一个正确的解。

1.2.7.3、挖矿原理:Pow过程

生成交易,并与其他所有准备打包进区块的交易组成交易列表,通过Merkle Tree 算法生成Merkle Root Hash。

把Merkle Root Hash及其他相关字段组装成区块头,将区块头的80字节数据(Block Header)作为工作量证明的输入。

不停的变更区块头中的随机数即nonce的数值,并对每次变更后的区块头做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

1.2.8、比特币存在问题

  • 资源消耗严重:所有基于PoW算法都存在都问题,因为pow算法要求挖矿来保证系统的安全,参与的算力越多,系统越安全,但是另一外面,比特币网络消耗的电力已经超过许多中小型国家,有些人觉得这些计算并没有产生实际的价值,纯属浪费;
  • 分叉问题:因为比特币网络中每个节点都在无时不刻挖矿,有可能会在同一时间或者相近时间内不同节点(A,B)都求得正确的解并发送给其他节点,由于网络传输有时间差,有些节点会记录A的结果继续计算,而另外一些节点会记录B的结果继续计算,这样就会形成两条不同的链,一般来说分叉不会带来太大的问题,因为在一段时间后,比特币网络会选择比较长都链作为主链,各个节点又会回到主链上进行挖矿;
  • 算力垄断:著名的51%攻击,假如有一个组织可以控制一半以上的比特币网络,那么它就有能力操控整个比特币网络,比如它可以从任何一个历史节点开始重新挖矿,一定时间后就会超过原来主链的长度,意味着这个节点之后都所有交易都被推翻了,如果出现这种攻击,那么对区块链系统就是灾难性的;
  • 效率问题:比特币系统每秒只能进行7笔交易,吞吐量非常小;

1.3、区块链概念与产业现状

1.3.1、区块链技术演进

1.3.1.1、区块链技术演进

从上述的讲解过程中,我们可以了解到区块链的最早来源于比特币系统,可以说先有比特币再有区块链的概念。

很多人把发币和区块链也混为一谈,但并不是所有的区块链系统都需要发币的。区块链是当前的风口,大家对区块链的期望也很高,认为它是下一代的基础设施、价值传输的网络,有可能改造、甚至颠覆各个行业。

但是比特币系统显然本身并不具备这种能力。

以太坊是第二代区块链系统,也是公有链,所以具有公有链的一般特征。与比特币相比,以太坊最大的改变是可编程能力,意味着其能够支持的应用场景更加丰富了。这种通用化的编程能力是通过智能合约来实现的。

智能合约是一种图灵完备的编程语言,支持丰富的程序逻辑,我们可以通过智能合约来开发区块链上的票据应用、应收账款应用、业务节点等各种产品。从性能指标上来看,以太坊也有很大的提升。最后,以太坊也是需要发币的,一般来说公有链系统都是需要发币的,因为公有链吸引用户参与需要一种激励机制,这种激励一般都是通过发币来实现,如果公有链不发币很难激励用户参与进来。

2015年出现了新一代的区块链系统,区块链技术已经跟特定的公有链脱离开来,大家发现区块链技术的潜力远远不止发行数字货币,可以被应用到金融、医疗、贸易、版权等各个行业。但在企业级应用的场景中,对区块链平台的要求不同于公有链,比如在共识机制上要求有更高的确定性,而不需要通过挖矿竞争,在性能上、隐私保护等方面要求也会更高,在这种要求下,新一代的区块链系统就应运而生了。

1.3.1.2、联盟链

联盟链的典型代表:开源平台Fabric趣链(Hyperchain)
联盟链主要提供企业级的解决方案。
联盟链的核心技术:准入机制、高效共识、权限控制、隐私保护等。

我们讲到区块链的时候都会讲到去中心化,但确切地来说去中心化是公有链的特征。

1.3.1.3、区块链产品

对比

1.3.1.4、区块链的三种形态
  • 公有链:公有链是去中心化的系统,主要解决陌生人生之间的信任问题,其次它是完全公开的,任何节点都可以自由加入参与共识,另外还有账本完全公开、匿名性等特点;
  • 联盟链:联盟链是多中心化的系统,联盟链是监管友好的技术,监管机构也可以作为一个节点参与进来,从而实现穿透性的监管。参与人为预先根据一定特征所设定。系统内交易确认节点为实现设定,并通过共识机制确认,一般不需要数字货币提供交易验证机制。联盟链容易进行节点权限设定,拥有更高应用可扩展性。联盟链可大幅降低异地结算成本和时间,比现有系统更简单、效率更高,同时继承去中心化的优点减轻垄断压力(例如全球银行加入R3),采用PBFT共识算法
  • 私有链:私有链没有去中心化,但是分布式特点,中心控制者指定可参与和进行交易验证成员范围,系统内不需要虚拟货币提供奖励(例:中国银行可以联合其全球各城市分行,完成内部数据传输被封、转账等业务)

对比2

1.3.2、区块链概念与特征

1.3.2.1、区块链定义

区块链是一种以非堆成加密技术对交易进行数字签名,通过共识机制达成多节点一致(拜占庭容错),数据以链式区块形式组织存储的分布式账簿系统。

1.3.2.2、区块链的三大特征
  • 多中心:多个参与机构在区块链网络中相互监督,实时对账
  • 自动化:智能合约自动化经济活动与契约;
  • 可信任:记录不可篡改,无需第三方可信中介;
1.3.2.3、智能合约

智能合约是内嵌于区块链上的自定义程序逻辑,智能合约可以持有数字货币,在所有验证节点上运行,当满足一定条件,区块中的程序逻辑会被触发执行合同约定的指令(比如资产清算、赔偿、交割等)。

现在商业合作一般都是通过法律协议来约定权利和义务,规定甲方和乙方在规定时间内应该做什么事情,违约后应该怎么样处理这些条款,现在这些协议都是文本式,具体的执行还是大量依赖人工介入,比如一方拖欠款项,另一方需要向法院起诉获得赔偿,具体执行又要涉及到公安、财产征信机构等各种服务机构,效率比较低,成本比较高,但是如果未来区块链成为普遍的基础设施以后,商业合作就可以通过智能合约来进行,智能合约可以说是可执行的法律协议,可以极大的提升社会协作的效率。

1.3.3、区块链关键技术

1.3.3.1、区块链技术架构

区块链技术架构

1.3.3.2、共识层
  • POW(工作量证明机制)诞生于1997年Adam Back设计出Hashcrash系统,它最初被创造出来的目的是为了应用于邮件系统中预防漫天遍地的垃圾邮件的
  • **POS(股权证明机制)**不需要用户在不受限制的空间中找到一个随机数,而是要求人们证明货币数量的所有权;
  • **DPOS(股份授权机制)**由比特股(Bitshares)项目组发明,类似于现代企业董事会制度,比特股系统将代币持有者称为股东,由股东投票选出101名代表,然后由这些代表负责生成和验证区块;
  • **PBFT(实用拜占庭容错算法)**最初出现在MIT的Miguel和Barbara Liskov的学术论文中,该算法可以应用于吞吐量不大但需要处理大量事件的数字资产平台

1.3.4、了解区块链产业现状

1.3.4.1、市场容量估算
  • 区块链技术可以简化证券的清算结算,每年为美国资本市场节省20亿美元,为全球资本市场节省60亿美元——高盛投资研究部门
  • 采用区块链技术,全球每年可以节约5500亿美金的支付成本——Jeremy Almond
  • 区块链技术有机会为企业改善结算延迟以及提高系统的安全性,而区块链应用市场的规模最终将以万亿美元计算。——Blythe Masters
1.3.4.2、发展态势
  • 国家战略:截止到2017年末,全球9成的政府已经或者正在规划区块链产业发展与投资。
  • 银行体系:2016年以来,全球各国银行在区块链业务上的布局不断加快,从地域上来看,欧洲存在区域一体化的政经同盟而具备技术推广应用上的天然优势,美国在技术方面也走在前列,中国近一年多也密集上线银行区块链应用。
  • 企业:大公司和创业公司纷纷入局,上百个公司加入区块链联盟。
  • 知识产权:截止到2018年Q1,产生了3000+的区块链相关专利;
1.3.4.3、区块链产业生态图谱

区块链产业生态图谱

1.3.4.4、区块链技术社区
  • 比特币网络:经典区块链网络
  • HyperLeger:
    • IBM等大型企业推动的开源联盟,Linux基金会
    • Top down design,for business
  • Ehtereum:
    • 天才和极客推动开源公有链平台
    • Bottom up design
1.3.4.5、国内区块链组织
  • 北京
    • 中国区块链研究联盟
    • 中关村区块链产业发展联盟
    • ChinaLedger
    • 区块链微金融产业联盟
    • 中国区块链技术和产业发展论坛
    • 中国区块链技术创新与应用联盟
    • 金融区块链合作联盟
    • 金融区块链技术创新与应用联盟
    • 北京区块链合作联盟
    • 北京区块链技术应用协会
    • 可信区块链联盟
  • 上海
    • 上海间市场区块链技术研究组
    • 陆家嘴区块链金融发展联盟
    • 上海协同创新中心(区块链产业基地)
    • 上海区块链技术应用联盟
  • 深圳
    • 金融区块链合作联盟
    • 前海国际区块链联盟
    • 中国深圳FinTech数字货币联盟
    • 区块链研究院
  • 杭州
    • 浙江省区块链技术应用协会
    • 杭州区块链技术与应用联合会
  • 其他
    • 中国互联网金融协会区块链研究工作组
    • 广州市区块链产业协会
    • 贵阳区块链发展联合组织

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP代理与VPN:网络代理技术的比较

HTTP代理和VPN是两种常见的网络代理技术,它们可以帮助用户隐藏自己的IP地址、保护网络隐私、绕过网络限制等。本文将介绍HTTP代理和VPN的定义、工作原理、优缺点以及使用场景。 一、HTTP代理 HTTP代理是一种通过代理服务器转发网络请求的技术。当用户发起网络请求时…

c语言进阶部分详解(经典回调函数qsort()详解及模拟实现)

大家好!上篇文章(c语言进阶部分详解(指针进阶2)_总之就是非常唔姆的博客-CSDN博客)我已经对回调函数进行了初步的讲解和一个简单的使用事例,鉴于篇幅有限没有进行更加详细的解释,今天便来补上。…

echarts的Y轴设置为整数

场景:使用echarts,设置Y轴为整数。通过判断Y轴的数值为整数才显示即可 yAxis: [{name: ,type: value,min: 0, // 最小值// max: 200, // 最大值// splitNumber: 5, // 坐标轴的分割段数// interval: 100 / 5, // 强制设置坐标轴分割间隔度(取本Y轴的最大…

【算法与数据结构】JavaScript实现十大排序算法(二)

文章目录 关于排序算法快速排序堆排序计数排序桶排序基数排序 关于排序算法 稳定排序: 在排序过程中具有相同键值的元素,在排序之后仍然保持相对的原始顺序。意思就是说,现在有两个元素a和b,a排在b的前面,且ab&#xf…

Windows使用JEnv实现JDK多版本管理

Windows使用JEnv实现JDK多版本管理 JEnv安装Jenv命令 JEnv安装 JEnv是一个帮助我们管理多个JDK安装的工具,并将每个代码库配置为使用特定的JDK版本,而不必改变JAVA_HOME环境变量. 下载链接 windows版 windows版地址JEnvGithub地址: JEnv Jenv命令 添…

如何查看电脑详细配置、型号?这4个技巧 yyds!

知道自己电脑的配置和型号,可以更合理合适的去安装软件,避免出现电脑系统和软件不兼容问题。 了解详细配置信息可以检测一下电脑组件是否是二手的。 从解决实际问题的角度,推荐这4个技巧: 1、右键“此电脑” 2、设备管理器查看…

AJAX的奇妙之旅(1)基础知识

一、简介 AJAX(Asynchronous JavaScript and XML)是一种使用现有标准的新方法。它是一种用于创建快速动态网页的技术。AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。AJAX 不需要任何浏览器插件&a…

【操作系统笔记一】程序运行机制CPU指令集

内存地址 指针 / 引用 指针、引用本质上就是内存地址,有了内存地址就可以操作对应的内存数据了。 不同的数据类型 字节序 大端序(Big Endian):字节顺序从低地址到高地址顺序存储的字节序小端序(Little Endian&#…

stm32之智能垃圾桶实战

之前用过51做过一个垃圾桶的小项目,这里用32重新搞了一下。视频的效果和之前一样,可参考这个垃圾桶效果 。 一、项目描述(同51) 项目主要是模拟不用手动打开垃圾桶盖,而进行自动操作。自动打开的条件如下&#xff1a…

基于微信小程序的学生选课系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言学生小程序端的主要功能有:教师的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 &#x1f4…

PHP自动识别采集何意网址文章正文内容

在做PHP采集内容时,用过querylist采集组件,但是这个插件采集页面内容时,都必须要写个采集选择器。这样比较麻烦,每个文章页面都必须指定一条采集规则 。就开始着手找一个插件可以能自动识别任意文章url正文内容并采集的&#xff0…

完整答题小程序源码/支持流量主/激励广告强点(答题小程序模板+题库)

源码简介: 完整答题小程序源码/支持流量主/激励广告强点(答题小程序模板题库),完整答题小程序源码有题库,无加密,带激励广告强制点击可提升广告收益。是积分激励的小程序,作为答题小程序开发,是很实用的操…

分库分表MySQL

目录 Mycat入门 分片配置 分片配置(配置Mycat的用户以及用户的权限) 启动服务 登录Mycat Mycat配置 schema.xml 1.schema标签:配置逻辑库,逻辑表的相关信息 1-1.核心属性 1-2.table标签 2.datanode标签:配置数据节点的相关信息 核心属性 3.datahost标签:配置的是节…

机器学习笔记 - 维度诅咒的数学表达

1、点之间的距离 kNN分类器假设相似的点也可能有相同的标签。但是,在高维空间中,从概率分布中得出的点往往不会始终靠近在一起。 我们可以用一个简单的例子来说明这一点。 我们将在单位立方体内均匀地随机绘制点(如图所示),并研究该立方体内测试点的 k 个最近邻将占用多少…

全套配置细节:缺省路由实验配置

1、实验目的 掌握默认路由的适用场合和配置方法 2、实验拓扑 默认路由的配置 3、实验步骤 &#xff08;1&#xff09;配置网络连通性如下。 1&#xff09;R1 的配置如下 &#xff1a; <Huawei>system-view Enter system view, return user view with CtrlZ. [Huaw…

MySQL学习笔记6

MySQL数据库如何存放数据&#xff1f; 注明&#xff1a;我们平常说的MySQL&#xff0c;其实主要指的是MySQL数据库管理软件。 一个MySQL DBMS可以 同时存放多个数据库&#xff0c;理论上一个项目就对应一个数据库。 如博客项目blog数据库&#xff0c;商城项目shop数据库&#…

【剑指Offer】23.链表中环的入口结点

题目 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a; n ≤ 10000&#xff0c;1 < 结点值 < 10000 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度O(n) 例如…

CTF 全讲解:[SWPUCTF 2021 新生赛]jicao

文章目录 参考环境题目index.phphighlight_file()include()多次调用&#xff0c;多次执行单次调用&#xff0c;单次执行 $_POST超全局变量HackBarHackBar 插件的获取 $_POST打开 HackBar 插件通过 HackBar 插件发起 POST 请求 GET 请求查询字符串超全局变量 $_GET JSONJSON 数据…

使用xshell操控VM下的centos虚拟机时,解压出现以下错误:“unable to detect graphics environment”

这个错误产生的原因是因为使用xshell远程操控了 解决的方法是&#xff1a;别用xshell远程操控centos虚拟机了&#xff0c;直接通过VM去操控centos虚拟机就行了&#xff0c;在VM中直接调出centos虚拟机的终端&#xff0c;然后输入你要输入的指令即可。

华为云云耀云服务器L实例评测|centos7.9在线使用cloudShell下载rpm解压包安装mysql并开启远程访问

文章目录 ⭐前言⭐使用华为cloudShell连接远程服务器&#x1f496; 进入华为云耀服务器控制台&#x1f496; 选择cloudShell ⭐安装mysql压缩包&#x1f496; wget下载&#x1f496; tar解压&#x1f496; 安装步骤&#x1f496; 初始化数据库&#x1f496; 修改密码&#x1f4…