自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL百万数据深度分页优化思路分析

我们现在知道了LIMIT 遇到后面查询的性能越差,性能差的原因是因为要回表,既然已经找到了问题那么我们只需要减少回表的次数就可以提升查询性能了。

2023-05-09 10:17:06 730

原创 【实战】MySQL百万数据优化

业务场景一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行「分页查看」,「最常见的一种就是根据日期进行筛选」。这种统计数据随着时间的推移数据量会慢慢的变大,达到百万、千万条数据只是时间问题。瓶颈再现创建了一张user表,给create_time字段「添加了索引」。并在该表中添加了100w条数据。我们这里使用「limit分页」的方式查询下「前5条」数据...

2023-05-09 09:15:43 1119

原创 如何正确的中断线程?你的姿势是否正确

Java停止线程的逻辑(协同、通知)在Java程序中,我们想要停止一个线程可以通过interrupt方法进行停止。但是当我们调用interrupt方法之后,它可能并不会立刻就会停止线程,而是通知线程需要停止。线程接收到通知之后会根据自身的情况判断是否需要停止,它可能会立即停止,也有可能会执行一段时间后停止,也可能根本就不停止。那么Java为什么要选择这种非强制性的线程中断...

2022-08-14 10:43:41 728

转载 代码越写越乱?那是因为你没用责任链

大家好,我是不才陈某~最近,我让团队内一位成员写了一个导入功能。他使用了责任链模式,代码堆的非常多,bug 也多,没有达到我预期的效果。实际上,针对导入功能,我认为模版方法更合适!为此,隔壁团队也拿出我们的案例,进行了集体 code review。学好设计模式,且不要为了练习,强行使用!让原本 100 行就能实现的功能,写了 3000 行!对错暂且不论,我们先一起看看责任...

2022-08-12 10:27:16 184

原创 通过源码了解Java的自动装箱拆箱

什么叫装箱 & 拆箱?将int基本类型转换为Integer包装类型的过程叫做装箱,反之叫拆箱。首先看一段代码publicstaticvoidmain(String[]args){Integera=127,b=127;Integerc=128,d=128;System.out.println(a==b...

2022-04-20 14:07:56 160

原创 为什么重写equals必须重写hashCode

1equals常见面试题在开始聊之前,我们先看几个常见的面试题,看看你能不能都回答上来。1、equals和==有什么区别?2、hashcode相等的两个对象一定==相等吗?equals相等...

2021-12-06 20:00:00 288

原创 策略模式在业务中的实际应用

Part1策略模式结构图策略模式主要由以上三个身份组成,这里我们就不过多介绍策略模式的基础知识,默认大家已经对策略模式已经有了一个基础的认识。Part2业务需求现有一个广告点击数据埋点上报...

2021-11-01 10:58:35 263

原创 面试问题:ThreadLocalRandom类原理分析

1、Random类及其局限性publicintnextInt(intbound){if(bound<=0)thrownewIllegal...

2021-10-12 15:13:23 155

原创 揭开JVM中TLAB中的神秘面纱

在开始文章之前,我这里暂且认为大家已经明白了JVM创建对象分配内存地址的流程,也知道JVM内存划分。基于人道主义我还是放一张图吧,大家对照着看。JVM内存结构堆内存划分结构堆区分配内存是否...

2021-07-28 21:46:11 141

原创 记一次CPU过高排查过程

存在的问题上周突然在部署一点很简单的新业务之后,上线没多久突然OOM,大部分接口访问超时,甚至有的直接失败,刚开始以为是查询了什么了大数据导致的,结果看了下CPU,300%。排查思路最开始...

2021-06-22 20:00:00 239

原创 一文看懂JVM内存区域分布与作用

那么我们在开始介绍Java内存区域之前,我们先放一张内存区域的图,方便我们后面介绍的时候可以对照着看。须知,本文是根据JDK8来介绍的。程序计数器首先它是线程私有的,它也称为代码的行号指示器,字节码解释器就是通过改变程序计数器的位置来确定下一行要执行的代码,它不存在OOM。如果线程正在执行一个Java方法,那么它记录的是正在执行虚拟机字节码指令的地址,如果是一个本地方法那么它的值为空。Java虚拟机栈它也是线程私有的,它的声明周期和线程一致。每个线程创建时都会创建一个虚拟机栈,内部保存了一个个

2021-06-07 09:36:38 124 1

原创 一文看懂JVM内存分布与作用

那么我们在开始介绍Java内存区域之前,我们先放一张内存区域的图,方便我们后面介绍的时候可以对照着看。「须知」,本文是根据JDK8来介绍的。Java内存区域图程序计数器首先它是线程私有的,...

2021-06-06 12:18:25 118 1

转载 颠覆认知——Redis会遇到的15个「坑」,你踩过几个?

阅读本文大约需要 20 分钟。大家好,我是 Kaito。这篇文章,我想和你聊一聊在使用 Redis 时,可能会踩到的「坑」。如果你在使用 Redis 时,也遇到过以下这些「诡异」的场景,那...

2021-04-06 21:16:57 132

转载 CountDownLatch:别浪,等人齐再团!

一入王者深似海,从此对象是路人。哈喽观众老爷们大家好,我是战神吕布字奉先,今天给大家来一部吕布的教学视频!咳咳,不对。大家好,我是磊哥,今天给大家来一篇 CountDownLatch 的文...

2021-04-02 16:44:25 81

原创 移除List中的元素,你的姿势对了吗?

之前遇到对List进行遍历删除的时候,出现来一个ConcurrentModificationException 异常,可能好多人都知道list遍历不能直接进行删除操作,但是你可能只是跟我...

2021-01-19 09:10:00 137

转载 框架篇:linux网络I/O+Reactor模型

前言网络I/O,可以理解为网络上的数据流。通常我们会基于socket与远端建立一条TCP或者UDP通道,然后进行读写。单个socket时,使用一个线程即可高效处理;然而如果是10K个so...

2020-12-01 09:30:00 329

原创 为了一个HTTP请求问题,差点跟iOS干起来

本次斗殴事件起因全部归iOS,为啥这么说,http请求都不会发,瞎写的什么玩意(ps:他应该不会看到...)。在处理本次冲突中,意外发现了另外一个存在已久的bug,我们先说说这个玩意,再...

2020-11-25 08:30:00 320 5

原创 Executors使用不当引起的内存泄漏

线上服务内存溢出这周刚上班突然有一个项目内存溢出了,排查了半天终于找到问题所在,在此记录下,防止后面再次出现类似的情况。先简单说下当出现内存溢出之后,我是如何排查的,首先通过jstack...

2020-09-08 19:38:10 1863 2

原创 导致MySQL索引失效的几种常见写法

最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些...

2020-09-06 15:15:41 4744 8

转载 为什么建议你使用枚举?

枚举是 JDK 1.5 新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如...

2020-06-23 20:56:39 896 1

原创 用户输入的虎狼之词,怎么校验之后不见了?

不知道你们有没有对用户输入的东西进行过敏感校验,如果不进行校验,用户属于一些攻击脚本,那么我们的服务就挂逼啦!所以我们首先需要通过过滤器将用户的数据读出来进行安全校验,这里面涉及到一个动...

2020-05-26 22:39:10 418

原创 登录成功后,如何同步用户产生的各种数据

前几篇我们介绍了如果通过RabbitMQ发布一个简单的消息,再到工作队列,多个消费者进行消费,最后再到工作队列的分发与消息的应答机制(ACK);之前我们分享的这几种模式,都是被消费之后就...

2020-05-18 22:15:13 1834

原创 RabbitMQ工作队列之公平分发消息与消息应答(ACK)

上篇文章中,我们讲了工作队列轮询的分发模式,该模式无论有多少个消费者,不管每个消费者处理消息的效率,都会将所有消息平均的分发给每一个消费者,也就是说,大家最后各自消费的消息数量都是一样多...

2020-05-13 22:39:06 879

原创 RabbitMQ如何高效的消费消息

在上篇介绍了如何简单的发送一个消息队列之后,我们本篇来看下RabbitMQ的另外一种模式,工作队列。什么是工作队列我们上篇文章说的是,一个生产者生产了消息被一个消费者消费了,如下图上面这...

2020-05-12 09:20:00 2054

原创 如何利用RabbitMQ生产一个简单的消息

最近业务中有有这样一个场景,就是用户在商城下单之后,如果30分钟没有付款,那么就需要将这个订单处理掉,要么直接删除,要么直接标识为失效状态,为什么要这么做?1、库存,用户在下单之后,会锁...

2020-05-08 22:31:40 1144

转载 String性能提升10倍的几个方法!(源码+原理分析)

这是我的第 54 篇原创文章。String 类型是我们使用最频繁的数据类型,没有之一。那么提高 String 的运行效率,无疑是提升程序性能的最佳手段。我们本文将从 String 的源码...

2020-04-26 22:30:00 114

原创 Java内功系列-HashSet是如何保证元素不重复的

面试官:你能简单介绍List和Set有什么区别吗?小憨:List是一个有序的集合,在内存是连续存储的,可以存储重复的元素,List查询快,增删慢;Set是一个无序的集合,在内存中不连续,...

2020-04-25 20:16:55 655

原创 SpringBoot过滤器中的异常处理

在昨天的文章我跟大家分享了SpringBoot中异常的处理中,我说了一个需要注意的点,就是过滤器中抛出的异常无法被异常处理类捕获,然后这个朋友就问应该如何处理。其实处理这种问题的处理方式有好几种,那么我就简单分享一下我近期一个项目中的处理方式。Filter中的异常处理思路首先我们要明白,在过滤器中我们一般是不会写很长的业务逻辑的,一般都是做一些基础参数或者权限的校验,所以不会出现太过复杂的代...

2020-04-22 12:55:50 3211

原创 SpringBoot中的异常处理与参数校验

兄弟们好,这次来跟老铁交流两个问题,异常和参数校验,在说参数校验之前我们先来说异常处理吧,因为后面参数的校验会牵扯到异常处理这块的内容。异常处理说到异常处理,我不知道大家有没有写过或者遇到过如下的写法。public void saveUser() { try { // 所有的业务内容,目测几百行 }catch (Exception e) {...

2020-04-21 09:09:24 1407 1

原创 @PostConstruct注解,你该好好看看

在最近的工作中,get到一个很实用的注解,分享给诸位。痛点做过微信或支付宝支付的童鞋,可能遇到过这种问题,就是填写支付结果回调,就是在支付成功之后,支付宝要根据我们给的地址给我们进行通知,通知我们用户是否支付成功,如果成功我们就要去处理下面相应的业务逻辑,如果在测试服务,那么这个回调地址我们就需要填写测试服务的,如果发布到线上那么我们就需要改成线上的地址。针对上面的场景,我们一般都会通...

2020-04-07 22:56:28 5229 3

原创 字符串、集合如何判断空值?看看成年人的正确操作

在平时的开发中,基本上都会用到字符串判断空值和集合判断空值的处理,还记得在刚干开发的时候,写的代码在现在看起来是真的有点Hello World,那么这次分享两个非常常用的方法,字符串非空判断和集合非空判断。字符串非空判断你有没见过下面的代码,要是没见过你就不配是一个程序员,我还写过呢!现在回过头来看感觉自己当年真的是太年轻了。public static void main(String[] ...

2020-01-10 13:59:06 315

原创 List如何根据属性排序?快来get吧

今天来分享一下集合的排序,说道排序其实工作中有很多的应用场景,现在大家应该普遍都用Java8了吧!那么我还是从Java7和Java8两个版本去分享一下排序,莱茨狗。首先我们创建一个Stu...

2020-01-09 22:30:00 1505

原创 字符串、集合如何判断空值?看看成年人的正确操作

在平时的开发中,基本上都会用到字符串判断空值和集合判断空值的处理,还记得在刚干开发的时候,写的代码在现在看起来是真的有点Hello World,那么这次分享两个非常常用的方法,字符串非空...

2020-01-07 22:30:00 923

原创 高效开发,超实用的一款IDEA开发插件

今天主要分享一个很常用,也很实用的IDEA插件Free Mybatis plugin。我们在平时的开发中,会写大量的SQL语句,一般的简单语句我们可以直接使用注解的方式(@Select、@Update、@Delete)进行书写,但是一些复杂的,比如单表多条件查询、多表组合查询等。那么这个时候就必须要自己去通过Mapper.xml文件中写了。一般写的流程大概是这个样子的,在接口层我们定义接口,然...

2020-01-03 09:02:05 299

转载 惊讶!我定的日志规范被CTO在全公司推广了

打印日志是一门艺术,但长期被开发同学所忽视。日志就像车辆保险,没人愿意为保险付钱,但是一旦出了问题都又想有保险可用。我们打印日志的时候都很随意,可是用的时候会吐槽各种 SB 包括自己!写...

2019-12-24 20:00:00 183

转载 Java8 Stream常用API整理(值得收藏)

题 图:pexels作 者:程铭程铭你快成名来 源:https://blog.csdn.net/wangchengming1/article/details/89245402Java8中...

2019-12-03 21:33:28 638

原创 SpringBoot + Redisson实现分布式锁

一、什么是分布式?要想说什么是分布式,那么首先要知道分布式之前的系统是什么样的架构,之前的架构又存在什么样的问题?单体架构 分布式之前就是单体架构,单体架构顾名思义就是将所有的业务功能打包在一个应用中,然后部署在服务器上。如果我们把单体架构比作一个汽车工厂,那么从汽车发动机到汽车上的一个螺丝钉都需要由它来负责完成,如果有一天这家工厂由于自然灾害的原因导致业务量急剧下滑,甚至停止生产,那么...

2019-12-01 18:29:39 476

原创 SpringBoot多数据源中的分布式事务

虽然现在微服务越来越流行,我们的系统随之也拆分出来好多的模块功能。这样做的目的其实就是为了弥补单体架构中存在的不足。随着微服务的拆分,肯定设计到分库分表,但这之中肯定设计到分布式事务。最典型的例子就是银行转账,比如银行A给银行B转账500块钱,流程肯定是银行A-500,银行B+500,在这个过程要么都成功,要么都成仁。首先银行A和银行B的数肯定是在不同的数据库,如果在转账的过程中,银行A首先-5...

2019-11-24 15:19:40 7999 18

原创 Java开发中那些不容忽略的小问题-1

写公众号说实话挺久了,也因此认识了很多的朋友,咨询什么的都有,总之,或多或少的帮助到过一些人。最近想了好久,我往后应该写一些什么类型的文章?1、偏理论的?感觉在一篇文章里面去概述一些比较复杂的理论,说不说的完暂且不说,作为一个读者大部分肯定是没有耐心看下去的,而且看完吸收的也不会很多,这种东西还是得通过啃书的方式可能会更好。2、偏代码层次的?之前也写过几篇文章里面代码很多,但是其实很少有...

2019-11-08 20:06:13 1027

原创 Java线程池的四种用法与使用场景

一、如下方式存在的问题new Thread() { @Override public void run() { // 业务逻辑 }}.start();首先频繁的创建、销毁对象是一个很消耗性能的事情; 如果用户量比较大,导致占用过多的资源,可能会导致我们的服务由于资源不足而宕机; 综上所述,在实际的开发中,这种操作其实是不可取的一种方式。二...

2019-10-24 09:16:30 2014 1

空空如也

空空如也

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

TA关注的人

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