自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CompletableFuture 异步多线程

虽然 Future 以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,我们必须使用Future.get()的方式阻塞调用线程,或者使用轮询方式判断 Future.isDone 任务是否结束,再获取结果。并且一般建议使用自定义线程池。第一个任务执行完成后,执行第二个回调方法任务,会将该任务的执行结果,作为入参,传递到回调方法中,但是回调方法是没有返回值的。表示第一个任务执行完成后,执行第二个回调方法任务,会将该任务的执行结果,作为入参,传递到回调方法中,并且回调方法是有返回值的。

2023-08-16 09:35:27 165 1

原创 SQL优化整理

然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

2023-06-30 10:53:55 113

原创 Stream 使用的各种案例

stream流使用案例

2023-06-01 18:17:21 139

原创 如何避免重复下单

系统异常时 666 请求到了,单号更成 666,接着 888 请求到了,单号又更新成 888,但是 666 更新成功的响应丢了,调用方没收到成功响应,自动重试,再次发起 666 请求,单号又被更新成 666了,这数据显然就错了!更新订单服务,通过一个版本号机制,每次更新数据前校验版本号,更新数据同时自增版本号,这样的方式,来解决 ABA 问题,确保更新订单服务的幂等性。实现订单幂等的方法,完全可以套用在其他需要实现幂等的服务中,只需要这个服务操作的数据保存在数据库中,并且有一张带有主键的数据表即可。

2023-05-04 17:25:54 510

原创 8个sql优化的案例

了解数据库编译器的特性,才能避规其短处,写出高性能的SQL语句。分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。重写为 JOIN 之后,子查询的选择模式从 DEPENDENT SUBQUERY 变成 DERIVED,执行速度大大加快,从7秒降低到2毫秒。比如下面 UPDATE 语句,MySQL 实际执行的是循环/嵌套子查询(DEPENDENT SUBQUERY),其执行时间可想而知。在前端数据浏览翻页,或者大数据分批导出等场景下,是可以将上一页的最大值当成参数作为查询条件的。

2023-01-30 15:57:07 2456

原创 死信队列、延时队列的应用场景

交换机将从延时队列接收到的消息通过路由键 stock.release 发送到stock.release.stock.queue。延时队列TTL时间到了 发送消息到 stock-event-exchange 通过另一个路由键 stock.release。交换机通过路由键 stock.locked 发送消息到 延时队列 stock.delay.queue。发送消息给交换机 stock-event-exchange。我们监听stock.release.stock.queue。场景一: 库存解锁服务。

2023-01-06 10:16:48 216

转载 聊聊接口性能优化的11个小技巧

某个四级分类是某个三级分类的子分类,这个三级分类,又是某个二级分类的子分类,而这个二级分类,又是某个一级分类的子分类。当然,这种做在单机版的服务中,是没有问题的。上面这个例子中,发站内通知和用户操作日志功能,对实时性要求不高,即使晚点写库,用户无非是晚点收到站内通知,或者运营晚点看到用户操作日志,对业务影响不大,所以完全可以异步处理。此外,我们还需要有个job每隔一段时间,从数据库中查询菜单数据,更新到redis当中,这样以后每次都能直接从redis中获取菜单的数据,而无需访问数据库了。

2022-11-09 09:31:40 169

原创 mysql大数据量limit优化

在通常的业务场景中,分页一般是使用MySQL提供的 limit 来实现从数据库中获取指定偏移量的数据行。在数据量较小的场景中,并没有太大的问题,但当数据量膨胀到一定程度,获取靠后的分页数据时,性能下降就会特别的大。上面的语句通过先扫描出对应的主键,然后再回表查询出对应的列,极大的减少了MySQL对数据页的扫描。前提条件是在某个有索引的数据列上可以通过计算出对应分页的范围值,且只可根据该索引列排序。上面的查询方式可以延伸出下一页的分页条件使用上一页的索引列最大值。2.优化大偏移量的性能。

2022-10-26 15:34:54 1136 2

转载 MyBatis 批量插入别再乱用 foreach

mybatis批量插入效率

2022-08-25 09:57:50 243 1

原创 记录一个工作中遇到子类set父类属性的问题

原来子类的set方法返回的都是当前对象。而父类的set方法都是void。所以链式set的时候肯定就报错。很简单但是容易被忽略的问题。发现这里可以set父类属性。

2022-07-26 10:27:45 293

转载 还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS!

替代策略模式

2022-07-13 11:16:50 156

转载 Java 8 排序的 10 个排序

java8排序

2022-07-01 16:11:43 515

原创 查询所有表的表名、表注释及其数据量

查询所有表的表名、表注释及其数据量

2022-06-28 09:08:07 538

空空如也

空空如也

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

TA关注的人

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