自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mybatis详解

MyBatis是一个持久层的(Object-Relational Mapping)框架,即对象关系映射框架。使用简单,学习成本较低。可以执行自己手写的SQL语句,比较灵活。但是MyBatis的自动化程度不高,移植性也不高,有时从一个数据库迁移到另外一个数据库的时候需要自己修改配置,所以称只为半自动ORM框架。

2024-05-22 17:45:37 413

原创 线程池如何关闭

可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池。

2024-05-07 11:39:13 1142

原创 java线上问题排查之内存分析(三)

如果有人问你有没有处理过线上的问题,你就说有,最简单的,你说有个小伙子用了本地缓存,就放map里,结果没控制map大小,可以无限扩容,最终导致内存爆了,后来解决方案就是用了一个ehcache框架,自动LRU清理掉旧数据,控制内存占用就好了。这里我们使用MAT分析。所以jstat先看一下基本情况,马上就能看出来,其实就是大量对象没法回收,一直在内存里占据着,然后就差不多内存快爆了。接着就是可以用MAT工具,或者是Eclipse MAT的内存分析插件,来对hprof文件进行分析。

2024-05-06 17:29:45 1057 1

原创 java线上问题排查之磁盘和网络查看分析(二)

overflowed 标识全连接队列溢出的次数,最前面是0,标识没有队列溢出的情况,网络环境正常。来查看网络是否连接。如果出现下图内容,则证明网络已经连接。

2024-04-30 16:44:46 666 1

原创 java线上问题排查之CPU使用率过高(一)【保姆级教程】

线上故障排查,主要包括以及。基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap这些命令是在 Linux 系统中进行系统监控和性能调优时经常用到的工具,能够帮助你快速了解系统的运行状况。

2024-04-30 15:40:51 1487 1

原创 不同多线程场景下CompletionService 和 CompletableFuture 的使用

内部通过阻塞队列+FutureTask,实现了任务先完成可优先获取到,即结果按照完成先后顺序排序,内部有一个先进先出的阻塞队列,用于保存已经执行完成的Future,通过调用它的take方法或poll方法可以获取到一个已经执行完成的Future,进而通过调用Future接口实现类的get方法获取最终的结果。CompletableFuture实现了Future接口,并在此基础上进行了丰富地扩展,完美地弥补了Future上述的种种问题。使用系统默认的线程池,而是用的自己定义好并Autowired注入的线程池。

2024-04-22 16:58:51 492

原创 ThreadLocal原理及实例

【代码】【无标题】

2024-02-27 18:16:40 459

原创 分布式事务组件Seata的TCC常见问题及解决方案

如上图所示,全局事务开启后,参与者 A 分支注册完成之后会执行参与者一阶段 RPC 方法,如果此时参与者 A 所在的机器发生宕机,网络异常,都会造成 RPC 调用失败,即参与者 A 一阶段方法未成功执行,但是此时全局事务已经开启,Seata 必须要推进到终态,在全局事务回滚时会调用参与者 A 的 Cancel 方法,从而造成空回滚。如上图所示,参与者 A 执行完二阶段之后,由于网络抖动或者宕机问题,会造成 TC 收不到参与者 A 执行二阶段的返回结果,TC 会重复发起调用,直到二阶段执行结果成功。

2024-02-07 15:10:33 1319

原创 EasyExcel分页上传数据

【代码】EasyExcel分页上传数据。

2024-02-05 14:36:34 1179

原创 EasyExcel下载带下拉框和批注模板

【代码】EasyExcel下载Excel带下拉框和批注效果。

2024-02-05 12:01:21 1248

原创 DateUtil工具类封装

类说明:日期工具类* * 详细描述:

2024-01-25 11:45:49 485

原创 CompletableFuture的thenCombine结果组合用法实例

thenCombine 用法,是将任务用多线程分组执行再组合。在项目实战中应用场景还是比较多的。项目实例写得还不够优雅,还有优化空间。

2024-01-17 18:33:46 945

原创 mysql中DATE_FORMAT() 函数详解

其中,date 参数是要被格式化的日期/时间值,format 参数是指定的日期/时间格式,可以是一个字符串常量或者包含日期格式控制符的字符串。在 MySQL 中,DATE_FORMAT() 函数用于将日期/时间类型的值按照指定的格式进行格式化输出。该SQL语句将根据指定的订单状态和年月份分组,统计每个组中的订单数量,并按照月份降序进行排列。这个查询可以用于分析指定订单状态在不同月份的变化趋势或统计特定订单状态的总数。此语句会返回一个包含年份和月份的字符串,例如 ‘2022-12’。

2024-01-15 11:09:16 18861

原创 MVCC详解

MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作。其他两个隔离级别够和MVCC不兼容, 因为 READ UNCOMMITTED 总是读取最新的数据行, 而不是符合当前事务版本的数据。多版本并发控制:读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了,不同的事务session会看到自己特定版本的数据,版本链.而 SERIALIZABLE 则会对所有读取的行都加锁。这三个东西实现的,因而这三玩意儿也被称为“MVCC三剑客”!

2024-01-11 02:27:31 1104

原创 AQS之ReentrantReadWriteLock

ReentrantReadWriteLock适合读多写少的场景。是可重入的读写锁实现类。其中, 写锁是独占的,读锁是共享的。支持锁降级(持有写锁、获取读锁,最后释放写锁的过程)锁降级可以帮助我们拿到当前线程修改后的结果而不被其他线程所破坏,防止更新丢失。可以保证数据的可见性,如果当前线程不获取读锁而是直接释放写锁,假设此刻另一个线程(记作线程T)获取了写锁并修改了数据,那么当前线程无法感知线程T的数据更新。

2023-12-28 01:14:26 496 1

原创 AQS之共享锁Semaphorer&CountDownLatch

Semaphore,俗称信号量,它也是基于AbstractQueuedSynchronizer实现的。例如: 大小为n的信号量可以实现限流的功能,它可以实现只能有n个线程同时获取信号量。CountDownLatch(闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化。

2023-12-24 23:45:51 276

原创 Redis延迟队列原理及实例

在Redis延迟队列中,我们使用有序集合(Sorted Set)来存储消息,其中,消息的到期时间作为有序集合的分数,消息内容作为有序集合的成员。支持多种操作:除了基本的添加、删除和范围查询,Sorted Set还支持其他一些有用的操作,如获取成员的分数、修改成员的分数、按照分数范围删除成员等。在这个命令中,delay_queue是有序集合的名称,1640390400是消息的到期时间(即2023年12月25日的时间戳),"message content"是消息的内容。其中就包括了延迟队列的实现。

2023-12-22 12:05:46 4075

原创 Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数?

奇数个master节点可以在满足选举该条件的基础上节省一个节点。例如三个master节点和四个master节点的集群相比。的集群master节点同意才能选举成功,如果只有两个master节点,当其中一个挂了,是达不到选举新master的条件的。master的选举需要。所以奇数的master节点更多的是从。

2023-12-16 21:34:42 658

原创 Redis过期淘汰策略

如果删除的是字符串类型的 key,但是key对应value比较大,比如有几百M,那么也是会 阻塞Redis的。这种bigkey是我们要尽量减少出现的情况。LFU 算法(Least Frequently Used,最不经常使用):淘汰最近一段时间被访问次数最少的 数据,以次数作为参考。LRU 算法(Least Recently Used,最近最少使用):淘汰很久没被访问过的数据,以最近一 次访问时间作为参考。绝大多数情况我们都可以用LRU策略,当存在大量的热点缓存数据时,LFU可能更好点。

2023-12-14 23:44:43 555

原创 Netty高性能的原因

不会因为每个连接都需要一个单独的线程而耗尽资源(BIO),能使用少量的线程来处理大量连接,避免了线程切换和上下文切换的开销,从而提高了系统的并发处理能力。Netty提供了可定制的线程模型,可以根据不同的业务需求选择合适的线程模型,例如单线程模型、多线程模型或者主从线程模型,以适应不同的场景和环境,从而提高了系统的灵活性和性能表现。Netty支持零拷贝技术,通过直接在操作系统内核空间与用户空间之间传输数据,避免了不必要的数据拷贝,减少了CPU和内存的开销,提高了数据传输效率。

2023-12-12 09:58:46 690

原创 Redis的过期策略有哪些?

定期过期:每隔⼀定的时间,会扫描⼀定数量的数据库的expires字典中⼀定数量的key,并清除其中已过期的key。(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。定时过期:每个设置过期时间的key都需要创建⼀个定时器,到过期时间就会⽴即清除。该策略可以⽴即清除过期的数据,对内存很友好;但是会占⽤⼤量的CPU资源去处理过期的数据,从⽽影响缓存的响应时间和吞吐量。

2023-12-12 08:30:00 541

原创 Netty多路复用机制select、poll 和 epoll的区别

epoll 是 Linux 2.6 内核中引入的新的 IO 多路复用机制,它使用了红黑树来存储待检测的 IO 事件,同时还可以通过 epoll_ctl() 函数动态地增加或删除事件。poll 是在 select 基础上进行的改进,它使用链表来存储待检测的 IO 事件,避免了 bit mask 的限制,同时也避免了 select 的缺点。在 Java NIO 中,由于 Selector 的实现依赖于底层的 IO 多路复用机制,因此我们需要了解这些机制的特点和性能表现,以便进行正确的选择。

2023-12-08 11:43:11 766

原创 Netty线程模型

Netty的线程模型如下图所示:

2023-12-07 01:21:03 657

原创 java解决CORS跨域问题【总结】

*** 跨域过滤器* @return/** 允许任何域名使用 */ // corsConfiguration.addAllowedOrigin("*");/** 允许的请求头 */ corsConfiguration . addAllowedHeader("*");/** 允许的方法 */ corsConfiguration . addAllowedMethod("*");} }/*** 跨域过滤器* @return。

2023-12-01 20:24:02 3736

原创 ps -ef命令详解

ps -ef 命令用于列出系统中正在运行的进程信息。

2023-11-30 10:32:00 7179

原创 Docker常用命令

其中f0b1c8ab3633是容器 ID, 当然也可使用 docker stop容器名称来停止指定容器。这样就能启动一个 Nginx容器。如需列出所有容器(包括已停止的容器),可使用-a参数。该列表包含了7列,含义如下。-p 宿主机端口:容器端口 #开放容器端口到宿主机端口。

2023-11-27 18:22:07 989

原创 JdbcTemplate的多数据源配置

完成多数据源的配置信息之后,就来创建个配置类来加载这些配置信息,初始化数据源,以及初始化每个数据源要用的JdbcTemplate。你只需要在你的Spring Boot应用下添加下面的这个配置类即可完成!

2023-11-25 14:55:57 1896

转载 什么是MYSQL死锁?如何避免死锁?

MySQL中的死锁是指两个或多个事务相互等待对方持有的锁而无法继续执行的情况,导致事务永远无法执行,卡死状态。解决死锁的核心思路就是打破事务之间循环等待的条件。

2023-11-25 13:17:24 490

原创 什么是BASE理论?

BASE 理论是由 eBay 架构师提出,BASE 理论是对 CAP 理论的延伸,是一种分布式系统设计的理论,它的核心思想是放弃强一致性(CAP的一致性,指的是强一致性),追求最终一致性。BASE 理论三要素是基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)。

2023-11-25 11:57:05 859

原创 如何优化 Elasticsearch 查询性能

优化 Elasticsearch 查询性能需要从多个方面入手。通过合理的索引设计、优化查询语句、优化硬件资源和集群架构等方面的优化,可以显著提高 Elasticsearch 的查询性能。

2023-11-25 11:28:00 1547

原创 java elasticsearch 桶聚合(bucket)

Elasticsearch指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍Java Elasticsearch指标聚合的写法。

2023-11-25 10:53:19 785

原创 Java Elasticsearch 指标聚合

Elasticsearch指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍Java Elasticsearch指标聚合的写法。其他指标聚合的用法类似,后面分别介绍常用指标聚合。

2023-11-25 10:29:21 700

原创 Elasticsearch 聚合查询(Aggregation)详解

Elasticsearch中的聚合查询,类似SQL的SUM/AVG/COUNT/GROUP BY分组查询,主要用于统计分析场景。

2023-11-25 09:49:14 1581

原创 jsoup登录日志平台后调企业微信机器人自动发送错误日志告警

1.jsoup实现登录,获取到cookie和token等用户鉴权信息。3.调用日志平台错误日志Top榜接口,查询到结果集。下面是用错误日志Top10告警发送。4.调用企业微信机器人发送消息接口。2.获取接口相应的key值。

2023-11-24 17:09:45 741

原创 mysql连接函数CONCAT和CONCAT_WS

可以有很多个参数,如果参数有一个是NULL,则结果返回NULL(使用CONCAT()函数对包含NULL的数据进行拼接时,结果为NULL,所以在对数据进行拼接之前,应该先检查要拼接的字段是否存在NULL)将多个字段拼接为一个字段 (字符串 str1,str2 等多个字符串合并为一个字符串,多个字符串之间用逗号分隔)格式:SELECT CONCAT_WS(‘拼接符’,str1,str2,...) FROM [表名];同CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上拼接符。

2023-10-27 14:39:08 319

原创 mysql对新增字段初始化时报Unsafe query: ‘Update‘ statement without ‘where‘ updates all table rows at once

需求:t_right_info_goods表新增了goods_original_price字段,要将 t_new_goods_info 表的 goods_face_price 字段同步到新增字段 goods_original_price 中去。:这里必须要挂条件 where 1 = 1, 否则会报 Unsafe query: ‘Update’ statement without ‘where’ updates all table rows at once,所以,一定要带有where条件约束。

2023-10-25 10:36:17 1126

原创 mysql分组取每组内所有数据GROUP_CONCAT

我们可以使用GROUP BY语句对数据进行分组。这条语句将返回一个结果集,其中包含了按照"category"字段分组后的唯一值。

2023-10-24 09:53:06 1897 1

原创 mysql中union和union all的区别

2、union all: 对两个结果集进行并集操作,2、union all: 不会对获取的结果进行排序操作。,相当于distinct, 同时进行默认规则的排序;, 即所有的结果全部显示, 不管是不是重复;1、union: 会对获取的结果进行排序操作。1、union: 对两个结果集进行。二、区别2:获取结果后的操作。union all 查询。一、区别1:取结果集。

2023-10-19 11:41:06 225

原创 jemeter压测

我们一般注意90%的情况下接口的响应时间会在多少,控制在一个差不多的范围,然后看看qps(吞吐量)最高能达到多少。原始Jmeter没有插件功能,所以需要先安装依赖jar包,然后重启才能看到插件选项。如果你想在cmd命令框快速打开jmeter还需要配置环境变量,以后打开就方便了。重启重启JMeter,打开后新建取样器,能看见websocket的选项就成功了。下载后按照提示,放到对应目录lib/ext,然后重启项目。这样就可以压测了,然后再http请求下添加一个聚合报告。发送文本或二进制WebSocket帧。

2023-10-18 15:51:45 132

原创 java正则表达式提取字符串中指定的数据

正则表达式是一种用来描述、匹配和操作字符串的强大工具。它可以用于验证输入的字符串、提取特定格式的字符串、替换字符串中的特定部分等操作。String 类里也提供了如下几个特殊的方法。//判断该字符串是否匹配指定的正则表达式。//将该字符串中所有匹配 regex 的子串替换成replacement。//将该字符串中第一个匹配 regex 的子串替换成 replacement。//以 regex 作为分隔符,把该字符串分割成多个子串。我是一个好人a543,qq号是103456789";

2023-10-12 10:49:58 6342

空空如也

空空如也

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

TA关注的人

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