Java手写简单Merkle树
Java手写Merkle树代码
package com.blockchain.qgy.component;import com.blockchain.qgy.model.MerkleTreeNode;
import com.blockchain.qgy.util.SHAUtil;import java.util.*;public class MerkleTree<T> {//merkle树private List<MerkleTreeNode<T>> list;//根节点private MerkleTreeNode<T> root;public MerkleTree(List<T> nodes){createMerkleTree(nodes);}/*** function 初始化merkle树* @param nodes: 数据集合*/private void createMerkleTree(List<T> nodes) {//判断入参if (Objects.isNull(nodes) || nodes.size() == 0) return;list = new ArrayList<>();//创建叶子节点List<MerkleTreeNode<T>> leafList = createLeafList(nodes);list.addAll(leafList);//创建父级节点List<MerkleTreeNode<T>> parents = new ArrayList<>(leafList);//循环创建直到找到根节点do {List<MerkleTreeNode<T>> temp = new ArrayList<>(parents);temp = createParentList(temp);parents = temp;list.addAll(parents);}while (parents.size() > 1);root = parents.get(0);}/*** function 初始化父亲节点* @param leafList:叶子节点* @return 父节点*/private List<MerkleTreeNode<T>> createParentList(List<MerkleTreeNode<T>> leafList) {//判断入参if (Objects.isNull(leafList) || leafList.size() == 0) return new ArrayList<>();List<MerkleTreeNode<T>> parents = new ArrayList<>();int length = leafList.size();for(int i = 0;i < length - 1; i += 2){MerkleTreeNode<T> parent = createParentNode(leafList.get(i),leafList.get(i+1));parents.add(parent);}//当节点数为奇数时,单独进行处理if ((length & 1) == 1) {MerkleTreeNode<T> parent = createParentNode(leafList.get(length - 1),null);parents.add(parent);}return parents;}/*** function 生成一个父节点* @param left:左节点* @param right:右节点* @return 父节点*/private MerkleTreeNode<T> createParentNode(MerkleTreeNode<T> left, MerkleTreeNode<T> right) {MerkleTreeNode<T> parent = new MerkleTreeNode<>();parent.setLeft(left);parent.setRight(right);String hash = left.getHash();if(!Objects.isNull(parent.getRight())) {hash = SHAUtil.sha256BasedHutool(hash.concat(parent.getRight().getHash()));}parent.setHash(hash);parent.setName("无人签名");parent.setData((T) new Object());return parent;}/*** function 初始化叶子节点* @param nodes:数据集合* @return merkle的叶子节点*/private List<MerkleTreeNode<T>> createLeafList(List<T> nodes) {//判断入参if (Objects.isNull(nodes) || nodes.size() == 0) return new ArrayList<>();List<MerkleTreeNode<T>> leafList = new ArrayList<>();for(T curr : nodes) {MerkleTreeNode<T> node = new MerkleTreeNode<>(curr);leafList.add(node);}return leafList;}public void printfTree() {Collections.reverse(list);MerkleTreeNode<T> root = list.get(0);Queue<MerkleTreeNode<T>> queue = new LinkedList<MerkleTreeNode<T>>(){{offer(root);}};printfTree(queue,1);}public void printfTree(Queue<MerkleTreeNode<T>> queue,Integer floor) {Queue<MerkleTreeNode<T>> currQueue = new LinkedList<>();System.out.println("第"+floor+"层--------------------------------------------------------------------------------------------------------------------------");while (!queue.isEmpty()) {MerkleTreeNode<T> poll = queue.poll();System.out.println(poll.toString());if(!Objects.isNull(poll.getLeft())) currQueue.offer(poll.getLeft());if(!Objects.isNull(poll.getRight())) currQueue.offer(poll.getRight());}if (!currQueue.isEmpty()) printfTree(currQueue,floor+1);}public List<MerkleTreeNode<T>> getList() {return list;}public MerkleTreeNode<T> getRoot() {return root;}public void setList(List<MerkleTreeNode<T>> list) {this.list = list;}public void setRoot(MerkleTreeNode<T> root) {this.root = root;}}
package com.blockchain.qgy.model;import com.blockchain.qgy.util.SHAUtil;public class MerkleTreeNode<T> {//左节点private MerkleTreeNode<T> left;//右节点private MerkleTreeNode<T> right;//区块数据private T data;//节点hash值private String hash;//数字签名private String name;public MerkleTreeNode() {}public MerkleTreeNode(T data) {this.data = data;this.hash = SHAUtil.sha256BasedHutool(data.toString());this.name = "无人签名";}public MerkleTreeNode(T data, String name){this.data = data;this.hash = SHAUtil.sha256BasedHutool(data.toString());this.name = name;}public MerkleTreeNode<T> getLeft() {return left;}public void setLeft(MerkleTreeNode<T> left) {this.left = left;}public MerkleTreeNode<T> getRight() {return right;}public void setRight(MerkleTreeNode<T> right) {this.right = right;}public T getData() {return data;}public void setData(T data) {this.data = data;}public String getHash() {return hash;}public void setHash(String hash) {this.hash = hash;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "MerkleTreeNode:\n" +"name:" + name + ";\n" +"data:" + data + ";\n" +"------------\n";}
}
注意:这里用了SHAUtil工具类,该部分代码链接如下:
SHAUtil代码
测试代码
package com.blockchain.qgy.test;import com.blockchain.qgy.component.MerkleTree;
import com.blockchain.qgy.model.MerkleTreeNode;
import org.testng.annotations.Test;import java.util.Arrays;
import java.util.List;public class MerkleTreeTest {@Testpublic void Test(){List<String> contents = Arrays.asList("星","极","天","下","第","一");MerkleTree<String> stringMerkleTree = new MerkleTree<>(contents);stringMerkleTree.printfTree();MerkleTreeNode<String> root = stringMerkleTree.getRoot();System.out.println("root:"+root);System.out.println("hash:"+root.getHash());}
}
结果:
"C:\Program Files\Java\jdk1.8.0_261\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\idea\IntelliJ IDEA 2020.2.1\lib\idea_rt.jar=55223:D:\idea\IntelliJ IDEA 2020.2.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\idea\IntelliJ IDEA 2020.2.1\lib\idea_rt.jar;D:\idea\IntelliJ IDEA 2020.2.1\plugins\testng\lib\testng-rt.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\rt.jar;D:\项目\区块链\target\classes;C:\Users\86153\Desktop\java架包\org\testng\testng\6.8.7\testng-6.8.7.jar;C:\Users\86153\Desktop\java架包\junit\junit\4.10\junit-4.10.jar;C:\Users\86153\Desktop\java架包\org\hamcrest\hamcrest-core\1.1\hamcrest-core-1.1.jar;C:\Users\86153\Desktop\java架包\org\beanshell\bsh\2.0b4\bsh-2.0b4.jar;C:\Users\86153\Desktop\java架包\com\beust\jcommander\1.27\jcommander-1.27.jar;C:\Users\86153\Desktop\java架包\org\yaml\snakeyaml\1.12\snakeyaml-1.12.jar;C:\Users\86153\Desktop\java架包\org\mockito\mockito-all\1.9.5\mockito-all-1.9.5.jar;C:\Users\86153\Desktop\java架包\com\xiaoleilu\hutool-all\3.0.9\hutool-all-3.0.9.jar;C:\Users\86153\Desktop\java架包\com\google\crypto\tink\tink\1.2.0\tink-1.2.0.jar;C:\Users\86153\Desktop\java架包\com\amazonaws\aws-java-sdk-core\1.11.166\aws-java-sdk-core-1.11.166.jar;C:\Users\86153\Desktop\java架包\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\86153\Desktop\java架包\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\86153\Desktop\java架包\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\86153\Desktop\java架包\com\amazonaws\aws-java-sdk-kms\1.11.166\aws-java-sdk-kms-1.11.166.jar;C:\Users\86153\Desktop\java架包\com\amazonaws\jmespath-java\1.11.166\jmespath-java-1.11.166.jar;C:\Users\86153\Desktop\java架包\com\fasterxml\jackson\core\jackson-databind\2.6.7.1\jackson-databind-2.6.7.1.jar;C:\Users\86153\Desktop\java架包\com\fasterxml\jackson\core\jackson-annotations\2.6.0\jackson-annotations-2.6.0.jar;C:\Users\86153\Desktop\java架包\com\google\api-client\google-api-client\1.22.0\google-api-client-1.22.0.jar;C:\Users\86153\Desktop\java架包\com\google\oauth-client\google-oauth-client\1.22.0\google-oauth-client-1.22.0.jar;C:\Users\86153\Desktop\java架包\com\google\http-client\google-http-client\1.22.0\google-http-client-1.22.0.jar;C:\Users\86153\Desktop\java架包\org\apache\httpcomponents\httpclient\4.0.1\httpclient-4.0.1.jar;C:\Users\86153\Desktop\java架包\org\apache\httpcomponents\httpcore\4.0.1\httpcore-4.0.1.jar;C:\Users\86153\Desktop\java架包\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\86153\Desktop\java架包\commons-codec\commons-codec\1.3\commons-codec-1.3.jar;C:\Users\86153\Desktop\java架包\com\google\http-client\google-http-client-jackson2\1.22.0\google-http-client-jackson2-1.22.0.jar;C:\Users\86153\Desktop\java架包\com\fasterxml\jackson\core\jackson-core\2.1.3\jackson-core-2.1.3.jar;C:\Users\86153\Desktop\java架包\com\google\apis\google-api-services-cloudkms\v1-rev9-1.22.0\google-api-services-cloudkms-v1-rev9-1.22.0.jar;C:\Users\86153\Desktop\java架包\com\google\guava\guava\25.0-jre\guava-25.0-jre.jar;C:\Users\86153\Desktop\java架包\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\86153\Desktop\java架包\org\checkerframework\checker-compat-qual\2.0.0\checker-compat-qual-2.0.0.jar;C:\Users\86153\Desktop\java架包\com\google\errorprone\error_prone_annotations\2.1.3\error_prone_annotations-2.1.3.jar;C:\Users\86153\Desktop\java架包\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\86153\Desktop\java架包\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;C:\Users\86153\Desktop\java架包\com\google\auto\service\auto-service\1.0-rc4\auto-service-1.0-rc4.jar;C:\Users\86153\Desktop\java架包\com\google\auto\auto-common\0.8\auto-common-0.8.jar;C:\Users\86153\Desktop\java架包\com\google\protobuf\protobuf-java\3.3.0\protobuf-java-3.3.0.jar;C:\Users\86153\Desktop\java架包\org\json\json\20170516\json-20170516.jar;D:\idea\IntelliJ IDEA 2020.2.1\plugins\testng\lib\jcommander-1.27.jar" com.intellij.rt.testng.RemoteTestNGStarter -usedefaultlisteners false -socket55222 @w@C:\Users\86153\AppData\Local\Temp\idea_working_dirs_testng.tmp -temp C:\Users\86153\AppData\Local\Temp\idea_testng.tmp
[TestNG] Running:
C:\Users\86153\AppData\Local\JetBrains\IntelliJIdea2020.2\temp-testng-customsuite.xml
第1层------------------------------------------------------------------------------------------------------------------
MerkleTreeNode:
name:无人签名;
data:java.lang.Object@b684286;
------------第2层------------------------------------------------------------------------------------------------------------------
MerkleTreeNode:
name:无人签名;
data:java.lang.Object@880ec60;
------------MerkleTreeNode:
name:无人签名;
data:java.lang.Object@3f3afe78;
------------第3层------------------------------------------------------------------------------------------------------------------
MerkleTreeNode:
name:无人签名;
data:java.lang.Object@7f63425a;
------------MerkleTreeNode:
name:无人签名;
data:java.lang.Object@36d64342;
------------MerkleTreeNode:
name:无人签名;
data:java.lang.Object@39ba5a14;
------------第4层------------------------------------------------------------------------------------------------------------------
MerkleTreeNode:
name:无人签名;
data:星;
------------MerkleTreeNode:
name:无人签名;
data:极;
------------MerkleTreeNode:
name:无人签名;
data:天;
------------MerkleTreeNode:
name:无人签名;
data:下;
------------MerkleTreeNode:
name:无人签名;
data:第;
------------MerkleTreeNode:
name:无人签名;
data:一;
------------root:MerkleTreeNode:
name:无人签名;
data:java.lang.Object@b684286;
------------hash:4e8da83f3ee3cb2ddb2d5dec5724a0c01bb4f6f48d2f7c3dd46f51158b26b5f4
===============================================
Default Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
Process finished with exit code 0
相关文章:
Java手写简单Merkle树
Java手写Merkle树代码 package com.blockchain.qgy.component;import com.blockchain.qgy.model.MerkleTreeNode; import com.blockchain.qgy.util.SHAUtil;import java.util.*;public class MerkleTree<T> {//merkle树private List<MerkleTreeNode<T>> lis…...
vue之pinia组件的使用
1、搭建pinia环境 cnpm i pinia #安装pinia的组件 cnpm i nanoid #唯一id,相当于uuid cnpm install axios #网络请求组件 2、存储读取数据 存储数据 >> Count.ts文件import {defineStore} from piniaexport const useCountStore defineStore(count,{// a…...
升级到Mac15.1后pod install报错
升级Mac后,Flutter项目里的ios项目运行 pod install报错, 遇到这种问题,不要着急去百度,大概看一下报错信息,每个人遇到的问题都不一样。 别人的解决方法并不一定适合你; 下面是报错信息: #…...
力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)
让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。进一步转化成容量为重量总喝一半的背包最多可以装多少质量的石头。这样就转化成了背包问题。 最后求结果时,我们所最多能装的时dp[target],那另一…...
CSS 图像、媒体和表单元素的样式化指南
CSS 图像、媒体和表单元素的样式化指南 1. 替换元素:图像和视频1.1 调整图像大小示例代码:调整图像大小 1.2 使用 object-fit 控制图像显示示例代码:使用 object-fit 2. 布局中的替换元素示例代码:Grid 布局中的图像 3. 表单元素的…...
寒武纪MLU370部署deepseek r1
文章目录 前言一、平台环境准备二、模型下载三、环境安装四、代码修改五、运行效果 前言 DeepSeek-R1拥有卓越的性能,在数学、代码和推理任务上可与OpenAI o1媲美。其采用的大规模强化学习技术,仅需少量标注数据即可显著提升模型性能,为大模…...
Spring的AOP的JoinPoint和ProceedingJoinPoint
Spring的AOP的JoinPoint 在Spring AOP中,JoinPoint 是一个核心接口,用于表示程序执行过程中的一个连接点(如方法调用或异常抛出)。它提供了访问当前被拦截方法的关键信息的能力。以下是关于 JoinPoint 的详细说明: 一…...
每日一道算法题
题目:单词接龙 II 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则: 每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的…...
Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
Java小白入门教程:两大类型的修饰符以及示例
目录 一、访问控制修饰符 1、default 就是啥都不写的那种 2、private 私有 3、public 公开 4、protected 受保护的 二、非访问控制修饰符 1、static 静态 2、final 最终 3、abstract 抽象 4、synchronized 锁 5、transient 瞬态 6、volatile 易变 一、访问控制修饰符…...
正则表达式入门
入门 1、提取文章中所有的英文单词 //1.先创建一个Pattern对象,模式对象,可以理解成就是一个正则表达式对象 Pattern pattern Pattern.compile("[a-zA-Z]"); //2.创建一个匹配器对象 //理解:就是 matcher匹配器按照p…...
云原生(五十二) | DataGrip软件使用
文章目录 DataGrip软件使用 一、DataGrip基本使用 二、软件界面介绍 三、附件文件夹到项目中 四、DataGrip设置 五、SQL执行快捷键 DataGrip软件使用 一、DataGrip基本使用 1. 软件界面介绍 2. 附加文件夹到项目中【重要】 3. DataGrip配置 快捷键使用:C…...
如何成为一名 Python 全栈工程师攻略
## 从零基础到全栈工程师:Python 学习路线(细化版) **目标:** 掌握 Python 编程,并能独立开发全栈应用。 **学习路线:** ### 第一阶段:Python 基础 (4-6 周) **目标:** 掌握 Pyt…...
无需云端服务器: 三步实现DeepSeek大模型本地化部署deepseek、Ollama和Chatbox
🎉无需云端!三步实现DeepSeek大模型本地化部署😎 还在为云端AI服务的高昂费用而苦恼?是否总担心数据隐私会在云端泄露?别愁啦!DeepSeek R1——这款与OpenAI o1性能相媲美的开源大模型,结合Olla…...
mysql教程
MySQL 教程 一、简介 MySQL 是一个开源的关系型数据库管理系统,广泛应用于各种规模的项目中。以下是一些基础知识和常用操作。 二、安装与启动 安装:根据操作系统选择合适的安装包进行安装。启动:通过命令行或服务管理工具启动 MySQL 服务…...
【自学笔记】JavaWeb的重点知识点-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 JavaWeb知识点一、基础概念二、项目结构三、Tomcat服务器四、数据库连接(JDBC)五、前端技术六、高级技术 总结 以下是JavaWeb知识点的MD格式…...
项目升级Sass版本或升级Element Plus版本遇到的问题
项目升级Sass版本或升级Element Plus版本遇到的问题 如果项目有需求需要用到高版本的Element Plus组件,则需要升级相对应的sass版本,Element 文档中有提示,2.8.5及以后得版本,sass最低支持的版本为1.79.0,所升级sass、…...
[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型
Paper Card 论文标题:Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者:Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…...
char和varchar的区别、varchar(?)中问号部分的含义、索引的作用
char和varchar的区别 char是固定长度类型,当输入字符不满设定的固定长度时依旧占用固定长度的空间,补充空字节。 最大长度为255个字符 优点:效率高,在涉及索引和排序时缺点:占用空间使用场景:存储密码的…...
.NET9增强OpenAPI规范,不再内置swagger
ASP.NETCore in .NET 9.0 OpenAPI官方文档ASP.NET Core API 应用中的 OpenAPI 支持概述 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/overview?viewaspnetcore-9.0https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/ope…...
qsort应用
每天都会收到ai个礼物,到第n天的时候,然然发现他的宿舍被礼物搞得一团糟,所以然然打算到超市买一个柜子装礼物。但是超市有m个柜子,每个柜子都有不同的容量bi,然然想知道每个柜子最多可以装多少天的礼物(可…...
仿真设计|基于51单片机的贪吃蛇游戏
目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现(protues8.7) 程序(Keil5) 全部内容 资料获取 具体实现功能 利用单片机8*8点阵实现贪吃蛇游戏的控制。 仿真演示视频: 51-基于51单片机的贪吃蛇游…...
Linux内核中的页面错误处理机制与按需分页技术
在现代操作系统中,内存管理是核心功能之一,而页面错误(Page Fault)处理机制是内存管理的重要组成部分。当程序访问一个尚未映射到物理内存的虚拟地址时,CPU会触发页面错误异常,内核需要捕获并处理这种异常,以决定如何响应,例如加载缺失的页面、处理权限错误等。Linux内…...
Baklib推动企业知识管理创新与效率提升的全面探讨
内容概要 在当今数字化转型的背景下,有效的知识管理显得尤为重要。知识是企业的核心资产,而传统的管理方式往往无法充分发挥这些知识的价值。因此,企业亟需一种高效、灵活的解决方案来应对这一挑战。Baklib作为一款先进的企业级知识管理平台…...
NLP自然语言处理通识
目录 ELMO 一、ELMo的核心设计理念 1. 静态词向量的局限性 2. 动态上下文嵌入的核心思想 3. 层次化特征提取 二、ELMo的模型结构与技术逻辑 1. 双向语言模型(BiLM) 2. 多层LSTM的层次化表示 三、ELMo的运行过程 1. 预训练阶段 2. 下游任务微调 四、ELMo的…...
计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【编译原理实验二】——自动机实验:NFA转DFA并最小化
本篇适用于ZZU的编译原理课程实验二——自动机实验:NFA转DFA并最小化,包含了实验代码和实验报告的内容,读者可根据需要参考完成自己的程序设计。 如果是ZZU的学弟学妹看到这篇,那么恭喜你,你来对地方啦! 如…...
Hive:复杂数据类型之Map函数
Map函数 是Hive里面的一种复杂数据类型, 用于存储键值对集合。Map中的键和值可以是基础类型或复合类型,这使得Map在处理需要关联存储信息的数据时非常有用。 定义map时,需声明2个属性: key 和 value , map中是 key value 组成一个元素 key-value, key必须为原始类…...
C++ 中的引用(Reference)
在 C 中,引用(Reference)是一种特殊的变量类型,它提供了一个已存在变量的别名。引用在很多场景下都非常有用,比如函数参数传递、返回值等。下面将详细介绍 C 引用的相关知识。 1. 引用的基本概念和语法 引用是已存在…...
密码学的数学基础1-整数 素数 和 RSA加密
数学公式推导是密码学的基础, 故开一个新的课题 – 密码学的数学基础系列 素数 / 质数 质数又称素数。 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数࿰…...
Java锁自定义实现到aqs的理解
专栏系列文章地址:https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标: 理解锁,能自定义实现锁通过自定义锁的实现复习Thread和Object的相关方法开始尝试理解Aqs, 这样后续基于Aqs的的各种实现将能更好的理解 目录 锁的…...
STM32-时钟树
STM32-时钟树 时钟 时钟...
android 圆形弹窗摄像头开发踩坑——源码————未来之窗跨平台操作
一、飘窗刷脸,拍照采用飘窗 刷脸认证安卓接口采用飘窗具有在不干扰用户主要操作的前提下以醒目方式引导用户完成认证,且能灵活定制样式以提升用户体验和认证效率的优点 二、踩坑只有一个扇形 <?xml version"1.0" encoding"utf-8&quo…...
markdown公式特殊字符
个人学习笔记 根号 在 Markdown 中,要表示根号 3,可以使用 LaTeX 语法来实现。常见的有以下两种方式: 行内公式形式:使用一对美元符号 $ 将内容包裹起来,即 $\sqrt{3}$ ,在支持 LaTeX 语法渲染的 Markdow…...
Web-3.0学习路线
方向学习内容✅ 区块链基础区块链、智能合约、共识机制✅ 智能合约Solidity / Rust(Ethereum / Solana)✅ 前端React.js, Next.js, Web3.js, ethers.js✅ 后端Node.js, Python, Golang(链上数据)✅ 存储IPFS, Arweave, Filecoin&a…...
【算法设计与分析】实验5:贪心算法—装载及背包问题
目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握贪心算法求解问题的思想;针对不同问题,会利用贪心算法进行问题建模、求解以及时间复杂度分析&#x…...
使用 cmake
使用前注意 : CMake是一种跨平台的构建系统,它用于管理软件构建过程,尤其适合多语言、多配置的项目。CMake不直接构建软件,而是生成特定构建工具(如Makefile或Visual Studio项目)所需的配置文件。 如果仅仅使用 qt 编…...
万物皆有联系:驼鸟和布什
布什?一块布十块钱吗?不是,大家都知道,美国有两个总统,叫老布什和小布什,因为两个布什总统(父子俩),大家就这么叫来着,目的是为了好区分。 布什总统的布什&a…...
PHP实现混合加密方式,提高加密的安全性(代码解密)
代码1: <?php // 需要加密的内容 $plaintext 授权服务器拒绝连接;// 1. AES加密部分 $aesKey openssl_random_pseudo_bytes(32); // 生成256位AES密钥 $iv openssl_random_pseudo_bytes(16); // 生成128位IV// AES加密(CBC模式)…...
分层多维度应急管理系统的设计
一、系统总体架构设计 1. 六层体系架构 #mermaid-svg-QOXtM1MnbrwUopPb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QOXtM1MnbrwUopPb .error-icon{fill:#552222;}#mermaid-svg-QOXtM1MnbrwUopPb .error-text{f…...
FFmpeg源码:av_base64_decode函数分析
一、引言 Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于log2 646,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个…...
算法随笔_30: 去除重复字母
上一篇:算法随笔_29:最大宽度坡_方法3-CSDN博客 题目描述如下: 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例 1: …...
fpga系列 HDL:XILINX Vivado Vitis 高层次综合(HLS) 实现 EBAZ板LED控制(上)
目录 创建工程创建源文件并编写C代码C仿真综合仿真导出RTL CG导出RTL错误处理: 创建工程 创建源文件并编写C代码 创建源文件(Souces下的hlsv.h和hlsv.cpp,Test Bench下的test_hlsv1.cpp): hlsv1.h #ifndef HLSV1 #define HLSV1 #include &l…...
企业微信SCRM推动企业数字化转型实现高效客户管理与营销效益提升
内容概要 在当今数字化转型的大背景下,企业微信SCRM逐渐成为推动企业高效客户管理和提升营销效益的重要工具。说到SCRM,首先要了解它的定义。SCRM即社交化客户关系管理,通过整合社交媒体与客户管理,帮助企业更好地理解和服务客户…...
C++ 7
vector 底层原理和扩容过程 底层原理 ● vector 是 C 标准库中的一个容器,可以看作是一个动态数组,它的大小可以根据元素的增加而增长。它通过在堆上分配一段连续的内存空间存放元素,支持时间复杂度为 O(1 ) 的随机访问。 ● vec…...
论文阅读(七):贝叶斯因果表型网络解释遗传变异和生物学知识
1.论文链接:Bayesian Causal Phenotype Network Incorporating Genetic Variation and Biological Knowledge 摘要: 在分离群体中,数量性状基因座(QTL)定位可以确定对表型有因果效应的QTL。这些方法的一个共同特点是Q…...
数据库之PostgreSQL详解
一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议,这个协议基本和MIT开源协议一样,说人话,就是你可以对PostgreSQL进行一些封装&a…...
计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
可被electron等调用的Qt截图-录屏工具【源码开放】
1. 工具功能简介: (1)、QT5.15.2截图工具(exe)可单独使用或嵌入IM(嵌入方法参照:https://gitee.com/lykiao/yfscreenshot_release) (2)、支持通过Windows消息通知截图成功或取消 (3)、支持圆形、矩形、线条…...
【Python蓝桥杯备赛宝典】
文章目录 一、基础数据结构1.1 链表1.2 队列1.3 栈1.4 二叉树1.5 堆二、基本算法2.1 算法复杂度2.2 尺取法2.3 二分法2.4 三分法2.5 倍增法和ST算法2.6 前缀和与差分2.7 离散化2.8 排序与排列2.9 分治法2.10贪心法1.接水时间最短问题2.糖果数量有限问题3.分发时间最短问题4.采摘…...