随笔分类 -  Java EE

摘要:一、序言 众所周知,MybatisPlus在处理单表DAO操作时非常的方便。在处理多表连接连接查询也有优雅的解决方案。今天分享MybatisPlus基于Lambda表达式优雅实现聚合分组查询。 由于视频的交互性更强,保留更多的细节,看视频的朋友,传送门在这里。 下面的内容是博客文字版。 二、代码实现 阅读全文
posted @ 2022-11-08 10:04 赛泰先生 阅读(11672) 评论(1) 推荐(0) 编辑
摘要:一、序言 在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件。报告单、请假单、发票页等都可以使用动态生成word来解决。 笔者总结归纳出通用技术要点,尽可能降低广大开发者的使用技术门槛。 二、制作与渲染模版 (一)总体流程 1、准备数据 通过查询数 阅读全文
posted @ 2022-06-14 07:46 赛泰先生 阅读(1426) 评论(5) 推荐(2) 编辑
摘要:一、序言 当我们在编写Java应用的时候,很少会注意Java程序是如何被运行的,如何被操作系统管理和调度的。带着好奇心,探索一下Java虚拟机启动过程。 1、素材准备 从Java源代码、Java字节码、Java虚拟机、操作系统四个角度分解启动过程。 public class HelloWorld { 阅读全文
posted @ 2022-05-27 11:10 赛泰先生 阅读(635) 评论(0) 推荐(1) 编辑
摘要:一、序言 指令重排在单线程环境下有利于提高程序的执行效率,不会对程序产生负面影响;在多线程环境下,指令重排会给程序带来意想不到的错误。 本文对多线程指令重排问题进行复原,并针对指令重排给出相应的解决方案。 二、问题复原 (一)关联变量 下面给出一个能够百分之百复原指令重排的例子。 public cl 阅读全文
posted @ 2022-04-23 11:34 赛泰先生 阅读(300) 评论(0) 推荐(0) 编辑
摘要:一、序言 在Web开发中,总有一些接口需要暴露在用户认证前访问,短信发送接口特别是短信验证码注册接口便是其中典型的一类,这类接口具有如下特点: 流量在用户认证之前 流量在用户认证之前,意味着无法获取用户ID等唯一标识符信息对流量限流 手机号未知 手机号未知意味着无法对待发送短信的手机号做精准检测,判 阅读全文
posted @ 2022-04-12 11:42 赛泰先生 阅读(2664) 评论(18) 推荐(5) 编辑
摘要:一、序言 Java多线程编程线程池被广泛使用,甚至成为了标配。 线程池本质是池化技术的应用,和连接池类似,创建连接与关闭连接属于耗时操作,创建线程与销毁线程也属于重操作,为了提高效率,先提前创建好一批线程,当有需要使用线程时从线程池取出,用完后放回线程池,这样避免了频繁创建与销毁线程。 // 任务 阅读全文
posted @ 2022-04-06 11:48 赛泰先生 阅读(340) 评论(0) 推荐(0) 编辑
摘要:定时任务使用指南 如果你想做定时任务,有高可用方面的需求,或者仅仅想入门快,上手简单,那么选用它准没错。 定时任务模块是对Quartz框架进一步封装,使用更加简洁。 1、引入依赖 <dependency> <groupId>xin.altitude.cms</groupId> <artifactId 阅读全文
posted @ 2022-04-01 21:16 赛泰先生 阅读(761) 评论(5) 推荐(2) 编辑
摘要:一、序言 Spring Cache是Spring体系下标准化缓存框架。Spring Cache有如下优势: 缓存品种多 支持缓存品种多,常见缓存Redis、EhCache、Caffeine均支持。它们之间既能独立使用,也能组合使用。 平滑迁移 Spring内部支持的缓存,可实现无缝平滑迁移,无需修改 阅读全文
posted @ 2022-03-29 15:32 赛泰先生 阅读(755) 评论(2) 推荐(1) 编辑
摘要:一、序言 目前企业级主流使用的Java版本是8,垃圾回收器支持手动修改为G1,G1垃圾回收器是Java 11的默认设置,因此G1垃圾回收器可以用很长时间,现阶段垃圾回收器优化意味着针对G1垃圾回收器优化。 为了简化讨论,下面假设针对4C/16G物理机器进行优化。 二、G1概览 (一)了解G1 1、最 阅读全文
posted @ 2022-03-18 11:00 赛泰先生 阅读(1075) 评论(2) 推荐(0) 编辑
摘要:一、序言 在并发场景中,当热点缓存Key失效时,流量瞬间打到数据库中,此所谓缓存击穿现象;当大范围的缓存Key失效时,流量也会打到数据库中,此所谓缓存雪崩现象。 当使用分布式行锁时,能够有效解决缓存击穿问题;当使用分布式表锁时,能够解决缓存雪崩问题。实际操作中,分布式表锁不在考虑范围,理由是降低并发 阅读全文
posted @ 2022-03-16 09:43 赛泰先生 阅读(451) 评论(0) 推荐(0) 编辑
摘要:一、序言 在分布式并发系统中,数据库与缓存数据一致性是一项富有挑战性的技术难点。本文将讨论数据库与缓存数据一致性问题,并提供通用的解决方案。 假设有完善的工业级分布式事务解决方案,那么数据库与缓存数据一致性便迎刃而解,实际上,目前分布式事务不成熟。 二、不同的声音 在数据库与缓存数据一致解决方式中, 阅读全文
posted @ 2022-03-15 10:29 赛泰先生 阅读(1040) 评论(2) 推荐(3) 编辑
摘要:一、序言 延迟任务应用广泛,延迟任务典型应用场景有订单超时自动取消;支付回调重试。其中订单超时取消具有幂等性属性,无需考虑重复消费问题;支付回调重试需要考虑重复消费问题。 延迟任务具有如下特点:在未来的某个时间点执行;一般仅执行一次。 1、实现原理 生产者将带有延迟信息的消息发送到RabbitMQ交 阅读全文
posted @ 2022-03-08 08:18 赛泰先生 阅读(788) 评论(2) 推荐(1) 编辑
摘要:一、序言 在实际开发中常常遇到如下需求:判断当前元素是否存在于已知的集合中,将已知集合中的元素维护一个HashSet,使用时只需耗时O(1)的时间复杂度便可判断出结果,Java内部或者Redis均提供相应的数据结构。使用此种方式除了占用内存空间外,几乎没有其它缺点。 当数据量达到亿级别时,内存空间的 阅读全文
posted @ 2022-03-04 09:19 赛泰先生 阅读(887) 评论(0) 推荐(1) 编辑
摘要:一、序言 在使用MyBatis、MybatisPlus等DAO层数据库访问框架式,常常会与一级缓存、二级缓存打交道,为了增强对缓存体系的整体把控力,提高软件应用响应速度,这里对三级缓存一次梳理。 缓存固然能够提高系统性能,与此同时也带来了脏数据的副作用,系统的缓存体系、缓存结构、缓存策略、缓存介质等 阅读全文
posted @ 2022-03-02 10:02 赛泰先生 阅读(173) 评论(0) 推荐(0) 编辑
摘要:一、序言 在实际业务中,单表数据增长较快,很容易达到数据瓶颈,比如单表百万级别数据量。当数据量继续增长时,数据的查询性能即使有索引的帮助下也不尽如意,这时可以引入数据分库分表技术。 本文将基于SpringBoot+MybatisPlus+Sharding-JDBC+Mysql实现企业级分库分表。 1 阅读全文
posted @ 2022-03-01 08:50 赛泰先生 阅读(1534) 评论(1) 推荐(3) 编辑
摘要:一、序言 Caffeine是一个进程内部缓存框架,使用了Java 8最新的[StampedLock]乐观锁技术,极大提高缓存并发吞吐量,一个高性能的 Java 缓存库,被称为最快缓存。 二、缓存简介 (一)缓存对比 从横向对常用的缓存进行对比,有助于加深对缓存的理解,有助于提高技术选型的合理性。下面 阅读全文
posted @ 2022-02-28 08:55 赛泰先生 阅读(2851) 评论(1) 推荐(0) 编辑
摘要:一、序言 面向大数据量查询数据库,优点是在较大数据量(千万级)的前提下具有较好的查询性能。 1、应用场景 ClickHouse应用于OLAP(在线分析处理)领域,具体来说满足如下特点使用此技术比较合适: 事务型数据库表通过连表查询转换成宽表 聚合(统计)计算使用较多 对查询效率要求较高,有限时间范围 阅读全文
posted @ 2022-02-25 09:30 赛泰先生 阅读(827) 评论(2) 推荐(0) 编辑
摘要:一、序言 空值异常是应用运行时常见的异常,传统方式为了编写健壮的应用,常常使用多层嵌套逻辑判断回避空指针异常。Java8新特性之Optional为此类问题提供了优雅的解决方式。 广大程序员朋友对空值异常刻骨铭心,因此Optional一经推出,广受赞誉。 二、问题复原 (一)素材准备 public c 阅读全文
posted @ 2022-02-24 10:52 赛泰先生 阅读(391) 评论(0) 推荐(1) 编辑
摘要:一、序言 SpringBoot 2.6.x不推荐使用循环依赖,这是一个好消息,SpringBoot从底层逐渐引导开发者书写规范的代码,同时也是个忧伤的消息,循环依赖的应用场景实在是太广泛了。 如果从低版本升级到2.6.x,那么很大概率遇到的第一个问题便是循环依赖问题。 二、问题复原 1、代码说明 下 阅读全文
posted @ 2022-02-23 15:49 赛泰先生 阅读(2457) 评论(0) 推荐(2) 编辑
摘要:一、序言 UCode Cms管理系统是面向企业级应用软件开发的脚手架。当前版本1.3.4。快速体验: git clone https://gitee.com/decsa/demo-cms.git (一)项目特点 1、源码开源 源码开源并且使用MIT开源许可协议,个人或者企业用户免费放心使用,项目源码 阅读全文
posted @ 2022-02-22 08:52 赛泰先生 阅读(716) 评论(0) 推荐(1) 编辑