Java知识图谱
文章平均质量分 85
赛先生和泰先生
这个作者很懒,什么都没留下…
展开
-
MybatisPlus Lambda表达式 聚合查询 分组查询 COUNT SUM AVG MIN MAX GroupBy
本方案很好的实现了MybatisPlus基于Lambda表达式实现聚合操作,代码在形式上与单表保持统一,代码优雅。原创 2022-11-07 17:49:44 · 7924 阅读 · 0 评论 -
基于MybatisPlus代码生成器(2.0新版本)
实时读取库表结构元数据信息,比如表名、字段名、字段类型、注释等,选中修改后的表,点击,代码成即可提现出表结构的变化。单表快速转化restful风格的API接口并对外暴露服务。对于百余张表的数据库,使用代码生成器让开发事半功倍。多表连接查询。多表连接查询默认不开启,需要在全局文件中手动配置。开启多表连接查询后,代码生成器会自动读取数据库元数据信息中的,分别生成、、风格的源代码。生成的代码接口可通过Swagger暴露。代码生成器运行依赖,版本不限。Mysql数据库中库表结构为用户自定义的库表,代码生成将会读取。原创 2022-06-16 09:41:22 · 516 阅读 · 0 评论 -
JDK内置锁深入探究
一、序言本文讲述仅针对 JVM 层次的内置锁,不涉及分布式锁。锁有多种分类形式,比如公平锁与非公平锁、可重入锁与非重入锁、独享锁与共享锁、乐观锁与悲观锁、互斥锁与读写锁、自旋锁、分段锁和偏向锁/轻量级锁/重量级锁。下面将配合示例讲解各种锁的概念,期望能够达到如下目标:一是在生产环境中不错误的使用锁;二是在生产环境中选择恰当的锁。对锁了解不多的情况下,应该首先保证业务的正确性,然后考虑性能,比如万金油synchronized锁或者自带多重属性的ReentrantReadWriteLock锁。不因并发导原创 2022-04-20 11:33:48 · 581 阅读 · 0 评论 -
Java多线程与线程池技术
一、序言Java多线程编程线程池被广泛使用,甚至成为了标配。线程池本质是池化技术的应用,和连接池类似,创建连接与关闭连接属于耗时操作,创建线程与销毁线程也属于重操作,为了提高效率,先提前创建好一批线程,当有需要使用线程时从线程池取出,用完后放回线程池,这样避免了频繁创建与销毁线程。// 任务Runnable runnable = () -> System.out.println(Thread.currentThread().getId());在应用中优先选用线程池执行异步任务,根据不同的场原创 2022-04-06 12:00:40 · 139 阅读 · 0 评论 -
Quartz高可用定时任务快速上手
定时任务使用指南如果你想做定时任务,有高可用方面的需求,或者仅仅想入门快,上手简单,那么选用它准没错。定时任务模块是对Quartz框架进一步封装,使用更加简洁。1、引入依赖<dependency> <groupId>xin.altitude.cms</groupId> <artifactId>ucode-cms-quartz</artifactId> <version>1.5.4.1</versio原创 2022-04-01 21:31:30 · 773 阅读 · 0 评论 -
请求合并与拆分在并发场景中应用
一、序言在并发场景中,当热点缓存Key失效时,流量瞬间打到数据库中,此所谓缓存击穿现象;当大范围的缓存Key失效时,流量也会打到数据库中,此所谓缓存雪崩现象。当使用分布式行锁时,能够有效解决缓存击穿问题;当使用分布式表锁时,能够解决缓存雪崩问题。实际操作中,分布式表锁不在考虑范围,理由是降低并发量。本文将从另一个角度出发,将请求流量合并和拆分,以提高系统的并发量。二、理论基础流量的合并与拆分原理是将多条请求合并成一条请求,执行后再将结果拆分。在数据库与缓存架构中,缓存Key失效的瞬间,大量重复请求原创 2022-03-16 09:49:56 · 244 阅读 · 0 评论 -
数据库与缓存数据一致性解决方案
一、序言在分布式并发系统中,数据库与缓存数据一致性是一项富有挑战性的技术难点。本文将讨论数据库与缓存数据一致性问题,并提供通用的解决方案。假设有完善的工业级分布式事务解决方案,那么数据库与缓存数据一致性便迎刃而解,实际上,目前分布式事务不成熟。二、不同的声音在数据库与缓存数据一致解决方式中,有各种声音。先操作数据库后缓存还是先缓存后数据库缓存是更新还是删除1、操作的先后顺序在并发系统中,数据库与缓存双写场景下,为了追求更大的并发量,操作数据库与缓存显而易见不会同步进行。前者操作成功后者以原创 2022-03-15 10:45:34 · 984 阅读 · 0 评论 -
基于Redis分布式BitMap的应用
一、序言在实际开发中常常遇到如下需求:判断当前元素是否存在于已知的集合中,将已知集合中的元素维护一个HashSet,使用时只需耗时O(1)的时间复杂度便可判断出结果,Java内部或者Redis均提供相应的数据结构。使用此种方式除了占用内存空间外,几乎没有其它缺点。当数据量达到亿级别时,内存空间的占用显著表现出来,BitMap便是解决此类问题的一种途径。二、BitMap结构1、内存消耗分析Redis BitMap能够存储的数据范围为[0,2^32-1],超过Integer.MAX_VALUE上界值。原创 2022-03-04 09:45:43 · 899 阅读 · 0 评论 -
应用系统缓存体系深入研究(Java版)
一、序言在使用MyBatis、MybatisPlus等DAO层数据库访问框架式,常常会与一级缓存、二级缓存打交道,为了增强对缓存体系的整体把控力,提高软件应用响应速度,这里对三级缓存一次梳理。缓存固然能够提高系统性能,与此同时也带来了脏数据的副作用,系统的缓存体系、缓存结构、缓存策略、缓存介质等对可能出现的脏数据产生影响。缓存是一把双刃剑,既能够提高应用系统的效率,同时避免脏数据发生也是不小的工作量。特别是不同的层次的缓存同时使用时,出现数据异常的概率快速提高。二、一级缓存以MyBatis技术为原创 2022-03-02 09:52:54 · 117 阅读 · 0 评论 -
SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分库分表实践
一、序言在实际业务中,单表数据增长较快,很容易达到数据瓶颈,比如单表百万级别数据量。当数据量继续增长时,数据的查询性能即使有索引的帮助下也不尽如意,这时可以引入数据分库分表技术。本文将基于SpringBoot+MybatisPlus+Sharding-JDBC+Mysql实现企业级分库分表。1、组件及版本选择SpringBoot 2.6.xMybatisPlus 3.5.0Sharding-JDBC 4.1.1Mysql 5.7.352、预期目标使用上述组件实原创 2022-03-01 10:16:04 · 472 阅读 · 0 评论 -
ClickHouse在大数据领域应用实践
一、序言面向大数据量查询数据库,优点是在较大数据量(千万级)的前提下具有较好的查询性能。1、应用场景ClickHouse应用于OLAP(在线分析处理)领域,具体来说满足如下特点使用此技术比较合适:事务型数据库表通过连表查询转换成宽表聚合(统计)计算使用较多对查询效率要求较高,有限时间范围内能够容忍非幂等性查询(最终一致性)2、学习姿势大多数学习ClickHouse是从OLTP数据库开始的,比如Mysql数据库。对于千万级别的数据,以InnoDB为存储引擎的表,仅仅是统计表行数这一需求,执原创 2022-02-25 10:23:03 · 329 阅读 · 0 评论 -
【Java8新特性】Optional类在处理空值判断场景的应用 回避空指针异常 编写健壮的应用程序
一、序言空值异常是应用运行时常见的异常,传统方式为了编写健壮的应用,常常使用多层嵌套逻辑判断回避空指针异常。Java8新特性之Optional为此类问题提供了优雅的解决方式。广大程序员朋友对空值异常刻骨铭心,因此Optional一经推出,广受赞誉。二、问题复原(一)素材准备public class LoginUser implements UserDetails { private Long deptId; private String token; private Lon原创 2022-02-24 11:07:47 · 304 阅读 · 0 评论 -
SpringBoot2.6.x默认禁用循环依赖后的应对策略
一、序言SpringBoot 2.6.x不推荐使用循环依赖,这是一个好消息,SpringBoot从底层逐渐引导开发者书写规范的代码,同时也是个忧伤的消息,循环依赖的应用场景实在是太广泛了。如果从低版本升级到2.6.x,那么很大概率遇到的第一个问题便是循环依赖问题。二、问题复原1、代码说明下面风格的代码比较普遍:两个类都有调用对方方法的需求,因此很容易写成循环引用。@Servicepublic class TbDeptServiceImpl extends ServiceImpl<TbDe原创 2022-02-23 09:34:43 · 3740 阅读 · 1 评论 -
【摸鱼神器】UCode Cms管理系统 内置超好用的代码生成器 解决多表连接痛点
一、序言UCode Cms内容管理系统是Java知识图谱的重要组成部分,是面向企业级应用软件开发的脚手架。当前版本1.3.3。使用简易demo项目快速体验地址 。(一)项目特点1、源码开源源码开源并且使用MIT开源许可协议,个人或者企业用户免费放心使用,项目源码地址。2、快速上手新建空项目,引入相关依赖,初始化数据库,启动项目,一个项目脚手架便搭建完成,更加便捷的操作是克隆demo项目,修改数据库连接并启动项目。<!--ucode-cms核心依赖--><dependenc原创 2022-02-21 12:24:19 · 1209 阅读 · 1 评论 -
基于SSM源代码风格Java代码生成器 Maven版开箱即用 摸鱼神器
一、序言UCode Cms 是一款Maven版的Java源代码生成器,是快速构建项目的利器。代码生成器模块属于可拆卸模块,即按需引入。代码生成器生成SSM(Spring、SpringBoot、MybatisPlus)风格的源代码。面试时经常提到面向对象编程,实际开发中常常是面向数据库编程,随着需求的快速变化,数据库的库表结构也需要相应变化,如何根据库表结构的变化,快速响应到源代码层次,是Java代码生成器主要的关切点。功能亮点实时读取库表结构元数据信息,比如表名、字段名、字段类型、注释等,选中修改后原创 2022-02-16 11:46:05 · 990 阅读 · 0 评论 -
Lombok入门到精通
一、序言对于 Lombok 的使用是有争议的,作者对 Lombok 的态度是强烈推荐,甚至认为应当将部分常用功能直接以 JDK 的形式集成。在构建实体类过程中写一堆Set/Get方法毫无意义;默认继承Object类的toString方法官方建议重写,每个实体类为了表达具象的实体信息而重写toString方法,操作繁琐。二、常用注解解析(一)实体类注解下面讨论的注解是添加到实体类上面的。public class XUser { private Integer userId; pri原创 2022-02-16 08:56:48 · 177 阅读 · 0 评论 -
Redis集群模式高可用实践
本文搭建Redis集群服务原创 2022-02-15 08:00:00 · 265 阅读 · 0 评论 -
Jenkins敏捷开发 自动化构建工具
一、序言Jenkins 是一款自动化构建工具,能够基于 Maven 构建后端 Java 项目,也能够基于 nodejs 构建前端 vue 项目,并且有可视化 web 界面。所谓自动化构建是按照一定的策略执行打包脚本,相对于普通脚本构建,Jenkins 有如下优势:构建队列中能够同时构建多个项目,包含前端和后端项目;定时构建;代码仓库触发构建(普通脚本无法实现);Jenkins 体现一种项目管理思维:开发人员的贴心助理,集中精力专注于业务开发;尽早的实现代码集成(包含前后端)以便尽早发现问题;原创 2022-02-11 09:05:46 · 269 阅读 · 0 评论 -
Redis哨兵模式高可用解决方案
一、序言Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务。1、目标与收获一主两从三哨兵Redis服务,基本能够满足中小型项目的高可用要求,使用Supervisor监控并管理Redis实例。通过本文将完成如下目标:哨兵模式服务规划与搭建哨兵模式服务相比于单机版服务更加可靠,适合读写分离、数据量不是很大、要求可靠稳定性的场景。客户端整合与读写分离通过Spring框架对哨兵模式进行连接,完成生产环境的常见操作。2、端口规划端口规划是完原创 2022-02-10 09:42:46 · 720 阅读 · 0 评论 -
Nginx网络压缩 CSS压缩 图片压缩 JSON压缩
使用Nginx作为web应用服务时,会代理如下常见文件:js、css、JSON、图片等,本文提供基于Nginx内置的压缩技术,提供网络请求响应速度的解决方案。网络压缩的原理是消耗CPU资源,减少文件在公网传输的大小,提高响应速度。相比于CPU的计算资源,网络带宽通常较为昂贵,因此通过CPU资源置换网络带宽资源在实际生产中是可行的操作方案。原创 2022-02-08 09:28:30 · 2135 阅读 · 0 评论 -
Supervisor多进程管理 异常自动重启 可视化管理
Supervisor是多进程管理工具,在Docker中相关联的进程能够通过supervisor来管理。微服务项目开发阶段,可用于微服务子项目的启动管理。支持web可视化管理,能够极大方面开发者对项目状态的监控和重启管理。原创 2022-02-07 14:26:06 · 1844 阅读 · 0 评论