java
「已注销」
这个作者很懒,什么都没留下…
展开
-
Redis 设计商品秒杀
前言: 最近来了一个新需求,需要开发一个商品秒杀模块,而且需求很紧急须尽快上线。方案1:数据库锁进行控制,获取秒杀商品数量并加锁,如果数量大于零则成功,否则秒杀失败。 @Override @Transactional public Result startkilDBPCC_ONE(long seckillId, long userId) { ...原创 2019-10-22 11:00:25 · 1874 阅读 · 0 评论 -
Java 使用Redis 管理事务
前言: Redis中的事务允许在一个步骤中执行一组命令。对某些用户来说,在Java上管理Redis事务可能会非常棘手,但如果您拥有合适的工具,则会更容易。 此篇会介绍在Java上执行Redis事务的所有知识,以及对Spring事务管理器和Redis的XA事务的简要介绍。Java上的Redis事务 Redis事务是原子的,这意味着要么处理事务中的所有命令,要么都...原创 2019-03-05 18:58:24 · 9451 阅读 · 3 评论 -
Java 使用Spring-Batch
前言: 什么是Spring的批处理?简而言之,批处理执行作业。单个作业至少包含一个步骤。 前段时间公司需求让在现有系统中添加新功能。该系统必须从外部数据库获取数据。该外部数据库可通过REST API访问,但我们无法“动态”使用它,因为它花了太多时间。因此,我们决定从外部数据库和我们系统使用的数据库中复制数据。换句话说,我们必须下载我们需要的东西并将其存储到我们的数据库中。之后我...原创 2019-03-08 17:33:22 · 8944 阅读 · 0 评论 -
Java 对Redis数据进行MapReduce
前言: MapReduce 简称 MR是一个框架可以使用它来编写分布式处理大量数据的应用程序。由于它允许在大型商用硬件集群上并行处理数据,因此MapReduce可以显着加快数据处理速度。下面将介绍java基于Redisson-Redis的内存数据网格使用MapReduce处理存储在Redis中的数据。什么是MapReduce?MapReduce 是一种可以用Java实...原创 2019-03-06 21:25:48 · 9696 阅读 · 0 评论 -
Java删除Map中元素
前言: 关于Java从Map中删除元素的使用,可以使用删除单个元素的事实Map.remove。示例:初始化一个Map对象Map<Integer, String> map = new HashMap<>();map.put(1, "value 1");map.put(2, "value 2");map.put(3, "value 3");map....原创 2019-03-07 11:40:00 · 11577 阅读 · 0 评论 -
拦截器、过滤器注入Bean
前言: 公司小伙伴反馈由于业务需要,需要在拦截器、过滤器中操作Redis,按照 Controller,Service层配置发现无法注入,一直报(Nullpoint)空指针异常。原因: 拦截器、过滤器执行在Bean初始化之前导致这个问题的。在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->f...原创 2019-02-13 11:52:32 · 8054 阅读 · 1 评论 -
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 · 11814 阅读 · 0 评论 -
Java Streams 中的异常处理
前言: Stream API 和 Lambda 是Java8的重要特性让我们可以使用更具功能性的语法风格。但是在编写的代码时候一个更大的问题是如何处理lambda中的已检查异常。但是不能直接调用从Lambda抛出异常!但是可以在Lambda中做一个简单的try-catch并将异常包装成一个RuntimeException。/**###很显然这不是一种好的表现方式##**/...原创 2019-03-19 15:18:01 · 5047 阅读 · 0 评论 -
Spring @Async 使用
前言: 任何与业务逻辑没有直接关联的逻辑(横切关注点)或在调用者上下文中不需要响应以确定下一个流或任何业务的逻辑是Asyncronization的理想候选者。在Spring中使用@Async注释使用异步,如果你在方法上使用随机的@Async注释并且认为你的方法将在一个单独的线程中以异步方式调用这是错的。要知道@Async如何工作的和它的特性,不然你就无法理解异步行为。@Asy...原创 2019-03-15 11:02:09 · 9279 阅读 · 0 评论 -
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 · 11607 阅读 · 1 评论 -
Java Map.merge() 使用
前言: 关于Map.merge()这可能是Key-Value中最通用的操作。但它也相当模糊很少使用。merge():它将新值置于给定键下(如果不存在)或更新具有给定值的现有键(UPSERT)。示例://计算唯一的单词出现次数var map = new HashMap<String, Integer>();words.forEach(word -> ...原创 2019-03-11 13:10:48 · 14846 阅读 · 0 评论 -
JVM内存模型与GC算法
1.JVM内存模型JVM内存模型如上图,需要声明一点,这是《Java虚拟机规范(Java SE 7版)》规定的内容,实际区域由各JVM自己实现,所以可能略有不同。以下对各区域进行简短说明。1.1程序计数器 程序计数器是众多编程语言都共有的一部分,作用是标示下一条需要执行的指令的位置,分支、循环、跳转、异常处理、线程恢复等基础功能都是依赖程序计数器完成的。 对于Java的多线...转载 2019-02-20 16:45:20 · 330 阅读 · 0 评论 -
Mongodb 安装、使用
基础概念MongoDB 元素概念 databases: 数据库; collections:表;(collections组成了databases) documents:行;(documents组成了collections) MongoDB 没有新建数据库的命令,只要进行 insert 或其它操作,MongoDB 就会自动帮你建立数据库和 collection。当查询一个不存...原创 2019-03-04 22:04:22 · 8430 阅读 · 0 评论 -
Java ArrayList 、LinkedList 集合
前言: ArrayList、LinkedList是用于存储对象引用列表的两个Java Collection Framework类。ArrayList、LinkedList都实现了List接口。List Interface List只是元素的有序集合(也称为序列)。它添加了面向位置的操作,可用于快速访问,添加和删除列表中特定索引位置的元素...原创 2019-02-25 16:35:38 · 255 阅读 · 0 评论 -
Java 多线程知识
前言: 多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲。在平时工作中如若使用不当会出现数据错乱、执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关重要。本文从基础概念开始到最后的并发模型由浅入深,讲解下线程方面的知识。概念梳理本节我将带大家了解多线程中几大基础概念。并发与并行并行,表示两个线程同时做事情...原创 2019-02-28 11:50:51 · 297 阅读 · 0 评论 -
json-rpc 调用btc、usdt钱包节点 java
前言: 搭建完钱包节点(节点搭建不作说明^_^),调用其api进行签名转账等操作。 详细Api地址参考: btc:https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list usdt:https://github.com/OmniLayer/omnicore/bl...原创 2019-02-13 15:05:45 · 12816 阅读 · 11 评论 -
OutOfMemoryException JVM
java.lang.OutOfMemoryError: PermGen space这个异常比较常见,是说JVM里的Perm内 存区的异常溢出,由于JVM在默认的情况下,Perm默认为64M,而很多程序需要大量的Perm区内 存,尤其使用到像Spring等框架的时候,由于需要使用到动态生成类,而这些类不能被GC自动释放,所以导致OutOfMemoryError: PermGen space异常。...翻译 2019-02-18 21:45:10 · 1103 阅读 · 0 评论 -
分布式系统的 ACID、CAP
事务机制ACID和CAP理论是数据管理和分布式系统中两个重要的概念,很不巧,这两个概念中都有相同的“C”代表 "Consistency" 一致性,但是实际上是完全不同的意义,下面是比较两个概念的不同之处。什么是ACID? 事务的定义和实现一直随着数据管理的发展在演进,当计算机越来越强大,它们就能够被用来管理越来越多数据,最终,多个用户可以在一台计算机上共享数据,这就导致了一个问题,当一个...原创 2019-02-28 14:22:35 · 543 阅读 · 0 评论 -
ReenTrantLock 、synchronized 高并发性能测试
前言: Synchronized是依赖于JVM实现的,表现为原生语法层面的互斥锁。开发者是无法直接看到相关源码,但是我们可以通过利用javap工具查看生成的class文件信息来分析Synchronize的实现。同步代码块是使用monitorenter和monitorexit指令实现的,同步方法依靠的是方法修饰符上的ACC_SYNCHRONIZED实现。 ReenTr...原创 2019-02-28 14:54:15 · 6291 阅读 · 2 评论 -
Nginx如何搭建文件防盗链服务
前言大家都知道现在很多站点下载资料都是要收费的,无论是积分还是金币,如何做到资源防盗链的呢?Nginx本身提供了secure_link来完成防盗链功能,可以给服务器文件链接添加时间戳和校验码,从而保护服务器文件不被任意下载盗用。时序图Nginx配置如何安装Nginx这里不再赘述,安装的时候记得开启ngx_http_secure_link_module即可。./conf...原创 2019-02-19 11:42:26 · 846 阅读 · 0 评论 -
maven本地私服仓库nexus
私服架构私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。软件环境Nexus3.3.1、maven3.5.0、JDK1.8Maven和JDK的环境配置略,自行百度。Nexus3安装...转载 2019-02-28 18:43:45 · 422 阅读 · 0 评论 -
Java 模板方法设计模式
前言: 模板方法的概念:定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。 通俗点的理解就是 :完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成。 ...原创 2019-02-25 14:35:08 · 311 阅读 · 0 评论 -
zookeeper 分布式锁
前言: 单机应用架构中,秒杀案例使用ReentrantLcok或者synchronized来达到操作业务互斥的目的。然而在分布式系统中,会存在多台机器并行去实现同一个功能。也就是说,在多进程中,如果还使用以上JDK提供的进程锁,来并发访问数据库资源就可能会出现数据重复、不一致的情况。因此,需要我们来实现自己的分布式锁。实现一个分布式锁应该具备的特性:高可用、高性能的获...原创 2019-03-01 10:59:30 · 8603 阅读 · 0 评论 -
Java 访问者设计模式
前言: 访问者模式,是行为型设计模式之一。访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是需要使用它了。 当我们想要在不改变类的情况下为对象结构的类定义新操作时,我们使用访问者模式。想象一下,对API执行HTTP请求的软件场景。...原创 2019-02-25 16:03:38 · 265 阅读 · 0 评论 -
Kafka 使用ExecutorService 进行消费
前言: Apache Kafka 作为当下最常用消息中间件之一。给到我的需求是需要我们处理大量的消息(如果单线程处理过多消息会出现性能瓶颈)。如何使用Java的ExecutorService框架来创建线程池处理大量消息? 1.创建一个可以从topic中poll()消息后传递到线程池以进行进一步处理。 2.创建工作线程,以执行每条消息的进一步处理。...原创 2019-03-20 17:38:22 · 2864 阅读 · 0 评论 -
Spring Retry 重试机制
前言: 在微服务领域, 一种通信方法是synchronous(同步)。事实是我们无法避免网络故障,临时服务停机(由于重启或崩溃)。当客户端需要实时数据且下游服务暂时没有响应时,它可能会影响用户体验,因此应该创建重试机制,Java中提供了许多解决方案选项。 重试可能会导致资源堵塞从而阻止应用程序恢复;因此,重试次数必须有限如3,不超过5次左右。 不应对每个例外进行重试。它...原创 2019-03-29 15:33:34 · 2654 阅读 · 0 评论 -
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 · 1597 阅读 · 0 评论 -
使用 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 · 1186 阅读 · 0 评论 -
查询BTC、USDT未发送(unspent)交易信息
前言:有些同学不想搭建节点同步数据,可以采用调用三方接口进行签名交易,提供如下api地址。后续会持久更新。。测试链:1.blockchain-testnet (节点数据会出现查不到):https://testnet.blockchain.info/unspent?active=mifiHFYFPk5cri4oneXVsRZJZKovvdDcjo2.testn...原创 2019-06-13 14:27:45 · 3300 阅读 · 0 评论 -
Docker学习之搭建ActiveMQ消息服务
前言ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。在生产项目中,很多时候需要消息中间件来进行分布式系统间的通信。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系...原创 2019-06-13 16:36:11 · 2996 阅读 · 1 评论 -
CountDownLatch多任务并行处理
前言:最近在做一个原始数据统计的功能,用户通过前台设置相关参数,后台实时统计并返回数据。数据排名 求和、最大、最小 统计类比最好的用户体验,就是每一个操作都可以实时的展示数据,3秒之内应该是用户的忍受范围之内的了,所以做一款产品不仅要考虑用户交互设计,后端的优化也是比不可少的。最主要的还是要实时、实时、实时。改造前程序逻辑改造后程序逻辑多任务并行...原创 2019-06-13 16:49:26 · 1097 阅读 · 0 评论 -
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 · 15605 阅读 · 0 评论 -
@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 · 7774 阅读 · 0 评论 -
分布式事务解决方案
分布式事务的实现主要有以下 5 种方案:XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不...转载 2019-06-26 19:19:49 · 17854 阅读 · 1 评论 -
Redis 过期策略
redis 过期策略redis 过期策略是:定期删除+惰性删除。所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上...原创 2019-07-09 19:55:07 · 6539 阅读 · 0 评论 -
Java并发 AtomicInteger
前言:AtomicInteger是一个专门用于以线程安全方式更新整数设计的类。 为什么我们不能简单地使用volatile int ?AtomicInteger//非线程安全计数器 volatile intpublic class CounterNotThreadSafe { private volatile int count = 0; public v...原创 2019-07-30 19:21:05 · 354 阅读 · 0 评论 -
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 · 3514 阅读 · 0 评论 -
区块链钱包—BTC Java版离线签名交易
由于已经不从事区块链相关项目,对疑惑的小伙伴提供一些帮助~~对于离线交易不做过多解释~,说白了就是拿上一笔未发出交易记录进行私钥的签名然后广播到链上。主要是对区块链离线交易进行utxo上链。废话不多说 ,直接上代码:UnspentUtxo交易查询参考:https://blog.csdn.net/u011663149/article/details/91855077...原创 2019-06-14 18:36:47 · 9678 阅读 · 17 评论 -
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 · 7396 阅读 · 0 评论 -
Spring 使用 @Async 捕获异常
前言: 在使用Spring项目使用@Async注释时捕获异常。当多个线程进行任务异步调用出现异常时,解决方案非常简单,需要注入自己的Exception处理程序,以便在执行@Async方法时捕获到异常。1.AsyncConfigurer:AsyncConfigurer是Spring提供的接口,它提供了两种方法,一种是覆盖TaskExecutor(Threadpool),另一种是...原创 2019-03-25 11:19:25 · 7405 阅读 · 2 评论