- 博客(177)
- 收藏
- 关注
原创 通过Java操作IPFS实现上传与下载
本文介绍IPFS的环境搭建,并通过Java作为客户端完成对文件上传和下载功能。环境信息如下:系统:Mac M1IPFS版本:go-ipfs_v0.10.0_darwin-arm64.tar.gz构建:采用SpringBoot构建项目1 IPFS环境搭建下载IPFS# go-ipfsIPFS官网:https://dist.ipfs.io/解压并启动IPFS服务# 1....
2022-12-29 15:20:21
3439
11
原创 Fabric1.4 手动实现 byfn 全流程
完成 Fabric 1.4 环境搭建后,可以调用 first-network 的 byfn.sh 程序来验证是否环境搭建成功。该shell脚本实际上就是搭建了4个peer节点,1个order,1个cli的组网,之后通过链码的安装,实例化和调用来验证环境是否搭建成功。但我们已经对其中的配置和流程较为模糊。为此,我们仿照byfn脚本的内容完成了手动的全流程实现,对配置和组网细节进行深入了解,便于之后...
2022-12-08 08:34:58
390
原创 Java运行时进程指定类数据段获取方案
本文提供如何获取运行时Java程序加载的数据段内容方法和原理分析,通过dumpclass工具,结合jdk底层sa-jdi工具。可以实现对指定类的class字节码获取的功能。通过获取到的字节码,通过jad等反编译工具可以得到Java源代码,为分析代码提供帮助。1 获取原理分析使用dumpclass工具获取运行时类字节码# 1.在该jar程序中,主要实现了类过滤器,以及对类字符串模式匹配...
2022-12-07 16:54:23
613
原创 Fabric node sdk交互测试
使用 Fabric 完成基础的网络配置和链码的编写和部署后,还需要我们进一步通过上层应用服务,完成对底层Fabric搭建的联盟链的调用。本文提供使用 nodejs 编写的上层 sdk 完成对链码的调用操作。当然,也可以使用 go 语言,异曲同工。enjoy!1 基础 chaincode 编写在 chaincode 文件夹中创建nodejs环境# 1.进入 chaincode 目录c...
2022-12-07 07:58:35
336
原创 Fabric开发模式链码部署测试
完成 Fabric 的安装与初步尝试后,需要我们进一步的对 Fabric 的部署做了解。由于在生产环境下,无法对链码错误进行有效定位。故而本节首先完成 Fabric 开发环境的部署,可以由程序员手动执行链码,而非提交给 Fabric 去执行,从log日志中可以有效定位问题。另外,本节完成链码的整体操作流程。enjoy!1 基础 chaincode 编写在 chaincode 文件夹中创建...
2022-12-06 20:41:22
590
原创 Fabric1.4环境搭建
本环境是基于阿里云服务器完成搭建,具体的环境信息:ubuntu18.04LTS,amd64,2core,4GB搭建。Fabric 使用 1.4.6版本。通过本节文章,可以实现Fabric的环境成功启动,为后序的组网和实战案例做铺垫。enjoy!1 环境依赖安装1.1 docker 安装# 1.docker 安装curl -sSL https://get.daocloud.io/dock...
2022-12-06 20:39:02
267
原创 04 ConcurrentHashMap1.8源码深入剖析
1 ConcurrentHashMap 的构造方法/*** 默认的构造方法为空,不做任何操作,数组长度默认是16*/public ConcurrentHashMap() {}/*** 传递初始化容量的构造方法,传递进来一个初始容量,* ConcurrentHashMap会基于这个值计算一个比这个值大的2的幂次方数作为初始容量* 与其他版本不同,例如:传递 16 作为参数,它会计...
2022-09-07 15:07:48
192
原创 03 ConcurrentHashMap1.7源码深入剖析
1 ConcurrentHashMap 机制ConcurrentHashMap 在 1.7版本中采用分段锁机制实现线程安全的支持高并发的HashMap集合类。ConcurrentHashMap 在对象中保存了一个 Segment 数组,即将整个Hash 表划分为多个分段;而每个 Segment 元素,即每个分段则类似于一个Hashtable;这样,在执行 put 操作时首先根据 hash 算法...
2022-09-05 07:25:37
220
原创 02 HashMap1.8 源码深入剖析
JDK 1.8 的 HashMap 的数据结构如下图所示,当链表节点较少时仍然是以链表存在,当链表节点较多时(大于8)会转为红黑树。Center.png1 存储结构链表节点static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V val...
2022-08-31 12:59:38
176
原创 Hadoop HDFS操作指南
1 HDFS 组成架构image-20220703192933033.pngNameNode(NN)管理HDFS的名称空间配置副本策略管理数据块(Block)映射信息处理客户端读写请求DataNode(DN)存储实际的数据块执行数据块的读写操作Client(客户端)文件切分,文件上传HDFS时,Client将文件切分成一个个Block,然后进行上传...
2022-07-03 20:27:14
455
原创 Hadoop ubuntu16.04LTS伪分布式环境搭建流程
Hadoop ubuntu16.04LTS伪分布式环境搭建流程1 三台服务器配置说明在阿里云平台购买三台服务器,本部分只使用其中的node001作为伪分布式环境搭建案例。配置信息:ubuntu16.04LTS 4core 8mem节点名称公网IP私网IP节点1node00147.93.223.3172.18.62.211节点2node00259.110...
2022-07-03 17:16:24
162
原创 consul 与 grpc 结合实现服务注册发现及远程调用
1 consul 下载与初体验下载对应版本的 consul (Mac M1 为例)https://www.consul.io/downloads# 查看支持的型号uname -m配置 consul 到环境变量image-20220530094156506.png2 consul 使用2.1 常用命令解释consul agent -bind=0.0.0....
2022-06-01 10:06:59
1239
原创 go grpc 使用简明教程
1 protobuf 定义接口官网下载 protoc (本机为 Mac M1)https://github.com/protocolbuffers/protobuf/releasesimage-20220529155807106.png解压并添加至 PATHimage-20220529142245518.png验证是否正确安装 protocprotoc...
2022-05-30 09:25:13
1021
原创 go mod 的操作
1 使用 go mod 创建项目并使用通过命令初始化项目# go mod init 项目名称go mod init go_mod_testdemo编写业务逻辑引用本项目的包引用外部依赖的包image-20220529114505440.png// simple_calc.gopackage calcfunc Add(num1, num2 int) int...
2022-05-29 12:08:16
159
原创 Ruoyi DevOps 流水线方式搭建(KubeSphere)
3.1 创建 DevOps 工程创建 DevOps 项目image-20220502182538146.png创建流水线image-20220502183924129.png3.2 构建后端项目-step1 拉取代码添加凭证,并指定 GitHub 的项目 url 和分支image-20220502184059726.png完成 step1...
2022-05-03 15:19:27
846
原创 Ruoyi项目云环境搭建(kuberSphere)
1 Ruoyi 本地环境搭建中间件安装mysql,redis,nacos(2.x.x),nodejs库表添加-- ry-config -> quartz.sql ry_20210908.sql-- ry-seata -> ry_config_20220424.sql-- ry-cloud -> ry_seata_20210128.sql修改 nacos,改...
2022-05-01 11:31:40
3227
原创 kuberSphere搭建中间件
本文是作者学习kuberSphere过程中的具体搭建流程,供需要的小伙伴一起学习进步,具体中间件包括:MySQL、Redis、ElasticSearch、RabbitMQ。搭建的过程从最基础的部分开始,可能比直接通过应用商店部署应用的方式复杂。但可以更加深入理解整体的搭建过程。后续真实需求场景,为方便起见,可以考虑直接通过应用商店的方式部署。本文的RabbitMQ中间件采用了应用的方式部署,供读...
2022-05-01 11:23:51
1640
1
原创 KuberSphere租户构建
1 租户系统构建架构图1631589337850-64ced113-11ed-4c25-99b0-5b101995cecf.png2 平台用户层面2.1 平台层面角色Platform-admin 平台管理员。平台管理员是整个kuberSphere的负责人,相当于公司的CEO,是负责k8s集群的最高权力人。系统初始化后,可使用admin登陆系统进行系统的架构部署。users-m...
2022-04-28 19:10:25
256
原创 KuberSphere安装
KuberSphereLinux单节点安装部署KuberSphere指定hostnamehostnamectl set-hostname master准备kubekey# https://github.com/kubesphere/kubekey/releases?page=3下载 v1.1.1 版本的kubekeytar -zxvf kubekey-v1.1.1-alpha...
2022-04-28 19:06:45
661
原创 K8S组件探索
1626605698082-bf4351dd-6751-44b7-aaf7-7608c847ea42.png1 Namespace名称空间,用于将资源隔离1)使用命令行的方式# 创建命名空间kubectl create ns my-system# 查看命名空间(default为默认的命名空间)kubectl get ns# 删除明明空间(会删除该命名空间下的全部资源)...
2022-04-23 13:01:28
1181
原创 Docker服务部署案例(通过Dockerfile构建服务访问redis数据)
本文通过docker的方式启动并运行redis。通过构建springboot项目用来统计网页访问人数(该人数纪录在redis中)。最终,采用Dockerfile打包springboot项目,将其部署至服务器运行。使用 Docker 部署 redis 容器# 1.拉取最新的redis镜像docker pull redis# 2.查看dockerhub确认redis存储数据和配置文件的...
2022-04-16 14:40:41
1397
原创 1.7 HashMap源码分析
1.存储结构HashMap的内部存储结构其实是数组和链表的结合。当实例化一个HashMap时,系统会创建一个长度为Capacity的Entry数组,这个长度被称为容量(Capacity),在这个数组中可以存放元素的位置我们称之为“桶”(bucket),每个bucket都有自己的索引,系统可以根据索引快速的查找bucket中的元素。 每个bucket中存储一个元素,即一个Entry对象,但每一个E...
2022-02-13 15:29:23
621
1
原创 SQL-实例测试总结
1 练习表DROP TABLE IF EXISTS EMP;DROP TABLE IF EXISTS DEPT;DROP TABLE IF EXISTS SALGRADE;CREATE TABLE DEPT (DEPTNO int(2) not null , DNAME VARCHAR(14) , LOC VARCHAR(13), primary k...
2022-01-28 16:28:15
119
原创 算法-图算法总结
1 图的搜索1.1 广度搜索// 剑指 Offer II 105. 岛屿的最大面积// 给定一个由 0 和 1 组成的非空二维数组 grid ,用来表示海洋岛屿地图。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。如果没有岛屿,则返...
2022-01-27 15:14:03
1299
原创 算法-动态规划算法总结
1 基础问题// 509. 斐波那契数// 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。// dp[i]的定义为:第i个数的斐波那契数值是dp[i]// dp[i] = dp[i - 1] + dp[i - 2]class Solution { public int fib(int n) ...
2022-01-17 16:29:46
493
原创 算法-贪心算法总结
说明:贪心的本质是选择每一阶段的局部最优,从而达到全局最优。1 简单贪心// 455. 分发饼干// 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,...
2022-01-14 18:49:51
295
原创 算法-回溯算法总结
回溯算法总结回溯法,一般可以解决如下几种问题:组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,就构成的树的深度。回溯函数遍历过程伪代码如...
2022-01-13 17:31:06
268
原创 算法-二叉树算法总结
1 二叉树的遍历1.1 前序遍历递归// 144. 二叉树的前序遍历// 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new Array...
2022-01-03 09:16:47
326
原创 算法-栈和队列算法总结
1 模拟1.1 使用栈实现队列// 232. 用栈实现队列// 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty() 如果队列...
2021-11-24 10:13:31
248
原创 算法-哈希表算法总结
1 哈希表模拟思路:通过设计哈希表,模拟O(1)时间复杂度的哈希表。// 剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器// 设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构:insert(val):当元素 val 不存在时返回 true ,并向集合中插入该项,否则返回 false 。remove(val):当元素 val 存在时返回 tru...
2021-11-21 16:10:32
356
原创 算法-链表算法总结
1 哨兵节点思路:在单链表中移除或添加头结点 和 其他节点的操作方式是不一样,其实在写代码的时候也会发现,需要单独写一段逻辑来处理头结点的情况。遇到需要移除和添加节点时,可以设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除和添加了。// 203. 移除链表元素// 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == va...
2021-11-19 19:55:26
750
原创 算法-字符串算法总结
思路:字符串类型的题目,一般都可以使用双指针的思路解决。双指针即可以将字符串看成一个由字符组成的数组,使用两个指针来定位一个子字符串。1 反转字符串思路:通过双指针分别指向子字符串的两端,对指定的子字符串进行翻转操作。// 344. 反转字符串// 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。class Solution { public ...
2021-11-18 10:50:57
239
原创 算法-数组算法总结
1 二分法思路:前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件。写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。1.1 在排序数组中二分查找思路:在排序数组中查找符合某个条件的数字。数组既可能是整体排序,也可能是分段排序。一旦题目...
2021-11-17 20:40:29
845
原创 10种排序算法总结
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class SortTest { // 1.冒泡排序 public static void bubbleSort(int[] arr) { int n = arr.length; ...
2021-11-04 20:31:48
50
原创 Ubuntu20.04 arm64 MySQL8 安装
项目需要搭建环境,用于测试mysql的主从复制原理。在网上搜索很久后,发现并没有对 mysql8 在 ubuntu20.04LTS arm64 下的详细搭建和配置说明,故本文整理目前网上的一些配置信息,全流程搭建起mysql8环境。包括:mysql的安装,配置信息设置,修改root密码,设置root远程访问权限等操作。enjoy!# 1.更新源apt-get update# 2.下载 ...
2021-10-29 21:11:31
2347
原创 SpringBoot整合日志框架
1 Slf4j门面技术SpringBoot采用日志门面技术,使得面向开发者的日志记录API是相同的,但是实现层还是由每个框架来决定的。SpringBoot帮我们已经做好了。它的日志门面选用的就是 SLF4J,而日志实现选用的是Logback。如果log4j和JUL日志框架想采用SLF4J作为日志门面,还需要一层适配层。例如,如果要使用 SLF4J 作为 log4j 的门面,就必须引入 slf4...
2021-10-17 14:31:27
254
原创 02 NIO网络编程
1 网络编程1 阻塞1.1 阻塞模式概述阻塞模式下,相关方法都会导致线程暂停ServerSocketChannel.accept 会在没有连接建立时让线程暂停SocketChannel.read 会在通道中没有数据可读时让线程暂停阻塞的表现其实就是线程暂停了,暂停期间不会占用 cpu,但线程相当于闲置单线程下,阻塞方法之间相互影响,几乎不能正常工作,需要多线程支持但多线程下...
2021-09-29 08:58:04
184
原创 01 NIO 文件编程
一 ByteBuffer1 API使用案例1.1 使用方式向 buffer 写入数据,例如调用 channel.read(buffer)调用 flip() 切换至读模式flip会使得buffer中的limit变为position,position变为0从 buffer 读取数据,例如调用 buffer.get()调用 clear() 或者compact()切换至写模式调用...
2021-09-29 08:45:29
205
原创 基于SpringBoot的Dubbo启动
dubbo框架image.png1 模块添加新建三个模块,分别表示消息的提供者,消息的消费者和公共模块image-20210923104204300.pngdubbo-parent的pom说明:加入springboot的父依赖,作为版本控制<parent> <groupId>org.springframework.boot<...
2021-09-23 10:54:48
319
原创 06 Java类加载器
1 类加载器概念1.1 加载概念加载指的是将类的 class 文件读入到内存,并为之创建一个 java.lang.Class 对象,也就是说,当程序中使用任何类时,系统都会为之建立一个 java.lang.Class 对象。类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM 提供的这些类加载器通常被称为系统类加载器。除此之外,开发者可以通过继承...
2021-09-23 09:20:24
67
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人