![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
常用
文章平均质量分 73
book多得
努力努力再努力
展开
-
聊一聊分库分表(是什么?怎么分?有什么坑?)
数据库数据会随着业务的发展而不断增多,因此数据操作,如增删改查的开销也会越来越大。再加上的资源有限(CPU、磁盘、内存、IO 等)。最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。换句话说需要合理的数据库架构来存放不断增长的数据,这个就是分库分表的设计初衷。目的就是为了缓解数据库的压力,最大限度提高数据操作的效率。原创 2024-04-12 16:04:20 · 648 阅读 · 0 评论 -
面试官:CPU狂飙666%,该怎么处理?
常见容易发生CPU飙升200%的场景场景:1:MySQL进程飙升900%大家在使用MySQL过程,想必都有遇到过CPU突然过高,或者达到200%以上的情况。数据库执行查询或数据修改操作时,系统需要消耗大量的CPU资源维护从存储系统、内存数据中的一致性。并发量大并且大量SQL性能低的情况下,比如字段是没有建立索引,则会导致快速CPU飙升,如果还开启了慢日志记录,会导致性能更加恶化。生产上有MYSQL 飙升900% 的恶劣情况。场景2:Java进程飙升900原创 2024-04-10 16:19:23 · 633 阅读 · 0 评论 -
聊聊Redis消息队列stream
Redis Stream 是 Redis 5.0 版本中引入的一种数据结构,用于存储和处理消息流。它类似于消息队列,但具有更高的性能和更丰富的特性。ACK 操作用于确认消息已经被消费,从而避免重复消费。原创 2024-04-10 16:18:32 · 1270 阅读 · 0 评论 -
Redis分段锁,如何设计?
一个分布式系统中,存在客户端多个用户,同时通过多个业务微服务,发起一个数据修改。如果没有分布式锁机制保证,在那多台机器上的多个服务可能进行并发修改操作,导致数据修改的不一致,出现脏读脏写,这就会造成问题。而分布式锁机制就是为了解决类似这类问题,保证多个服务之间互斥的访问共享资源,如果一个服务抢占了分布式锁,其他服务没获取到锁,就不进行后续操作。上图中,哪个客户端的服务抢占了分布式锁,就可以去扣减库存。其他服务没获取到分布式锁,就不进行后续操作。原创 2024-03-07 17:02:51 · 1372 阅读 · 1 评论 -
常见四种限流算法详解(附:javaDemo)
现代互联网很多业务场景,比如秒杀、下单、查询商品详情,最大特点就是高并发,而往往我们的系统不能承受这么大的流量,继而产生了很多的应对措施:CDN、消息队列、多级缓存、异地多活。但是无论如何优化,终究由硬件的物理特性决定了我们系统性能的上限,如果强行接收所有请求,往往造成雪崩。这时候限流熔断就发挥作用了,限制请求数,快速失败,保证系统满负载又不超限。极致的优化,就是将硬件使用率提高到100%,但永远不会超过100%原创 2024-03-07 17:01:22 · 1092 阅读 · 1 评论 -
面试官:如何设计幂等性接口
什么是幂等性?所谓幂等性,就是一次操作和多次操作同一个资源,所产生的影响均与一次操作的影响相同。"幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。原创 2024-02-20 09:43:59 · 962 阅读 · 0 评论 -
常用正则表达式,复制粘贴即用
校验密码强度校验中文由数字、英文字母、下划线组成的字符串 校验邮箱地址校验身份证号 校验日期校验金额校验手机号检查IE版本校验IP地址 校验URL 校验文件路径及扩展名 文件路径的正则表达式: 扩展名的正则表达式:提取Hex颜色值匹配HTML标签原创 2024-01-18 14:34:43 · 1123 阅读 · 0 评论 -
Guava: Files 文件工具类
谷歌提供的高性能文件操作工具原创 2024-01-12 15:27:29 · 1177 阅读 · 0 评论 -
Guava:Spiltter 拆分器
Splitter 提供了各种方法来处理分割操作,如集合,字符串,对象等。原创 2024-01-11 09:06:54 · 626 阅读 · 0 评论 -
Guava:CharMatcher字符匹配器
CharMatcher 提供了各种方法来处理各种 JAVA char 类型值。原创 2024-01-11 09:06:08 · 1056 阅读 · 0 评论 -
Guava:StopWatch 计时器
StopWatch用来计算经过的时间(精确到纳秒)。这个类比调用优势在于:性能表现形式更丰富。原创 2024-01-10 09:22:18 · 659 阅读 · 0 评论 -
Guava:Range 区间范围工具
Range表示一个间隔或一个序列。它被用于获取一组数字/串在一个特定范围之内。可比较类型的区间API,包括连续和离散类型。Range 定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type)。比如1到100之间的整型数据。在数学里面的范围是有边界和无边界之分的;同样,在Guava中也有这个说法。如果这个范围是有边界的,那么这个范围又可以分为包括 开集(不包括端点)和 闭集(包括端点);如果是无解的可以用+∞表示。原创 2024-01-10 09:21:35 · 1027 阅读 · 0 评论 -
Guava:Strings 字符串处理工具
String实例有关的静态实用程序方法。原创 2024-01-09 17:15:44 · 997 阅读 · 0 评论 -
Guava:Ordering 排序工具
排序器Ordering是 Guava流畅风格比较器Comparator的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。从实现上说,Ordering 实例就是一个特殊的 Comparator 实例。Ordering 把很多基于 Comparator 的静态方法(如)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和增强现有的比较器。原创 2024-01-09 15:04:49 · 1183 阅读 · 0 评论 -
Guava:Objects 对象工具
Objects 类提供适用于所有对象,如equalshashCode等辅助函数。当一个对象中的字段可以为 null 时,实现 Object.equals 方法会很痛苦,因为不得不分别对它们进行 null 检查。使用 Objects.equal 帮助你执行 null 敏感的 equals 判断,从而避免抛出 NullPointerException。原创 2024-01-09 14:51:33 · 619 阅读 · 0 评论 -
Guava:Throwables 异常工具
Guava Throwables 类Throwable 类,简化异常和错误的传播与检查。原创 2024-01-06 16:58:08 · 569 阅读 · 0 评论 -
Guava:Cache强大的本地缓存框架
Guava Cache 非常强大,它并没有后台任务线程异步的执行 load 或者 reload 方法,而是通过请求线程来执行相关操作。为了提升系统性能,我们可以从如下两个方面来处理 :配置 refresh < expire,减少大量线程阻塞的概率。采用异步刷新的策略,也就是线程异步加载数据,期间所有请求返回旧的缓存值。尽管如此,我们在使用这种方式时,依然需要考虑的缓存和数据库一致性问题。原创 2024-01-06 16:51:01 · 2282 阅读 · 0 评论 -
if-else太丑?策略模式则是杀鸡用牛刀?Map+函数式接口方法刚刚好!
Map+函数式接口 用上了Java8的新特性lambda表达式 判断条件放在key中 对应的业务逻辑放在value中这样子写的好处是非常直观,能直接看到判断条件对应的业务逻辑原创 2023-12-11 10:38:37 · 94 阅读 · 0 评论 -
Guava:常用功能,防止阁下重复造轮子
Guava 常用功能,防止阁下重复造轮子。原创 2023-10-12 11:32:07 · 161 阅读 · 0 评论 -
玩转YAML配置文件占位符 ,同事纷纷直呼大佬
Spring Boot配置文件支持占位符,一些用法如下:为server.port设置一个随机端口。。。。。原创 2023-09-22 22:43:48 · 1024 阅读 · 0 评论 -
在枚举类写运行代码优雅的替换了if-else
网络上有很多解决思路,有工厂模式、策略模式......,但是有的时候每一个分支只是小小的代码块,用设计模式时间成本又太高了,可以替换大量的if-else语句,且具备较好的可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除if-else。在平时的项目里总是不断地加需求,加着加着就不知不觉的多了一大堆if-else,回首一看,脑子里就一个字,这是翔吗?原创 2023-09-22 22:33:09 · 197 阅读 · 0 评论 -
Springboot GET和POST请求的常用参数获取方式
可以在控制器方法的参数上使用@RequestParam注解来获取请求中的参数值。可以为@RequestParam注解的参数提供默认值,以处理参数缺失的情况。可以使用@RequestParam Map来获取所有的请求参数键值对。如果参数是作为路径的一部分传递的,可以使用@PathVariable注解来获取参数值。可以在控制器方法的参数列表中添加HttpServletRequest对象,然后从中获取请求参数。原创 2023-09-02 23:06:12 · 661 阅读 · 0 评论 -
BigDecimal百科全书
在需要精确的小数计算时再使用BigDecimal,BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。故一般精度的计算没必要使用BigDecimal。尽量使用参数类型为String的构造函数。BigDecimal都是不可变的(immutable)的, 在进行每一次四则运算时,都会产生一个新的对象 ,所以在做加减乘除运算时要记得要保存操作后的值。原创 2023-08-30 23:10:57 · 320 阅读 · 0 评论 -
java 遍历途中修改数据以及删除数据
在Java中,如果你需要一边遍历一边修改数据或删除数据,有几种常见的方法可以实现。关键点是要避免在遍历时直接修改或删除集合中的元素,因为这可能导致ConcurrentModificationException异常。原创 2023-07-20 20:45:20 · 2680 阅读 · 0 评论 -
Spring Boot 各种回滚骚操作实战(自动回滚、手动回滚、部分回滚)
事务,就是一组操作数据库的动作集合。事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。原创 2023-07-16 12:38:51 · 2763 阅读 · 0 评论 -
HashMap
对于要求查询次数特别多,查询效率比较高同时插入和删除的次数比较少的情况下,通常会选择ArrayList,因为它的底层是通过数组实现的。对于插入和删除次数比较多同时在查询次数不多的情况下,通常会选择LinkedList,因为它的底层是通过链表实现的。但现在同时要求插入,删除,查询效率都很高的情况下我们该如何选择容器呢?那么就有一种新的容器叫HashMap,他里面既有数组结构,也有链表结构,所以可以弥补相互的缺点。而且HashMap主要用法是get()和put() 。原创 2023-04-28 15:11:56 · 1015 阅读 · 0 评论 -
Redis 持久化八股文
Redis的持久化机制Redis 提供两种持久化机制: RDB(默认) 和 AOF 机制,在 Redis4.0 之后还提供了混合持久化1. RDB:是指内存快照,指内存中的数据在某一个时刻的状态记录。2. AOF:AOF日志 里记录的是 Redis 收到的每一条命令,这些命令是以文本形式保存的。3. 混合持久化:RDB 以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作。原创 2023-04-20 10:24:17 · 503 阅读 · 0 评论 -
java如何动态的执行groovy字符串
是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。原创 2023-04-04 15:20:28 · 624 阅读 · 0 评论 -
springboot如何判断Redis Stream消费组是否存在
直接上代码原创 2023-03-24 17:59:37 · 732 阅读 · 0 评论 -
Redis队列详解(springboot实战)
MQ应用有很多,比如ActiveMQ,RabbitMQ,Kafka等,但是也可以基于redis来实现,可以降低系统的维护成本和实现复杂度,本篇介绍redis中实现消息队列的几种方案,并通过springboot实战使其更易懂。 1. 基于List的 LPUSH+BRPOP 的实现2. 基于Sorted-Set的实现3. PUB/SUB,订阅/发布模式4. 基于Stream类型的实现原创 2023-03-23 14:19:01 · 8352 阅读 · 1 评论 -
Java线程意外退出线程后自动重启
最近有个简单需求,创建了一个线程用来循环读取队列中的数据,然后存到数据库,一切美好都源自于想象。殊不知线程总是莫名其妙的死亡。所以决定用观察者模式去监听线程;原创 2023-03-21 11:45:05 · 1142 阅读 · 0 评论 -
主流的“对象转换工具”使用示例大全以及性能的对比
总结 BeanUtils.copyProperties 是大家代码里最常出现的工具类,但只要你不把它用错成 Apache 包下的,而是使用 Spring 提供的,就基本还不会对性能造成多大影响。 但如果说性能更好,可替代手动get、set的,还是 MapStruct 更好用,因为它本身就是在编译期生成get、set代码,和我们写get、set一样。 其他一些组件包主要基于 AOP、ASM、CGlib,的技术手段实现的,所以也会有相应的性能损耗原创 2023-03-08 15:26:09 · 1480 阅读 · 0 评论 -
springBoot整合easyPoi,填充Excel模板
模板是处理复杂Excel的简单方法,复杂的Excel样式,可以用Excel直接编辑,完美的避开了代码编写样式的雷区,同时指令的支持,也提高了模板的有效性。下面列举下EasyPoi支持的指令以及作用,最主要的就是各种fe的用法转载 2023-01-06 16:05:15 · 3539 阅读 · 2 评论 -
常用HTTP状态码含义
当客户端向运行 IIS 的服务器发送一个 HTTP 请求,并且该请求包含服务器无法识别的 HTTP 动词时,就会发生此错误。IIS 定义了几个不同的500错误,用于指示更为具体的错误原因。IIS 定义了几个不同的502错误,用于指示更为具体的错误原因。IIS 定义了几个不同的404错误,用于指示更为具体的错误原因。IIS 定义了几个不同的403错误,用于指示更为具体的错误原因。IIS 定义了几个不同的401错误,用于指示更为具体的错误原因。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。原创 2022-12-13 11:55:27 · 162 阅读 · 0 评论