自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

转载 聊一聊Redis大key(是什么?怎么处理?如何优化?)

Redis大Key其实并不是字面意思,不是指存储在Redis中的某个Key的大小超过一定的阈值,而是指该Key所对应的value过大。对于string类型来说,一般情况下超过10KB则认为是大Key,对于set,zset,hash等类型来说,一般数据超过5000条即认为是大Key。当Redis存储的Key过大时,会对Redis的性能产生负面影响,如内存使用率过高、写入和读取数据的速度变慢等。

2024-04-12 16:04:57 184

原创 聊一聊分库分表(是什么?怎么分?有什么坑?)

数据库数据会随着业务的发展而不断增多,因此数据操作,如增删改查的开销也会越来越大。再加上的资源有限(CPU、磁盘、内存、IO 等)。最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。换句话说需要合理的数据库架构来存放不断增长的数据,这个就是分库分表的设计初衷。目的就是为了缓解数据库的压力,最大限度提高数据操作的效率。

2024-04-12 16:04:20 590

原创 面试官:CPU狂飙666%,该怎么处理?

常见容易发生CPU飙升200%的场景场景:1:MySQL进程飙升900%大家在使用MySQL过程,想必都有遇到过CPU突然过高,或者达到200%以上的情况。数据库执行查询或数据修改操作时,系统需要消耗大量的CPU资源维护从存储系统、内存数据中的一致性。并发量大并且大量SQL性能低的情况下,比如字段是没有建立索引,则会导致快速CPU飙升,如果还开启了慢日志记录,会导致性能更加恶化。生产上有MYSQL 飙升900% 的恶劣情况。场景2:Java进程飙升900

2024-04-10 16:19:23 574

原创 聊聊Redis消息队列stream

Redis Stream 是 Redis 5.0 版本中引入的一种数据结构,用于存储和处理消息流。它类似于消息队列,但具有更高的性能和更丰富的特性。ACK 操作用于确认消息已经被消费,从而避免重复消费。

2024-04-10 16:18:32 862

原创 面试官:聊一下OOM场景,有什么解决方案?

JDK8 HotSpot JVM 将移除永久区,使用本地内存来存储类元数据信息并称之为:元空间(Metaspace);这与Oracle JRockit 和IBM JVM’s很相似,如下图所示元空间Metaspace(Java7叫永久代或持久代):用于存放JDK自身携带的Class,Interface的元数据(结构信息),也就是运行环境必须的类信息。被装载进此区域的数据不会被GC,关闭JVM才会释放此区域所占用的内存对应方法区,虽然逻辑上JVM规范将方法区描述为堆的一个逻辑部分,但物理上不包含在堆里。

2024-03-11 10:48:20 907

原创 面试官:MySQL的七种日志

error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过log-error=/var/log/mysqld.log 执行mysql错误日志的位置。MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。

2024-03-11 10:35:49 988

原创 Redis分段锁,如何设计?

一个分布式系统中,存在客户端多个用户,同时通过多个业务微服务,发起一个数据修改。如果没有分布式锁机制保证,在那多台机器上的多个服务可能进行并发修改操作,导致数据修改的不一致,出现脏读脏写,这就会造成问题。而分布式锁机制就是为了解决类似这类问题,保证多个服务之间互斥的访问共享资源,如果一个服务抢占了分布式锁,其他服务没获取到锁,就不进行后续操作。上图中,哪个客户端的服务抢占了分布式锁,就可以去扣减库存。其他服务没获取到分布式锁,就不进行后续操作。

2024-03-07 17:02:51 1154 1

原创 常见四种限流算法详解(附:javaDemo)

现代互联网很多业务场景,比如秒杀、下单、查询商品详情,最大特点就是高并发,而往往我们的系统不能承受这么大的流量,继而产生了很多的应对措施:CDN、消息队列、多级缓存、异地多活。但是无论如何优化,终究由硬件的物理特性决定了我们系统性能的上限,如果强行接收所有请求,往往造成雪崩。这时候限流熔断就发挥作用了,限制请求数,快速失败,保证系统满负载又不超限。极致的优化,就是将硬件使用率提高到100%,但永远不会超过100%

2024-03-07 17:01:22 1010

原创 面试官:如何设计幂等性接口

什么是幂等性?所谓幂等性,就是一次操作和多次操作同一个资源,所产生的影响均与一次操作的影响相同。"幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。

2024-02-20 09:43:59 921

原创 从底层理解MySQL-字符类型

MySQL中除了数值类型外,另一个用的比较多的就是字符类型了。字符类型有很多不同种类:VARCHAR,CHAR,BLOB,TEXT

2024-02-20 09:42:58 1056

原创 接口性能优化常见12式

本文将给小伙伴们分享一下接口优化的常用方案。

2024-01-25 17:27:53 1542

原创 面试官:请问泛型擦除、泛型上界、泛型下界、PECS原则 是什么?

泛型的本质是 类型参数化,解决类型爆炸的问题。所谓泛型是指将类型参数化,以达到代码复用提高软件开发工作效率的一种数据类型。

2024-01-25 17:26:55 861 1

原创 常用正则表达式,复制粘贴即用

校验密码强度校验中文由数字、英文字母、下划线组成的字符串 校验邮箱地址校验身份证号 校验日期校验金额校验手机号检查IE版本校验IP地址 校验URL 校验文件路径及扩展名 文件路径的正则表达式: 扩展名的正则表达式:提取Hex颜色值匹配HTML标签

2024-01-18 14:34:43 1093

原创 Guava: Files 文件工具类

谷歌提供的高性能文件操作工具

2024-01-12 15:27:29 1130

原创 Guava:Spiltter 拆分器

Splitter 提供了各种方法来处理分割操作,如集合,字符串,对象等。

2024-01-11 09:06:54 497

原创 Guava:CharMatcher字符匹配器

CharMatcher 提供了各种方法来处理各种 JAVA char 类型值。

2024-01-11 09:06:08 1008

原创 Guava:StopWatch 计时器

StopWatch用来计算经过的时间(精确到纳秒)。这个类比调用优势在于:性能表现形式更丰富。

2024-01-10 09:22:18 615

原创 Guava:Range 区间范围工具

Range表示一个间隔或一个序列。它被用于获取一组数字/串在一个特定范围之内。可比较类型的区间API,包括连续和离散类型。Range 定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type)。比如1到100之间的整型数据。在数学里面的范围是有边界和无边界之分的;同样,在Guava中也有这个说法。如果这个范围是有边界的,那么这个范围又可以分为包括 开集(不包括端点)和 闭集(包括端点);如果是无解的可以用+∞表示。

2024-01-10 09:21:35 941

原创 Guava:Strings 字符串处理工具

String实例有关的静态实用程序方法。

2024-01-09 17:15:44 958

原创 Guava:Ordering 排序工具

排序器Ordering是 Guava流畅风格比较器Comparator的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。从实现上说,Ordering 实例就是一个特殊的 Comparator 实例。Ordering 把很多基于 Comparator 的静态方法(如)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和增强现有的比较器。

2024-01-09 15:04:49 1117

原创 Guava:Objects 对象工具

Objects 类提供适用于所有对象,如equalshashCode等辅助函数。当一个对象中的字段可以为 null 时,实现 Object.equals 方法会很痛苦,因为不得不分别对它们进行 null 检查。使用 Objects.equal 帮助你执行 null 敏感的 equals 判断,从而避免抛出 NullPointerException。

2024-01-09 14:51:33 613

原创 Guava:Throwables 异常工具

Guava Throwables 类Throwable 类,简化异常和错误的传播与检查。

2024-01-06 16:58:08 555

原创 Guava:Cache强大的本地缓存框架

Guava Cache 非常强大,它并没有后台任务线程异步的执行 load 或者 reload 方法,而是通过请求线程来执行相关操作。为了提升系统性能,我们可以从如下两个方面来处理 :配置 refresh < expire,减少大量线程阻塞的概率。采用异步刷新的策略,也就是线程异步加载数据,期间所有请求返回旧的缓存值。尽管如此,我们在使用这种方式时,依然需要考虑的缓存和数据库一致性问题。

2024-01-06 16:51:01 1852

原创 if-else太丑?策略模式则是杀鸡用牛刀?Map+函数式接口方法刚刚好!

Map+函数式接口 用上了Java8的新特性lambda表达式 判断条件放在key中 对应的业务逻辑放在value中这样子写的好处是非常直观,能直接看到判断条件对应的业务逻辑

2023-12-11 10:38:37 82

原创 Guava:常用功能,防止阁下重复造轮子

Guava 常用功能,防止阁下重复造轮子。

2023-10-12 11:32:07 143

原创 玩转YAML配置文件占位符 ,同事纷纷直呼大佬

Spring Boot配置文件支持占位符,一些用法如下:为server.port设置一个随机端口。。。。。

2023-09-22 22:43:48 842

原创 在枚举类写运行代码优雅的替换了if-else

网络上有很多解决思路,有工厂模式、策略模式......,但是有的时候每一个分支只是小小的代码块,用设计模式时间成本又太高了,可以替换大量的if-else语句,且具备较好的可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除if-else。在平时的项目里总是不断地加需求,加着加着就不知不觉的多了一大堆if-else,回首一看,脑子里就一个字,这是翔吗?

2023-09-22 22:33:09 177

原创 Springboot GET和POST请求的常用参数获取方式

可以在控制器方法的参数上使用@RequestParam注解来获取请求中的参数值。可以为@RequestParam注解的参数提供默认值,以处理参数缺失的情况。可以使用@RequestParam Map来获取所有的请求参数键值对。如果参数是作为路径的一部分传递的,可以使用@PathVariable注解来获取参数值。可以在控制器方法的参数列表中添加HttpServletRequest对象,然后从中获取请求参数。

2023-09-02 23:06:12 558

原创 BigDecimal百科全书

在需要精确的小数计算时再使用BigDecimal,BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。故一般精度的计算没必要使用BigDecimal。尽量使用参数类型为String的构造函数。BigDecimal都是不可变的(immutable)的, 在进行每一次四则运算时,都会产生一个新的对象 ,所以在做加减乘除运算时要记得要保存操作后的值。

2023-08-30 23:10:57 312

原创 java 遍历途中修改数据以及删除数据

在Java中,如果你需要一边遍历一边修改数据或删除数据,有几种常见的方法可以实现。关键点是要避免在遍历时直接修改或删除集合中的元素,因为这可能导致ConcurrentModificationException异常。

2023-07-20 20:45:20 2500

原创 Spring Boot 各种回滚骚操作实战(自动回滚、手动回滚、部分回滚)

事务,就是一组操作数据库的动作集合。事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。

2023-07-16 12:38:51 2618

原创 RocketMQ详解+实战+常见面试题

在发布-订阅模型中,消息的发送方称为发布者(Publisher),消息的接收方称为订阅者(Subscriber),服务端存放消息的容器称为主题(Topic)。生产者往某个队列里面发送消息,一个队列可以存储多个生产者的消息,一个队列也可以有多个消费者,但是消费者之间是竞争关系,也就是说每条消息只能被一个消费者消费。总的来说,RocketMQ是一个功能强大的消息中间件系统,具备高吞吐量、可靠性、分布式支持和灵活的消息模型等特点,适用于构建可靠的分布式系统和实时数据处理系统。这是RocketMQ特有的一个功能。

2023-06-06 14:21:58 1997

原创 windows安装RocketMQ

输入:start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true。启动单机的消息队列服务比较简单,不需要写配置文件,只需要依次启动本机的NameServer和Broker即可。浏览器输入地址:http://127.0.0.1:8081/ ,并修改管理界面需要为简体中文。可以自己修改一下应用的端口,和rocketmqserver的ip和端口。进入bin目录下,双击启动mqnameserv.cmd。启动后窗口不要关闭;

2023-06-04 15:27:44 11094 10

原创 布隆过滤器

值得注意的是,4 这个 bit 位由于两个值的哈希函数都返回了这个 bit 位,因此它被覆盖了。目前我们知道布隆过滤器可以支持 add 和 isExist 操作,那么 delete 操作可以么,答案是不可以,例如上图中的 bit 位 4 被两个值共同覆盖的话,一旦你删除其中一个值例如 “tencent” 而将其置位 0,那么下次判断另一个值例如 “baidu” 是否存在的话,会直接返回 false,而实际上你并没有删除它。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

2023-05-31 14:57:12 590

原创 ThreadLocal八股文

1. 为什么要⽤ ThreadLocal?答:为了解决并发编程时,公共资源数据安全问题。(也可使⽤锁的⽅式)并发编程是⼀项⾮常重要的技术,它让我们的程序变得更加⾼效。但在并发的场景中,如果有多个线程同时修改公共变量,可能会出现线程安全问题,即该变量最终结果可能出现异常。为了解决线程安全问题JDK出现了很多技术⼿段,⽐如:使⽤或Lock,给访问公共资源的代码上锁,保证了代码的 原⼦性。

2023-05-15 14:37:05 589 1

原创 ReentrantLock 原理

ReentrantLock是Lock接⼝的默认实现,是⼀种独占锁。相对synchronized⽽⾔,ReentrantLock 提供了更多的操作⽅式以及更细粒度的加锁⽅式。主要特性:1.可重⼊。ReentrantLock是可重⼊锁,因为它会记录之前获得锁线程对象,保存在exclusiveOwenerThread变量中,当⼀个线程要获取锁时,会先判断当前线程是不是已经获取锁的线程。synchronized也是可重⼊锁。12。

2023-05-14 15:03:17 664 2

原创 HashMap

对于要求查询次数特别多,查询效率比较高同时插入和删除的次数比较少的情况下,通常会选择ArrayList,因为它的底层是通过数组实现的。对于插入和删除次数比较多同时在查询次数不多的情况下,通常会选择LinkedList,因为它的底层是通过链表实现的。但现在同时要求插入,删除,查询效率都很高的情况下我们该如何选择容器呢?那么就有一种新的容器叫HashMap,他里面既有数组结构,也有链表结构,所以可以弥补相互的缺点。而且HashMap主要用法是get()和put() 。

2023-04-28 15:11:56 1007

原创 Spring Boot自动装配

Spring Boot自动装配(Automatic Configuration)是指Spring Boot框架中的一种特性,它可以根据应用程序中的依赖关系和配置来自动配置Spring应用程序的各个部分。在Spring Boot中,自动装配通过使用条件化的配置和智能配置来实现(如:condition),这样可以根据应用程序的环境和需要来自动配置不同的组件,例如spring-boot-starter-redis等。自动装配能够大大减少Spring应用程序的配置量,并且使得应用程序更易于维护和升级。

2023-04-25 16:27:26 496

原创 JVM垃圾回收GC 详解(java1.8)

目录垃圾判断算法(你是不是垃圾?)引用计数法可达性算法对象的引用强引用软引用弱引用虚引用对象的自我救赎垃圾回收算法--分代标记清除算法复制算法标记整理法垃圾处理器最容易想到的一种方式是引用计数法,啥叫引用计数法,简单地说,就是对象被引用一次,在它的对象头上加一次引用次数,如果没有被引用(引用次数为 0),则此对象可回收以上代码 ref 引用了右侧定义的对象,所以引用次数是 1 如果在上述代码后面添加一个 ref = null,则由于对象没被引用,引用次数置为 0,由于不被任何变量引用,此时即被回收,

2023-04-22 17:13:34 1360

原创 Mysql整数类型的长度设置究竟有何用?

int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 ... 999这种,如果mysql没有零填充的功能,但是你又要格式化输出等长的数字编号时,那么你只能自己处理了。

2023-04-20 10:36:52 263

JVM内存模型超详版(java1.8).drawio

JVM内存模型超详细版本

2023-04-25

Spring事务执行原理流程图.pdf

Spring事务执行原理流程图.pdf

2023-04-19

java中的15种锁简述.xmind

java中的15种锁简述.xmind

2023-03-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除