![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
胡峻峥
快乐的程序员
展开
-
快速掌握Java8 Stream函数式编程技巧
函数式编程优势“函数第一位”,即函数可以出现在任何地方。 可以把函数作为参数传递给另一个函数,还可以将函数作为返回值。 让代码的逻辑更清晰更优雅。 减少了可变量(Immutable Variable)的声明,程序更为安全。 支持惰性计算。Lambda语法三部分一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数 一个箭头符号:-> 方法体,可以是表达式和代码块,方法体函数式接口里面方法的实现,如果是代码块,则必须用{}来包裹起来,且需要一个return 返回值,但有个例原创 2020-10-18 15:46:10 · 297 阅读 · 0 评论 -
灵感来袭,基于Redis的分布式延迟队列(续)
背景上一篇(灵感来袭,基于Redis的分布式延迟队列)讲述了基于JavaDelayQueue和Redis实现了分布式延迟队列,这种方案实现比较简单,应用于延迟小,消息量不大的场景是没问题的,毕竟Java DelayQueue是占用内存的。针对现用方案的不足,于是利用Redis的Sorted Set数据结构简单实现分布式延迟队列。Sorted SetRedis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。redis.原创 2020-10-04 19:12:38 · 298 阅读 · 0 评论 -
高可用服务设计|如何应对缓存穿透|玩转布隆过滤器
一、背景用户中心是授权逻辑与用户信息相关逻辑构建的应用。分布式系统中,大多数业务都需要和用户中心打交道,为了保证用户中心服务的高可用,避免不了做缓存、导入搜索引擎从而降低数据库的压力。然而有些不经过用户中心授权的业务场景查询用户中心的数据,可能引发大量无效的查询,发生缓存穿透,直接对搜索引擎和数据库造成压力。如何解决用户中心缓存穿透的问题呢?接下来就着重说一下布隆过滤器是怎么“隔档”这些无效查询...原创 2020-04-13 20:23:24 · 265 阅读 · 0 评论 -
Java分布式IP限流和防止恶意IP攻击方案
前言限流是分布式系统设计中经常提到的概念,在某些要求不严格的场景下,使用Guava RateLimiter就可以满足。但是Guava RateLimiter只能应用于单进程,多进程间协同控制便无能为力。本文介绍一种简单的处理方式,用于分布式环境下接口调用频次管控。如何防止恶意IP攻击某些暴露的接口呢(比如某些场景下短信验证码服务)?本文介绍一种本地缓存和分布式缓存集成方式判断远程IP是否为...原创 2020-03-29 19:35:38 · 1726 阅读 · 1 评论 -
灵感来袭,基于Redis的分布式延迟队列
一、延迟队列延迟队列,也就是一定时间之后将消息体放入队列,然后消费者才能正常消费。比如1分钟之后发送短信,发送邮件,检测数据状态等。二、RedissonDelayed Queue如果你项目中使用了redisson,那么恭喜你,使用延迟队列将非常的简单。基于Redis的Redisson分布式延迟队列(Delayed Queue)结构的RDelayedQueueJava对...原创 2020-03-28 19:43:45 · 616 阅读 · 0 评论 -
安全优雅的RESTful API签名实现方案
安全优雅的RESTful API签名实现方案1、接口签名的必要性在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题。其中我认为最终要的还是数据是否被篡改。在此分享一下我的关于接口签名的实践方案。2、项目中签名方案痛点每个接口有各自的签名方案,不统一,维护成本较高。没有对消息实体进行签名,无法避免数据被篡改。无法...原创 2019-06-20 23:31:53 · 2502 阅读 · 1 评论 -
基于zookeeper实现分布式配置中心(二)
上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理。接下来根据zookeeper的特性,简单实现一个分布式配置中心。配置中心的优势1、各环境配置集中管理。2、配置更改,实时推送,jvm环境变量及时生效。3、依靠配置变更,动态扩展功能,减少二次上线带来的成本。4、减少开发人员、运维人员修改配置带来的额外开销。...原创 2019-06-06 16:33:00 · 452 阅读 · 0 评论 -
线程池优化之充分利用线程池资源
一、前言 最近做了电子发票的需求,分省开票接口和发票下载接口都有一定的延迟。为了完成开票后自动将发票插入用户微信卡包,目前的解决方案是利用线程池,将开票后插入卡包的任务(轮询分省发票接口,直到获取到发票相关信息或者轮询次数用完,如果获取到发票信息,执行发票插入微信卡包,结束任务)放入线程池异步执行。仔细想一想,这种实现方案存在一个问题,线程池没有充分的利用。为什么没有充分的利用?下面详细的分...原创 2019-04-06 23:11:07 · 557 阅读 · 0 评论 -
使用PdfBox实现pdf转图片,解决中文方块乱码等问题
一、引入依赖<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.13</version></dependency>原创 2019-03-10 23:54:18 · 5483 阅读 · 2 评论 -
转载:ThreadPoolExecutor 源码阅读
前言 之前研究了一下如何使用ScheduledThreadPoolExecutor动态创建定时任务(Springboot定时任务原理及如何动态创建定时任务),简单了解了ScheduledThreadPoolExecutor相关源码。今天看了同学写的ThreadPoolExecutor 的源码解读,甚是NB,必须转发一下。读了一下 ThreadPoolExecutor 的源码(JDK 11...转载 2019-02-12 14:18:04 · 207 阅读 · 0 评论 -
Springboot定时任务原理及如何动态创建定时任务
一、前言 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝。分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件。因为是多省份,服务器、文件名规则、数据规则都不一定,所以要做成可配置是有一定难度的。数据规则这块必须强烈要求统一,服务器、文件名规则都可以从配置中心去读。每新增一个省份的配置,后台感知到后,动态生成定时任务。二、Springboot引入定时任务核心配...原创 2019-02-07 22:06:08 · 11681 阅读 · 7 评论 -
HashMap 源码阅读
前言 之前读过一些类的源码,近来发现都忘了,再读一遍整理记录一下。这次读的是 JDK 11 的代码,贴上来的源码会去掉大部分的注释, 也会加上一些自己的理解。Map 接口 这里提一下 Map 接口与1.8相比 Map接口又新增了几个方法: 这些方法都是包私有的static方法; of()方法分别返回包含 0 - 9 个键值对的不可修改的Map; ofEnt...转载 2019-01-07 00:00:08 · 258 阅读 · 4 评论 -
java接口签名(Signature)实现方案续
一、前言 由于之前写过的一片文章 (java接口签名(Signature)实现方案 )收获了很多好评,此次来说一下另一种简单粗暴的签名方案。相对于之前的签名方案,对body、paramenter、path variable的获取都做了简化的处理。也就是说这种方式针所有数据进行了签名,并不能指定某些数据进行签名。二、签名规则 1、线下分配appid和appsecret,针对不同的调用...原创 2018-12-26 13:24:38 · 18048 阅读 · 47 评论 -
SpringMvc接口中转设计(策略+模板方法)
一、前言 最近带着两个兄弟做支付宝小程序后端相关的开发,小程序首页涉及到很多查询的服务。小程序后端服务在我司属于互联网域,相关的查询服务已经在核心域存在了,查询这块所要做的工作就是做接口中转。参考了微信小程序的代码,发现他们要么新写一个接口调用,要么新写一个接口包裹多个接口调用。这种方式不容易扩展。由于开发周期比较理想,所以决定设计一个接口中转器。二、接口中转器整体设计 ...原创 2019-01-10 18:43:34 · 839 阅读 · 0 评论 -
支付宝敏感信息解密
支付宝官方解密文档:https://docs.alipay.com/mini/introduce/aesString response = "小程序前端提交的";//1. 获取验签和解密所需要的参数Map<String, String> openapiResult = JSON.parseObject(response, new TypeRef...原创 2018-12-27 13:21:00 · 4879 阅读 · 0 评论