![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 59
Java
区块链(Web3)开发工程师
全栈工程师、区块链开发工程师、智能合约开发工程、Web3.0工程师
精通Wallet、Token、NFT、Exchange、DEFI、DAPP(web3开发)、智能合约、Gamefi、元宇宙开发。
大家有任何需要,欢迎私信或评论联系我!
展开
-
【服务端 | Redis】如何使用redis 有序集合实现股票交易的订单表(价格优先、时间优先)
在score相同的情况下,redis使用字典排序,而所谓的字典排序其实就是“ABCDEFG”这样的排序,在首字母相同的情况下,redis会再比较后面的字母,还是按照字典排序(如截图所示,beigai和baijing的排列顺序)。根据上图我们可以将价格格式化后设置为score,将时间戳和订单额格式化后合并为一个字段,保持所有订单的此字段格式相同,redis会通过字典自动排序用户交易。时,自己发现了一个问题,redis的有序集合在score相同的情况 下是如何排序的?前两天倒腾redis的有序。原创 2023-09-25 11:26:16 · 382 阅读 · 0 评论 -
【Java】Java防止科学计数法
【代码】【Java】Java防止科学计数法。转载 2022-10-21 13:03:26 · 333 阅读 · 0 评论 -
【区块链 | IPFS】IPFS使用教程 | java对接IPFS的SDK
首先,引入IPFS的包maven方式<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository></repositories><dependency> <groupId>com.github.ipfs</groupId>.原创 2022-04-03 23:36:01 · 1373 阅读 · 0 评论 -
【DAPP】DAPP开发中Web3唤醒MetaMask签名数据+Java校验签名实现去中心化和中心化用户数据的鉴权
使用场景大多数用在DAPP中调用中心化数据或者操作某些中心化功能的时候通过DAPP调用MetaMask钱包对数据进行签名传递给后台,后台验证签名数据是否是否当前用户钱包地址签名的数据实现鉴权。一、DAPP端用Web3签名数据注:不同的web3版本签名代码有点差异1、0.26版本签名 web3.personal.sign//参数1:要签名的数据//参数2:签名的钱包地址web3.personal.sign(web3.fromUtf8("Hello Dapp"), "0x40141cF.原创 2021-12-14 19:20:09 · 1155 阅读 · 0 评论 -
什么是分布式锁?实现分布式锁的三种方式
在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。那具体什么是分布式锁,分布式锁应用在哪些业务场景、如何来实现分布式锁呢?一 为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图:上图可以看到,变量A存在三个服务器内存中(这个变量A主要体现是在一原创 2021-08-02 15:23:38 · 264 阅读 · 0 评论 -
分布式高并发系统如何保证对外接口的幂等性?
前言接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。不知道你有没有遇到过这些场景:有时我们在填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是id不一样。 我们在项目中为了解决接口超时问题,通常会引入了重试机制。第一次请求接口超时了,请求方没能及时获取返回结果(此时有可能已经成功了),为了避免返回错误的结果(这种情况不可能直接返回失败吧?),..原创 2021-08-02 15:01:42 · 217 阅读 · 0 评论 -
【Java|多线程】使用CompletableFuture 捕获异常,CompletableFuture的异常处理 ?
使用Future获得异步执行结果时,要么调用阻塞方法get(),要么轮询看isDone()是否为true,这两种方法都不是很好,因为主线程也会被迫等待。从Java 8开始引入了CompletableFuture,它针对Future做了改进,可以传入回调对象,当异步任务完成或者发生异常时,自动调用回调对象的回调方法。我们以获取股票价格为例,看看如何使用CompletableFuture:// CompletableFutureimport java.util.concurrent.Comple原创 2021-01-13 14:54:11 · 18287 阅读 · 1 评论 -
【Spring Boot】SpringBoot 整合 apollo
简介Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo和Spring Cloud Config对比通过对比,可以看出,生成环境中 Apollo 相比 Spring Cloud Config 更具有优势一些。安装 Apollo 配置中心搭建教程参照https://github.com/ctripcorp/apollo/wik.原创 2020-12-29 14:43:42 · 376 阅读 · 0 评论 -
【Java】linkedlist和arraylist的区别是什么?各自有什么优点?
LinkedeList和ArrayList是常用的两种存储结构,都可以实现了List接口,那么它们之间有什么区别?下面本篇文章就来带大家了解一下LinkedeList和ArrayList之间的区别,希望对大家有所帮助。LinkedeList和ArrayList的区别1、数据结构不同ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。2、效率不同当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为.原创 2020-12-10 14:29:22 · 635 阅读 · 0 评论 -
【Excel】POI导出EXCEL文档、水平垂直居中、表头添加颜色
package utils; import ggframework.bottom.log.GGLogger; import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;imp..原创 2020-06-17 14:24:14 · 957 阅读 · 0 评论 -
ElasticSearch启动报错,bootstrap checks failed
修改elasticsearch.yml配置文件,允许外网访问。vim config/elasticsearch.yml# 增加network.host: 0.0.0.0启动失败,检查没有通过,报错[2018-05-18T17:44:59,658][INFO ][o.e.b.BootstrapChecks] [gFOuNlS] bound or publishing to ...原创 2020-05-02 19:31:22 · 202 阅读 · 0 评论 -
【SpringBoot】SpringBoot 构建RestFul API 含单元测试
首先,回顾并详细说明一下在快速入门中使用的@Controller、@RestController、@RequestMapping注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。@Controller:修饰class,用来创建处理http请求的对象 @RestController:Spring4之后加入的注解,原来在...原创 2020-04-14 14:21:50 · 299 阅读 · 0 评论 -
【Spring | OAuth2】OAuth2介绍与使用
什么是OAuth2OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0应用场景第三方应用授权登录:在APP或者网页接入一些第三方应用时,时常会需要用户登录另一个合作平台...原创 2020-04-14 13:57:09 · 479 阅读 · 0 评论 -
【微服务 | Java】微服务与单体服务解析:关于微服务,你想了解的都在这里
开篇刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在“强大”的JSP上面,那时候SOA已经算是新技术了。现在,微服务已经大行其道,有哪个互联网产品不说自己是微服务架构呢?但是,对于微服务的理解每个人都不太一样,这篇文章主要是聊一聊我对微服务的理解以及如何搭建经典的微服务架构,目的是梳理一下自己的一些想法,如果存在不同看法的欢迎指正!什么是...原创 2020-03-20 19:52:25 · 361 阅读 · 0 评论 -
【Java】Java高级特性-反射,面试必备
概述定义JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。用途在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方...原创 2020-03-19 18:29:50 · 259 阅读 · 0 评论 -
【Java】Google身份验证服务端实现
import org.apache.commons.codec.binary.Base32;import org.apache.commons.codec.binary.Base64;import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import java.security.InvalidKeyException...原创 2019-12-06 18:48:05 · 327 阅读 · 0 评论 -
【Java | Spring Boot】IntelliJ IDEA 轻松搭建Spring Boot项目(零基础入门,超详细!)
现在越来越多的大公司都要用到spring boot毕竟省去的很多不必要的麻烦,可以更快的进行开发相信很多小伙伴都为项目中的配置文件而烦恼,如果学会了Spring boot做项目,相信你会感觉人生已经到达了巅峰 !首先打开IDEA,我们创建一个项目,选择Spring Initializr 点击 Next点击Next进行下一步的操作,基本上也没有什么很多要改的地方,大家参考...原创 2019-08-14 14:56:47 · 1275 阅读 · 0 评论 -
【Java | Spring Boot】SpringBoot注解大全
一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration 等同于spring的XML配置文件;使用Ja...转载 2019-08-14 16:20:25 · 307 阅读 · 0 评论 -
【Java】引入import rx.Observable失败!RxJava2使用方法
1.引入依赖implementation "io.reactivex.rxjava2:rxjava:2.1.17"implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'2.创建Observable3.创建Observer原创 2019-08-14 18:58:06 · 3007 阅读 · 0 评论 -
【Java | Spring Boot】史上最全的Spring Boot Cache使用与整合
一:Spring缓存抽象Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发; Cache接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache接口下Spring提供了各种...原创 2019-08-30 13:23:16 · 176 阅读 · 0 评论 -
【Java】jdk下载以前版本需要的账号怎么办?打开得到答案!
目前在官网下载低于jdk1.8的java jdk的时候需要登陆,这边分享一个账号,方便下载2696671285@qq.com密码:Oracle123原创 2019-09-20 14:25:32 · 636 阅读 · 0 评论 -
Java防止科学计数法
public static String NonScientificNotation(String num) { Pattern pattern = Pattern.compile("-?[0-9]*.[0-9]*E[0-9]*"); Matcher match = null; match = pattern.matcher(num); if(mat...转载 2019-04-26 13:23:53 · 207 阅读 · 0 评论