- 博客(131)
- 资源 (3)
- 收藏
- 关注
原创 BuggyApp——模拟JVM性能
推荐一款实用的工具:BuggyApp下载地址:https://gitee.com/DHing/codes/b3ewz9pcfy826doaksunl95/raw?blob_name=buggyApp.jar Buggy App是一个简单的Java应用程序,它模拟不同的性能问题,例如内存泄漏,OutOfMemoryError,CPU峰值,线程泄漏,StackOverflowError,死锁,无响应等等。使用此应用程序,您可以模拟环境中的各种性能问题。以下是一些可以使用Buggy App...
2020-10-30 16:38:01
342
原创 Java 封装阿里云 RocketMQ
前言: 基于阿里云rocketMQ收发消息进行封装,介于官方的案例实在太不灵活。在项目开发中耦合度太高,故封装一套嵌入方便的组件,希望能够有所帮助。 不做过多介绍,本文主要是针对收发消息进行介绍,解锁更多功能可以参考官方文档。 以下内容只列举了部分代码,完整代码实现请参考: https://gitee.com/DHing/ali-rocket-mq/tree/master/rocket-mq1.导入最新client:compile 'com.al...
2020-09-04 16:32:41
2174
原创 Redis 实现高可用延迟队列
前言: 用过的延迟任务处理队列(RocketMQ、KafKa、Redisson等),对于一些要求比较高的场景是无法运用于生产环境的,一旦机器宕机或者应用重启会导致队列消息丢失,从而造成无法挽回的损失。Redisson JDK内置的延迟队列或者基于时间轮算法的队列,都无法保证生产系统的高可用性,而Redisson很好的解决了这个问题。Redisson在基于NIO的Ne...
2020-02-18 14:56:27
836
原创 JDK11 HttpClient
Java 11的HttpClient 小示例:import java.net.URI;import java.net.http.*;import java.net.http.HttpClient.Redirect;import java.net.http.HttpClient.Version;import java.time.Duration;/*@author dhing*...
2020-01-03 14:51:00
506
原创 Spring Boot2 with JSP View
前言:Spring Boot2 使用JSP视图创建Web应用程序JDK 8+或OpenJDK 8+ Maven 3+1.从Spring Initializer构造项目结构:2.pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/...
2020-01-02 14:49:23
268
原创 SpringBoot 2.0 整合阿里云OSS
前言现在很多网站/应用都采用了动静分离的架构进行部署。 主机采用的是阿里云的 ECS,使用 CDN 做静态内容分发,不过静态文件还是存储在 ECS,采用的是 Nginx 做动静分离。简介阿里云 OSS,海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%的数据可靠性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类...
2019-10-24 14:03:53
635
1
原创 Redis 设计商品秒杀
前言: 最近来了一个新需求,需要开发一个商品秒杀模块,而且需求很紧急须尽快上线。方案1:数据库锁进行控制,获取秒杀商品数量并加锁,如果数量大于零则成功,否则秒杀失败。 @Override @Transactional public Result startkilDBPCC_ONE(long seckillId, long userId) { ...
2019-10-22 11:00:25
1894
原创 SpringBoot Nacos注册中心
前言在之前的 Dubbo 服务开发中,我们一般使用 Zookeeper 作为注册中心,同时还需要部署 Dubbo 监控中心和管理后台。Nacos 注册中心Nacos 是阿里巴巴的开源的项目,全称 Naming Configuration Service ,专注于服务发现和配置管理领域。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速...
2019-08-29 11:42:08
1863
2
原创 Java并发 AtomicInteger
前言:AtomicInteger是一个专门用于以线程安全方式更新整数设计的类。 为什么我们不能简单地使用volatile int ?AtomicInteger//非线程安全计数器 volatile intpublic class CounterNotThreadSafe { private volatile int count = 0; public v...
2019-07-30 19:21:05
385
原创 Redis 过期策略
redis 过期策略redis 过期策略是:定期删除+惰性删除。所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上...
2019-07-09 19:55:07
6587
转载 分布式事务解决方案
分布式事务的实现主要有以下 5 种方案:XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不...
2019-06-26 19:19:49
17995
1
原创 @Select注解动态sql问题
前言:有小伙伴反馈使用org.apache.ibatis.annotations.Select 进行sql动态拼接时入参为空查询失败。写了个简单的案例:1.使用<script></script>标签包围@Select("<script>"+ "SELECT name,phone,addr FROM `user` WHE...
2019-06-25 18:12:52
7861
原创 Lambda:Local variable a defined in an enclosing scope must be final or effectively final
前言:有同学反馈Stream循环处理集合时,可能需要操作一个中间变量进行复制或者比较操作。做了一个简单的示例如下:示例(统计取模2的数量):会提示(封闭范围中定义的局部变量a必须是final或effectively final):当我们加入final进行变量修饰(无法分配最终的局部变量A):原因: lambda表达式可以访问给它传递的变量,访问...
2019-06-19 13:07:02
15864
原创 区块链钱包—BTC Java版离线签名交易
由于已经不从事区块链相关项目,对疑惑的小伙伴提供一些帮助~~对于离线交易不做过多解释~,说白了就是拿上一笔未发出交易记录进行私钥的签名然后广播到链上。主要是对区块链离线交易进行utxo上链。废话不多说 ,直接上代码:UnspentUtxo交易查询参考:https://blog.csdn.net/u011663149/article/details/91855077...
2019-06-14 18:36:47
9828
17
原创 CountDownLatch多任务并行处理
前言:最近在做一个原始数据统计的功能,用户通过前台设置相关参数,后台实时统计并返回数据。数据排名 求和、最大、最小 统计类比最好的用户体验,就是每一个操作都可以实时的展示数据,3秒之内应该是用户的忍受范围之内的了,所以做一款产品不仅要考虑用户交互设计,后端的优化也是比不可少的。最主要的还是要实时、实时、实时。改造前程序逻辑改造后程序逻辑多任务并行...
2019-06-13 16:49:26
1139
原创 Docker学习之搭建ActiveMQ消息服务
前言ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。在生产项目中,很多时候需要消息中间件来进行分布式系统间的通信。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系...
2019-06-13 16:36:11
3080
1
原创 查询BTC、USDT未发送(unspent)交易信息
前言:有些同学不想搭建节点同步数据,可以采用调用三方接口进行签名交易,提供如下api地址。后续会持久更新。。测试链:1.blockchain-testnet (节点数据会出现查不到):https://testnet.blockchain.info/unspent?active=mifiHFYFPk5cri4oneXVsRZJZKovvdDcjo2.testn...
2019-06-13 14:27:45
3399
原创 使用 BULL 转换Java Bean
前言 BULL(Bean Utils Light Library)是一个Java-bean-to-Java-bean转换器,它将数据从一个对象递归复制到另一个对象。 特点:通用,灵活,可重用,可配置,速度极快。能够在没有任何配置的情况下转换Mutable,Immutable和Mixed bean的库。1. Dependencies<dependency> ...
2019-05-31 11:03:49
1210
原创 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb
做个笔记~SpringBoot项目启动提示有个WARN信息:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI an...
2019-04-18 10:46:09
1620
原创 MySQL主从复制配置
前言: MySQL Master-Slave主从复制使用单独的Alibaba Cloud ECS实例为您的数据库提供集群环境。将数据实时复制到多台计算机,以进行备份服务,分析或扩展并为多个应用程序创建不同的节点。以下介绍在Ubuntu 16.04服务器上设置和配置MySQL Master-Slave主从复制。1.server1上安装MySQL服务器(主)$ sudo apt...
2019-04-02 16:18:26
2560
原创 Spring Retry 重试机制
前言: 在微服务领域, 一种通信方法是synchronous(同步)。事实是我们无法避免网络故障,临时服务停机(由于重启或崩溃)。当客户端需要实时数据且下游服务暂时没有响应时,它可能会影响用户体验,因此应该创建重试机制,Java中提供了许多解决方案选项。 重试可能会导致资源堵塞从而阻止应用程序恢复;因此,重试次数必须有限如3,不超过5次左右。 不应对每个例外进行重试。它...
2019-03-29 15:33:34
2694
原创 Java12 switch 表达式
以下示例是新的Java 12功能“switch expressions” 以及如何将其与Stream 操作和其他一些流操作结合使用,使代码更加简洁。Switch Expressions//Switch表达式允许switch语句直接返回值public String newSwitch(int day) { return switch (day) { case ...
2019-03-28 14:35:46
3539
转载 Java锁详解:“独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁+线程锁”
在Java并发场景中,会涉及到各种各样的锁如公平锁,乐观锁,悲观锁等等,这篇文章介绍各种锁的分类:公平锁/非公平锁可重入锁独享锁/共享锁乐观锁/悲观锁分段锁自旋锁线程锁乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用。1.乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认...
2019-03-28 10:57:58
2862
原创 Redisson之几种分布式队列
前言: 消息队列很好理解,顾明思议就是排队执行。Redisson 队列类似实现Java接口,例如Queue和BlockingQueue基于Redisson Api 来处理一些复杂的业务逻辑。1.Queue Redisson中的RQueue对象实现了java.util.Queue接口。队列用于首先从最旧的元素开始处理元素的情况(也称为“先进先出”或FIFO)。与普通Java一样,...
2019-03-28 10:28:12
12231
2
原创 从源代码构建 OpenJDK
前言: OpenJDK是JDK的开源代码,也不算全是,因为在JDK部分,有一些是Oracle未开放源代码的,还有就是有一些的历史原因。MacOSX构建了OpenJDK版本12:1.安装Mercurialhttps://www.mercurial-scm.org/wiki/Download安装brew:https://brew.sh#安装、编译brew instal...
2019-03-27 16:49:23
386
原创 Java 12 Teeing Collector
前言: Collectors#teeing:返回一个由两个下游收集器组成的收集器。传递给生成的收集器的每个元素都由下游收集器处理,然后使用指定的合并函数将它们的结果合并到最终结果中。简单地说,它允许使用两个独立的收集器收集流,然后使用提供的双功能合并结果。//方法相应参数 函数等。static <T, R1, R2, R> Collector<T, ?,...
2019-03-27 14:29:35
2711
原创 Spring Boot 2.x 集成 HBase
前言:1、HBase HBase 是在 Hadoop 分布式文件系统(简称:HDFS)之上的分布式面向列的数据库。而且是 2007 最初原型,历史悠久。 那追根究底,Hadoop 是什么?Hadoop是一个分布式环境存储并处理大数据。Hadoop 使用 MapReduce 算法统计分析大数据。 场景:监控数据的日志详情 交易订单的详情数据(淘宝、有赞)...
2019-03-26 21:34:41
8144
原创 Spring 使用 @Async 捕获异常
前言: 在使用Spring项目使用@Async注释时捕获异常。当多个线程进行任务异步调用出现异常时,解决方案非常简单,需要注入自己的Exception处理程序,以便在执行@Async方法时捕获到异常。1.AsyncConfigurer:AsyncConfigurer是Spring提供的接口,它提供了两种方法,一种是覆盖TaskExecutor(Threadpool),另一种是...
2019-03-25 11:19:25
7537
2
原创 Kafka 使用ExecutorService 进行消费
前言: Apache Kafka 作为当下最常用消息中间件之一。给到我的需求是需要我们处理大量的消息(如果单线程处理过多消息会出现性能瓶颈)。如何使用Java的ExecutorService框架来创建线程池处理大量消息? 1.创建一个可以从topic中poll()消息后传递到线程池以进行进一步处理。 2.创建工作线程,以执行每条消息的进一步处理。...
2019-03-20 17:38:22
2906
原创 Java 从List中删除空值
目前: 介绍一下使用普通的Java,Java 8 lambda和一些第三方库从JavaList中删除空值。1. Java 7或更低版本:public void removeAllNullsFromListWithJava7OrLower() { List<String> list = new ArrayList<>(Arrays.asL...
2019-03-19 20:25:54
11680
1
原创 Java Streams 中的异常处理
前言: Stream API 和 Lambda 是Java8的重要特性让我们可以使用更具功能性的语法风格。但是在编写的代码时候一个更大的问题是如何处理lambda中的已检查异常。但是不能直接调用从Lambda抛出异常!但是可以在Lambda中做一个简单的try-catch并将异常包装成一个RuntimeException。/**###很显然这不是一种好的表现方式##**/...
2019-03-19 15:18:01
5086
原创 Spring Boot 配置多个MongoTemplate
前言: Spring Boot支持应用程序中创建多个Mongo模板连接到两个不同的mongo服务器。创建多个Mongo连接application.properties/ymlproperties:primary.mongodb.host=<primary_mongodb_host>primary.mongodb.port=<primary_mon...
2019-03-18 11:32:29
7524
原创 Spring @Async 使用
前言: 任何与业务逻辑没有直接关联的逻辑(横切关注点)或在调用者上下文中不需要响应以确定下一个流或任何业务的逻辑是Asyncronization的理想候选者。在Spring中使用@Async注释使用异步,如果你在方法上使用随机的@Async注释并且认为你的方法将在一个单独的线程中以异步方式调用这是错的。要知道@Async如何工作的和它的特性,不然你就无法理解异步行为。@Asy...
2019-03-15 11:02:09
9317
原创 Java8 对Map进行排序
前言: 随着Java 8的Stream之后推出后可以很优雅实现Map的排序。示例:final Map<String, Integer> wordCounts = new HashMap<>();wordCounts.put("USA", 100);wordCounts.put("jobs", 200);wordCounts.put("softwa...
2019-03-14 18:52:53
11854
原创 正则表达式匹配IP地址
前言: IPv4地址可以用表示32位整数值的任何符号表示。它们通常用点十进制表示法编写,它由地址的四个八位字节组成,以十进制数字表示并用.点分隔。例如,四点IP地址172.16.255.1import java.util.regex.Matcher;import java.util.regex.Pattern;/** * @author dhing */...
2019-03-13 20:54:25
6528
原创 Java8 Stream Collectors 使用
前言: java.util.stream.Collectors.* 类为我们提供了丰富的对流的操作,对此写了一些较为测试案例:import java.text.DecimalFormat;import java.util.*;import java.util.concurrent.ConcurrentMap;import static java.util.Compara...
2019-03-13 17:05:32
6787
原创 Java 自定义HashSet实现
前言: HashSet是一种数据结构为基本操作(add,remove,containsandsize)提供恒定的时间性能,假设哈希函数在桶之间正确地分散元素。有许多方法可以实现这种数据结构。这篇文章主要使用链表+数组在Java中简单实现hashmap。1.定义一个表示链表节点的类class Node<T> { T data; N...
2019-03-13 16:39:49
6728
原创 Java12 字符串 API 新特性
前言: JDK 12版本中将出现的新API方法将于3月19日发布。与JEP-334: JVM Constants API.有关。String#indent(int)该方法允许我们调整String实例的缩进。String result = "foo\nbar\nbar2".indent(4);System.out.println(result);// foo// ...
2019-03-12 20:38:10
7717
原创 Apache Spark机器学习
推荐电子书:Apache Spark 2.x入门 - 从入门到制作前言: 使用Apache Spark 2.0及更高版本,实现了很大的改进,使Spark更容易编程和执行更快:Spark SQL和Dataset / DataFrame API通过Spark SQL优化的执行引擎提供易用性,空间效率和性能提升。 Spark ML提供了一套统一的高级API,构建于DataFrame之...
2019-03-11 18:51:46
7111
原创 Java Map.merge() 使用
前言: 关于Map.merge()这可能是Key-Value中最通用的操作。但它也相当模糊很少使用。merge():它将新值置于给定键下(如果不存在)或更新具有给定值的现有键(UPSERT)。示例://计算唯一的单词出现次数var map = new HashMap<String, Integer>();words.forEach(word -> ...
2019-03-11 13:10:48
14929
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人