Java EE

短信接口防盗刷解决方案

一、序言 在Web开发中,总有一些接口需要暴露在用户认证前访问,短信发送接口特别是短信验证码注册接口便是其中典型的一类,这类接口具有如下特点: 流量在用户认证之前 流量在用户认证之前,意味着无法获取用户ID等唯一标识符信息对流量限流 手机号未知 手机号未知意味着无法对待发送短信的手机号做精准检测,判 ... »

Java多线程与线程池技术

一、序言 Java多线程编程线程池被广泛使用,甚至成为了标配。 线程池本质是池化技术的应用,和连接池类似,创建连接与关闭连接属于耗时操作,创建线程与销毁线程也属于重操作,为了提高效率,先提前创建好一批线程,当有需要使用线程时从线程池取出,用完后放回线程池,这样避免了频繁创建与销毁线程。 // 任务 ... »

Quartz高可用定时任务快速上手

定时任务使用指南 如果你想做定时任务,有高可用方面的需求,或者仅仅想入门快,上手简单,那么选用它准没错。 定时任务模块是对Quartz框架进一步封装,使用更加简洁。 1、引入依赖 <dependency> <groupId>xin.altitude.cms</groupId> <artifactId ... »

Spring Cache缓存框架

一、序言 Spring Cache是Spring体系下标准化缓存框架。Spring Cache有如下优势: 缓存品种多 支持缓存品种多,常见缓存Redis、EhCache、Caffeine均支持。它们之间既能独立使用,也能组合使用。 平滑迁移 Spring内部支持的缓存,可实现无缝平滑迁移,无需修改 ... »

javazhishitupu Java EE

G1垃圾回收器在并发场景调优

一、序言 目前企业级主流使用的Java版本是8,垃圾回收器支持手动修改为G1,G1垃圾回收器是Java 11的默认设置,因此G1垃圾回收器可以用很长时间,现阶段垃圾回收器优化意味着针对G1垃圾回收器优化。 为了简化讨论,下面假设针对4C/16G物理机器进行优化。 二、G1概览 (一)了解G1 1、最 ... »

请求合并与拆分在并发场景中应用

一、序言 在并发场景中,当热点缓存Key失效时,流量瞬间打到数据库中,此所谓缓存击穿现象;当大范围的缓存Key失效时,流量也会打到数据库中,此所谓缓存雪崩现象。 当使用分布式行锁时,能够有效解决缓存击穿问题;当使用分布式表锁时,能够解决缓存雪崩问题。实际操作中,分布式表锁不在考虑范围,理由是降低并发 ... »

数据库与缓存数据一致性解决方案

一、序言 在分布式并发系统中,数据库与缓存数据一致性是一项富有挑战性的技术难点。本文将讨论数据库与缓存数据一致性问题,并提供通用的解决方案。 假设有完善的工业级分布式事务解决方案,那么数据库与缓存数据一致性便迎刃而解,实际上,目前分布式事务不成熟。 二、不同的声音 在数据库与缓存数据一致解决方式中, ... »

关于java ee的拦截器和过滤器的区别

拦截器和过滤器的区别:1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 拦截器 »

基于消息队列(RabbitMQ)实现延迟任务

一、序言 延迟任务应用广泛,延迟任务典型应用场景有订单超时自动取消;支付回调重试。其中订单超时取消具有幂等性属性,无需考虑重复消费问题;支付回调重试需要考虑重复消费问题。 延迟任务具有如下特点:在未来的某个时间点执行;一般仅执行一次。 1、实现原理 生产者将带有延迟信息的消息发送到RabbitMQ交 ... »

JAVA EE 学习笔记

http://www.cnblogs.com/kuangdaoyizhimei/category/701794.html http://www.cnblogs.com/liunanjava/p/4457420.html »

java EE 监听器

生命周期监听器与属性改变监听器都必须使用@WebListener或在web.xml中声明,容器才会知道要加载、读取相关的监听器。 »

基于Redis分布式BitMap的应用

一、序言 在实际开发中常常遇到如下需求:判断当前元素是否存在于已知的集合中,将已知集合中的元素维护一个HashSet,使用时只需耗时O(1)的时间复杂度便可判断出结果,Java内部或者Redis均提供相应的数据结构。使用此种方式除了占用内存空间外,几乎没有其它缺点。 当数据量达到亿级别时,内存空间的 ... »

java EE学习之数据库操作

jdbc开发流程 注册驱动 建立连接(Connection) 创建运行SQL的语句(Statement) 运行语句 处理运行结果(ResultSet) 释放资源 注冊驱动有三种方式: Class.forName(&quot;com.mysql.jdbc.Driver&quot;); // 推荐 DriverManager.registerDriver(com.mysql.jdbc.Driver); Syste »

java EE技术体系——CLF平台API开发注意事项(3)——API安全访问控制

前言:提离职了,嗯,这么多年了,真到了提离职的时候,心情真的很复杂。好吧,离职阶段需要把一些项目中的情况说明白讲清楚,这篇博客就简单说一下在平台中对API所做的安全处理(后面讲网关还要说,这里主要讲代码结构) 第一点:系统是按照Security规范,通过实现OAuth2.0协议安全控制。 关键词理解: JWT:JWT,JWT 在前后端分离中的应用与实践 规范:Security、JAX-RS(当前 »

SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分库分表实践

一、序言 在实际业务中,单表数据增长较快,很容易达到数据瓶颈,比如单表百万级别数据量。当数据量继续增长时,数据的查询性能即使有索引的帮助下也不尽如意,这时可以引入数据分库分表技术。 本文将基于SpringBoot+MybatisPlus+Sharding-JDBC+Mysql实现企业级分库分表。 1 ... »

Java高性能本地缓存框架Caffeine

一、序言 Caffeine是一个进程内部缓存框架,使用了Java 8最新的[StampedLock]乐观锁技术,极大提高缓存并发吞吐量,一个高性能的 Java 缓存库,被称为最快缓存。 二、缓存简介 (一)缓存对比 从横向对常用的缓存进行对比,有助于加深对缓存的理解,有助于提高技术选型的合理性。下面 ... »